2. 等时传输(Isochronous Transfer)原理

2.1 等时传输的核心特点

等时传输是USB协议中唯一为实时性和带宽确定性设计的传输类型。与批量传输追求数据完整性、中断传输追求低延迟不同,等时传输在时间确定性与数据完整性之间明确选择了前者——允许少量数据错误或丢失,但必须保证每个帧周期内数据能够按时送达。

等时传输三大核心特征:
  • 周期性保证:每个帧(1ms)或微帧(125µs)内固定分配总线时间片,不受其他传输类型阻塞。
  • 无重传机制:数据错误时直接丢弃,不进行握手重传,保证时间确定性。
  • 带宽预分配:主机控制器在帧计划中为每个等时端点预留固定带宽,总量不超过帧带宽的90%。
FPGA验证提示:在UHCI控制器验证中,等时传输的调试难点往往不在于数据正确性,而在于帧起始(SOF)与数据包发送时刻的对齐关系。建议在验证环境中同时捕获SOF令牌包和等时数据包的发送时间戳。

2.2 等时传输的帧结构

UHCI控制器将每1ms的USB帧划分为多个阶段,等时传输在帧中的位置由帧列表(Frame List)中的传输描述符(TD)链决定。下图展示了等时传输在UHCI帧结构中的典型布局:

UHCI帧结构中等时传输的典型布局 1ms SOF Isoch TD1 (Data 0) Isoch TD2 (Data 1) Isoch TD3 (Data 2) 中断 批量传输 EOF 等时传输预留带宽(≤90%帧带宽) 等时传输帧结构关键点: • 等时TD链紧跟在SOF之后,确保最小延迟 • 每个等时TD携带一个数据包(Data 0/Data 1交替),无握手阶段 • 等时传输完成后,剩余帧时间分配给中断和批量传输 • EOF(End of Frame)区域用于帧结束处理,不进行数据传输

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——因为等时传输不进行重试,错误计数无意义。

等时TD vs 批量/中断TD 结构对比 等时TD(Isochronous TD) Link Pointer (32-bit) Control/Status (无IOC位, ErrorCnt=0) Buffer Pointer (32-bit) MaxPacketSize (10-bit, ≤1023) 批量/中断TD(Bulk/Interrupt TD) Link Pointer (32-bit) Control/Status (含IOC位, ErrorCnt=3) Buffer Pointer (32-bit) MaxPacketSize (10-bit, ≤64)

2.5 等时传输在UHCI中的实现要点

在FPGA验证UHCI控制器时,需要特别关注以下等时传输相关的硬件实现细节:

  1. 帧列表初始化:每个帧表项(Frame List Entry)必须指向等时TD链的起始地址,且该地址必须16字节对齐。如果帧表项为空(指向0),该帧将跳过等时传输阶段。
  2. TD链终止:等时TD链的最后一个TD必须设置V(Valid)位为0,表示链结束。UHCI控制器在遇到V=0的TD时停止当前帧的等时传输,转入中断/批量处理。
  3. 数据包大小:等时TD的MaxPacketSize字段必须与实际数据包大小一致。如果实际数据小于MaxPacketSize,控制器仍会占用完整的帧时间片,造成带宽浪费。
  4. Active位管理:等时TD的Active位由软件设置,硬件执行后清除。如果硬件发现Active=0,则跳过该TD——这在调试中常被误认为是硬件错误。
调试检查清单:
  • ☐ 帧列表指针是否16字节对齐?
  • ☐ 等时TD的Control/Status字中IOC位是否为0?
  • ☐ 等时TD的Error Count字段是否为0?
  • ☐ 等时TD链末尾的V位是否已清零?
  • ☐ 每帧的等时数据总量是否超过900字节?
  • ☐ SOF与第一个等时数据包之间的间隔是否小于USB规范要求?