USB2.0 和 USB3.0 枚举对比
USB2.0 和 USB3.0 的枚举流程整体类似,但在速度协商、总线结构、设备描述符、端点配置、供电能力等方面存在本质区别。下面我们分阶段详细对比 USB2.0 和 USB3.0 枚举的异同点。
🌐 总览对比表
项目 | USB2.0 | USB3.0 |
---|---|---|
接口类型 | D+/D- 差分线 | D+/D-(USB 2.0) + SSTX/SSRX(USB 3.0 超速通道) |
最大速率 | High-Speed:480 Mbps | SuperSpeed:5 Gbps |
枚举开始时速率 | 全部以 低速/全速/高速 开始 | 以 USB2.0 协议开始,然后进行 USB3.0 协议握手 |
设备识别 | 通过上拉 D+(全速/高速) | 通过 USB 2.0 检测 D+/D-,然后 SuperSpeed 通过 RxTerm |
描述符结构 | 标准 Device/Configuration/Interface/Endpoint | 增加 BOS、Device Capability、SuperSpeed Endpoint |
供电能力 | 默认最大 500mA | 默认最大 900mA(初始阶段仍为 USB2.0 的 100mA) |
枚举后传输速率 | USB2.0 支持 low/full/high-speed | 若支持,则升级到 SuperSpeed |
多端点支持 | 最多 16 个 IN/OUT 端点 | 最多 32 个端点,支持 Streams |
🧩 枚举流程对比详解
1. 物理连接与上电检测
阶段 | USB2.0 | USB3.0 |
---|---|---|
电缆连接 | 主机检测 D+/D- 上拉,判断为 USB 设备 | 主机检测 D+/D-(2.0) 和 RxTerm(SuperSpeed Rx 检测终端电阻) |
上电 | 默认提供 100mA 电流 | 同上,但可后续协商至 900mA |
2. Reset & Speed Negotiation
-
USB2.0:
- 主机对 D+/D- 拉低 10ms,产生 Reset 信号
- 设备响应 Chirp K-J-K-J… 协议,升级为 High-Speed
-
USB3.0:
- 同样使用 USB2.0 Reset
- 然后进行 Link Training and Status State Machine (LTSSM) 操作,建立 SuperSpeed 连接(8b10b 编码)
3. 基础描述符读取流程(控制传输)
两者都通过 EP0 端点(控制端点)传输:
- 获取
Device Descriptor
- 设置设备地址(SET_ADDRESS)
- 获取
Configuration Descriptor
- 设置配置(SET_CONFIGURATION)
区别点 | USB2.0 | USB3.0 |
---|---|---|
描述符版本字段 bcdUSB | 0x0200 | 0x0300 |
增加 BOS 描述符 | ❌ | ✅,包含设备功能,如 USB2.0扩展、SuperSpeed、容器ID等 |
SuperSpeed 端点描述符 | ❌ | ✅,包含 burst size, streams 等字段 |
4. BOS(Binary Object Store)描述符(USB3.0 新增)
- **作用:**让主机知道设备支持哪些 USB3.0 新功能(比如:LPM、SuperSpeed、USB2.0扩展)
- **结构:**包含一个 BOS Header + 一个或多个 Device Capability 描述符
5. 配置与功能确认
USB3.0 设备可能通过 BOS 描述符告知主机其 SuperSpeed 能力,主机会根据支持情况:
- 保持在 USB2.0 模式(兼容)
- 或切换到 USB3.0 模式
📌 示例流程对比(简化版)
USB2.0 枚举流程:
- 设备插入,上拉 D+,主机检测
- 主机发出 Reset 信号
- 若设备支持 High-Speed,则 Chirp 信号协商
- 主机发送 GET_DESCRIPTOR(Device)
- 设置地址
- 读取更多描述符(Configuration)
- 设置配置
- 完成,设备进入工作状态
USB3.0 枚举流程:
- 设备插入,上拉 D+,主机检测为 USB2.0 设备
- 同时通过 RxTerm 检测 SSTX 接线,确认支持 USB3.0
- 主机发出 Reset 信号
- USB3.0 进行 Link Training 建立 SuperSpeed 连接(LTSSM)
- 主机读取 Device Descriptor(包含 bcdUSB = 0x0300)
- 读取 BOS 描述符
- 设置地址
- 读取 Configuration 和 SuperSpeed Endpoint 描述符
- 设置配置
- 升级到 SuperSpeed 模式,完成枚举
🎯 重点区别总结
项目 | USB2.0 | USB3.0 |
---|---|---|
初始化过程 | 全程 USB2.0 协议 | 初始 USB2.0,后升级为 USB3.0 |
支持描述符 | 标准 + Class 描述符 | 增加 BOS、Device Capability、SuperSpeed Endpoint |
通信端口 | EP0 | EP0 + Streams |
功耗管理 | 基本供电管理 | 增加 LPM(Link Power Management)能力 |
传输方式 | 控制、中断、批量、等时 | 同上,但支持 Streams(批量的改进) |
如你在设计 USB3.0 设备(如你提到的深度相机 + DTOF 激光雷达系统),需特别关注:
- BOS 描述符的正确编写
- SuperSpeed Endpoint 属性设置(Burst、Streams)
- LTSSM 状态机初始化
- 多接口/多配置支持
需要我给你画个图来展示 USB3.0 枚举流程图吗?还是要示例代码(如 FunctionFS + USB3.0 描述符)?