- HcRhDescriptorA 寄存器详解(OHCI 规范)
- 1. 功能概述
- 2. 寄存器字段定义
- 3. 典型配置示例
- 场景 1:2 端口独立电源控制
- 场景 2:4 端口全局电源(低成本设计)
- 4. 硬件行为
- 5. 注意事项
- 中文译名与术语
- 总结
- v1.0
- bit[9] NPS
- NoPowerSwitching (NPS) 位详解
- 1. 功能定义
- 2. 与 PowerSwitchingMode(PSM) 的关系
- 3. 硬件依赖性与配置建议
- 4. 驱动开发注意事项
- 5. 与 USB 协议的关联
- 中文技术术语
- 总结
- bit[31,24] POTPGT
- PowerOnToPowerGoodTime (POTPGT) 参数详解
- 1. 功能定义
- 2. 作用场景
- 3. 典型配置
- 4. 驱动开发实现
- 5. 硬件行为
- 6. 注意事项
- 中文术语
- 总结
HcRhDescriptorA 寄存器详解(OHCI 规范)
1. 功能概述
HcRhDescriptorA 是 USB OHCI 主机控制器中 根集线器(Root Hub) 的核心配置寄存器,用于描述根集线器的 物理特性 和 全局行为,例如端口数量、电源管理模式等。该寄存器在主机控制器初始化阶段由驱动(HCD)配置,且不受主机控制器状态影响(始终可写)。
2. 寄存器字段定义
HcRhDescriptorA 为 32 位(Dword) 寄存器,具体位域如下:
| 位域 | 名称 | 功能描述 | 
|---|---|---|
| 31:24 | NDP(Number of Downstream Ports) | 下行端口数量: • 值范围 0x01–0x0F(支持最多 15 个端口)。• 例如 0x02表示 2 个 USB 端口。 | 
| 23:13 | PSM(Power Switching Mode) | 电源切换模式: • 0:全局电源模式(所有端口共用一个电源开关)。• 1:每端口独立电源控制。 | 
| 12 | NPS(No Power Switching) | 无电源切换: • 1:根集线器不支持电源开关(始终供电)。• 0:支持电源开关(依赖PSM)。 | 
| 11 | DT(Device Type) | 设备类型: • 0:通用集线器(Compatible Hub)。• 1:复合设备(Compound Device)。 | 
| 10:8 | OCPM(Over-Current Protection Mode) | 过流保护模式: • 0:全局过流保护(所有端口共享一个检测电路)。• 1:每端口独立过流保护。 | 
| 7 | NOCP(No Over-Current Protection) | 无过流保护: • 1:禁用过流保护(风险操作!)。• 0:启用过流保护。 | 
| 6:0 | 保留位 | 必须写入 0,读取时忽略。 | 
3. 典型配置示例
场景 1:2 端口独立电源控制
// NDP=2, PSM=1 (每端口电源), NPS=0 (支持开关), DT=0 (通用集线器), OCPM=1 (独立过流保护)
uint32_t value = (0x02 << 24) | (1 << 13) | (0 << 12) | (0 << 11) | (1 << 8);
write_reg(HcRhDescriptorA, value);场景 2:4 端口全局电源(低成本设计)
// NDP=4, PSM=0 (全局电源), NPS=0, OCPM=0 (全局过流)
uint32_t value = (0x04 << 24) | (0 << 13) | (0 << 12) | (0 << 8);
write_reg(HcRhDescriptorA, value);4. 硬件行为
- 初始化要求:
 该寄存器必须在 主机控制器启动前 配置,以匹配硬件设计(如端口数量、电源电路类型)。
- 与 HcRhDescriptorB的关系:DescriptorA定义基础特性,DescriptorB补充扩展功能(如端口电流限制)。
- 状态无关性:
 无论主机控制器处于USBRESET或USBOPERATIONAL状态,均可修改此寄存器。
5. 注意事项
- 端口数量(NDP): - 必须与实际物理端口数一致,否则可能导致未定义行为。
- OHCI 规范限定最大 15 个端口(0x0F)。
 
- 电源与过流配置: - 若硬件不支持某功能(如独立电源),需将 NPS或NOCP设为1。
- 错误配置可能损坏设备(如禁用过流保护时短路)。
 
- 若硬件不支持某功能(如独立电源),需将 
- 复合设备(DT=1): - 仅当根集线器与主机控制器为同一物理芯片时使用,需配合 HcRhDescriptorB配置。
 
- 仅当根集线器与主机控制器为同一物理芯片时使用,需配合 
中文译名与术语
- HcRhDescriptorA → 根集线器描述符寄存器A
- NDP → 下行端口数量
- PSM → 电源切换模式
- OCPM → 过流保护模式
总结
HcRhDescriptorA 是 OHCI 根集线器的 硬件能力声明寄存器,驱动开发者需根据实际硬件特性(如端口数、电源设计)精准配置,否则可能导致功能异常或硬件故障。配置时需严格遵循字段定义,并优先参考具体硬件手册的推荐值。
v1.0
bit[9] NPS
NoPowerSwitching (NPS) 位详解
1. 功能定义
NoPowerSwitching(NPS)是 HcRhDescriptorA 寄存器中的一个控制位(位12),用于声明 根集线器(Root Hub)的电源管理能力:  
- 0:根集线器的端口支持 电源开关控制(可通过软件开启/关闭端口供电)。
- 1:端口 始终供电(只要主机控制器上电,端口即带电,无软件控制能力)。
2. 与 PowerSwitchingMode (PSM) 的关系
- 当 NPS=0时:PSM(位23-13)进一步指定电源切换模式:- PSM=0:全局电源切换(所有端口共用一个电源开关)。
- PSM=1:每端口独立电源切换(每个端口有独立开关)。
 
- 当 NPS=1时:PSM字段无效(硬件忽略其值),端口始终供电。
3. 硬件依赖性与配置建议
- 实现相关:
 该功能完全依赖硬件设计。若硬件无电源开关电路,必须设NPS=1。
- 典型场景:  - 低成本设计:NPS=1(省去电源开关电路)。
- 高灵活性设计:NPS=0+PSM=1(支持独立控制每个端口的电源)。
 
- 低成本设计:
4. 驱动开发注意事项
- 初始化时必须配置:  // 示例:禁用电源切换(端口始终供电) uint32_t desc_a = read_reg(HcRhDescriptorA); desc_a |= (1 << 12); // 设置 NPS=1 write_reg(HcRhDescriptorA, desc_a);
- 安全影响:  - NPS=1时,无法通过软件切断故障端口的电源,可能增加短路风险。
- 若硬件实际支持电源切换但误设 NPS=1,会导致电源管理功能失效。
 
5. 与 USB 协议的关联
- USB 2.0 规范要求:
 集线器必须支持电源切换(NPS=0),除非是 总线供电(Bus-Powered) 的低功耗集线器。
- OHCI 的灵活性:
 允许通过NPS位适配不同硬件设计,但需在驱动中正确声明。
中文技术术语
- NoPowerSwitching (NPS) → 无电源切换
- PowerSwitchingMode (PSM) → 电源切换模式
- Global/Per-Port Switching → 全局/每端口电源切换
总结
NoPowerSwitching 是硬件能力的声明位,驱动开发者需根据实际电路设计配置该位,并确保与 PSM 字段的逻辑一致性。错误配置可能导致电源管理功能异常或硬件兼容性问题。
bit[31,24] POTPGT
PowerOnToPowerGoodTime (POTPGT) 参数详解
1. 功能定义
PowerOnToPowerGoodTime(简称 POTPGT)是 USB 根集线器(Root Hub)的一个关键时间参数,用于指定 从端口电源开启到稳定可用的最小等待时间。  
- 单位:2 ms(毫秒)
- 计算公式:实际等待时间 = POTPGT 值 × 2 ms
2. 作用场景
当主机控制器驱动(HCD)通过 HcRhPortStatus[n].PPS(Port Power Status)开启某端口的电源后,必须等待 POTPGT × 2 ms 才能对该端口执行操作(如复位、枚举设备)。  
- 硬件依赖:该值由根集线器硬件设计决定(如电源电路响应速度)。
3. 典型配置
| POTPGT 值 | 实际等待时间 | 适用硬件 | 
|---|---|---|
| 0x01 | 2 ms | 快速响应的电源电路(如低功耗设计) | 
| 0x32(50) | 100 ms | 高电流端口(需更长时间稳定电压) | 
| 0xFF(255) | 510 ms | 极端保守设计(兼容性测试) | 
4. 驱动开发实现
// 示例:开启端口后等待电源稳定
void enable_port(uint8_t port_num) {
    // 1. 开启端口电源
    write_reg(HcRhPortStatus[port_num], (1 << PPS)); // PPS=1
    // 2. 读取 POTPGT(通常存储在 HcRhDescriptorB 或硬件手册指定位置)
    uint8_t potpgt = (read_reg(HcRhDescriptorB) >> 24) & 0xFF;
    // 3. 计算等待时间(单位:微秒)
    uint32_t delay_us = potpgt * 2000; // 2 ms → 2000 μs
    // 4. 延时(需根据操作系统选择API)
    udelay(delay_us); // Linux内核中的微秒级延时函数
}5. 硬件行为
- 电源稳定信号:
 硬件内部通过电压检测电路判断电源是否达到VBUS稳定值(通常 4.75–5.25V),但软件仅需依赖 POTPGT 计时。
- 超时处理:
 若等待时间不足,后续端口操作(如发送复位信号)可能导致设备枚举失败。
6. 注意事项
- 默认值:  - 硬件复位后 POTPGT 通常为 0x02(4 ms),但需以硬件手册为准。
 
- 硬件复位后 POTPGT 通常为 
- 与 USB 协议的关系:  - USB 2.0 规范要求至少 100 ms 的端口电源稳定时间(对应 POTPGT=0x32)。
- OHCI 允许更小值以提高性能,但可能降低兼容性。
 
- USB 2.0 规范要求至少 100 ms 的端口电源稳定时间(对应 
- 调试建议:  - 若设备频繁枚举失败,可尝试增大 POTPGT 值(如设为 0x64/200 ms)。
 
- 若设备频繁枚举失败,可尝试增大 POTPGT 值(如设为 
中文术语
- PowerOnToPowerGoodTime → 电源开启至稳定时间
- Port Power Status (PPS) → 端口电源状态
- VBUS → 总线电压(USB 电源线)
总结
POTPGT 是平衡 电源稳定性 与 枚举速度 的关键参数,驱动开发者需根据硬件手册配置合理值,并在电源操作后严格遵循等待时间,确保 USB 设备的可靠识别。
 我的书签
 我的书签
                                 添加书签
 添加书签 移除书签
 移除书签