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 传输与中断上报。这一设计降低了硬件复杂度,但增加了驱动负担。
UHCI 控制器架构框图 UHCI 控制器架构框图 系统总线 (PCI) 主机接口单元 DMA 引擎 帧列表 (Frame List) TD / QH 链表 根集线器 (2 Port) USB 端口 0/1 说明: UHCI 通过帧列表驱动 TD 链表,软件在每帧开始前更新帧列表指针;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 引擎频繁等待软件更新,降低总线利用率。后续章节将针对此问题给出具体优化方案。
UHCI / OHCI / EHCI 调度模型对比 UHCI / OHCI / EHCI 调度模型对比 UHCI:软件调度 驱动更新帧列表指针 DMA 逐 TD 遍历 软件处理完成中断 OHCI:硬件调度 硬件自动遍历 ED 链表 硬件预取 TD 到内部 FIFO 硬件自动处理完成中断 EHCI:混合调度 异步列表 + 周期性列表 Split Transaction 支持 硬件中断聚合 关键差异: UHCI 依赖软件在每帧开始前更新帧列表,OHCI 硬件自动遍历 ED 链表,EHCI 则通过异步/周期性列表实现高速传输。

1.4 UHCI 在嵌入式系统中的定位

尽管 UHCI 仅支持 USB 1.1 全速(12 Mbps)和低速(1.5 Mbps),但在以下场景中仍具有不可替代的优势:

  • 低功耗嵌入式设备:UHCI 硬件门数少,功耗低于 OHCI/EHCI,适合电池供电系统。
  • 实时性要求不高的数据采集:键盘、鼠标、传感器等低速设备无需高速传输。
  • 成本敏感型设计:UHCI 控制器 IP 核授权费用低,且无需外部高速 PHY。
  • 兼容性测试平台:UHCI 的软件调度特性便于驱动开发者精细控制每笔事务的时序。