USB3.2超高速协议规范
+ -

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. 插入瞬间:双路径检测

  1. USB2.0路径(D+/D−)
    • 设备端D+上拉1.5kΩ到3.3V;主机/Hub端口D+/D−各下拉15kΩ到地。
    • 插入后D+变高,Hub端口电路检测到电压跳变,判定有设备接入。
  2. 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)

  1. 使能Hub端口:SET_PORT_FEATURE(PORT_ENABLE),给端口供电、打开收发器
  2. 复位端口(关键):SET_PORT_FEATURE(PORT_RESET)
    • USB2.0:拉低D+约10ms,设备进入默认状态(地址0)
    • USB3.0:同时复位USB2.0通路并启动SuperSpeed链路训练(LTSSM)

三、USB2.0路径:先做“最小枚举”(兼容兜底)

无论是否支持SuperSpeed,主机必先走USB2.0通路完成基础识别:

  1. 设备复位后,地址0,默认状态,仅响应端点0控制传输
  2. 主机发GET_DESCRIPTOR(Device,8字节)通过USB2.0端点0传输
    • 读取前8字节:bLength、bDescriptorType、bcdUSB、bDeviceClass、bDeviceSubClass、bDeviceProtocol、bMaxPacketSize0
    • 关键:bMaxPacketSize0(端点0最大包长,如64字节),若bcdUSB = 0x0300则表明设备支持USB3.0
  3. 主机确认是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,再枚举下游设备)

  1. Hub插入主机后,主机先对Hub做完整枚举(读设备/配置/接口/端点描述符)。
  2. 主机给Hub分配唯一地址(如0x01),加载Hub驱动,识别其下行端口数

2. 下游设备经Hub的枚举流程(树形拓扑)

主机(xHCI) ↔ Hub(地址N) ↔ 设备(地址M)
  1. 设备连Hub下行口 → Hub上报主机 → 主机复位该端口。
  2. 主机通过Hub的控制端点0,发SET_PORT_RESET给指定端口,触发设备复位与链路训练。
  3. 链路训练完成后,主机通过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通路

  1. GET_DESCRIPTOR(Device,全部18字节)
    • 读取:bLength、bDescriptorType、bcdUSB、bDeviceClass、bDeviceSubClass、bDeviceProtocol、bMaxPacketSize0、idVendor、idProduct、bcdDevice、iManufacturer、iProduct、iSerialNumber、bNumConfigurations
    • 关键:idVendor/idProduct(厂商/设备ID,驱动匹配用)。
  2. GET_DESCRIPTOR(BOS,设备能力描述符,USB3.0新增)
    • BOS中包含一个或多个设备能力描述符,其中SuperSpeed USB设备能力描述符声明支持5Gbps、链路电源管理LPM、批量流(Bulk Streams)等。
  3. GET_DESCRIPTOR(Configuration,全部)
    • 读取配置描述符(含接口、端点、SuperSpeed端点伴侣描述符)。
    • SuperSpeed端点伴侣描述符:定义bMaxBurst(最大突发数)、wBytesPerInterval,优化高速批量/等时传输。

2. 分配新地址(退出地址0)— 仍在USB2.0通路上执行

  • 主机发SET_ADDRESS(新地址,如0x02),设备确认后进入地址态(Addressed)
  • 此后USB2.0和SuperSpeed两条通路均使用该新地址(SuperSpeed链路在U0状态下同步切换)。

3. 配置设备(进入工作态)— 通常仍通过USB2.0通路

  1. 主机发SET_CONFIGURATION(配置值,如0x01),激活选定配置,设备进入配置态(Configured),所有端点就绪。
  2. 主机加载设备驱动(根据idVendor/idProduct),创建设备节点,完成枚举。
  3. 此后所有高速数据传输(批量、等时、中断)均走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_ADDRESSSET_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

0 篇笔记 写笔记

Windows下枚举系统中所有HID设备
Windows下对任何设备,文件的打开都是通过CreateFile来实现的,不过要打开一个设备得首先知道设备或文件名。由上节可知道,对于HID设备,都会注册一个接口类型为{2ACCFE60-C130-11D2-B082-00A0C91EFB8B}的GUID。我们可以通过Setup系列函数枚举出系统中......
USB 枚举/断开过程
USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串描述符和配置设备这么几个过程。各过程的状态如下表:USB设备的枚举过程USB主机检测到USB设备插入后,就要对设备进行枚举了。枚举的作用就是从设备是那个读取一些信息,知道设备是什么样的设备,然后......
USB设备的枚举过程分析
USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))详情可见:http://www.usbzh.com/art......
Windows下USB设备的枚举过程分析
1.用户把USB设备插入USB端口或给系统启动时设备上电这里的USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,连接着的设备处于上电状态。2.Hub监测它各个端口数据线上(D+/D-)的电压在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rp......
USB2.0设备枚举-主机设置设备地址事务
USB主机在首次获取设备描述符后,知道了设备的默认端点大小。后续一个重要的操作是对设备分配地址。对USB设备分配地址是通过标准请求SetAddress来完成后。其具体的过程如下图所示:SetAddress包括2个事务。第一个事务是对主机设置地址,第二个事务是主机对设备返加一个0字节的数据包,用于确......
USB2.0设备枚举-获取设备描述符事务
USB设备与主机进行数据传输或进行设备配置时,有一些常见的术语如事务,令牌,包等。USB设备在枚举过程中有2次获取设备描述符的过程,这里分别标识为首次获取设备描述符和分配地址后的获取描述符。两次获取描述符的过程基本类似,惟一的区别是首次首次获取描述符由于设备尚未分配地址,故使用地址0与主机进行通......
USB3.2超高速的设备总线枚举
USB3.2超高速定义了7种设备状态,比以往多了一个错误状态。USB的设备状态图代表着从USB设备的状态转换过程。要进行状态转换,当然必须是先将USB设备插入到USB接口中,这个USB接口可以是USB集线接口,也可以是根集线器的接口。当USB设备插入USB接口后,USB设备进入Attached状态。......
USB HID键盘设备树及设备枚举过程分析
今天在本站USB中文网微信技术交流群有一个同学在问关于HID设备的报表描述符的东东。但是在问的过程中发现一个很严重的问题,那就是它的它设备是一个复合设备,导致设备树比较复杂,关于报表描述符与接口描述符等之间的相关对应关系不是很清楚。为此,本人手中刚好有一个本人认为USB HID设备中相对比较复杂的设......
USB设备的调试笔记-奇怪枚举失败问题
自己搞了一个USB 触摸屏的驱动,通过对系统的USB触摸屏设备进行更改,这样可以在自己的驱动中过滤来自触摸屏的数据。在不加自定义驱动的情况下,设备管理器树关系如下:USB输入设备USB触摸屏设备而加上自己的设备驱动后,设备管理器树关系如下:自己的驱动程序USB输入设备USB触摸屏设备......
Windows10下开发虚拟USB鼠标之枚举子设备失败(STATUS_DEVICE_DATA_ERROR)
之前发过一篇文章:Win10使用虚拟USB鼠标实现自动挂机测试功能(文章地址:http://www.usbzh.com/article/detail-476.html ) 使用的是虚拟驱动实现的一个虚拟USB鼠标,实现了产品的自动测试功能。生成的设备在设备管理器中如下:但在开发过程中,并不是一帆......
U盘枚举失败-该设备无法启动(GET_MAX_LUN请求)
群里有人用STM32搞了一个U盘,但是U盘在插入电脑后在设备管理器是枚举失败。我让他看一下设备状态:又是熟悉的错误码10,表示设备启动失败。设备的启动失败,一般在设备获取描述符获取之后,初始会失败,我之前在弄USB虚拟鼠标的时候也遇到此类情况。不过由于这个设备是U盘,本人还没有研究USB存储协议,只......
使用SetupApi函数通过GUID枚举系统中所有关联设备
Windows的设备在驱动中大部分都会IoSetRegisterInterface,这其中一个重要的参数是GUID,这样系统会根据这个GUID给设备创建一个symbolicname,这个名字在应用层可以通过CreateFile打开。这里分享一个在应用层通过SetuApi枚举该类型GUID下的所有设备......
USB集线器HUB的枚举过程及集线器状态
USB集线器和其他USB设备一样,都需要在上电时进行配置。在USB协议中,使用默认的端0点。进行上电初期的通信。USB集线器除了配置其自身外,还需要对下行端口连接的其他USB设备进行识别。USB集线器HUB枚举过程USB集线器的上电配置过程如下:USB集线器连接到USB主机的根集线器上。USB......
USBCCGP 复合USB设备的枚举
当新的 USB 设备连接到主机计算机时,USB 总线驱动程序创建设备的物理设备对象 (PDO),并生成报告新 PDO 的即插即用事件。 操作系统然后,查询的硬件 Id 与 PDO 相关联的总线驱动程序。对于所有 USB 设备、 USB 总线驱动程序报告设备 ID具有以下格式:USBVID_xx......
USBCCGP 关联接口功能设备枚举
从上节可知,所有的功能设备都存储在FDO_DEVICE_EXTENSION中的FunctionDescriptor中的,而FunctionDescriptorCount成员记录着子功能数量。typedef struct _USBC_FUNCTION_DESCRIPTOR{ // The 0......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!