USB 同步传输端点的数据包PID序列及额外传输端点大小
2021-10-25
4148
0
对于同步传输:
- 如果输入端点提供的负载数据小于端点描述符指定的最大负载数据,则主机端将不再该端点提供进一步的输入事务。这是因为所对USB设备来说,所有的数据传输都是由主机发起的。对于数据输入IN事务,虽然数据的传输方向为设备端到主机,但是该事务却是由主机发起。由于设备的输入端点提供的负载数据小于该输入端点描述符指定的最大负载数据,则主机端可判断设备端当前数据已经传输完成,不再给该设备发起IN事务,因为数据已经传输完成。
- 对于同步输出OUT,主机端应根据实际提供的数据发起OUT事务,但是主机发送每包数据不得大于其同步输出端点指定的最大负载数据长度。
当然,对于同步传输,数据是不会进行重传的。
高带宽的同步传输支持数据PID序列,数据PID序列提供了对检测每个微帧中一个或多个丢失/损坏的数据包的支持。
同步输入
对于高速高速宽的同步输入端点,数据PID序列在一个微帧内的事务使用重复的DATA2、DATA1、DATA0数据包进行传输。
- 对于在一个微帧内的单次事务,使用DATA0进行数据传输。
- 对于在一个微帧内的2次事务,第一个事务使用DATA1进行数据传输,第二个事务使用DATA0进行数据传输。
- 对于在一个微帧内有3次事务,第一个事务使用DATA2进行数据传务,第二个事务使用DATA1进行数据传输,第三个事务使用DATA0进行数据传输。
当端点需要进行三个数据事务时,它必须使用DATA2响应第一个事务的IN令牌。当它需要两个事务时,第一个事务必须用DATA1响应;当它只需要一个事务时,必须用DATA0响应。
主机端知道输入端点一个微帧的最大事务数量,但不知道在一个微帧的实际的传输过程中需要几个事务,所以主机通过解码传输事务的第一个令牌的PID即可知道该界人士传输的事务数量。如果收到第一事务的令牌的PID正确无误,按实际需要继续发起新的IN事务。如收到DATA1令牌,知道本微帧内有两次传输,需再次发起新的IN事务。如果收到DATA0令牌,表示本次只有一次传输事务,并且已经结束,主机将不再发起新的IN事务。
同步输出
高速、高带宽等时输出端点使用和输入不同的数据PID序列。
- 如是为单个数据包时,主机使用DATA0数据包。
- 如果为2个数据包时,第一个事务为MDATA,第二个事务为DATA1.
- 如果有3个数据包时,第一个事务为MDATA,第二个也为MDATA,而三个为DATA2事务。
如果端点检测到错误的输出事务,则必须将该微帧期间传输的所有数据视为遇到错误。对于缺少MDATA事务的一个微帧三个事务,USB无法让端点确定两个MDATA事务中的哪一个丢失了。可能有一些应用程序的方法可以更精确地确定哪些数据丢失,但USB没有在总线级别提供这样的方法。
1024,513~1024和683~1024字节
- 1024:一次传输,高速同步传输最大为1024字节。
- 513~1024:大小为513~1024的原因是,一次最大为1024字节,所以2次最小的包为至少为1025包的大小,所以得为1025/2=513,这样可以每一包传512,每二包传513字节。如果是1024的了,你一次传输就行了。
- 683~1024:同样的道理,三次传输至少为2049字节,2049/3=683。
同步传输事务
同步传输事务以上图可以看到.先是主机发送IN令牌,然后设备端通过DATA0(数据<=512字节时)返回数据到主机。
当然,对于输出数据,就是OUT令牌和DATA0(数据<=512字节时)
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936