HcRhStatus 寄存器详解(OHCI 规范)

1. 功能概述

HcRhStatus 是 USB OHCI 主机控制器中 根集线器(Root Hub)的全局状态寄存器,用于监控和控制根集线器的电源状态、过流保护等关键事件。该寄存器需在 主机控制器处于 USBOPERATIONAL 状态(HcControl.HCFS=10b 时才能写入。


2. 寄存器字段定义

HcRhStatus32 位(Dword) 寄存器,支持 读写(R/W)写1清零(Write-1-to-Clear) 操作,具体位域如下:

位域 名称 类型 功能描述
31:17 保留位 必须写入 0,读取时忽略。
16 CRWE (Clear Remote Wakeup Enable) W1C 远程唤醒使能清零
• 写 1 清除 HcControl.RWE 位(禁用远程唤醒)。
15 OCIC (Over-Current Indicator Change) R/W1C 过流状态变化标志
1:检测到过流事件(需软件处理)。
• 写 1 清零。
14 LPSC (Local Power Status Change) R/W1C 本地电源状态变化标志
1:电源状态变化(如从低功耗恢复)。
• 写 1 清零。
13:2 保留位 必须写入 0,读取时忽略。
1 OCIA (Over-Current Indicator Active) R 过流激活状态(只读):
1:当前存在过流条件(需紧急处理)。
0 LPSC (Local Power Status) R/W 本地电源状态
0:本地电源关闭(低功耗模式)。
1:本地电源开启。

3. 核心功能

  1. 电源管理

    • 通过 LPSC 位控制根集线器的本地电源开关,支持低功耗模式。
    • LPSC 变化时触发 LPSC 标志(需软件清零)。
  2. 过流保护

    • OCIA 实时反映过流状态,OCIC 标志记录过流事件(需软件响应后清零)。
    • 典型处理流程:
      if (read_reg(HcRhStatus) & (1 << OCIC)) {
          // 1. 禁用故障端口(写 HcRhPortStatus[n].PPS=0)
          // 2. 清除 OCIC 标志
          write_reg(HcRhStatus, (1 << OCIC));
      }
  3. 远程唤醒控制

    • 通过 CRWE 位快速禁用远程唤醒功能(无需修改 HcControl 寄存器)。

4. 驱动开发示例

场景 1:处理过流事件
uint32_t status = read_reg(HcRhStatus);
if (status & (1 << OCIC)) {
    // 禁用所有端口电源(假设全局电源模式)
    write_reg(HcRhPortStatus[ALL_PORTS], (1 << PPS)); // PPS=0
    // 清除 OCIC 标志
    write_reg(HcRhStatus, (1 << OCIC));
}
场景 2:进入低功耗模式
// 关闭本地电源
uint32_t status = read_reg(HcRhStatus);
status &= ~(1 << LPSC); // LPSC=0
write_reg(HcRhStatus, status);

5. 硬件行为

  • 写1清零(W1C)字段
    OCICLPSC 标志位需通过写 1 清零,写 0 无效。
  • 状态同步延迟
    修改 LPSC 后,需等待 LPSC 标志位触发(约 1ms)以确认电源状态切换完成。

6. 注意事项

  1. 写入时机
    仅在 HcControl.HCFS=10b(USBOPERATIONAL)时写入有效,否则忽略。
  2. 保留位处理
    必须通过 Read-Modify-Write 操作保留未使用位。
  3. 过流恢复
    清除过流条件后,需重新使能端口电源(HcRhPortStatus[n].PPS=1)。

中文术语对照

英文 中文
Over-Current 过流
Local Power 本地电源
Remote Wakeup 远程唤醒
Write-1-to-Clear (W1C) 写1清零

总结

HcRhStatus 是根集线器的 全局状态与应急控制中心,驱动开发者需重点关注其过流事件处理和电源管理功能,确保在硬件异常时快速响应,同时遵循状态寄存器的访问规则(如 W1C 操作和状态机依赖)。


v1.0

LPSC 位于 bit[16]