USB枚举实战 USB复位分析与地址分配调试 - 第1节

1. USB协议概述

USB(Universal Serial Bus)采用分层星形拓扑,由主机(Host)、集线器(Hub)和设备(Device)三级构成。主机位于拓扑根部,通过根集线器(Root Hub)向下扩展端口;集线器负责信号中继与电源管理,设备是功能端点。整个总线由主机独占调度,设备不能主动发起事务。

核心特征:USB 是主机主导的轮询总线,所有数据传输均由主机启动帧(Frame)或微帧(Microframe)触发,设备仅被动响应。
USB 分层星形拓扑结构 USB 主机 (Host) 根集线器 (Root Hub) 集线器 (Hub) 集线器 (Hub) 设备 (Device) 设备 (Device) 设备 (Device) 设备 (Device) 说明:主机通过根集线器管理所有端口,集线器可级联, 但拓扑深度不超过 7 层(含根集线器)。

主机与设备的角色分工

1.2 USB 版本演进:从 1.0 到 3.x

USB 标准经历了多个重大版本迭代,每次升级都在速率、电源管理和协议架构上带来突破。理解版本差异是分析枚举行为的基础。

版本对比速览

角色职责关键组件
主机 (Host)调度总线、管理枚举、分配地址、控制电源主机控制器 (HC)、根集线器、系统软件栈
集线器 (Hub)端口扩展、信号中继、连接/断开检测、电源转换端口状态机、中继器、事务翻译器 (TT)
设备 (Device)实现具体功能(存储、HID、通信等)端点 (Endpoint)、接口 (Interface)、配置 (Configuration)
枚举调试提示:USB 2.0 设备在复位后通过挂起信号 (Chirp J/K) 协商高速模式;USB 3.x 设备则通过轮询 (Polling) 状态机建立链路。不同版本的复位时序差异是枚举失败常见原因。

USB 2.0 与 USB 3.x 协议栈对比

USB 3.x 并非 USB 2.0 的简单提速,而是引入了双总线架构:保留 USB 2.0 差分对(D+/D-)用于兼容,新增 SuperSpeed 发送/接收差分对(SSTX+/SSTX-、SSRX+/SSRX-),实现全双工通信。

USB 2.0 与 USB 3.x 协议栈对比 USB 2.0 协议栈 应用层 (Function Driver) USB 设备层 (Enumeration, Endpoints) 总线接口层 (NRZI, SOF, Token/Data/Handshake) 物理层 (D+/D- 差分对, 半双工) USB 3.x 协议栈 应用层 (Function Driver) 设备层 (Enumeration, Streams) 链路层 (Link Training, Scrambling) 物理层 (SSTX/SSRX 差分对, 全双工)

1.3 枚举视角的关键版本差异

在 USB 枚举过程中,不同版本在复位行为、速度检测和地址分配阶段存在显著差异:

  • 复位时序:USB 2.0 复位至少持续 10 ms;USB 3.0 复位(LFPS 握手)约 100 µs,且需要链路训练。
  • 速度协商:USB 2.0 通过 D+/D- 线上电平组合(Chirp)确定速度;USB 3.x 通过边带信号 (Pericom) 和训练序列 (TS1/TS2) 建立链路。
  • 地址分配:USB 2.0 使用控制传输 (Setup Token) 发送 SET_ADDRESS 请求;USB 3.x 同样使用控制传输,但链路层需先完成 Link Training。
  • 电源管理:USB 2.0 支持挂起/唤醒;USB 3.x 引入 U0/U1/U2/U3 链路电源状态,枚举期间需协商退出低功耗状态。
常见陷阱:调试 USB 3.0 枚举时,若逻辑分析仪仅捕获 D+/D- 信号,将完全看不到 SuperSpeed 链路训练过程。必须同时捕获 SSTX/SSRX 差分对,或使用支持 USB 3.0 协议解码的示波器。

1.4 本章小结

版本发布年份信号速率编码方式拓扑变化
USB 1.0 / 1.11996 / 19981.5 Mbps (Low-Speed)
12 Mbps (Full-Speed)
NRZI + 位填充主机-集线器-设备
USB 2.02000480 Mbps (High-Speed)NRZI + 位填充引入事务翻译器 (TT)
USB 3.0 / 3.1 / 3.22008 / 2013 / 20175 Gbps (SuperSpeed)
10 Gbps (SuperSpeed+)
20 Gbps (Gen 2×2)
8b/10b (3.0)
128b/132b (3.1+)
新增独立差分对,全双工