USB2.0 数据包DATA0,DATA1,DATA2
数据包是用于传输数据的,由8位的包标识PID,数据字段和16位的循环冗余校验字段CRC组成。
- PID字段:用于指明不同的数据包类型。支持 4 种数据包,分别为: DATA0 、 DATA1 、DATA2 和MDATA。 在介绍的数据触发机制中,使用 DATA0 和 DATA1。
- 数据字段:其中包含了传输的数据。其数据的大小根据数据传输类吧和用户需要而定。
- CR 字段:这里使用 16 位的循环冗余校验来对数据字段进行保护。
数据包标识PID
包标识PID由8位组成,低4位是类型字段,高4位为低四位的补码。
PID | 含义 | 说明 | 十六进制 |
---|---|---|---|
0011 | 数据DATA0 | 数据包偶数包 | 0xc3 |
1011 | 数据DATA1 | 数据为奇数据包 | 0xd2 |
0111 | 数据DATA2 | 此为作为一个高速同步事务的专用数据包 | 0xe1 |
数据包抓包示例
在USB高速同步传输过程中,通过抓包DATA0,DATA1,DATA2事务是交替进行数据传递的。
DATA的使用技术讨论
以下内容来自QQ USB技术交流群(733863085)的技术讨论,并且以下内容的转载得到了群主XToolbox的同意。
感谢USB技术交流群(733863085)各位大佬的技术分享。
qianfan 2021/8/26 8:35:23
XToolbox 大佬, 咨询个问题, bulk in传输的时候, 有要求相邻的两包的要切换DATA0和DATA1吗?
qianfan 2021/8/26 8:35:51
我现在有个芯片, IN一直使用DATA0发送, 主机这边只认第一包, 后续的就不认了
XToolbox 2021/8/26 9:51:35
主机遇到翻转错误会丢弃错误的这一包
XToolbox 2021/8/26 9:53:48
从机的in端点在收到主机的ack后,需要翻转标志。如果一直发data0,主机会认为从机没有收到ack
qianfan 2021/8/26 9:55:23
哈, 明白了, 我写从机程序搞错了, 意外的把从机的toggle标志清掉了, 导致每次in的时候都是用data0
spu 2021/8/26 9:56:28
从机是收到ack再翻转还是发送中断一到就翻转
XToolbox 2021/8/26 9:59:11
一般的从机内核会在收到主机的ack之后才触发发送完成中断。就算想在发送完就翻转也没有机会
spu 2021/8/26 9:59:30
Soga
XToolbox 2021/8/26 9:59:39
高速的从机内核会自动翻转
spu 2021/8/26 10:00:15
自动翻转会不会存在问题
XToolbox 2021/8/26 10:00:44
不会,自动翻转也是收到ack才翻
spu 2021/8/26 10:01:12
好的
XToolbox 2021/8/26 10:04:01
根据标准,有时候要重置翻转标志,所以从机内核还会提供一套手动翻转的接口。
qianfan 2021/8/26 10:26:04
好像是clear stall的时候需要重置
qianfan 2021/8/26 10:26:11
重置之后使用data0
XToolbox 2021/8/26 10:36:39
同步传输和控制传输比较特殊,翻转标志起点是固定