1. USB 基础概念回顾:拓扑结构、主机与设备角色、2.0 与 3.x 差异

USB(Universal Serial Bus)自 1996 年问世以来,已成为嵌入式系统中最通用的外设总线。在深入调试枚举失败与 URB 超时之前,必须牢固掌握 USB 的物理与逻辑基础。本节从拓扑结构、角色分工和协议代际差异三个维度进行回顾。

1.1 USB 拓扑结构:分层星形

USB 采用分层星形(Tiered Star)拓扑,由主机控制器(Host Controller)、根集线器(Root Hub)、集线器(Hub)和功能设备(Function Device)组成。整个拓扑最多支持 7 层(Tier),包括根集线器层。

关键约束:USB 2.0 最大线缆长度 5 m(全速/高速),USB 3.x 建议 3 m(超高速)。超过层数或线长限制将直接导致枚举失败或信号质量劣化。
USB 分层星形拓扑结构 USB 分层星形拓扑(Tiered Star) 主机控制器 + 根集线器 Tier 1 集线器 1 Tier 2 集线器 2 Tier 2 集线器 3 Tier 2 设备 A 设备 B 设备 C 设备 D 设备 E 设备 F 设备 G 设备 H 设备 I 说明: • 最多 7 层(Tier),根集线器算 Tier 1。• 每个集线器下行端口可接功能设备或下级集线器。• 超过 5 个集线器级联可能导致枚举时序超时。

1.2 主机与设备角色

USB 是严格的主从(Host-Device)总线。主机(Host)负责调度所有事务,设备(Device)只能被动响应。嵌入式 Linux 系统中,主机角色通常由 EHCI(USB 2.0)或 XHCI(USB 3.x)控制器驱动承担。

角色 职责 典型硬件 Linux 驱动
主机(Host) 产生帧起始包(SOF)、调度传输、管理枚举、处理错误 EHCI / XHCI 控制器 ehci-hcd / xhci-hcd
设备(Device) 响应主机请求、报告描述符、传输数据 USB 外设芯片(如 FTDI、CDC ACM) 设备类驱动(如 usb-storage)
集线器(Hub) 端口扩展、速度协商、电源管理、信号中继 USB Hub 控制器 hub 内核线程
OTG(双角色) 可在 Host 与 Device 间切换 支持 OTG 的 SoC(如 i.MX、STM32MP) dwc2 / dwc3
调试提示:枚举失败时,首先确认主机控制器是否识别到设备插入(检查 dmesg 中的 usb 1-1: new high-speed USB device number ... 消息)。若主机未打印任何信息,问题通常出在硬件连接或根集线器驱动层。

1.3 USB 2.0 与 USB 3.x 差异概述

USB 3.x(SuperSpeed)在物理层、协议层和电源管理上与 USB 2.0 有显著差异。调试时必须区分设备工作在哪种模式,因为 URB 超时的根因可能完全不同。

USB 2.0 与 USB 3.x 协议栈对比 USB 2.0 与 USB 3.x 协议栈对比 USB 2.0 (High-Speed) 物理层:差分信号 D+/D- 协议层:包事务(令牌/数据/握手) 传输层:批量/中断/同步/控制 软件层:URB / usbcore / 类驱动 USB 3.x (SuperSpeed) 物理层:差分对 SSTX/SSRX + D+/D- (双总线架构,全双工) 协议层:包 + 链路管理(LTSSM) (状态机:U0/U1/U2/U3) 传输层:流控 + 突发传输 软件层:URB / xhci-hcd / 类驱动 半双工 全双工 轮询 异步通知

1.3.1 关键差异速查表

特性 USB 2.0 (High-Speed) USB 3.x (SuperSpeed) 调试影响
信号线 D+ / D-(差分,半双工) SSTX+/- / SSRX+/-(独立收发,全双工)+ 保留 D+/D- 3.x 需检查两对差分线;D+/D- 用于兼容模式
编码方式 NRZI + 位填充 128b/132b(8b/10b 在 Gen1) 信号完整性分析工具不同
传输方向 半双工(主机轮询) 全双工(异步通知) URB 超时在 3.x 更可能由链路训练失败引起
电源管理 挂起/恢复(全局) LTSSM 状态机(U0/U1/U2/U3) 3.x 设备进入低功耗后需链路训练恢复
最大速率 480 Mbps 5 Gbps (Gen1) / 10 Gbps (Gen2) 高速信号对 PCB 布线更敏感
包开销 较大(SOF 每 125 µs) 较小(支持突发传输) 批量传输吞吐量差异明显

1.3.2 枚举流程差异

USB 2.0 与 3.x 的枚举流程在复位速度协商阶段分叉。USB 3.x 设备在复位后通过 LTSSM(链路训练与状态机)进入 U0 状态,然后主机读取设备描述符。如果 LTSSM 训练失败,设备将回退到 USB 2.0 模式或完全不可见。

常见陷阱:在调试 USB 3.x 枚举失败时,不要只盯着 D+/D- 信号。检查 SSTX/SSRX 差分对的交流耦合电容(通常 0.1 µF ~ 0.33 µF)是否缺失或损坏,这是导致 LTSSM 训练失败的 Top 1 硬件原因。

1.4 小结

  • 拓扑:分层星形,最多 7 层,集线器级联不超过 5 个。
  • 角色:主机调度一切,设备被动响应;OTG 可切换角色。
  • 代际差异:USB 3.x 引入全双工、LTSSM 和独立收发通道,调试方法需相应调整。
  • 调试起点:枚举失败时,先确认主机控制器是否检测到设备(dmesg),再根据速度模式(2.0 vs 3.x)选择信号测量点。