1. UHCI 协议概述
1.1 UHCI 的历史背景
通用主机控制器接口(Universal Host Controller Interface,UHCI)由 Intel 公司在 1996 年提出,是 USB 1.x 时代最早的主机控制器标准之一。其设计目标是以较低的硬件复杂度实现 USB 全速(12 Mbps)和低速(1.5 Mbps)传输,将大部分协议处理负担交由软件(驱动程序)完成,从而降低芯片制造成本。
关键时间节点:
- 1996 年:Intel 发布 UHCI 规范 v1.0,配合 USB 1.0 标准。
- 1998 年:USB 1.1 标准发布,UHCI 成为 PC 平台主流全速主机控制器。
- 2000 年:USB 2.0 标准发布,EHCI 引入高速模式(480 Mbps),UHCI 退居兼容角色。
- 2008 年之后:xHCI 统一架构逐步取代 UHCI/OHCI/EHCI。
UHCI 的“软件繁、硬件简”哲学与同期 Compaq/微软等主导的 OHCI(Open Host Controller Interface)形成鲜明对比。UHCI 将帧调度、数据拆分/重组、错误重试等逻辑交由驱动层实现,硬件仅提供最基本的 DMA 引擎和寄存器接口。
1.2 UHCI 在 USB 1.x/2.0 体系中的位置
在 USB 主机控制器体系结构中,UHCI 位于软件栈与物理总线之间,承担以下角色:
- 链路层管理:负责帧起始包(SOF)生成、帧定时(1 ms 帧周期)、数据包封装/解封装。
- 传输调度:通过软件维护的帧列表(Frame List)和队列头(Queue Head)描述符,实现等时、中断、控制、批量四种传输类型的轮转调度。
- DMA 引擎:通过系统总线(PCI/PCIe)直接访问内存中的传输描述符(TD)和数据缓冲区,无需 CPU 逐字节干预。
嵌入式平台注意点:UHCI 在嵌入式系统中通常以 PCI 或 PCIe 端点形式集成在 SoC 中,或通过 FPGA 逻辑实现。其寄存器布局(I/O 映射方式)与 OHCI 的内存映射方式不同,驱动开发时需特别注意基地址获取方式。
UHCI 在 USB 2.0 体系中的典型连接方式如下表所示:
| USB 速度 | 主机控制器 | 传输速率 | UHCI 角色 |
|---|---|---|---|
| 低速 (Low Speed) | UHCI | 1.5 Mbps | 直接控制 |
| 全速 (Full Speed) | UHCI | 12 Mbps | 直接控制 |
| 高速 (High Speed) | EHCI + UHCI (companion) | 480 Mbps | 仅兼容全速/低速设备 |
1.3 UHCI 与 OHCI / EHCI / xHCI 的对比
四种主机控制器接口在设计哲学、硬件复杂度、调度方式和适用场景上存在显著差异。下表从多个维度进行对比:
| 对比维度 | UHCI | OHCI | EHCI | xHCI |
|---|---|---|---|---|
| 提出者 | Intel | Compaq / Microsoft / National Semi. | Intel | Intel |
| 适用速度 | 全速 (12 Mbps) 低速 (1.5 Mbps) |
全速 (12 Mbps) 低速 (1.5 Mbps) |
高速 (480 Mbps) | 超速 (5/10/20 Gbps) 高速 / 全速 / 低速 |
| 硬件复杂度 | 低(软件承担调度) | 中(硬件承担调度) | 高 | 非常高 |
| 寄存器访问 | I/O 映射 | 内存映射 | 内存映射 | 内存映射 |
| 帧周期 | 1 ms(固定) | 1 ms(固定) | 125 µs(微帧) | 125 µs(微帧) |
| 调度方式 | 软件通过帧列表 + 队列头 | 硬件通过端点描述符链表 | 硬件通过异步/周期列表 | 硬件通过中断器/传输环 |
| DMA 描述符 | 传输描述符 (TD) | 端点描述符 (ED) + TD | iTD / siTD / qTD | TRB (Transfer Request Block) |
| 驱动复杂度 | 高(需实现帧调度) | 中 | 中 | 低(硬件抽象层完善) |
嵌入式平台选型提示:在资源受限的嵌入式系统中,UHCI 的“软件繁”特性意味着 CPU 需要参与更多的协议处理,可能影响实时性。如果系统有充足的硬件加速需求,建议优先考虑集成 xHCI 或 EHCI 的 SoC。但在 FPGA 实现中,UHCI 的逻辑门数最少,适合对成本敏感的场景。
从架构演进角度看,四种控制器的关系可以用以下层次图表示:
1.4 本章小结
UHCI 作为 USB 主机控制器接口的早期标准,在 USB 1.x 时代占据主导地位,并在 USB 2.0 时代以 companion 控制器形式继续服务全速/低速设备。其“软件繁、硬件简”的设计哲学降低了硬件成本,但增加了驱动开发复杂度。与 OHCI、EHCI、xHCI 相比,UHCI 在调度方式、寄存器接口、描述符结构等方面均有独特之处,理解这些差异对于嵌入式平台上的驱动移植和 DMA 测试验证至关重要。