Linux USB Host驱动架构与xhci协议详解 - 第1节

1.1 USB 总线历史与版本演进

通用串行总线(Universal Serial Bus,USB)自 1996 年正式发布以来,已成为电子设备最主流的有线连接标准。其设计初衷是统一外围设备接口、支持热插拔、提供总线供电,并简化 PC 与设备间的物理连接。下表梳理了 USB 各代标准的发布时间、速率与关键特性:

版本 发布时间 标称速率 编码方式 关键特性
USB 1.0 1996 1.5 Mbps (Low-Speed)
12 Mbps (Full-Speed)
NRZI + 位填充 热插拔、总线供电、Hub 扩展
USB 1.1 1998 同上 同上 修正电气规范,广泛商用
USB 2.0 2000 480 Mbps (Hi-Speed) NRZI + 位填充 微帧调度、事务分割、OTG 补充
USB 3.0 2008 5 Gbps (SuperSpeed) 8b/10b 双总线架构、全双工、增量 I/O
USB 3.1 2013 10 Gbps (SuperSpeed+) 128b/132b Type-C 接口、PD 协议
USB 3.2 2017 20 Gbps (双通道) 128b/132b 多通道复用、增强 Type-C
USB4 2019 40 Gbps 128b/132b 基于 Thunderbolt 3、隧道协议
关键认知:USB 3.x 并非 USB 2.0 的简单提速,而是引入了独立的物理层和协议层,形成“双总线”架构——USB 2.0 信号与 SuperSpeed 信号在物理上并行传输,由主机控制器统一管理。

1.1.1 版本演进背后的驱动力

  • USB 1.0 → 1.1:修复电气噪声与线缆长度限制,确立标准 A/B 接口形态。
  • USB 2.0:引入微帧(Microframe,125 µs)和主机调度器,支持高速外设(如存储、视频)。
  • USB 3.0:增加 5 对差分信号线(SSTX/SSRX),实现全双工传输;采用异步通知取代轮询,降低延迟。
  • USB 3.1/3.2:提升信号速率并引入双通道(Lane)捆绑,配合 Type-C 正反插与 PD 供电。
  • USB4:融合 Thunderbolt 3 协议栈,支持 DisplayPort、PCIe 隧道,面向高性能扩展坞与显示器。
讲师提示:在 Linux 内核中,USB 3.0 及以上版本由 xHCI(eXtensible Host Controller Interface)驱动统一管理;USB 2.0 及以下版本仍可由 EHCI/OHCI/UHCI 驱动处理,但现代 SoC 通常只集成 xHCI 控制器。

1.2 USB 物理拓扑结构:Host – Hub – Device

USB 采用星形-树形拓扑,由唯一的主机(Host)作为根节点,通过集线器(Hub)向下扩展,最多支持 127 个设备(含 Hub 自身)。物理拓扑严格分层,不允许环路。

USB 物理拓扑结构(Host – Hub – Device) USB Host (Root) Hub 1 (TT) Hub 2 (TT) Hub 3 (TT) Device A Device B Device C Device D Device E Sub-Hub Device F 拓扑规则:最多 7 层 Hub 深度;每个 Hub 最多连接 7 个下游端口;总设备数 ≤ 127(含 Hub)。

1.2.1 主机(Host)角色

USB 系统中唯一的主控方,负责:

  • 调度传输:管理所有事务(Transaction)的时间片,包括等时、批量、中断、控制四种传输类型。
  • 枚举设备:检测设备插入/拔出,分配地址,读取描述符,加载驱动。
  • 电源管理:控制总线供电、挂起/唤醒、选择性挂起。

在 Linux 中,Host 角色由 HCD(Host Controller Driver) 实现,xHCI 驱动是当前最通用的 HCD。

1.2.2 集线器(Hub)角色

Hub 是拓扑扩展的核心元件,具备以下功能:

  • 信号中继与恢复:对上行/下行信号进行电平整形、时钟恢复。
  • 端口状态管理:检测连接/断开、使能/禁能端口、复位设备。
  • 事务分割(TT,Transaction Translator):USB 2.0 Hub 内置 TT,将高速帧转换为全速/低速事务,兼容低速设备。
常见误区:USB 3.0 Hub 不包含 TT 功能——SuperSpeed 信号与 USB 2.0 信号在 Hub 内部走独立路径,低速设备必须通过 Hub 内的 USB 2.0 中继器通信。

1.2.3 设备(Device)角色

USB 设备分为两类:

类别 说明 示例
功能设备(Function) 提供具体功能,如存储、HID、音频 U 盘、鼠标、扬声器
复合设备(Compound) 内部包含 Hub + 多个功能 USB 键盘带 Hub、扩展坞

每个设备在枚举后获得唯一的 7 位地址(1–127),并通过端点(Endpoint)与主机通信。端点 0 为默认控制端点,用于控制传输。

1.3 USB 系统软件架构概览

在 Linux 内核中,USB 子系统采用分层设计,从硬件到用户空间依次为:

Linux USB 子系统分层架构 用户空间:应用程序 / libusb / sysfs / devfs USB Core (usbcore):设备枚举、驱动匹配、协议复用 设备驱动:usb-storage / usbhid / usbnet / cdc-acm ... HCD:xHCI / EHCI / OHCI / UHCI 硬件:USB Host Controller + PHY + 线缆

本课程将重点聚焦 HCD 层中的 xHCI 驱动,深入分析其数据结构、环形缓冲区(Ring)、事件处理、命令提交与 DMA 交互机制。