2. USB系统架构:主机、设备、集线器(Hub)的角色,USB拓扑结构,物理层与协议层的关系
2.1 USB拓扑结构:分层星型模型
USB采用分层星型(Tiered Star)拓扑结构,这是理解枚举流程和故障定位的基础。整个系统由一个主机(Host)、若干集线器(Hub)和多个设备(Device)构成,最多支持7层(Tier)深度,包括根集线器所在的第1层。
关键约束:USB 2.0规范规定最大层数为7层(Tier 1 ~ Tier 7),最大端点数为32个(16个IN + 16个OUT),最大电缆长度为5米/段。超过这些限制将导致枚举失败或信号完整性崩溃。
2.2 主机(Host)的角色与职责
USB主机是总线的主控者,通常由主机控制器(Host Controller)和根集线器(Root Hub)组成。在枚举过程中,主机承担以下核心职责:
- 总线调度:主机控制器负责生成帧/微帧起始包(SOF),并按照周期性(中断/同步)和非周期性(控制/批量)传输类型分配总线时间。
- 枚举驱动:主机软件栈(USB Core + HCD)在检测到设备连接后,发起复位、分配地址、读取描述符、配置设备等枚举序列。
- 电源管理:主机通过根集线器监控端口电源,检测过流、挂起、唤醒等事件。
- 错误恢复:当设备无响应、CRC错误或协议违规时,主机负责重试或终止传输。
| 控制器类型 | 规范版本 | 传输速率 | 常见硬件 |
|---|---|---|---|
| UHCI | USB 1.1 | 1.5 / 12 Mbps | Intel/PIIX4 |
| OHCI | USB 1.1 | 1.5 / 12 Mbps | 非Intel平台 |
| EHCI | USB 2.0 | 480 Mbps | 高速主机 |
| xHCI | USB 3.x | 5/10/20 Gbps | 现代平台 |
2.3 集线器(Hub)的角色与职责
集线器是USB拓扑中的中继节点,负责端口扩展、信号中继、电源管理和状态报告。集线器在枚举故障中经常成为瓶颈,其关键功能包括:
- 端口状态管理:每个下游端口独立监控连接/断开、复位、挂起、过流等状态,并通过中断端点向主机报告状态变化。
- 信号中继与重驱动:对高速/全速信号进行波形整形和重定时,补偿电缆和PCB走线损耗。
- 速度协商:在复位过程中,集线器通过检测D+/D-线上的终端电阻状态,确定设备的工作速度(LS/FS/HS)。
- 电源开关与过流保护:集线器可以逐端口控制电源开关,并在过流时自动断开端口并通知主机。
常见枚举故障点:集线器端口电源不足(过流触发)、信号中继器损坏导致眼图闭合、速度协商错误(D+上拉电阻检测失败)、中断端点报告延迟导致主机无法及时获取端口状态变化。
2.4 设备(Device)的角色与职责
USB设备是总线上的从设备(Slave),不能主动发起事务,只能响应主机的请求。设备在枚举过程中的关键行为包括:
- 上拉电阻检测:设备在D+(全速/高速)或D-(低速)线上连接1.5kΩ上拉电阻,主机/集线器通过检测该电阻识别设备连接。
- 描述符提供:设备必须正确实现并返回设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)等。
- 控制传输响应:设备通过默认端点0(控制端点)响应主机的标准请求(GET_DESCRIPTOR、SET_ADDRESS、SET_CONFIGURATION等)。
- 电源配置:设备根据配置描述符中的bMaxPower字段声明所需总线电流(单位2mA),主机根据该值决定是否供电。
枚举故障排查提示:如果设备在连接后主机无法获取设备描述符,首先检查D+/D-上拉电阻是否正确连接(全速设备D+上拉,低速设备D-上拉)。高速设备在复位后需要从全速切换到高速,若切换失败则回退到全速模式。
2.5 物理层与协议层的关系
USB协议栈分为物理层(Physical Layer)、数据链路层(Data Link Layer)和协议层(Protocol Layer)。理解这三层的关系对于定位枚举故障至关重要。
| 层次 | 主要功能 | 关键信号/机制 | 常见枚举故障 |
|---|---|---|---|
| 物理层 | 差分信号传输、电气特性 | D+/D-电平、终端电阻、眼图 | 信号幅度不足、上升沿过缓、共模噪声 |
| 数据链路层 | 包封装、同步、位填充、CRC | SYNC、SOP/EOP、NRZI编码 | CRC错误、位填充违规、包长度错误 |
| 协议层 | 事务处理、请求/响应、描述符解析 | Setup/Data/Status阶段、标准请求 | 描述符格式错误、地址冲突、配置失败 |
2.6 物理层关键电气特性
物理层是枚举成功的基础,以下电气参数直接影响主机能否正确识别设备:
- 差分信号电平:全速/低速模式下,D+和D-的差分摆幅为0~3.3V(单端),高速模式下为400mV(差分)。
- 终端电阻:设备端D+或D-上拉1.5kΩ至3.3V;主机/集线器端D+和D-各下拉15kΩ至GND。
- 上电时序:设备连接后,VBUS必须在100ms内稳定在4.75V~5.25V,否则主机可能不识别。
- 复位时序:主机驱动复位信号(SE0)至少持续10ms(全速/低速)或50ms(高速TDR),设备必须在复位结束后响应。
物理层排查清单:
1. 使用示波器测量D+/D-波形,检查差分摆幅是否达标。
2. 验证设备端上拉电阻是否焊接正确(1.5kΩ ±5%)。
3. 检查VBUS电压是否在4.75V~5.25V范围内,纹波是否小于100mV。
4. 测量复位信号持续时间,确保满足规范要求。
1. 使用示波器测量D+/D-波形,检查差分摆幅是否达标。
2. 验证设备端上拉电阻是否焊接正确(1.5kΩ ±5%)。
3. 检查VBUS电压是否在4.75V~5.25V范围内,纹波是否小于100mV。
4. 测量复位信号持续时间,确保满足规范要求。
2.7 协议层关键机制:控制传输与标准请求
协议层定义了主机与设备之间的通信规则。枚举过程中最关键的传输类型是控制传输(Control Transfer),它由三个阶段组成:
- Setup阶段:主机向设备发送8字节的标准请求(bmRequestType、bRequest、wValue、wIndex、wLength)。
- Data阶段(可选):主机读取或写入数据,方向由bmRequestType决定。
- Status阶段:设备返回握手包(ACK/NAK/STALL)确认操作完成。
枚举过程中主机发送的标准请求包括:
| 请求名称 | bRequest值 | 功能 | 枚举阶段 |
|---|---|---|---|
| GET_DESCRIPTOR | 0x06 | 读取设备/配置/字符串描述符 | 获取描述符 |
| SET_ADDRESS | 0x05 | 分配唯一地址(1~127) | 地址分配 |
| SET_CONFIGURATION | 0x09 | 选择并激活配置 | 配置设备 |
| GET_CONFIGURATION | 0x08 | 读取当前配置值 | 验证配置 |
| GET_STATUS | 0x00 | 读取设备/端点状态 | 故障诊断 |
协议层故障排查技巧:使用USB分析仪(如Beagle USB、Ellisys)捕获枚举过程中的控制传输。重点关注:
- 设备是否在SET_ADDRESS后正确响应ACK?
- 设备描述符的前8字节(bLength、bDescriptorType、bcdUSB等)是否与预期一致?
- 配置描述符的总长度(wTotalLength)是否与实际返回的数据长度匹配?
- 设备是否在SET_ADDRESS后正确响应ACK?
- 设备描述符的前8字节(bLength、bDescriptorType、bcdUSB等)是否与预期一致?
- 配置描述符的总长度(wTotalLength)是否与实际返回的数据长度匹配?
2.8 本章小结
USB系统架构采用分层星型拓扑,主机通过根集线器管理最多7层设备。集线器负责端口扩展、信号中继和电源管理,设备通过上拉电阻和描述符响应主机请求。物理层保证信号完整性,数据链路层确保包格式正确,协议层实现标准请求和描述符解析。理解这三层的关系是枚举故障排查的基础——故障可能发生在任何一层,排查时需要逐层验证。