USB笔记 USB 2.0 帧开始包Start-of-Frame Packets (SOF包SOF Packets)
说明
介绍的是USB 2.0协议中的帧开始包(Start-of-Frame Packets),通常简写为SOF包(SOF packets)。
下面是使用抓包工具查看的一个Full-Speed设备的SOF包示例:
介绍
帧开始包Start-of-Frame (SOF) packets用于SOF标记和帧号。
帧开始包Start-of-Frame (SOF) packets由主机(host)发出,对于全速总线(full-speed bus),标称速率为1.00 ms±0.0005 ms,对于高速总线(high-speed bus),标称速率为125 µs±0.0625 µs。
SOF包(SOF packets)包含一个表示包类型的PID,然后是一个11位的帧号(frame number)字段,如下图所示。
SOF PID参数如下:
Type | Value |
---|---|
PID Type | Token |
PID Name | SOF |
PID<3:0> | 0101B |
PID value<7:0> | 0xA5 |
Source | host |
Bus Speed | high, full |
Description | Start-of-Frame marker and frame number |
SOF令牌(SOF token)的组成只有令牌事务,该事务以精确的时间间隔分发与每一帧开始相对应的SOF标记和帧号。所有高速和全速设备(包括集线器)都会接收SOF包。
SOF令牌不会使任何接收的设备产生返回包;因此,不能保证SOF包成功发送到任何指定的设备。
SOF包的帧号(frame number),帧号每帧递增,在达到其最大值7FFH时会翻转,开始重新计数。
SOF包提供了两个定时信息。当设备检测到SOF PID时,就会知道产生了一个SOF。对帧时序敏感的设备,如果不需要跟踪帧号(如全速运行的集线器),只需要解码SOF PID,它们可以忽略帧号及其CRC。如果一个设备需要跟踪帧号,它必须同时解析PID和时间戳。对总线时序(bus timing)信息没有特别需求的全速设备(full-speed devices)可以忽略SOF包。
SOF标记还可以防止设备在总线没有其他USB通信时进入低功耗挂起状态。
USB帧和微帧USB Frames and Microframes
USB定义了一个全速1ms帧时间,由帧开始包Start-of-Frame (SOF) packets指示,每1ms一个周期,具有定义的抖动容限(jitter tolerances)。帧间隔( T F R A M E T_{FRAME} TFRAME)长度定义为1.000 ms±500 ns。帧间隔(frame interval)是从一个帧的SOF令牌中的任意点到下一个帧的SOF令牌中的同一点测量的。
USB还定义了高速125µs帧时间,并具有抖动容限(jitter tolerances)的微帧(microframe)。微帧间隔( T H S F R A M T_{HSFRAM} THSFRAM)长度定义为125.0µs±62.5 ns。微帧间隔(microframe interval)是从一个微帧的SOF令牌中的任意一点到下一个微帧的SOF令牌中的同一点进行测量的。
对于全速链路(full-speed links),SOF包由主机控制器(host controller)或集线器事务转换器(hub transaction translator)每1ms生成一次。对于高速链路(high-speed links),则是会在每8个125µs周期之后生成SOF包。
下图显示了微帧和帧之间的关系。
高速设备(high-speed devices)在每1 ms的周期内,会看到具有相同帧号的SOF包8次(每125 µs)。如果需要,高速设备可以通过检测具有与前一个SOF不同的帧号的SOF,并将其作为第0个微帧,以此来确定特定的微帧 “编号”。接下来的7个具有相同帧号的SOF可以视为第1至第7个微帧。
参考资料
Universal Serial Bus Specification Revision 2.0
USB Complete, 5th Edition
本文链接:https://blog.csdn.net/u012028275/article/details/113819250