1. USB体系结构概述:USB主机、设备、集线器拓扑,USB 2.0与3.x差异

1.1 USB拓扑结构:分层星形

USB采用分层星形(Tiered Star)拓扑,由USB主机(Host)、USB集线器(Hub)和USB设备(Device)三类节点构成。主机位于拓扑根节点,集线器负责扩展端口,设备作为功能端点挂接在集线器下游。整个拓扑最多支持7层(Tier 7),包括根集线器在内。

关键约束:USB 2.0 最大层级为 7 层,USB 3.x 放宽至 7 层(含根集线器),但实际布线受信号完整性限制,建议不超过 5 层。
调试提示:当 USB 设备无法枚举时,优先检查拓扑层级是否超限。使用 lsusb -t 可查看当前拓扑树。
USB 分层星形拓扑结构 USB 主机控制器 根集线器 (Tier 1) 集线器 A (Tier 2) 设备 A (Tier 2) 集线器 B (Tier 3) 设备 B (Tier 3) 设备 C (Tier 4) 拓扑约束 最大 7 层(含根集线器) 每层最多 5 个端口(USB 2.0) 设备不能直接级联

1.2 USB主机与设备角色

角色 职责 典型实现
USB主机 管理总线、调度传输、枚举设备、提供电源 EHCI(USB 2.0)、xHCI(USB 3.x)
USB集线器 端口扩展、信号中继、电源管理、设备接入检测 TT(事务转换器)用于 USB 2.0 全/低速兼容
USB设备 实现具体功能(存储、HID、音频、网络等) 复合设备、组合设备、单功能设备
常见误区:USB 集线器本身也是一个 USB 设备,拥有自己的设备地址和端点 0。调试时不要将集线器误认为被动中继器。

1.3 USB 2.0 与 USB 3.x 核心差异

USB 3.x(包括 USB 3.2 Gen1/Gen2、USB4)在物理层、协议层和电源管理上进行了重大重构。下表列出驱动开发中最关键的差异:

特性 USB 2.0 USB 3.x
信号线 D+/D- 差分对(半双工) D+/D-(兼容)+ SSTX/SSRX 差分对(全双工)
传输速率 低速 1.5 Mbps、全速 12 Mbps、高速 480 Mbps SuperSpeed 5 Gbps、SuperSpeed+ 10 Gbps、USB4 20/40 Gbps
传输模式 轮询式(主机驱动,设备被动) 异步 + 轮询混合,支持多流(Streams)
端点类型 控制、批量、中断、同步 同上 + 批量流端点(Bulk Streams)
电源管理 挂起/恢复(全局) U0/U1/U2/U3 链路电源状态(每链路独立)
主机控制器 UHCI/OHCI(全/低速)、EHCI(高速) xHCI(统一架构,兼容所有速度)
数据包开销 SOF 每 1ms(全速)/125μs(高速) 无固定 SOF,使用 LFPS 握手
驱动开发要点:USB 3.x 的 xHCI 驱动需要处理 TRB(Transfer Request Block) 环,而非 USB 2.0 的 qTD 链表。调试时务必确认控制器类型:lspci -v | grep USB 查看 EHCI/xHCI。
USB 2.0 与 USB 3.x 协议栈对比 USB 2.0 协议栈 主机软件 (USBD/HCD) EHCI / UHCI / OHCI USB 2.0 总线协议 D+/D- 差分信号 半双工 / 轮询 USB 3.x 协议栈 主机软件 (xHCI) xHCI 控制器 USB 3.0 总线协议 SSTX / SSRX 差分对 全双工 / 异步

1.4 枚举流程与端点0

USB 设备接入后,主机通过端点0(默认控制端点)完成枚举。枚举是驱动调试的第一道关卡,失败原因通常集中在以下步骤:

  1. 复位(Reset):主机向设备端口发送复位信号,设备地址重置为 0。
  2. 获取设备描述符(Get Device Descriptor):主机读取前 8 字节,获取 bMaxPacketSize0。
  3. 分配地址(Set Address):主机分配唯一地址,设备进入地址状态。
  4. 获取完整描述符:读取设备描述符、配置描述符、接口描述符、端点描述符。
  5. 选择配置(Set Configuration):主机选择有效配置,设备进入配置状态,功能可用。
调试命令:使用 usbmon 或 lsusb -v 观察枚举阶段 URB 交互。若 Get Device Descriptor 超时,检查 D+/D- 上拉电阻或线缆完整性。

1.5 集线器与事务转换器(TT)

USB 2.0 集线器内部包含事务转换器(Transaction Translator, TT),用于将高速(480 Mbps)下行流量转换为全速(12 Mbps)或低速(1.5 Mbps)上行流量。TT 的位置影响驱动配置:

TT 位置 描述 驱动影响
每端口 TT 每个下游端口独立 TT 全/低速设备可同时传输,无干扰
每集线器 TT 整个集线器共享一个 TT 同一时刻仅一个全/低速设备可传输
调试陷阱:当多个全速 HID 设备挂接在共享 TT 集线器上时,可能出现帧超时(babbling)或丢包。此时应检查 /sys/kernel/debug/usb/devices 中的 TT 信息。

1.6 本章小结

  • USB 拓扑为分层星形,最大 7 层,主机为唯一主控。
  • USB 2.0 与 3.x 在物理层、传输模式、电源管理上差异显著,驱动开发需区分 EHCI/xHCI。
  • 端点 0 是枚举的唯一入口,描述符解析错误是常见调试起点。
  • 集线器 TT 配置影响多设备并发性能,调试时需关注 bDeviceProtocol 字段。