目录
一、USB各个版本的差异
特性区分:
USB初始版本是 1.0规范,它仅支持两种速度模式:低速(LS)模式(1.5Mb/s)和全速(FS)模式(支持12Mb/s);USB 1.1规范仅增加了一些说明,并且改进了1.0规范;
USB 2.0版本增加了新的速度模式,即高速(HS)模式,它最高支持480Mb/s;2008年发布的USB 3.0传输速度高达5Gb/s,同样新的物理连接器也应运而生。
PM:
USB 2.0 Device: Active、Suspend
针对USB的HCI(Host Controller Interface),Window是会有几种不同的状态:
* S0:工作状态
* S1/S2:CPU停止
* S3:RAM挂起
* S4:磁盘挂起(休眠状态)
可在BIOS的电源管理设置中找到APCI睡眠类型,配置PC进入睡眠模式时主机PC是处于S1的还是S3的。
物理接口差异:
延申:
编码方式:RZ、NRZ、NRZI
传输方式:同步传输、异步传输、串行、并行
二、USB物理信号
J、K信号解释:
USB 1.0: D+低、D-高
USB 2.0: D+高、D-低
Chirp J:D+ - D- >= 300mV
Chirp K:D+ - D- <= -300mV
总线状态:
三、USB封包格式
一个USB数据的封包一般由包标识(PID)8b、地址域(Addr)7b、端点域(ENDP)4b、校验域(CRC)组成,根据不同的包类型
相应的位域可能会有一些差异;通过对PID的表示,我们可以将包类型区分如下:
四、USB传输事务
USB通过将各个类型的数据包组合起来,形成一次传输事务(Transaction),一般情况下,一次传输事务由Token数据包开始,
后面跟上DATA数据包,然后由ACK数据包结束。
USB的通信由一系列帧构成,每一帧都有一个帧开始(SOF)的Token包,后面接上不同的传输事务,完成一个数据帧的交互。
Bulk Transactions
批量传输一般用于一些数据量大但对时间要求(实时性)又不高的场合,类似用于USB打印机、U盘等。
一次批量传输如下图所示分为三个阶段:令牌包阶段、数据包阶段、握手包阶段。
对于批量传输由于实时性要求不搞,如果USB总线中有多余的总线带宽,批量传输会立即执行,但当带宽比较紧张时,批量传输会把带宽让给其他传输类型。
- 从机如果接收令牌包出错,无响应,让主机等待超时;
- 从机端点不存在,返回STALL;
- 从机端点数据未准备好,返回NAK;
- 从机端点数据准备好,返回数据包。
Control Transfers
控制传输主要用于当USB设备初次里按揭主机时,用控制传输传送控制命令等对设备进行配置,同时需要通过控制传输去获取
USB设备的描述符,在设备的枚举过程中都是使用控制传输进行数据交换。
控制传输分为三个过程:建立过程、数据过程(可选)、状态过程
注意:在控制传输过程中,设备不能返回NAK或者STALL,设备必须接收简历事务的数据,设备只能使用ACK来应答,如果出错了则不应答主机自己等待超时。
Isochronous Transactions
同步传输一般用于要求数据连续、实时且数据量大的场合,其对传输延时十分敏感,类似用于USB摄像头、USB语音设备等。
由于同步传输只关心数据的实时性,不关心数据的正确性,故没有握手阶段,所以只有两个阶段。
Interrupt Transactions
中断传输一般用于数据量小单但实时性要求高的场合,一般应用于人机交互设备:USB鼠标、USB键盘等。
- 当主机准备接收中断时,其I发送IN令牌包,USB设备响应并返回DATAx数据包,主机返回NAK或STALL握手包。
- 当主机发送中断数据时,其发送OUT令牌包和DATAx数据包,而USB设备将向其返回ACK、NAK和STALL握手包。
五、USB的描述符
USB的一般通用描述符由以下几种,形成一个层级关系去描述设备的信息以及功能等等,USB主机通过获取一系列的描述符去拿到
USB设备的类信息,以及相关的设备能力,从而去加载对应的设备驱动实现跟设备的通信功能。
一、描述符信息获取
在host端通过获取相关描述符信息的时候,都是通过标准的获取描述符命令执行的,如下图所示为获取设备描述符的一个请求过程。
bmRequestType:
此数据域标识了数据传输的方向、请求描述符的类型、以及接收端
bRequest:
标准的描述符请求类型如下(还有一些类特定的描述符类型):
wRequest、wIndex:
此数据与根据request类型的不同而含义不同
wLength:
控制传输阶段,所传输的数据量大小。
二、获取的描述符类型
设备描述符:
设备描述符为主机提供了许多信息,如设备需要满足的USB规范、设备配置编号、设备支持的协议、供应商ID、产品标识等等。
配置描述符:
配置描述符定义了设备的配置信息,一个设备可以有多个配置描述符;配置描述符指定设备的供电方式、最大功耗是多少、它拥有的接口数量。
读取配置描述符时,它返回整个配置层次接口,其中包括所有相关的接口和端点描述符。
配置描述符在USB设备的枚举过程中,需要获取两次:第一次只获取配置描述符的基本长度9字节,获取后从wTotalLength字节中解析出配置描述符的总长度,
然后再次获取全部的描述符。
接口关联描述符:
对于复合USB设备的接口描述符,可以在每个类要合并的接口描述符之前加一个接口关联描述符,把多个接口定义成一个类设备,即多个接口作用于一个设备。
接口描述符:
接口描述符描述了具体的设备支持的功能类别。
端点描述符:
USB设备中的每个端点都有自己的端点描述符,通过端点描述符获得端点的属性以及地址等信息。
字符串描述符:
六、USB枚举过程
USB 2.0高速设备枚举细节
第一阶段:设备接入后,D+信号线拉高,host检测到USB设备插入
第二阶段:host发送reset信号,并且拉低D+、D-进入SE0状态
第三阶段:device检测到SE0后,向总线发送Chirp K信号
第四阶段:Chirp K结束后,Host响应一连串的K/J信号对
第五阶段:device在检测到K/J信号后,断开D+的上拉电阻,进入告诉传输模式
USB 3.0设备检测状态变化
到了USB 3.0时代,它没有再使用USB 2.0使用的信号,因此从3.0开始,就不再通过硬件去区别是什么速度了,而是通过软件自协商的方式来实现。
在USB 3.0中device连接到host就等价于连接到了一个R_Term
左图为不接device的等效电路,此时由于R_term不存在,古电路模型实际为——RC串联电路,可简单计算出时间因子:
T=R_Detect*C_Parasitic
右图为接上device的灯效电路,此时R_term存在,得出此时时间因子:
T=(R_Detect+R_Term)*(C_AC+C_Parasitiic)
显然后者远远大于前者,故有无设备可根据充放电时间进行判断。
另外,接入R_term后,会对R_Detect产生分压的作用,电压会有所下降。
USB规定在U2、U3时,每隔100ms打一次Rx_Detect,检测device在不在
七、USB HID Class
描述符示例:
Report Descriptor格式
Report Description示例:
同步传输没有重传机制,其他三种传输方式都有重传机制,重传次数由USB控制器控制。如果重传失败,一旦回复该 STALL,如果没有主机干预,设备将一直使用 STALL 回复,说明该端点不支持该功能或者产生了错误。