USB2.0协议 传输包、事务和传输
2021-11-24
6628
9
USB总线上传递的数据流是USB主机和USB设备通讯的基础。
USB数据流包括3个阶段:
- 令牌阶段 :定义了本次传输的类型,表示一次传输的开始。令牌阶段由同步字段,令牌包和EOP组成。
- 数据阶段 :包括了本次传输的数据。数据的大小根据端点大小和传输类型决定,一般最大的数据量为1024字节。数据阶段由同步字段,令牌包和EOP组成。
- 握手阶段: 握手阶段用于发送本次数据传输是否成功的报告,由接收方发送。握手阶段由同步字段,握手包和EOP组成。
从以上可以看到,各个阶段都有帧头同步字段和帧尾EOP,是数据传输的起始和结束,而中间传输的的有效USB数据。
同步字段:
USB2.0通读协议最小的单位是包,类示我们TCPIP协议中的IP层,这个包只有数据的传输的最小单元格式。不过这和TCIP层中的IP层也有点不同,那就是IP包其包含了包头信息和数据内容,而USB2.0的通讯由于令牌的存在,将这些包头和数据内容拆分不同的令牌事务,由主机发起事务的令牌这类先导信息,然后再发送其控制数据,设备收到这些信息之后还需要进行响应收到,然后主机收到设备的控制信息ACK后,才再根据上一个令牌事务发起对应的数据事务。这个数据事务也是由主机发起告诉设备你该进行IN还是OUT数据,然后再是数据的发送与接收,最后当然主机收到这些数据后还需要进行ACK.但是这种情况下主机是知道自己数据收到了,但是设备发送的数据自己不知道是否成功(因为可能会丢失主机发过来的ACK),那怎么办了,并且为了降低速宽,所以USB没有像TCP协议栈那样传输去强行要那个ACK,而是通过再发起一个传输0字节的数据事务,根据其DATA0或DATA1的PID来判断上一次传输是否正确无误的完成。
这里我们可以看一下一个控制传输的传输、事务和包的关系图:
这里我们进行一个总结:
- USB按包的层次从低到高层分为:包、事务和传输
- 包是最小的最基本的数据传输单位。
- 一个事务一般包括三个包(令牌包、数据包(可选)和握手包。事务保证了单次“数据”传输的完整性。
- USB的协议是一问一答的,一个事务只能保证发送或接收的单次传输的完整性,而一个传输则是封装了完整的USB标准请求协议,保证问答功能的完整性。
- USB的传输类型分为:控制传输、中断传输、同步传输和批量传输。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936