USB2.0 令牌包
令牌包全部由USB主机发出,其内容包括包标识PID,包目标地址ADDR,包目标地址(ENDP)和CRC5校验位域。
令牌包指明了后续数据包的目标地址和端点。
令牌包的PID有:
PID | 含义 | 说明 |
---|---|---|
0001 | 令牌OUT | 主机发送数据到USB设备 |
1001 | 令牌IN | 主机接收从USB设备发出的数据 |
0101 | 令牌SOF | 此时作为一个帧或者小帧的开始信息 |
1101 | 令牌SETUP | 主机向USB设备发送配置信息 |
1000 | 特殊用途SPLIT | 高速主使用事该SPLIT事务解决从高速模式到低速和全速模式的转换 |
0100 | 特殊用途PING | 仅用于高速模式下主机使用该事务判断设备是否可以接收数据 |
1100 | PRE令牌包 | 低速数据的先导包 |
USB协议定义了8种令牌包,分别为:
IN令牌包
IN令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。
- 包标识字段PID:定义了数据传输方向为USB设备到USB主机。
- ADDR字段:指明了USB设备地址。
- ENDP字段:指明了发送数据的端点号。
- CRC字段:用于ADDR字段和ENDP字段进行循环冗余校验。
OUT令牌包
OUT令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。
- 包标识字段PID:定义了数据传输方向为USB主机到USB设备。
- ADDR字段:指明了USB设备地址。
- ENDP字段:指明了接收数据的端点号。
- CRC字段:用于ADDR字段和ENDP字段进行循环冗余校验。
SETUP令牌包
SETUP令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。
- 包标识字段PID:定义了数据传输方向为USB主机到USB设备。
- ADDR字段:指明了USB设备地址。
- ENDP字段:指明了接收数据的端点号。
- CRC字段:用于ADDR字段和ENDP字段进行循环冗余校验。
PING令牌包
PING令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。
- 包标识字段PID:定义了USB设备到USB主机的握手信号传输。
- ADDR字段:指明了USB设备地址。
- ENDP字段:指明了发送握手包的端点号。
- CRC字段:用于ADDR字段和ENDP字段进行循环冗余校验。
注意:
- 从以上的令牌包的ADDR可以看到,USB设备的地址为7位,所以从这里也反映了出了一条USB总线为什么支持127个设备(1-127,其中地址0用于设备的初始化)。2^7=128
- 另外,从从ENDP可以看到,ENDP占4位,所以一个USB设备最大支持16个双向通道。
SOF令牌包
SOF令牌包包格式由8位的包标识字段PID,11位的帧号字段和5位的循环字段CRC共24位3字节组成。
- 包标识字段PID:定义了数据传输方向为USB主机到USB设备。
- 帧号字段:指明了USB传输的帧号,其11位。
- CRC字段:用于帧号字段进行循环冗余校验。
SSPLIT令牌包
在USB规范中,为了提高数据传输效率,可以使用SSPLIT令牌包在USB主机与USB集线器之间使用高速数所传输的同时,同时进行低速或全速的数据传输。
SSPLIT令牌包包括开始SPLIT(SSPLIT)令牌包结速SPLIT(CSPLIT令牌包).
启动令牌包SSPLIT由8位的包标识字段PID,7位的地址字段ADDR,1位的SC字段,7位的PORT字段、1位的 S字段、1位的E字段、2位的ET字段和5位的循环校验字段CRC.
- 包标识字段PID:定义了数据传输方向为USB主机到USB集线器。
- ADDR字段:指明了USB设备地址。
- PORT字段:用于指明USB集线器的端口号。该字段最多指定128个集线器端口。
- S字段:在中断传输和控制情况下,如果S=0表示全速传输,如果为S=1表示低速传输。在块传输和同步传输下,S必须为0.对于同步OUT传输,按下表进行选择
S | E | 说明 |
---|---|---|
0 | 0 | 全速数据负载的中间数据是高速数据 |
0 | 1 | 全速数据负载的尾部数据是高速数据 |
1 | 0 | 全速数据负载的首部数据是高速数据 |
1 | 1 | 全速数据负载的全部数据是高速数据 |
- ET字段:用于指明在高速数据传输中,使用低速、全速数据传输的类型 。
ET=00 | ET=01 | EG=10 | ET=11 |
---|---|---|---|
控制传输 | 同步传输 | 块传输 | 中断传输 |
CSPLIT令牌包
结束令牌包CSPLIT的定义格式包含8位的包标识字段PID、7位的地址ADDR、1位的SC字段、7位的PORT字段、1位的S字段、1位的U字段、2位的ET字段和5位的循环校验字段CRC.
- PID字段:定义了数据传输方向为USB主机到USB集线器。
- ADDR字段:指明了USB集线器的设备地址。
- SC字段:该字段固定为“1”, 用于表示结束SPLIT令牌包。
- PORT字段:用于指明USB集线器的端口号。该字段最多可以指定128个USB集线器端口。
- S字段, 含义和S SPLIT令牌包中类似。
- U字段:其值必须为“0”,保留。
- ET字段:用于指明在高速数据传输中,使用的低速/全速数据传输的类型。
当置ET=00时,表示采用控制传输;
当置ET=01时,表示采用同步传输;
当置ET=10时,表示采用块传输:
当置ET=11时,表示采用中断传输。
PRE令牌包
PRE数据包吸一个8位的PID字段,是低速数据的先导包。在低速数据传输前,必须先发先导包PRE,这样USB集线器才会激活相应的低速数据传输端口。