2. 等时传输(Isochronous Transfer)原理
2.1 等时传输的核心特点
等时传输是USB协议中唯一为实时性和带宽确定性设计的传输类型。与批量传输追求数据完整性、中断传输追求低延迟不同,等时传输在时间确定性与数据完整性之间明确选择了前者——允许少量数据错误或丢失,但必须保证每个帧周期内数据能够按时送达。
等时传输三大核心特征:
- 周期性保证:每个帧(1ms)或微帧(125µs)内固定分配总线时间片,不受其他传输类型阻塞。
- 无重传机制:数据错误时直接丢弃,不进行握手重传,保证时间确定性。
- 带宽预分配:主机控制器在帧计划中为每个等时端点预留固定带宽,总量不超过帧带宽的90%。
FPGA验证提示:在UHCI控制器验证中,等时传输的调试难点往往不在于数据正确性,而在于帧起始(SOF)与数据包发送时刻的对齐关系。建议在验证环境中同时捕获SOF令牌包和等时数据包的发送时间戳。
2.2 等时传输的帧结构
UHCI控制器将每1ms的USB帧划分为多个阶段,等时传输在帧中的位置由帧列表(Frame List)中的传输描述符(TD)链决定。下图展示了等时传输在UHCI帧结构中的典型布局:
2.3 带宽保证机制
UHCI通过帧列表(Frame List)和垂直/水平遍历算法实现等时传输的带宽保证。每个帧周期开始,主机控制器从帧列表取出当前帧的TD链首指针,按等时 → 中断 → 批量/控制的优先级顺序遍历执行。
| 传输类型 | 帧内优先级 | 带宽上限 | 失败处理 |
|---|---|---|---|
| 等时传输 | 最高(紧接SOF) | 帧带宽的90%(约900字节/帧) | 数据错误直接丢弃,不重试 |
| 中断传输 | 次高 | 剩余带宽,受轮询间隔限制 | 错误后重试,最多3次 |
| 批量传输 | 最低 | 仅使用剩余带宽 | 错误后重试,直到成功或超时 |
FPGA验证陷阱:等时传输的带宽保证依赖于帧列表的正确初始化。常见错误包括:帧列表指针未对齐到16字节边界、TD链中插入了非等时TD导致优先级错乱、以及帧周期计数器(Frame Number Register)与SOF生成不同步。建议在验证环境中使用带宽监视器(Bandwidth Monitor)实时统计每帧的等时数据量。
2.4 等时传输与批量/中断传输的区别
下表从多个维度对比三种传输类型的本质差异,帮助FPGA验证工程师快速定位协议层面的调试方向:
| 对比维度 | 等时传输 | 中断传输 | 批量传输 |
|---|---|---|---|
| 时间确定性 | 严格保证(每帧固定时间片) | 有限保证(轮询间隔内响应) | 不保证(仅使用空闲带宽) |
| 数据完整性 | 不保证(无重传) | 保证(硬件重试) | 保证(硬件重试+软件超时) |
| 握手阶段 | 无(仅数据包) | 有(ACK/NAK/STALL) | 有(ACK/NAK/STALL) |
| 最大包长(全速) | 1023字节 | 64字节 | 64字节 |
| TD格式差异 | 无IOC位(中断完成) | 有IOC位 | 有IOC位 |
| 典型应用 | 音频、视频、实时传感器 | HID设备、按键、鼠标 | 存储、文件传输、打印机 |
在UHCI的TD(传输描述符)层面,等时传输与批量/中断传输存在关键的结构性差异。等时TD的控制状态字(Control/Status Word)中不包含IOC(Interrupt On Complete)位,且错误计数(Error Count)字段固定为0——因为等时传输不进行重试,错误计数无意义。
2.5 等时传输在UHCI中的实现要点
在FPGA验证UHCI控制器时,需要特别关注以下等时传输相关的硬件实现细节:
- 帧列表初始化:每个帧表项(Frame List Entry)必须指向等时TD链的起始地址,且该地址必须16字节对齐。如果帧表项为空(指向0),该帧将跳过等时传输阶段。
- TD链终止:等时TD链的最后一个TD必须设置V(Valid)位为0,表示链结束。UHCI控制器在遇到V=0的TD时停止当前帧的等时传输,转入中断/批量处理。
- 数据包大小:等时TD的MaxPacketSize字段必须与实际数据包大小一致。如果实际数据小于MaxPacketSize,控制器仍会占用完整的帧时间片,造成带宽浪费。
- Active位管理:等时TD的Active位由软件设置,硬件执行后清除。如果硬件发现Active=0,则跳过该TD——这在调试中常被误认为是硬件错误。
调试检查清单:
- ☐ 帧列表指针是否16字节对齐?
- ☐ 等时TD的Control/Status字中IOC位是否为0?
- ☐ 等时TD的Error Count字段是否为0?
- ☐ 等时TD链末尾的V位是否已清零?
- ☐ 每帧的等时数据总量是否超过900字节?
- ☐ SOF与第一个等时数据包之间的间隔是否小于USB规范要求?