USB 高速设备微帧计算及事务构成
2021-10-26
6223
25
从USB2.0规范协议中可以知道,高速设备在1ms内会有8个微帧,所以每个微帧约125us,而一个微帧内可以有多个事务。
一个微帧是由起始帧SOF开始的,到下一个起始帧SOF结束或该微帧内的结速帧EOF结束。
对于一个微帧内的SOF,SYNC和EOF,此为数据链路层的,一般我们关注的是里面的包内容,协议层的东西。
微帧计算
通过抓包工具,我们抓包一个高速设备的数据包。可以看到,在一个大帧即1ms中有8个微帧。其编号为199.0-199.7。
而在微帧1922.2和1922.4微帧内有数据通讯事务,其余微帧都事务传输。
这里我们展开1922.4,可以看到该微帧内有2次事务,事务编号分别为89和90,并且该微帧的大部分时间为空闲态。
这里我们对该微帧内的时间进行计算:
19.517
0.2
0.36666
7.5
0.39900
+ 0.2333396
--------------
124.21599
这个时间计算大概约为125us
事务构成
一个事务代表一个完整的通讯过程,这个事务一般分为三个阶段:令牌阶段、数据阶段和响应阶段。
- 令牌阶段:由主机发起,令牌代表着通讯的类型
- 数据阶段:可选。
- 响应阶段:该次事务的结果
常见的令牌包括SETUP、IN和OUT令牌。不同的令牌的三个阶段稍有不同,并且响应也有所不同。
- 如对于SETUP令牌发起的SETUP事务,该事务没有数据阶段,并且响应只有ACK,即表示SETUP响应只能成功,否则无响应就是失败。
- 对于OUT事务,即主机需要向设备端发送数据,如设备不能接收或缓存未准备就绪,设备响应NAK,如果传输的数据不能正确处理,可以响应 STAL,如果传输正确并完成,可响应ACK。
- IN 事务与 OUT 事务类似,不同的是 IN 事务的状态返回是在数据阶段。同步传输的 IN 和 OUT 事务没有响应阶段。
在高速设备的批量传输和控制传输中, 根据上图 OUT 事务是否成功需要等到响应阶段才知道,如果响应是 NAK,主机在数据阶段发送的内容不会被从机接收,浪费掉了这部分带宽。 为了节约总线带宽, 除了 IN 和 OUT 事务, 高速设备还有 PING 事务,用来查看端点是否准备完毕,如果端点没有准备就绪响应 NYET 状态。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936