1.1 USB 协议概述

USB(Universal Serial Bus,通用串行总线)自 1996 年正式发布 1.0 规范以来,已成为嵌入式系统中最普及的外设连接标准。对于从事 USB 枚举移植与适配的开发者而言,理解 USB 的发展脉络、版本差异以及物理拓扑结构,是分析设备描述符与枚举失败问题的前提。

1.1.1 USB 发展历史与版本演进

USB 标准的演进始终围绕三个核心目标:更高的传输速率、更强的供电能力、更优的协议兼容性。下表梳理了主要版本的关键参数:

版本 发布时间 信号速率 编码方式 供电能力 关键特性
USB 1.0 1996 1.5 Mbps (Low Speed)
12 Mbps (Full Speed)
NRZI + 位填充 5V / 500 mA 热插拔、即插即用、Hub 扩展
USB 1.1 1998 同上 同上 同上 修正 1.0 规范歧义,成为首个广泛部署版本
USB 2.0 2000 480 Mbps (High Speed) NRZI + 位填充 5V / 500 mA 引入微帧、事务分割、高速握手
USB 3.2 Gen 1 2013 5 Gbps (SuperSpeed) 8b/10b 5V / 900 mA 双总线架构(USB 2.0 + SuperSpeed)
USB 3.2 Gen 2 2017 10 Gbps (SuperSpeed+) 128b/132b 5V / 1.5 A Type-C 接口、双通道
USB4 2019 20 Gbps / 40 Gbps 128b/132b 5V / 3 A (PD) 基于 Thunderbolt 3 协议隧道
枚举适配提示: 在移植 USB 设备固件时,设备描述符中的 bcdUSB 字段必须如实声明设备支持的 USB 版本。例如,一个仅支持 Full Speed 的 HID 设备若错误填写 0x0200(USB 2.0),主机可能尝试以 High Speed 复位设备,导致枚举失败。

从版本演进可以看出,USB 3.x 及 USB4 引入了全新的物理层和协议层,与 USB 2.0 及之前的版本在电气特性、数据包格式、枚举流程上存在显著差异。嵌入式开发者在进行枚举移植时,必须首先明确目标设备属于 USB 2.0 体系还是 USB 3.x / USB4 体系,因为两者的描述符结构和枚举状态机完全不同。

1.1.2 USB 物理拓扑结构:Host – Device – Hub

USB 采用树形星型拓扑,由且仅由一个 Host(主机) 控制整个总线上的所有通信。设备不能主动发起事务,所有数据传输均由主机调度。Hub 用于扩展端口,使一个主机可以连接多达 127 个设备(含 Hub 自身)。

下图展示了 USB 物理拓扑的核心结构:

USB 物理拓扑结构:Host – Hub – Device USB 物理拓扑结构(Host – Hub – Device) USB Host 根端口 (Root Port) USB Hub 端口扩展 / 中继 Device 1 Low Speed HID (1.5 Mbps) Device 2 Full Speed CDC (12 Mbps) Device 3 High Speed MSC (480 Mbps) 说明: 每个 Hub 下行端口可连接一个设备或下一级 Hub。设备通过描述符向主机声明自身速度类型。 枚举过程中,主机通过复位信号和端口状态检测确定设备速度。

上图体现了 USB 拓扑的三个关键层级:

  • Host(主机):唯一的总线主控,负责管理枚举、调度事务、分配地址。在嵌入式系统中,Host 通常由 MCU 的 USB OTG 控制器或专用 Host 控制器实现。
  • Hub(集线器):负责端口扩展和速度中继。Hub 在枚举过程中扮演关键角色——它检测设备插入/拔出事件,并向主机报告端口状态变化。
  • Device(设备):功能端点,通过描述符向主机报告自身能力。设备的速度类别(Low/Full/High/SuperSpeed)决定了枚举时的复位时序和描述符格式。
枚举失败常见陷阱: 在移植 USB 设备固件时,开发者常忽略 Hub 的延迟特性。设备插入后,Hub 需要一定时间(通常 2–10 ms)完成端口去抖和速度检测。若设备固件在复位后过早发送描述符,可能因 Hub 尚未完成速度协商而导致数据包丢失。建议在设备固件中等待至少 50 ms 再响应主机的 GET_DESCRIPTOR 请求。

1.1.3 拓扑结构对枚举移植的影响

USB 的树形拓扑决定了枚举流程的分层特性。主机无法直接感知设备的存在,必须通过 Hub 的中继。在移植 USB 设备固件时,以下拓扑相关因素直接影响枚举成功率:

拓扑要素 对枚举的影响 移植适配建议
Hub 端口去抖 设备插入后,Hub 需 2–10 ms 去抖,期间端口状态不稳定 设备上电后至少等待 100 ms 再使能 D+ 上拉电阻
速度检测 Hub 通过 D+/D- 线路上的上拉电阻位置判断设备速度 确保上拉电阻连接正确:Full Speed 上拉 D+,Low Speed 上拉 D-
复位信号传播 主机发出的复位信号经 Hub 中继后,时序可能产生偏移 设备固件应容忍复位信号持续 10–20 ms,而非严格按规范 10 ms 判断
地址分配 主机通过 SET_ADDRESS 请求分配唯一地址,Hub 负责转发 设备收到 SET_ADDRESS 后必须在 50 ms 内完成地址切换
多级 Hub 延迟 设备经过多级 Hub 后,主机与设备间的往返延迟增加 设备响应控制传输的延迟应控制在 5 ms 以内,避免超时
核心要点: USB 枚举移植的本质,是让设备固件在 Host – Hub – Device 的拓扑约束下,按照规范时序正确响应主机的标准请求。任何对拓扑延迟或速度检测机制的忽视,都可能导致枚举失败。本章后续内容将深入分析设备描述符的结构与常见枚举失败案例。