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 可查看当前拓扑树。
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。
1.4 枚举流程与端点0
USB 设备接入后,主机通过端点0(默认控制端点)完成枚举。枚举是驱动调试的第一道关卡,失败原因通常集中在以下步骤:
- 复位(Reset):主机向设备端口发送复位信号,设备地址重置为 0。
- 获取设备描述符(Get Device Descriptor):主机读取前 8 字节,获取
bMaxPacketSize0。 - 分配地址(Set Address):主机分配唯一地址,设备进入地址状态。
- 获取完整描述符:读取设备描述符、配置描述符、接口描述符、端点描述符。
- 选择配置(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字段。