《圈圈教你玩 USB》学习笔记-数据包

数据包是用来传输数据的。

数据包类型

DATA0 不同类的数据包
DATA1
DATA2
MDATA

数据包结构如下所示

同步域 8 位包标识 PID 字节 0 字节 1  ... 字节 N 16 位 CRC 校验 EOP

之所以有不同类型的数据包,是用在当握手包出错时纠错。

下面以 DATA0 包和 DATA1 包的切换为例进行具体的解释。

主机和设备都会维护自己的一个数据包类型切换机制。当数据包成功发送或者接收时,数据包类型切换。当检测到对方所使用的数据包类型不对时,USB 系统认为这发生了一个错误,并试图从错误中恢复。

数据包类型不匹配主要发生在握手包被损坏的情形。当一端已经正确接收到数据并返回确认信号时,确认信号却在传输过程中被损坏。这时另一端就无法知道刚刚发送的数据是否已经成功,这时它只好保持自己的数据包类型不变。如果对方下一次使用的数据包类型跟自己的不一致,则说明它刚刚已经成功接收到数据包了(因为它已经做了数据包切换,之后正确接收才会如此);如果对方下一次使用的数据包类型跟自己的一致,则说明对方没有切换数据包类型,也就是说,刚刚的数据包没有发送成功,这是上一次的重试操作

发布了124 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/tyustli/article/details/103971132
今日推荐