USB总线数据流

一、概述

USB总线的数据流是USB主机和USB设备数据通信的基础。一般来说,一个完整的USB数据流包含3个阶段——令牌阶段、数据阶段、握手阶段。

  • 令牌阶段:定义了传输类型,表征数据流的开始。
  • 数据阶段:包含了本次传输的数据。数据量大小根据端点和传输类型而定,最大为1024Byte。
  • 握手阶段:用于数据的接收方报告此次数据传输是否成功。

二、字段

在USB协议中,USB数据传输数据流是由一系列字段构成的。字段是USB数据流中的最小组成单元。字段有以下几种:

  • 同步字段(SYNC):用于数据同步;
  • 包标记字段(PID):指明信息包的类型,可以用于差错控制。
  • 地址字段(ADDR):指明USB总线上的一个设备。
  • 端点字段(ENDP):指明当前通信使用的USB端点。
  • 帧号字段(NUM):指明当前帧的帧号。
  • 数据字段(DATA):传输的数据。
  • 校验字段(CRC):用于循环冗余校验。

 

1. 同步字段SYNC

由于USB Host和USB Device之间是两条串行信号线,没有同步时钟,因此容易造成数据错位,导致数据不同步。为此,在USB协议中使用同步字段进行所有信息包的同步。

  • 低速/全速同步字段:同步字段长度为8bit,数据为80H。在数据总线上先发送低位,在发送高位,并采用NRZI编码形式,如图所示。

  • 高速同步字段:同步字段长度为32bit,数据为80000000H,发送方式与低速/全速同步字段类似。

2.  包标识字段PID:

详情可查看:https://blog.csdn.net/haihui1996/article/details/104889037

包标识字段(PID)长度为8bit,由低4bit的类型字段和高4bit的校验字段组成。校验字段是类型字段的反码

PID字段有如下4中类型信息包:

  • 令牌包:PID[1:0] = 01B;
  • 握手包:PID[1:0] = 10B;
  • 数据包:PID[1:0] = 11B;
  • 特殊包:PID[1:0] = 00B。

3. 地址字段:ADDR

地址字段的长度为7bit,共有128个地址值。其中0号地址是作为默认地址,用于USB上电时主机和设备的通信。当USB上电配置完成后,USB主机便重新为该USB设备分配一个USB地址(地址1到127)。因此USB主机最多只能有127个设备。

4. 端点字段:ENDP

端点字段的长度为4bit,共可以表示16个端点,但低于低速USB设备来说,协议只规定了3个端点,而对于高速/全速设备,则可以使用全部16个端点。这些设备中,端点0用于初期的配置,是USB设备必须的。

5. 帧号字段:NUM

帧号字段长度为11bit,最大值为07FFH。帧号字段中的值表示了当前帧或小帧的帧号,一般来说,每个帧或小帧发送时,帧号字段里的内容加1。

6. 数据字段:DATA

数据字段的最大长度为1024Byte,在数据传输时先传输低字节,每个字节先传输低位,实际数据字段的长度根据传输类型和程序的需要决定。

7. 校验字段:CRC

采用的是循环冗余校验,用于保证传输的可靠性。令牌包采用5bit的CRC,数据包采用16bit的CRC。


USB通信实例

上图为一段USB设备上电的通信实例,是主机与设备建立连接的第一步:

  1. Host发送起始信号帧SOF,表示数据传输开始。
  2. 发送SETUP令牌包,表示USB Host开始配置Device,该令牌包使用默认地址(ADDR)0以及端点(ENDP)0,CRC长度为5bit;
  3. 发送数据包,DATA0为PID字段,用于标识数据编号,Data字段包含通信数据内容,最后为16bit的CRC校验码。
  4. Device接收到数据之后,向Host反馈ACK应答数据包。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章