USB通信协议详解

目录

一、USB各个版本的差异

特性区分:

PM:

物理接口差异:

延申:

二、USB物理信号

J、K信号解释:

总线状态:

三、USB封包格式

四、USB传输事务

Bulk Transactions

Control Transfers

Isochronous Transactions

Interrupt Transactions

五、USB的描述符

一、描述符信息获取

bmRequestType:

bRequest:

wRequest、wIndex:

wLength:

二、获取的描述符类型

设备描述符:

配置描述符:

接口关联描述符:

接口描述符:

端点描述符:

字符串描述符:

六、USB枚举过程

USB 2.0高速设备枚举细节

USB 3.0设备检测状态变化

七、USB HID Class

描述符示例:

Report Descriptor格式

Report Description示例:

参考:

一、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枚举过程

1616513913468

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 回复,说明该端点不支持该功能或者产生了错误。

参考:

https://usb.org/sites/default/files/hut1_4.pdf

USB中文网 - USB技术开发交流 (usbzh.com)

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值