USB(Universal Serial Bus)全称通用串口总线,USB为解决即插即用需求而诞生,支持热插拔。USB协议版本有USB1.0、USB1.1、USB2.0、USB3.1等,USB2.0目前比较常用,USB是主从模式的结构,设备与设备之间、主机与主机之间不能互连,为解决这个问题,扩大USB的应用范围,出现了USB OTG,全拼 ON The Go。USB OTG 同一个设备,在不同的场合下可行在主机和从机之间切换。
1、USB特点
USB1.0和USB1.1支持1.5Mb/s的低速模式和12Mb/bs的全速模式。在USB2.0以上支持480Mb/s的高速模式。
2、 自供电设备:设备从外部电源获取工作电压 总线供电设备:设备从VBUS(5v) 取电 。对总线供电设备,区分低功耗和高功耗USB设备
低功耗总线供电设备:最大功耗不超过100mA
高功耗总线供电设备: 枚举时最大功耗不超过100mA,枚举完成配置结束后功耗不超过500mA
设备在枚举过程中,通过设备的配置描述符向主机报告它的供电配置(自供电/总线供电)以及它的功耗要求
3、 USB总线信号:
USB使用的是差分传输模式,两个数据线D+和D-
差分信号1:D+ > VOH(min) (2.8V) 且D- < VOL(max)(0.3V)
差分信号0:D- > VOH and D+ < VOL
总有以下个状态,
J状态(高电平):D+ 高,D- 低
K状态(低电平):D+低,D- 高
SEO状态:D+ 低,D- 高
Reset信号:D+ and D- < VOL for >= 10ms
主机在要和设备通信之前会发送Reset信号来把设备设置到默认的未配置状态。即主机拉低两根信号线(SE0状态)
并保持10ms
Idle状态:J状态数据发、送前后总线的状态
Suspend状态:3ms以上的J状态
SYNC: 3个KJ状态切换,后跟随2位时间的K状态
Resume信号:20ms的K状态+低速EOP
主机在挂起设备后可通过翻转数据线上的极性并保持20ms来唤醒设备,并以低速EOP信号结尾
带远程唤醒功能的设备还可自己发起该唤醒信号;前提是设备已进入idle状态至少5ms,然后发出唤醒K信号,维持1ms到15ms并由主机在1ms内接管来继续驱动唤醒信号
SOP:从IDLE状态切换到K状态
EOP:持续2位时间的SE0信号,后跟随1位时间的J状态
Keep alive即低速EOP信号
唤醒slave设备操作
4、USB插入检测和速度检测
全速高速设备在D+接上拉1.5k电阻,低速设备在D-接上拉1.5K电阻。主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了, 先把高速设备检测为全速设备,然后再通过“Chirp序列”的总线握手机制来识别高速和全速设备。主机必需在驱动SE0状态以复位设备之前,立刻采样总线状态来判断设备的速度 。
D+和D-数据线上的下拉电阻起作用,使得二者都在低电平;主机端看来就是个SE0状态;同样地,当数据线上的SE0状态持续一段时间了,就被主机认为是断开状态。
5、USB传输
一个传输有多个事务组成,一个事务由2到3个包组成。传输又分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。注意:USB传输数据先发数据低位再发高位数据。
USB协议定义了四种传输类型:
批量(大容量数据)传输(Bulk Transfers): 非周期性,突发
大容量数据的通信,数据可以占用任意带宽,并容忍延迟 。如USB打印机、扫描仪、大容量储存设备等
低速 USB 设备不支持批量传输,高速批量端点的最大包长度为 512,全速批量端点的最大包长度可以为 8、16、32、64。
批量传输在访问 USB 总线时,相对其他传输类型具有最低的优先级,USB HOST 总是优先安排其他类型的传输,当总线带宽有富余时才安排批量传输。
高速的批量端点必须支持PING 操作,向主机报告端点的状态,NYET 表示否定应答,没有准备好接收下一个数据包,ACK 表示肯定应答,已经准备好接收下一个数据包。
中断传输(Interrupt Transfers): 周期性,低频率
允许有限延迟的通信 如人机接口设备(HID)中的鼠标、键盘、轨迹球等
中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于
这个时间间隔的范围内安排一次传输。
中断传输是一种轮询的传输方式,是一种单向的传输,HOST通过固定的间隔对中断端点进行查询,若有数据传输或可以接收数据则返回数据或发送数据,否则返回NAK,表示尚未准备好。
中断传输的延迟有保证,但并非实时传输,它是一种延迟有限的可靠传输,支持错误重传。
对于高速/全速/低速端点,最大包长度分别可以达到1024/64/8 Bytes。
高速中断传输不得占用超过 80%的微帧时间,全速和低速不得超过 90%。
中断端点的轮询间隔由在端点描述符中定义,全速端点的轮询间隔可以是1~255mS,低速端点为10~255mS,高速端点为(2interval-1)*125uS,其中 interval取 1到 16之间的值。
除高速高带宽中断端点外,一个微帧内仅允许一次中断事务传输,高速高带宽端点最多可以在一个微帧内进行三次中断事务传输,传输高达 3072 字节的数据。
所谓单向传输,并不是说该传输只支持一个方向的传输,而是指在某个端点上该传输仅支持一个方向,或输出,或输入。如果需要在两个方向上进行某种单向传输,需要占用两个端点,
分别配置成不同的方向,可以拥有相同的端点编号。
等时(同步)传输(Isochronous