HcLSThreshold 寄存器详解(OHCI 规范)
1. 功能概述
HcLSThreshold
(Low-Speed Threshold Register)是USB OHCI主机控制器中用于优化低速(Low-Speed, 1.5 Mbps)设备传输性能的寄存器。它通过设定一个时间阈值,决定何时将低速设备的传输请求合并到单个帧(Frame)中,以减少总线开销和延迟。
2. 寄存器字段定义
HcLSThreshold
是一个 32 位(Dword) 寄存器,但仅低 15 位 有效(位 14:0),其余位为保留位(必须保持写入时的原始值)。
- 有效值范围:
0x0000
到0x7FFF
(单位:微秒 μs)。 - 默认值:通常为
0x0628
(即 1576 μs ≈ 1.576 ms)。
3. 核心作用
低速设备传输优化
- 当低速设备的传输请求预计执行时间 短于
HcLSThreshold
设定的阈值 时,OHCI 会尝试将多个请求合并到同一帧中,避免频繁切换总线速度(全速/低速)。 - 若传输时间超过阈值,则单独分配一帧。
- 当低速设备的传输请求预计执行时间 短于
减少总线切换开销
- 低速设备通信需要主机控制器插入额外的 前导包(PREamble Packet),切换总线速度会占用带宽。
- 通过合并短传输,可降低总线切换频率,提升效率。
4. 驱动(HCD)的配置建议
默认值适用性
- 默认值
0x0628
(1576 μs)适用于大多数场景,无需修改。 - 若系统需要更低的低速设备延迟(如键盘/鼠标),可适当减小该值(例如设为
0x03E8
= 1000 μs)。
- 默认值
修改注意事项
- 保留位处理:需通过 Read-Modify-Write 操作保留高位(15–31):
uint32_t value = read_reg(HcLSThreshold); value = (value & 0xFFFF8000) | 0x0628; // 仅修改低15位 write_reg(HcLSThreshold, value);
- 极端值避免:
- 设为
0x0000
:强制所有低速传输独立占用帧(降低效率)。 - 设为
0x7FFF
:尽可能合并传输(可能增加延迟)。
- 设为
- 保留位处理:需通过 Read-Modify-Write 操作保留高位(15–31):
5. 硬件行为
- 阈值比较逻辑:
HC 在调度传输时,会估算低速设备的传输时间(基于数据包大小和协议开销),并与HcLSThreshold
比较,决定是否合并。 - 与
HcControl
的关系:仅当HCFS=10b (USBOPERATIONAL)
时生效。
6. 典型应用场景
人机接口设备(HID)
- 键盘/鼠标等低速设备通常发送小数据包,通过合并传输减少延迟。
多低速设备共存
- 当多个低速设备连接时,合理的阈值可平衡吞吐量与实时性。
调试与性能调优
- 增大阈值可测试总线效率,减小阈值可测试单设备响应速度。
7. 注意事项
- 全速/高速设备不受影响:仅作用于低速设备(1.5 Mbps)。
- 与
HcFmInterval
的关联:阈值需小于帧长度(通常 1ms),否则无意义。 - 硬件依赖性:具体合并算法由 HC 实现决定,不同厂商可能有差异。
中文译名建议
在技术文档中,HcLSThreshold
可译为:
低速设备传输阈值寄存器
或简化为:
低速阈值寄存器
总结
HcLSThreshold
是 OHCI 中针对低速设备的 传输优化寄存器,通过动态合并短传输提升总线效率。驱动开发者通常无需修改默认值,但在特定场景(如实时性要求高的 HID 设备)可微调以平衡性能。