0、基本概念
一个【传输】(控制、批量、中断、等时)由多个【事务】组成;一个【事务】(IN、OUT、SETUP)由一个或多个【Packet】组成。
包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。
USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。
1、包
包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。包只能在帧内传输。高速USB总线的帧周期为125us,全速以及低速 USB 总线的帧周期为1ms。帧的起始由一个特定的包(SOF 包)表示,帧尾为 EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。
注意:虽然高速USB总线和全速/低速USB总线的帧周期不一样,但是SOF包中帧编号的增加速度是一样的,因为在高速USB系统中,SOF包中帧编号实际上取得是计数器的高11位,最低三位作为微帧编号没有使用,因此其帧编号的增加周期也为 1mS。
USB包由五部分组成,同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP)。包的基本格式如下所示:
SYNC |
PID |
DATA |
CRC |
EOP |
1.1 同步字段(SYNC)
由8位/32位组成,作为每个数据包的前导,用来产生同步作用,使USB设备与总线的包传输率同步,它的数值固定为000000001。Full/low-speed为8位,high-speed为32位。
1.2 标识符字段(PID)
用来表示数据封包的类型。PID中的校验字段是通过对类型字段的每个位求反码产生的,PID字段如下所示:
PID0 |
PID1 |
PID2 |
PID3 |
~PID0 |
~PID1 |
~PID2 |
~PID3 |
信息包的类型包括令牌、数据、握手和特殊四种类型。
封包类型 |
PID名称 |
PID编码 |
意义 |
令牌 |
OUT |
0001B |
从主机到设备的数据传输 |
IN |
1001B |
从设备到主机的数据传输 |
|
SOF |
0101B |
帧的起始标记与帧码 |
|
SETUP |
1101B |
从主机到设备,表示要进行控制传输 |
|
数据 |
DATA0 |
0011B |
偶数数据封包 |
DATA1 |
1011B |
奇数数据封包 |
|
DATA2 |
0111B |
High-speed, high bandwidth isochronous transaction in a microframe数据包 |
|
MDATA |
1111B |
High-speed for split and high bandwidth isochronous transaction 数据包 |
|
握手 |
ACK |
0010B |
接收器收到无错误的数据封包 |
NAK |
1010B |
接收器无法接收数据或发射器无法送出数据 |
|
STALL |
1110B |
端点产生停滞的状况 |
|
NYET |
0110B |
接收器无响应 |
|