来自:https://hellocode.blog.csdn.net/article/details/113194072
一、同步传输包结构
同步传输由一个或多个同步事务组成,每一个同步事务具有令牌包、数据包,没有握手包,如图下所示。 主机发出IN或OUT令牌包,如果是IN令牌,设备会发送数据包给主机,如果是OUT令牌,主机会发送数据包给设备。 同步传输没有握手包或重试功能。
二、同步传输DATAx数据包核心要点
同步传输DATAx数据包应该注意以下5点(官方文档):
-
全速设备或主机控制器能够接受PID 为DATA0或DATA1的数据包。
-
全速设备或主机控制器只能发送PID为DATA0的数据包。
-
高速主机控制器必须能够接受和发送 PID为DATA0、DATA1、DATA2或MDATA的数据包。
-
高速设备,每个微帧最多有一个事务,必须只能发送PID为DATA0的数据包。
-
高速高带宽端点一个微帧可以接收或者发送多个PID为DATA0、DATA1、DATA2或MDATA的数据包。
三、同步传输包详解
首先介绍下同步传输低速、全速、高速数据包最大长度大小,如下图。
3.1 同步读包结构
3.1.1 全速设备传输小于等于1023字节包结构
同步读传输抓包如下图,因为下图是对FS(Full Speed)设备抓包,所以传输1023字节的数据只需要使用一个同步事务即可,如果大于1023,会分成多个相同的同步事务进行传输,这里只有一个事务的抓包图。主机会先发送一个IN令牌包给设备,设备正常收到令牌包后会发送一个DATA0数据包给主机,此数据包包含1023个字节数据,因为全速设备同步传输最大包长度为1023,同步事务不存在应答包。
3.1.2 全速设备传输大于1023字节包结构
如果一次读传输大于1023字节字节,比如为1023*2+80字节,则会分3个IN同步事务进行传输,传输包结构实例如下。
3.1.3 IN令牌包波形
3.1.4 数据包波形
3.2 同步写包结构实例
这里不再列举抓包图,和同步读刚好相反,并且使用OUT令牌包。
如果一次写传输大于1023字节字节,比如为1023*2+80字节,则会分3个OUT同步事务进行传输,传输包结构如下。