3. USB复位机制:复位信号时序、复位后的设备状态、总线复位与设备复位区别
USB复位是枚举流程中最重要的物理层事件之一。主机通过复位信号将设备置于已知初始状态,迫使设备重新响应默认地址(0x00)并等待主机发送请求。理解复位信号的时序参数、设备状态迁移以及两种复位类型的差异,是排查枚举失败、设备无响应、地址冲突等故障的基础。
3.1 复位信号时序
USB总线复位由主机控制器(或集线器)主动驱动。复位期间,主机将D+和D-两条差分数据线同时拉低(SE0状态)并保持规定时长。设备检测到SE0持续超过2.5 µs后,即判定为复位开始。
| 参数 | 最小值 | 典型值 | 最大值 | 说明 |
|---|---|---|---|---|
| 复位持续时间(TRST) | 10 ms | 10–20 ms | 20 ms | 主机驱动SE0的时长 |
| 设备检测阈值(TDET) | 2.5 µs | — | — | 设备识别复位的最小SE0宽度 |
| 复位恢复时间(TRSTRCY) | 10 ms | — | — | 复位结束后设备准备就绪的时间 |
| 复位后帧起始(SOF)延迟 | — | — | 3 ms | 主机在复位结束后发送首个SOF |
排查要点: 使用USB分析仪捕获复位波形时,应重点检查SE0持续时间是否在10–20 ms范围内。若复位时长不足10 ms,部分设备可能无法正确复位;若超过20 ms,主机控制器可能报错或超时。
复位信号波形关键特征:
- 复位前:总线处于空闲状态(J状态:全速/低速设备D+高、D-低;高速设备D+低、D-高)。
- 复位中:D+和D-同时为低(SE0),持续10–20 ms。
- 复位后:主机发送帧起始包(SOF),设备开始监听默认地址。
3.2 复位后的设备状态
USB设备在检测到复位信号结束后,必须进入以下预定义状态。这些状态由USB 2.0规范定义,是枚举流程的起点。
| 状态 | 描述 | 关键行为 |
|---|---|---|
| 默认状态(Default) | 设备复位后的初始状态 | 地址为0x00;仅响应控制传输;等待主机发送设置包 |
| 地址状态(Address) | 主机分配唯一地址后 | 设备使用新地址响应;仍处于未配置状态 |
| 配置状态(Configured) | 主机发送Set Configuration后 | 设备按配置描述符启用功能;可进行数据传输 |
| 挂起状态(Suspended) | 总线空闲超过3 ms | 设备进入低功耗模式;可远程唤醒 |
常见故障: 设备复位后未正确进入默认状态,可能表现为:
- 设备未将地址重置为0x00,导致主机无法通过默认地址访问。
- 设备未复位端点0(控制端点),导致控制传输失败。
- 设备未清除之前的配置状态,导致枚举流程混乱。
3.3 总线复位与设备复位区别
在USB协议中,“复位”一词可能指代两种不同的机制:总线复位(Bus Reset) 和 设备复位(Device Reset)。两者在触发方式、作用范围和影响上存在本质区别。
| 对比维度 | 总线复位(Bus Reset) | 设备复位(Device Reset) |
|---|---|---|
| 触发方 | 主机控制器或集线器 | 设备自身(固件/硬件) |
| 作用范围 | 整个USB总线(所有下游设备) | 单个设备内部 |
| 信号表现 | D+和D-同时拉低(SE0)持续10–20 ms | 设备内部逻辑复位,不改变总线电平 |
| 设备地址 | 重置为0x00 | 保持当前地址(除非固件主动重置) |
| 端点状态 | 所有端点复位到初始状态 | 由设备固件决定 |
| 配置状态 | 清除配置,回到默认状态 | 通常保持配置(除非固件主动清除) |
| 典型场景 | 设备插入、主机启动、错误恢复 | 设备内部看门狗超时、固件异常恢复 |
故障排查关键:
- 如果设备在枚举过程中无响应,首先检查主机是否发送了总线复位信号(SE0)。
- 如果设备响应但地址或配置异常,可能是设备复位未正确执行,导致状态残留。
- 设备复位不会改变总线状态,因此不会触发主机重新枚举;总线复位则会强制整个总线重新枚举。
3.4 复位相关故障排查清单
在实际调试中,复位相关故障是最常见的枚举失败原因之一。以下清单可帮助快速定位问题。
| 故障现象 | 可能原因 | 排查方法 |
|---|---|---|
| 设备插入后无任何响应 | 总线复位未发送或时长不足 | 使用分析仪捕获SE0波形,检查持续时间 |
| 设备响应但地址错误 | 设备未正确重置地址为0x00 | 检查设备固件复位处理逻辑 |
| 设备枚举中途失败 | 复位后恢复时间不足 | 检查TRSTRCY是否满足10 ms要求 |
| 多个设备同时插入时部分无响应 | 集线器复位能力不足 | 检查集线器供电和复位驱动能力 |
| 设备在运行中突然断开 | 总线复位被意外触发 | 检查总线噪声或主机控制器异常 |
调试建议:
- 使用USB协议分析仪(如Beagle USB、Ellisys)捕获复位事件,重点关注SE0持续时间和复位后的首个SOF。
- 在设备固件中增加复位检测日志,记录复位发生的时间和次数。
- 对于高速设备,注意复位后主机可能进行高速检测握手(Chirp J/K),这是复位流程的一部分。