IsochronousEnable 位功能详解(OHCI 规范)
1. 核心功能
IsochronousEnable
是 HcControl
寄存器中的一个控制位,用于 全局启用/禁用等时传输(Isochronous Transfers) 的调度。
- 等时传输特性:用于实时性要求高的数据流(如音频、视频),需在固定时间间隔内完成传输。
2. 工作流程
周期性列表(Periodic List)处理
- 主机控制器(HC)在每帧(Frame)中遍历 Periodic List 时,若遇到 等时传输端点描述符(ED)(其
F
字段为1
),会检查IsochronousEnable
位的状态:1
(启用):继续处理该 ED 及其后的等时传输。0
(禁用):立即停止处理 Periodic List(假设列表中仅剩等时 ED),转而调度 非周期性列表(Bulk/Control EDs)。
- 主机控制器(HC)在每帧(Frame)中遍历 Periodic List 时,若遇到 等时传输端点描述符(ED)(其
生效时机
- 修改此位的效果 不会立即生效,而是在下一帧开始时(非当前帧)应用。
- 例如:在第 N 帧中设置
IsochronousEnable=1
,第 N+1 帧才会开始处理等时 ED。
3. 驱动(HCD)使用场景
动态开关等时传输
// 启用等时传输 uint32_t hc_control = read_reg(HcControl); hc_control |= (1 << ISOCHRONOUS_ENABLE_BIT); // 设置对应位 write_reg(HcControl, hc_control); // 禁用等时传输(下一帧生效) hc_control &= ~(1 << ISOCHRONOUS_ENABLE_BIT); write_reg(HcControl, hc_control);
应用场景
- 实时流启停:如音频设备开始/停止播放时,动态开关等时传输以节省带宽。
- 错误恢复:等时传输出错时,临时禁用并重新初始化 ED。
4. 硬件行为细节
与
PLE
的关系:PLE
(Periodic List Enable)控制整个 Periodic List 的开关,而IsochronousEnable
仅针对其中的等时 ED。- 若
PLE=0
,即使IsochronousEnable=1
,也不会处理任何 Periodic ED。
- 若
状态切换延迟:
由于生效延迟,HCD 需确保在禁用后等待一帧再修改等时 ED 配置,避免冲突。
5. 注意事项
- 默认值:硬件复位后通常为
0
(禁用)。 - 保留位处理:修改时需通过 Read-Modify-Write 保留其他位。
- 实时性影响:禁用等时传输可能导致数据流中断,需配合设备协议层处理。
中文技术术语
- IsochronousEnable → 等时传输使能位
- Periodic List → 周期性传输列表
- Frame → 帧(USB 时间单位,通常 1ms)
总结
IsochronousEnable
是 OHCI 中管理实时数据传输的关键开关位,驱动需注意其延迟生效特性,并在启停等时传输时确保与设备端同步,避免数据丢失或总线冲突。