1. UHCI 控制器概述:架构、寄存器布局与协议族定位
UHCI(Universal Host Controller Interface)是 Intel 主导的 USB 1.0/1.1 全速/低速主机控制器标准。在嵌入式系统与早期 x86 平台中,UHCI 凭借其软件调度特性,成为低成本、低复杂度 USB 实现的代表。本章从架构、寄存器布局及与 OHCI/EHCI 的差异三个维度,为后续 DMA 传输优化奠定基础。
1.1 UHCI 架构核心组件
UHCI 控制器内部由以下功能单元构成:
- 主机接口单元:通过 PCI 配置空间与系统总线交互,负责 DMA 引擎控制、中断管理。
- 帧列表(Frame List):位于系统内存中的 1024 个指针数组,每个指针指向一个传输描述符链表(TD 或 QH)。
- 传输描述符(TD):描述一次 USB 事务的缓冲区地址、长度、令牌包类型及状态信息。
- 队列头(QH):用于组织等时传输或批量传输的 TD 链表,支持水平链接与垂直链接。
- 根集线器(Root Hub):集成 2 个下行端口,负责端口状态检测、复位、使能及连接检测。
关键设计理念: UHCI 将大部分 USB 协议调度工作交由软件完成(Software-Oriented),硬件仅负责帧定时、DMA 传输与中断上报。这一设计降低了硬件复杂度,但增加了驱动负担。
1.2 UHCI 寄存器布局
UHCI 通过 PCI I/O 空间暴露一组控制/状态寄存器。下表列出初始化阶段最关键的寄存器及其偏移地址:
| 偏移地址 | 寄存器名称 | 位宽 | 功能描述 |
|---|---|---|---|
| 0x00 | USBCMD | 16-bit | 主机控制器命令寄存器(运行/停止、全局复位、帧列表大小等) |
| 0x02 | USBSTS | 16-bit | 主机控制器状态寄存器(HCHalted、PCI Interrupt、Host Controller Error 等) |
| 0x04 | USBINTR | 16-bit | 中断使能寄存器(控制中断、错误中断、帧结束中断等) |
| 0x08 | FRNUM | 16-bit | 帧编号寄存器(当前帧号,每 1ms 递增) |
| 0x0C | FLBASEADD | 32-bit | 帧列表基地址寄存器(指向 4KB 对齐的帧列表内存) |
| 0x10 | SOF | 8-bit | 帧起始修改寄存器(调整 SOF 信号时序) |
| 0x12 | PORTSC1/2 | 16-bit | 端口状态/控制寄存器(连接检测、使能、复位、挂起等) |
初始化要点: 在 DMA 传输开始前,必须确保 FLBASEADD 已写入有效的 4KB 对齐物理地址,且 USBCMD 中的 Run/Stop 位被置 1。否则 DMA 引擎将处于空闲状态,不会处理任何 TD 链表。
1.3 UHCI 与 OHCI / EHCI 的核心区别
UHCI、OHCI、EHCI 分别对应 USB 1.0/1.1 和 USB 2.0 时代的主机控制器标准。下表从调度模型、硬件复杂度、DMA 机制等维度进行对比:
| 对比维度 | UHCI (Intel) | OHCI (Compaq/Microsoft) | EHCI (USB 2.0) |
|---|---|---|---|
| USB 版本 | USB 1.0/1.1 | USB 1.0/1.1 | USB 2.0 (480 Mbps) |
| 调度模型 | 软件主导(Software-Oriented) | 硬件主导(Hardware-Oriented) | 硬件调度 + 异步列表 |
| 帧列表大小 | 1024 项(固定) | 32 项(可配置) | 1024 项(可配置) |
| TD 结构 | 固定 32 字节,软件管理链接 | 固定 16 字节,硬件自动遍历 | iTD/siTD 用于高速等时 |
| DMA 传输粒度 | 逐 TD 触发,软件需预取 | 硬件预取,支持批量传输 | 支持 Split Transaction |
| 中断处理 | 每帧中断或完成中断 | 帧结束中断 + 完成中断 | 异步中断 + 周期性中断 |
| 典型应用 | 早期 x86 PC、嵌入式 SoC | PowerPC、ARM 平台 | 所有 USB 2.0 主机 |
优化陷阱: UHCI 的软件调度模型意味着 DMA 传输效率高度依赖驱动对 TD 链表的组织方式。如果 TD 链路过长或跨页边界未对齐,会导致 DMA 引擎频繁等待软件更新,降低总线利用率。后续章节将针对此问题给出具体优化方案。
1.4 UHCI 在嵌入式系统中的定位
尽管 UHCI 仅支持 USB 1.1 全速(12 Mbps)和低速(1.5 Mbps),但在以下场景中仍具有不可替代的优势:
- 低功耗嵌入式设备:UHCI 硬件门数少,功耗低于 OHCI/EHCI,适合电池供电系统。
- 实时性要求不高的数据采集:键盘、鼠标、传感器等低速设备无需高速传输。
- 成本敏感型设计:UHCI 控制器 IP 核授权费用低,且无需外部高速 PHY。
- 兼容性测试平台:UHCI 的软件调度特性便于驱动开发者精细控制每笔事务的时序。