HcFmInterval 寄存器详解(OHCI 规范)
HcFmInterval Register = 帧间隔寄存器
1. 功能概述
HcFmInterval
是 USB OHCI(Open Host Controller Interface)主机控制器(HC)的核心寄存器之一,用于控制 USB 帧(Frame)的时间长度 和 周期性传输的调度基准。它直接影响 SOF(Start of Frame)包的生成频率、帧计数器的最大值,以及 HC 的内部时钟校准。
2. 寄存器字段定义
HcFmInterval
是一个 32 位(Dword) 寄存器,包含以下关键字段:
位域 | 名称 | 功能描述 |
---|---|---|
31:16 | FI (Frame Interval) |
定义 USB 帧的时长(单位:μs),默认值 0x2EDF (对应 11935 μs ≈ 12ms)。 |
15 | FSMPS (Full Speed Max Packet Size) |
控制全速(12 Mbps)设备的最大数据包大小(通常保留)。 |
14:0 | 保留位 | 必须保持写入时的原始值(Read-Modify-Write)。 |
FI
(Frame Interval)的计算
- 默认值:
0x2EDF
(16 进制) = 11935 μs ≈ 11.935 ms(接近 USB 标准的 1ms 帧,但 OHCI 允许更长帧)。 - 实际帧长度:
3. 核心作用
控制 SOF 生成频率
- HC 每完成一个帧(Frame)后,会根据
FI
的值生成下一个 SOF 包(Start of Frame)。 - SOF 是 USB 总线的时序基准,用于同步中断/等时传输。
- HC 每完成一个帧(Frame)后,会根据
定义帧计数器(Frame Counter)范围
FI
的值决定了帧计数器的最大值(HcFmNumber
寄存器)。- 例如,
FI=0x2EDF
时,帧计数器范围为 0–0x2EDF(即 0–11935)。
影响周期性传输列表(Periodic List)
HcPeriodicStart
寄存器的有效值必须小于FI
。- HC 会在每个帧周期内遍历 Periodic List,执行中断/等时传输。
4. 驱动(HCD)的配置要求
初始化设置
- 硬件复位后,
HcFmInterval
通常为0x00002EDF
(默认值)。 - HCD 需确保
FI
值与 USB 设备的需求匹配(例如,兼容 USB 1.1 的 1ms 帧)。
// 示例:设置帧间隔为 1ms(标准值) write_reg(HcFmInterval, 0x00002EDF);
- 硬件复位后,
动态调整(可选)
- 某些场景(如低功耗模式)可能需要延长帧长度(增大
FI
),但会降低传输实时性。
- 某些场景(如低功耗模式)可能需要延长帧长度(增大
保留位处理
- 修改
HcFmInterval
时,必须保留未使用的位(Read-Modify-Write 操作):uint32_t value = read_reg(HcFmInterval); value = (value & 0xFFFF0000) | 0x2EDF; // 仅修改低 16 位 write_reg(HcFmInterval, value);
- 修改
5. 硬件行为
- 帧计数器回绕:当
HcFmNumber
达到FI
值时,自动归零并触发 SOF。 - 与
HcControl
的关系:仅当HCFS=10b (USBOPERATIONAL)
时,HC 才会基于FI
生成 SOF。
6. 典型应用场景
标准 USB 通信
FI=0x2EDF
确保 1ms 帧间隔,兼容 USB 1.1/2.0 设备。
低功耗模式
- 增大
FI
可减少 SOF 频率(如设为 10ms),但会降低中断传输的实时性。
- 增大
调试与错误恢复
- 修改
FI
可用于检测 HC 的时钟校准问题。
- 修改
7. 注意事项
- 不可设为 0:
FI
的最小值为 1,否则 HC 行为未定义。 - 与 PHY 时钟同步:
FI
需与 HC 的基准时钟(通常 12 MHz)匹配。 - 兼容性:非标准
FI
值可能导致 USB 设备无法正常枚举。
总结
HcFmInterval
是 OHCI 主机控制器的 时序核心寄存器,通过控制帧长度和 SOF 生成,直接影响 USB 总线的调度精度。驱动开发者需确保其配置符合协议要求,并在修改时严格遵守保留位规范。