USB3.0设备枚举过程
2026-04-30
本文链接为:http://www.usbzh.com/article/detail-1644.html ,欢迎转载,转载请附上本文链接。
一、USB3.0引脚与信号(9针,兼容USB2.0)
以标准Type‑A为例(Type‑B/Micro‑B只是TX/RX互换):
| 引脚 | 名称 | 功能 | 方向(主机侧视角) |
|---|---|---|---|
| 1 | VBUS | +5V电源(最高900mA) | 主机→设备 |
| 2 | D− | USB2.0差分负 | 双向 |
| 3 | D+ | USB2.0差分正 | 双向 |
| 4 | GND | 电源地 | 公共 |
| 5 | SSRX− | SuperSpeed接收负 | 设备→主机 |
| 6 | SSRX+ | SuperSpeed接收正 | 设备→主机 |
| 7 | GND_DRAIN | 屏蔽地/泄放地 | 公共 |
| 8 | SSTX− | SuperSpeed发送负 | 主机→设备 |
| 9 | SSTX+ | SuperSpeed发送正 | 主机→设备 |
- 两套总线并行:USB2.0(D+/D−)负责初始检测、地址分配、控制传输;SuperSpeed(SSTX/SSRX差分对)做5Gbps高速数据。
- 全双工:主机发SSTX,设备发SSRX,互不干扰。
- 交流耦合+端接:每对差分线90Ω阻抗,AC耦合电容(100nF),接收端50Ω终端电阻到地,保证5Gbps信号完整性。
二、设备插入与Hub检测(物理层 → Hub上报)
1. 插入瞬间:双路径检测
- USB2.0路径(D+/D−):
- 设备端D+上拉1.5kΩ到3.3V;主机/Hub端口D+/D−各下拉15kΩ到地。
- 插入后D+变高,Hub端口电路检测到电压跳变,判定有设备接入。
- SuperSpeed路径(SSTX/SSRX):
- 主机/Hub下行端口(DFP)在SSRX线上 施加小直流共模电压,探测设备UFP端SSRX线上是否有 50Ω终端电阻到地。
- 若有,说明是USB3.0设备;若无,仅USB2.0。
2. Hub上报端口状态变化(主机←Hub)
- Hub内部有端口状态寄存器,检测到设备后置位“端口连接(Port Connect)”与“速度(Speed)”位。
- Hub通过中断IN端点(Endpoint 1)向主机发送状态变更通知(每32ms轮询一次)。
- 主机收到中断后,发GET_PORT_STATUS查询Hub,确认是哪个端口、什么速度(USB2.0/3.0)。
3. 主机对Hub的操作(主机→Hub)
- 使能Hub端口:SET_PORT_FEATURE(PORT_ENABLE),给端口供电、打开收发器。
- 复位端口(关键):SET_PORT_FEATURE(PORT_RESET)
- USB2.0:拉低D+约10ms,设备进入默认状态(地址0)。
- USB3.0:同时复位USB2.0通路并启动SuperSpeed链路训练(LTSSM)。
三、USB2.0路径:先做“最小枚举”(兼容兜底)
无论是否支持SuperSpeed,主机必先走USB2.0通路完成基础识别:
- 设备复位后,地址0,默认状态,仅响应端点0控制传输。
- 主机发GET_DESCRIPTOR(Device,8字节) — 通过USB2.0端点0传输:
- 读取前8字节:bLength、bDescriptorType、bcdUSB、bDeviceClass、bDeviceSubClass、bDeviceProtocol、bMaxPacketSize0。
- 关键:bMaxPacketSize0(端点0最大包长,如64字节),若bcdUSB = 0x0300则表明设备支持USB3.0。
- 主机确认是USB3.0设备后,启动SuperSpeed链路训练;同时USB2.0通路保持备用。
四、SuperSpeed链路训练(LTSSM:Rx.Detect → Polling → U0)
USB3.0用LTSSM(Link Training and Status State Machine),12个状态,核心三步:
1. Rx.Detect(检测链路伙伴)
- 主机DFP在SSTX线上 检测接收端是否有50Ω端接电阻到地。
- 设备UFP同理探测主机。
- 双方确认对方存在 → 进入Polling。
2. Polling(轮询与训练)
Polling是LTSSM中的一个状态,内部包含多个操作阶段,用LFPS(低频周期信号,10–50MHz)和训练序列(TSEQ/TS1/TS2)握手:
阶段1:LFPS握手:
- 主机发LFPS脉冲串(burst=600–800ns,间隔10μs),通知设备“准备训练”。
阶段2:均衡与符号锁定(发送TSEQ/TS1/TS2):
- 主机发TSEQ(长0/1交替,用于CDR时钟恢复、均衡器参数调整)。
- 设备返回TS1,报告均衡结果、极性。
- 双方互发TS2,确认比特锁+符号锁(8b/10b同步),并交换链路管理包LMP,协商:链路宽度(x1)、速率(5Gbps)、电源管理能力。
阶段3:Polling.Idle:
- 双方停止训练序列,进入U0(正常工作态),链路就绪,可传数据包。
注:规范中Polling的子状态仅有Polling.LFPS、Polling.Configuration、Polling.Idle三个。上述“阶段2”对应Polling.Configuration内部的详细操作,此处按功能拆分便于理解。**
3. 链路训练成功标志
- LTSSM进入U0。
- 主机与设备可互发LMP与数据包。
- USB3.0链路建立完成,SuperSpeed物理层就绪。
五、主机与Hub:拓扑管理与资源分配
1. Hub自身枚举(先枚举Hub,再枚举下游设备)
- Hub插入主机后,主机先对Hub做完整枚举(读设备/配置/接口/端点描述符)。
- 主机给Hub分配唯一地址(如0x01),加载Hub驱动,识别其下行端口数。
2. 下游设备经Hub的枚举流程(树形拓扑)
主机(xHCI) ↔ Hub(地址N) ↔ 设备(地址M)
- 设备连Hub下行口 → Hub上报主机 → 主机复位该端口。
- 主机通过Hub的控制端点0,发SET_PORT_RESET给指定端口,触发设备复位与链路训练。
- 链路训练完成后,主机通过Hub转发,对设备进行后续枚举(控制传输仍经USB2.0通路)。
3. xHCI主机控制器的角色
- xHCI:USB3.0主机控制器,统一管理USB2.0/3.0设备,用Slot(插槽)管理设备,每个设备一个Slot。
- 流程:Enable Slot → Address Device → 分配地址 → 配置端点上下文。
六、完整枚举:描述符读取与地址分配 (控制传输全部走USB2.0通路)
链路进入U0后,主机仍然通过USB2.0的端点0完成所有控制传输(描述符读取、地址分配、配置)。SuperSpeed通路只是进入就绪状态,等待地址分配完成后用于高速数据传输_。
1. 地址0阶段(默认地址,仅端点0可用)— 全部通过USB2.0通路
- GET_DESCRIPTOR(Device,全部18字节):
- GET_DESCRIPTOR(BOS,设备能力描述符,USB3.0新增):
- BOS中包含一个或多个设备能力描述符,其中SuperSpeed USB设备能力描述符声明支持5Gbps、链路电源管理LPM、批量流(Bulk Streams)等。
- GET_DESCRIPTOR(Configuration,全部):
2. 分配新地址(退出地址0)— 仍在USB2.0通路上执行
- 主机发SET_ADDRESS(新地址,如0x02),设备确认后进入地址态(Addressed)。
- 此后USB2.0和SuperSpeed两条通路均使用该新地址(SuperSpeed链路在U0状态下同步切换)。
3. 配置设备(进入工作态)— 通常仍通过USB2.0通路
- 主机发SET_CONFIGURATION(配置值,如0x01),激活选定配置,设备进入配置态(Configured),所有端点就绪。
- 主机加载设备驱动(根据idVendor/idProduct),创建设备节点,完成枚举。
- 此后所有高速数据传输(批量、等时、中断)均走SuperSpeed通路,USB2.0通路仅用于保留的配置或兼容性控制。
七、整体时序与状态流
设备插入 → D+上拉 + SSRX端接 → Hub检测 → 上报主机 → 主机复位端口
→ USB2.0复位 + SuperSpeed LTSSM(Rx.Detect→Polling→U0)
→
【以下全部通过 USB2.0 通路传输】
USB2.0:地址0 → 读8字节设备描述符(发现bcdUSB=0x0300)
USB2.0:地址0 → 读完整18字节设备描述符
USB2.0:地址0 → 读BOS描述符(含SuperSpeed能力)
USB2.0:地址0 → 读Configuration描述符(含端点伴侣)
USB2.0:SET_ADDRESS(分配新地址,如0x02)
↓ (SuperSpeed链路同步切换至新地址)
USB2.0:SET_CONFIGURATION → 驱动加载 → 设备可用
↓
【后续所有高速数据走 SuperSpeed 通路】
八、关键差异(USB2.0 vs USB3.0)
| 项目 | USB2.0 | USB3.0 |
|---|---|---|
| 物理检测 | 仅D+/D−上拉检测 | 双路径:D+/D−上拉 + SSTX/SSRX 50Ω终端电阻检测 |
| 复位 | 仅电气复位(拉低D+) | 电气复位 + 链路训练(LTSSM) |
| 枚举与控制传输 | 全部通过D+/D− | 控制传输(描述符、SET_ADDRESS、SET_CONFIGURATION)仍走USB2.0 |
| 高速数据传输 | D+/D−(半双工,480Mbps) | SSTX/SSRX(全双工,5Gbps) |
| 关键描述符 | 设备/配置/接口/端点 | 新增BOS(内含SuperSpeed能力描述符)、SuperSpeed端点伴侣描述符 |
| 传输特性 | 半双工、轮询、最大480Mbps | 全双工、异步、突发传输、流、LPM、最大5Gbps |
总结
SuperSpeed 3.0 链路只做两件事:
- 物理层插入检测 + LTSSM 链路训练到 U0
- 枚举全部完成后,只跑高速业务数据(批量、等时、中断大数据)
- 全程不参与控制枚举、不跑描述符、不跑地址配置请求
- 枚举后控制请求默认走 USB 2.0,但 SuperSpeed 链路也具备这个能力,具体由设备驱动决定是否启用。
USB 3.0 设备
│
┌─────────────┴─────────────┐
│ │
USB 2.0 通路 SuperSpeed 通路
(D+/D-) (SSTX/SSRX)
│ │
▼ ▼
┌───────────────┐ ┌───────────────┐
│ 控制平面 │ │ 数据平面 │
├───────────────┤ ├───────────────┤
│ • 插入检测 │ │ • Rx.Detect │
│ (D+上拉) │ │ • LTSSM训练 │
│ • 复位 │ │ (U0) │
│ • 枚举 │ │ • 批量传输 │
│ • 描述符读取 │ │ • 等时传输 │
│ • 地址分配 │ │ • 中断大数据 │
│ • 配置 │ │ │
│ • 控制传输 │ │ │
│ (端点0) │ │ │
└───────────────┘ └───────────────┘
│ │
│ 地址分配完成后,两条通路共享同一设备地址
│ │
└─────────────┬─────────────┘
▼
主机软件栈(xHCI)
本文链接为:http://www.usbzh.com/article/detail-1644.html ,欢迎转载,转载请附上本文链接。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936 USB技术交流3:1031974172
USB3.2超高速协议规范





