4. USB总线复位:复位信号的时序要求、复位后的设备行为、复位失败导致的枚举停滞

USB总线复位(Bus Reset)是枚举流程的起点,也是故障排查中最容易被忽视的环节。主机通过拉低D+/D-总线上的差分信号,强制所有下游设备回到默认地址(0)和默认配置状态。本章从时序规范、设备行为模型和典型故障三个维度展开分析。

4.1 复位信号的时序要求

USB 2.0规范对复位信号定义了严格的电气与时间参数。主机控制器(Host Controller)必须保证复位持续时间在规范窗口内,否则设备可能无法正确识别复位事件。

参数 最小值 典型值 最大值 说明
TRST(复位持续时间) 10 ms 10–20 ms 50 ms 主机驱动SE0(Single-Ended Zero)的时长
TRSTREC(复位恢复时间) 10 ms 10–20 ms — 复位结束后到设备开始发送 chirp 的间隔
TFILT(去抖滤波时间) 2.5 µs 2.5–5 µs — 设备端检测 SE0 的硬件去抖窗口
TSE0(SE0 保持时间) 2.5 µs — — 设备判定复位有效的最小 SE0 宽度
排查要点:使用逻辑分析仪抓取 D+ 和 D- 信号,测量 SE0 持续宽度。若小于 10 ms,设备可能将复位误判为噪声;若大于 50 ms,部分低速/全速设备可能进入未定义状态。
复位信号波形关键特征:
  • 复位前:总线处于空闲状态(J 状态:D+ 高,D- 低)。
  • 复位中:D+ 和 D- 同时被拉低至 GND 附近(SE0 状态)。
  • 复位后:主机释放总线,设备在 10 ms 内开始发送连接 chirp(高速设备)或进入空闲状态(全速/低速设备)。
USB总线复位信号时序图 USB 总线复位信号时序图 t D+ D- 空闲 (J) SE0 复位 空闲 (J) T_RST (10–50 ms) 复位结束后,高速设备在 10 ms 内发送 chirp K,全速/低速设备进入空闲等待

4.2 复位后的设备行为

当设备检测到有效的总线复位后,必须执行以下状态转换。理解这些行为是分析枚举日志中“Reset”阶段是否成功的基础。

4.2.1 设备状态机转换

  1. 默认状态(Default State):设备地址复位为 0,配置寄存器恢复为默认值,所有端点(除端点 0 外)处于禁用状态。
  2. 地址状态(Address State):主机通过 SetAddress 请求分配唯一地址后,设备进入地址状态。
  3. 配置状态(Configured State):主机通过 SetConfiguration 请求选择配置后,设备进入配置状态,非控制端点使能。
常见误区:复位后设备不会自动进入配置状态。许多故障排查者误以为复位后设备“应该”准备好收发数据,实际上设备在复位后仅能响应端点 0 的控制传输,且地址为 0。

4.2.2 速度检测与 chirp 握手

复位结束后,高速(HS)设备必须通过 chirp 握手与主机协商高速模式。全速(FS)和低速(LS)设备则直接进入空闲状态。

设备速度 复位后行为 主机响应 协商结果
高速 (HS) 发送 chirp K(D+ 高,D- 低)持续 1–7 ms 主机发送交替 chirp K/J 序列 进入高速模式
全速 (FS) 保持 D+ 上拉电阻激活,总线进入空闲 J 状态 检测到 D+ 高电平,识别为全速设备 全速模式
低速 (LS) 保持 D- 上拉电阻激活,总线进入空闲 K 状态 检测到 D- 高电平,识别为低速设备 低速模式
复位后设备行为状态图 复位后设备行为状态图 检测到 SE0 ≥ 2.5 µs 默认状态 (地址 0) 高速设备:发送 chirp K 等待主机 chirp 握手 FS/LS 设备:进入空闲 等待主机发送 SETUP 令牌 高速 chirp 必须在复位结束后 10 ms 内开始,否则主机将设备视为全速设备

4.3 复位失败导致的枚举停滞

复位失败是枚举停滞的常见根因。根据现场日志和信号测量,可将复位失败归纳为以下三类典型场景。

4.3.1 复位信号缺失或时序违规

  • 症状:枚举日志中无“Reset”事件记录,或设备始终不响应任何令牌。
  • 根因:主机控制器驱动异常、VBUS 供电不足导致上拉电阻无法激活、USB 线缆过长导致信号衰减。
  • 排查方法:使用示波器测量 D+/D- 对地电压,确认 SE0 持续时间是否在 10–50 ms 窗口内。

4.3.2 设备端复位检测失败

  • 症状:主机日志显示复位已发送,但设备无 chirp 响应(高速设备)或总线空闲状态异常。
  • 根因:设备端硬件去抖滤波时间(TFILT)设置过长、晶振精度偏差导致时钟漂移、上拉电阻损坏。
  • 排查方法:检查设备端 USB PHY 寄存器中的复位标志位,确认设备是否识别到 SE0。

4.3.3 主机与设备速度协商失败

  • 症状:设备在复位后反复尝试 chirp,最终超时进入全速模式,但实际设备仅支持高速模式,导致枚举失败。
  • 根因:主机控制器不支持高速模式、USB 2.0 集线器(Hub)转发 chirp 失败、信号完整性差导致 chirp 被误判。
  • 排查方法:抓取 chirp 握手阶段的差分信号,检查 chirp K/J 序列的幅值和时序。
枚举日志中复位失败的典型模式:
[USBH] Reset port 1 ... OK
[USBH] Waiting for device ... timeout (100 ms)
[USBH] Reset port 1 again ... OK
[USBH] Waiting for device ... timeout (100 ms)
[USBH] Port 1: device not responding, disabling port

上述日志表明主机成功发送了复位信号,但设备未在超时时间内完成连接。常见原因包括:设备上电时序晚于复位、设备固件卡在初始化阶段、硬件上拉电阻未使能。

复位失败故障树 复位失败故障树 枚举停滞 复位信号异常 设备响应异常 SE0 宽度 < 10 ms VBUS 供电不足 上拉电阻未使能 chirp 握手超时 排查顺序:先测 VBUS 电压 → 抓取 D+/D- 波形 → 检查设备 PHY 寄存器 → 验证上拉电阻 若波形正常,则重点排查设备固件初始化流程

4.4 复位阶段故障排查清单

以下清单可作为现场排查的快速参考,按优先级排序。

步骤 检查项 工具/方法 预期结果
1 VBUS 电压 万用表测量 D+ 与 GND 之间电压 4.75–5.25 V
2 SE0 持续时间 示波器测量 D+ 和 D- 同时为低的时间 10–50 ms
3 上拉电阻状态 示波器测量 D+(FS/HS)或 D-(LS)对地电阻 1.5 kΩ ±5% 上拉至 3.3 V
4 设备 chirp 响应 逻辑分析仪捕获复位后 10 ms 内的 D+/D- 状态 高速设备:chirp K 持续 1–7 ms
5 主机控制器日志 读取 EHCI/xHCI 寄存器中的 Port Status 位 Port Reset 位清零,Port Enable 位置位
实战建议:在嵌入式开发中,建议在设备固件的 USB 中断服务函数中增加复位标志位打印。当检测到 USB 复位中断时,立即通过串口输出 "USB Reset Detected" 及当前系统时间戳。这能快速区分“主机未发复位”与“设备未响应复位”两种场景。