USB的包结构及包分类
USB传输的数据总是低位在前, 高位在后. 注意, 这是串行传输中的低比特, 当然, 在字节层面上, usb的数据格式也是小端的.
USB的传输方向:从设备到主机的数据为输入, 从主机到设备的数据叫做输出. usb的传输方向都是从主机方向看的.
包结构
包就是usb总线上进行的一次数据传输, 是底层操作数据的最小单元.
每个包包含三部分内容: 以同步域开始, 紧跟着一个包标识符PID(Packet Identifier), 最终以包结束符EOP(End of Packet)结束这个包.
- 同步域
作用:通知USB串行接口引擎数据要开始传输; 同步主机和设备之间的时钟.
格式:全速/低速设备的同步域为00000001; 高速设备的同步域为31个0, 后面跟1个1. 注意, 这是对发送端的要求, 接收端在解码时, 0的个数可以少于这个数. - 包标识符PID
包标识符PID是用来标识一个包的类型. PID共有8位,目前USB协议仅使用4位(PID0PID3),另外4位(PID4PID7)是PID0~PID3的取反, 用来校验PID. 传输的顺序为PID0, PID1, PID2, PID3, …, PID7(低bit先传). - 包结束符EOP
全速/高速模式的EOP是一个约为2个数据宽度的SE0, 高速模式的EOP是通过故意的位填充错误实现的.
单端0(SE0):D+和D-同时保持低电平。 单端0的用处:1.包结束;2.复位信号(USB集线器对USB设备的复位操作, 就是将总线设置为SE0约10ms).
Q: 如何一个位填充错误是EOP还是传输错误? A: 通过CRC校验, 即如果CRC正确, 则说明这个位填充是EOP, 否则说明传输错误.
包的分类
根据包标识符PID的不同, 包可以分为四种包:
- 令牌包(token packet, PID1~0为01)
- 数据包(data packet, PID
USB包结构与分类详解

本文深入解析USB传输数据的包结构,包括同步域、包标识符PID和包结束符EOP,以及根据PID分类的令牌包、数据包、握手包和特殊包。详细介绍了各种包的功能和使用场景,如令牌包中的输出、输入、建立和帧起始包,以及握手包中的ACK、NAK、STALL和NYET。
最低0.47元/天 解锁文章
420

被折叠的 条评论
为什么被折叠?



