4. USB 复位信号分析:主机发送复位(SE0)时序要求、设备检测复位超时、复位后设备状态
USB 复位(Reset)是枚举流程中主机与设备建立通信的第一步,也是故障高发区。主机通过驱动 D+ 和 D- 同时为低电平(SE0)并持续规定时长来发起复位。设备端则需在限定时间内检测到该 SE0 状态,否则将进入超时处理流程。本节从时序参数、检测机制和状态迁移三个维度展开分析。
4.1 主机发送复位(SE0)的时序要求
主机(Host)在检测到设备连接(或端口上电)后,必须主动驱动 USB 总线进入复位状态。复位信号的本质是单端零(SE0, Single-Ended Zero),即 D+ 和 D- 同时被拉低至 VOL 以下。USB 2.0 规范对复位时序有严格定义,不同速率模式下的参数略有差异。
| 参数 | 全速/低速 | 高速 | 说明 |
|---|---|---|---|
| TRST(复位持续时间) | ≥ 10 ms | ≥ 10 ms(主机驱动) | 主机必须持续驱动 SE0 至少 10 ms |
| TRSTH(复位保持时间) | ≥ 2.5 µs | ≥ 2.5 µs | 设备检测到 SE0 后需保持复位状态 |
| TRSTR(复位恢复时间) | 10 µs ~ 20 ms | 10 µs ~ 20 ms | 复位结束后到第一个 SOF 的间隔 |
| TFILT(去抖滤波时间) | 2.5 µs ~ 10 ms | 2.5 µs ~ 10 ms | 设备内部去毛刺窗口 |
关键排查点: 主机驱动复位时长不足 10 ms 是常见硬件故障。使用示波器测量 D+ 和 D- 同时为低电平的持续时间,若小于 8 ms,则设备可能无法正确识别复位信号。
下图展示了主机发起复位时 D+ 和 D- 的波形变化,以及 SE0 的持续时间窗口。
4.2 设备检测复位超时机制
设备端的 USB 收发器(Transceiver)持续监测总线状态。当检测到 D+ 和 D- 同时为低电平超过 TFILT(去抖滤波时间)时,设备认为复位信号有效,并启动内部复位状态机。若 SE0 持续时间不足或出现毛刺,设备可能误判或超时。
4.2.1 设备检测复位的内部流程
- 总线采样: 设备以 1 µs 周期采样 D+ 和 D- 电平。
- 去抖滤波: 连续采样到 SE0 超过 TFILT(通常为 2.5 µs ~ 10 ms),则确认复位。
- 复位状态机启动: 设备将内部状态切换为 Default 状态,等待主机后续操作。
- 超时处理: 若在 100 ms 内未检测到 SE0 结束(即总线恢复为 J 状态),设备进入超时错误处理。
常见故障: 设备端去抖滤波时间设置过长(如 20 ms),而主机复位仅持续 10 ms,导致设备无法在复位窗口内确认 SE0,最终超时失败。此时需检查设备固件中的 USB 复位去抖参数。
下图展示了设备检测复位信号的状态机流程,包括正常路径和超时路径。
4.3 复位后设备状态迁移
复位信号结束后,USB 总线恢复为 J 状态(全速/低速模式下 D+ 拉高,D- 拉低;高速模式下相反)。设备在复位完成后进入 Default 状态,此时设备必须准备好接收主机发送的 SETUP 包(即第一个令牌包)。
4.3.1 复位后设备状态表
| 状态名称 | 状态描述 | 设备行为 | 主机行为 |
|---|---|---|---|
| Default | 复位完成后的初始状态 | 等待主机发送 SETUP 包;设备地址为 0 | 发送 SETUP 包(Get Descriptor) |
| Address | 设备已分配唯一地址 | 响应指定地址的请求 | 发送 Set Address 请求 |
| Configured | 设备配置完成 | 正常数据传输 | 发送 Set Configuration 请求 |
| Suspended | 总线空闲超过 3 ms | 进入低功耗模式 | 停止发送 SOF |
调试技巧: 复位后若设备未在 10 ms 内收到 SETUP 包,设备应保持 Default 状态并继续等待。若超过 100 ms 仍未收到任何令牌包,设备可主动进入 Suspend 状态以节省功耗。在驱动调试中,可通过 USB 分析仪观察复位结束后是否立即出现 SETUP 令牌。
下图展示了复位后设备从 Default 到 Configured 的完整状态迁移路径。
4.4 复位故障排查清单
在实际调试中,复位相关故障通常表现为设备无法被主机识别(如 dmesg 中无设备信息,或出现 reset failed 错误)。以下清单可帮助快速定位问题。
- 检查硬件连接: 使用示波器测量 D+ 和 D- 引脚,确认复位期间两者均为低电平(< 0.8 V),且持续时间 ≥ 10 ms。
- 验证去抖参数: 检查设备固件中 USB 复位去抖滤波时间(TFILT),确保其小于主机复位持续时间(通常设为 2.5 µs ~ 5 ms)。
- 分析复位结束后的总线状态: 复位结束后,总线应迅速恢复为 J 状态。若出现毛刺或电平不稳定,检查上拉电阻和终端匹配。
- 观察主机行为: 使用 USB 分析仪捕获复位后的第一个令牌包,确认主机在 10 ms 内发送了 SETUP 包。
- 检查设备状态机: 在设备固件中插入调试日志,输出复位状态机的迁移过程,确认设备是否进入 Default 状态。
案例: 某嵌入式设备在 Linux 主机上枚举失败,
dmesg 显示 usb 1-1: reset failed。使用示波器测量发现主机复位信号仅持续 6 ms(低于规范要求的 10 ms)。进一步排查发现主机端 USB 控制器驱动中复位定时器配置错误,修正后设备正常枚举。