USB Host驱动开发与设备枚举实战工程 - 第1节

1. USB协议基础

USB(Universal Serial Bus)采用星形-菊花链混合拓扑,由主机(Host)作为唯一根节点,通过集线器(Hub)向下扩展端口,最多支持 127 个设备(含 Hub 本身)。

核心原则:USB 总线是主机主导的轮询总线,所有事务必须由 Host 发起,设备不能主动发送数据。

拓扑结构三要素

  • 主机(Host):唯一总线控制器,负责调度、错误恢复、电源管理。典型实现为 PC 的 xHCI 控制器或嵌入式 SoC 的 DWC3 控制器。
  • 集线器(Hub):端口扩展器,负责转发事务、检测设备连接/断开、电源转换。根集线器(Root Hub)集成在 Host 内部。
  • 设备(Device):功能端点,如 U 盘、键盘、摄像头。每个设备包含若干端点(Endpoint),端点 0 用于控制传输。
USB 总线拓扑结构 USB 主机 (Host) 根集线器 (Root Hub) 外部 Hub 1 外部 Hub 2 设备 A (U盘) 设备 B (键盘) 设备 C (鼠标) 设备 D (摄像头) 最多 7 层 Hub 深度,127 个设备地址(含 Hub),地址 0 保留给新接入设备
嵌入式开发提示:在嵌入式 Linux 中,Host 控制器通常对应 /sys/bus/usb/devices/ 下的拓扑树。使用 lsusb -t 可查看实际总线拓扑。

1.2 主机与设备角色

主机(Host)职责

职责 说明
事务调度 按帧/微帧时间片轮询各端点,发起 IN/OUT/SETUP 事务
枚举管理 检测设备插入/拔出,分配地址,读取描述符,加载驱动
电源管理 控制端口供电、挂起/唤醒、选择性挂起
错误恢复 检测 CRC 错误、超时、STALL,执行重试或复位
带宽分配 为等时/中断传输预留带宽,确保实时性

设备(Device)职责

  • 被动响应:不主动发起事务,仅回复 Host 的请求。
  • 端点暴露:通过端点 0 提供控制接口,其他端点提供数据通道。
  • 描述符提供:向 Host 报告设备描述符、配置描述符、接口描述符、端点描述符。
  • 电源响应:支持挂起/唤醒信号检测,响应远程唤醒。
常见误区:USB 设备不能像以太网设备那样主动发送数据包。所有通信必须由 Host 轮询触发,这是 USB 协议设计的根本约束。

1.3 USB 版本演进与速率对比

版本演进时间线

  • USB 1.0 (1996):低速 1.5 Mbps + 全速 12 Mbps,首次统一外设接口。
  • USB 1.1 (1998):修复 1.0 的时序问题,成为首个广泛部署版本。
  • USB 2.0 (2000):高速 480 Mbps,引入微帧(125 µs)、事务转换器(TT)。
  • USB 3.0 (2008):超高速 5 Gbps,增加双单工差分对,物理层改为 8b/10b 编码。
  • USB 3.1 (2013):超高速+ 10 Gbps,编码升级为 128b/132b。
  • USB 3.2 (2017):双通道 20 Gbps,使用 Type-C 连接器。
  • USB4 (2019):40 Gbps,基于 Thunderbolt 3 协议隧道,支持 PCIe/DisplayPort 复用。

速率对比表

版本 市场名称 理论速率 编码方式 信号线
USB 1.0 低速 (LS) 1.5 Mbps NRZI + 位填充 D+/D-
USB 1.1 全速 (FS) 12 Mbps NRZI + 位填充 D+/D-
USB 2.0 高速 (HS) 480 Mbps NRZI + 位填充 D+/D-
USB 3.0 超高速 (SS) 5 Gbps 8b/10b SSTX+/-, SSRX+/-
USB 3.1 超高速+ (SS+) 10 Gbps 128b/132b SSTX+/-, SSRX+/-
USB 3.2 USB 3.2 2x2 20 Gbps 128b/132b 双通道 Type-C
USB4 USB4 Gen3x2 40 Gbps 128b/132b 双通道 Type-C
关键理解:USB 2.0 与 USB 3.x 在物理层完全独立。USB 3.x 增加了额外的差分对,与 USB 2.0 的 D+/D- 并行工作。这意味着 USB 3.0 设备插入 USB 2.0 端口时,会降级为 USB 2.0 高速模式。
USB 版本演进与速率对比 USB 版本演进与速率对比 USB 1.0 1.5 / 12 Mbps USB 2.0 480 Mbps USB 3.0 5 Gbps USB 3.1 10 Gbps USB4 40 Gbps USB 3.x 增加独立差分对,与 USB 2.0 物理层并行;USB4 基于 Thunderbolt 3 隧道协议 向下兼容:USB4 设备插入 USB 2.0 端口时降级为 HS 模式 速率增长趋势 1.5 Mbps 480 Mbps 5 Gbps 10 Gbps 40 Gbps

1.4 速率与物理层关键差异

USB 2.0 与 USB 3.x 物理层对比

特性 USB 2.0 (HS) USB 3.0/3.1 (SS/SS+)
信号线 D+, D- (半双工) SSTX+, SSTX-, SSRX+, SSRX- (全双工)
传输方向 半双工,同一时间只能收或发 全双工,可同时收发
编码 NRZI + 位填充 8b/10b (3.0) / 128b/132b (3.1+)
帧结构 帧 1 ms / 微帧 125 µs 无固定帧,异步传输
电源 VBUS 5V,最大 500 mA VBUS 5V,最大 900 mA (3.0) / 1.5 A (3.1+)
连接器 Type-A, Type-B, Mini, Micro Type-A, Type-B, Type-C (3.1+)
驱动开发关注点:USB 2.0 使用 ehci-hcd 或 ohci-hcd 驱动,USB 3.x 使用 xhci-hcd 驱动。xHCI 同时管理 USB 2.0 和 USB 3.x 端口,是当前主流方案。

速率选择对驱动的影响

  • 低速/全速设备:事务传输延迟大,适合 HID 类设备(键盘、鼠标)。驱动需处理较长的帧间隔。
  • 高速设备:微帧调度,适合批量传输(U 盘、MTP)。驱动需处理高吞吐量 DMA。
  • 超高速设备:全双工流控,适合视频、存储类设备。驱动需处理多请求队列(TRB 环)。
性能陷阱:USB 3.0 设备插入 USB 2.0 端口时,不仅速率降为 480 Mbps,而且由于半双工限制,实际吞吐量可能只有 USB 3.0 的 1/10 以下。设计产品时务必确认端口版本匹配。

1.5 本章小结

  • USB 采用星形-菊花链混合拓扑,主机是唯一总线主控。
  • 主机负责调度、枚举、电源、错误恢复;设备被动响应。
  • USB 版本从 1.0 的 1.5 Mbps 演进到 USB4 的 40 Gbps,物理层和编码方式发生根本变化。
  • USB 2.0 与 USB 3.x 物理层独立并行,xHCI 驱动统一管理。
  • 理解拓扑和版本差异是USB 驱动开发和设备枚举调试的基础。