1. UHCI 协议概述

1.1 基本概念

UHCI(Universal Host Controller Interface,通用主机控制器接口)是由 Intel 公司主导制定的 USB 主机控制器寄存器级接口规范。它定义了系统软件(USB 驱动程序)与 USB 主机控制器硬件之间的交互标准,使得操作系统能够通过一组标准化的寄存器、内存数据结构(如帧列表、传输描述符 TD、队列头 QH)来管理 USB 总线上的所有传输事务。

UHCI 的核心设计理念是将 USB 协议的时间关键性任务(如帧起始 SOF 生成、总线帧定时)交由硬件完成,而将传输调度、数据缓冲管理交由软件控制。这种软硬件分工使得 UHCI 控制器结构相对简单,适合集成到早期的 PC 芯片组中。

关键角色: UHCI 是 USB 主机控制器与系统软件之间的“契约”,它不描述 USB 电气特性,而是描述软件如何通过内存中的数据结构来驱动 USB 传输。

1.2 历史背景

UHCI 的诞生与 USB 1.0/1.1 标准的推广紧密相关:

  • 1995-1996年: USB 1.0 规范发布,定义了 1.5 Mbps(低速)和 12 Mbps(全速)两种速率。Intel 随即提出 UHCI 作为主机控制器的标准接口。
  • 1998年: USB 1.1 规范修订,UHCI 1.0 正式发布。同期 Compaq、Microsoft、National Semiconductor 等公司推出了竞争性的 OHCI(Open Host Controller Interface)规范。
  • 2000年: USB 2.0 规范发布,引入 480 Mbps 高速模式。Intel 主导的 EHCI(Enhanced Host Controller Interface)成为高速主机控制器的标准,但 UHCI 仍被保留用于兼容全速/低速设备。
  • 2002年至今: 在 USB 2.0 系统中,UHCI 与 EHCI 形成“伴侣控制器”架构——EHCI 负责高速传输,UHCI 负责全速/低速传输的兼容性支持。
UHCI 与同期主机控制器接口对比
特性 UHCI (Intel) OHCI (Compaq/Microsoft) EHCI (Intel)
主导厂商 Intel Compaq, Microsoft, National Semi. Intel
适用速率 全速 (12 Mbps) / 低速 (1.5 Mbps) 全速 / 低速 高速 (480 Mbps)
硬件复杂度 较低(依赖软件调度) 较高(硬件自动调度) 高(支持高速拆分事务)
软件负担 较重(软件管理帧列表) 较轻(硬件管理队列) 中等(异步/周期调度分离)
帧周期 1 ms(精确由硬件产生 SOF) 1 ms 125 µs(微帧)

1.3 在 USB 1.x / 2.0 中的角色

UHCI 在 USB 协议栈中的位置如下图所示,它位于系统软件层与 USB 总线物理层之间,承担着“翻译官”和“调度员”的双重角色。

UHCI 在 USB 2.0 主机控制器架构中的角色 系统软件层(USB 驱动程序 / 类驱动) UHCI 软件接口(寄存器 + 帧列表 + TD/QH) 软件调度:帧列表遍历 → TD 处理 → 中断管理 UHCI 主机控制器硬件 硬件任务:SOF 生成、总线状态机、串行接口引擎 USB 总线(D+ / D- 差分信号) EHCI 高速控制器 伴侣 全速设备 低速设备 高速设备 USB 2.0 系统典型配置 1 个 EHCI + 1~2 个 UHCI 共享同一根 USB 总线

在 USB 1.x 时代,UHCI 是唯一的主机控制器接口标准之一(与 OHCI 并存)。进入 USB 2.0 时代后,UHCI 的角色发生了重要转变:

  • 兼容性保障: USB 2.0 的 EHCI 控制器只支持高速模式。当全速或低速设备插入时,系统通过 UHCI(或 OHCI)控制器来管理这些设备的通信。
  • 拆分事务(Split Transaction): 在 USB 2.0 的“伴侣控制器”架构中,EHCI 负责将高速帧(125 µs 微帧)中的时间槽分配给 UHCI,UHCI 再在其 1 ms 帧周期内完成全速/低速设备的传输。这种机制称为“拆分事务”,是 FPGA 验证中需要重点关注的时序交互点。
  • 等时传输支持: UHCI 原生支持等时传输(Isochronous Transfer),为音频、视频等实时数据流提供确定的带宽和固定的传输延迟。等时传输在 UHCI 的帧列表调度中具有最高优先级,这也是本课程后续章节的核心调试对象。
FPGA 验证视角: 在 FPGA 中实现或验证 UHCI 时,需要特别关注帧列表(Frame List)的循环遍历机制、传输描述符(TD)的状态机跳转、以及等时传输的带宽预留算法。这些是 UHCI 区别于其他主机控制器接口的关键特征。

1.4 UHCI 帧列表与传输描述符结构

UHCI 的核心数据结构包括帧列表(Frame List)和传输描述符(Transfer Descriptor, TD)。帧列表是一个包含 1024 个指针的数组,每个指针指向一个等时传输描述符(Isochronous TD)或队列头(Queue Head, QH)。主机控制器在每个 1 ms 帧周期开始时,从帧列表的当前索引位置开始遍历,依次处理链表中的 TD。

UHCI 帧列表与 TD 关键参数
参数 值 / 范围 说明
帧列表大小 1024 项 每项 4 字节,指向 TD 或 QH
帧周期 1 ms 由硬件 SOF 中断精确控制
TD 类型 等时 / 普通 等时 TD 无重试机制,普通 TD 支持重试
最大数据载荷 1280 字节(等时) 受限于 1 ms 帧内的可用带宽
链路指针 32 位物理地址 指向下一个 TD 或 QH,形成链表
UHCI 帧列表与 TD 链表结构 帧列表 (1024 项) Frame 0 → TD_A Frame 1 → TD_B Frame 2 → TD_C ... Frame 1023 → TD_N TD_A (等时) 端点 1, 数据 256B TD_B (等时) 端点 2, 数据 512B TD_C 控制传输 QH (队列头) 批量端点 TD_D (批量) 数据 64B 调度顺序:等时 TD 优先 → 中断 → 控制 → 批量 等时 TD 必须在帧起始后立即处理,以保证带宽确定性

1.5 等时传输在 UHCI 中的特殊性

等时传输是 UHCI 协议中最具挑战性的传输类型,也是本课程 FPGA 验证调试的核心对象。其特殊性体现在以下几个方面:

  • 无重试机制: 等时 TD 不包含重试计数器,一旦传输失败(如 CRC 错误、数据溢出),数据直接丢弃,不会自动重发。这要求 FPGA 验证必须确保时序的精确性。
  • 带宽预留: 等时传输在帧列表中占据固定位置,软件在初始化时需计算并预留足够的带宽(通常不超过帧总带宽的 90%)。
  • 数据有效性标志: 等时 TD 的状态域中包含“数据缓冲区错误”(Data Buffer Error)和“Babble 错误”等标志位,FPGA 验证时需要模拟这些错误条件以测试驱动程序的容错能力。
  • 与 DMA 的耦合: UHCI 通过 DMA 引擎直接从系统内存读取 TD 和数据缓冲区。等时传输对 DMA 延迟极其敏感——任何 DMA 延迟都可能导致帧内数据未就绪,进而产生“数据未就绪”(Data Not Ready)错误。
调试要点: 在 FPGA 验证环境中,等时传输的调试通常从以下三个维度展开:① 帧列表遍历时序是否正确;② DMA 读取 TD 和数据缓冲区的延迟是否在 1 ms 帧周期内;③ 等时 TD 的状态回写是否及时且准确。任何一个环节的偏差都会导致等时数据流的中断或质量下降。