USB3.0 Warm Reset
USB3.0 Warm Reset整体分为 5 个标准阶段,全程依托xHCI 端口寄存器控制、LFPS 带内低频信令、LTSSM 链路状态机协同工作;同时区分 Warm/Hot/Cold Reset 核心差异,修正寄存器、时序、LTSSM、信令等全部错误点。
前置基础概念区分
- Cold Reset 冷复位:端口断电再上电,硬件彻底复位 PHY 与设备;
- Hot Reset 热复位:仅 U0 工作态可发起,依靠 TS1/TS2 高速有序集,无法唤醒 U1/U2/U3;同样触发设备 Function Reset;
- Warm Reset 暖复位:任意链路状态均可发起,依靠 LFPS 低频脉冲,可强制唤醒所有低功耗状态(U1/U2/U3),仅做链路逻辑复位、不切断供电。
WarmRset寄存器
PORTSC:bit31:Warm Port Reset (WPR) – RW1S/RsvdZ. Default = ‘0’. When software writes a ‘1’ to this bit,the Warm Reset sequence as defined in the USB3 Specification is initiated and the PR flag is set to ‘1’. Once initiated, the PR, PRC, and WRC flags shall reflect the progress of the Warm Reset sequence. This flag shall always return ‘0’ when read. Refer to section 4.19.5.1.This flag only applies to USB3 protocol ports. For USB2 protocol ports it shall be RsvdZ
阶段一:软件发起复位,LTSSM 切入 Reset 状态
1. 发起主体
主机 xHCI 下行端口、USB Hub 下行端口均可发起 Warm Reset。
2. 寄存器触发
xHCI PORTSC 端口状态控制寄存器:
- Bit31:Warm Port Reset (WPR) – RW1S/RsvdZ. ——Warm Reset 专属触发位;
- Bit4:Port Reset (PR)——Hot Reset 触发位;
二者独立,不可同时置 1。
驱动流程:软件置 WR=1,下发端口复位指令。
3. 硬件前置处理
端口 PHY 立刻中止链路上所有未完成传输(Control/Bulk/Interrupt/Isoc),丢弃未完成传输描述符。
4. LTSSM 状态跳转
无论链路当前处于 U0/U1/U2/U3/Inactive,LTSSM 强制退出原有状态,直接进入 Reset 专用状态。
补充:Hot Reset 路径仅 U0→Recovery,和 Warm Reset 的 Reset 状态机完全隔离,无交叉跳转。
阶段二:PHY 持续发送 Warm Reset LFPS 复位信令
Warm Reset 唯一依靠 LFPS 带内脉冲,Hot Reset 不使用 LFPS,使用高速 TS 有序集。
- LFPS 标准参数
规范基准频率固定 20 MHz,不存在 10~50 MHz 区间;差分输出摆幅为标准 USB3 电平,无“强度更大”定义,仅时序区分不同 LFPS 类型。 - 最小发送约束(强制时序规则)
端口持续输出 Warm Reset 专用 LFPS,最小时长 TReset = 3.5 ms;
关键约束:未满 3.5ms 时,即便收到设备应答 LFPS,主机也不能停止发送脉冲,必须凑足最小时长。 - 低功耗强制唤醒作用
长时 LFPS 脉冲会强制远端设备 PHY 退出 U1/U2/U3 省电模式,强制接收电路进入信号侦听模式。
阶段三:设备端 LFPS 检测、应答、执行功能复位
设备上行 PHY 持续侦听差分链路信号,完成握手与内部复位:
- 信号识别
接收端识别出符合时序的 Warm Reset LFPS,判定链路复位请求。 - 握手应答
在规范窗口 TResetReply 内,向上行回送应答型 LFPS,完成链路握手。 - 设备 Function Reset(功能复位)
收发应答同步执行设备内部复位动作:- 清空全部端点状态、管道资源、带宽分配记录;
- USB 设备地址强制归零为默认地址 0;
- 清除设备所有配置描述符激活状态;
补充:Hot Reset 同样会触发该 Function Reset,“地址清零”并非 Warm Reset 独有特性。
阶段四:复位信令终止,链路进入电气空闲、跳转 Polling
- 停止 LFPS 输出
主机满足 TReset ≥3.5ms 最小时长后,无论是否收到应答,停止发送 LFPS。 - 链路进入标准 Electrical Idle
两端 PHY 保持接收端终端匹配电阻,进入无数据电气空闲;区别于 U1/U2 低功耗轻量级 Idle。 - LTSSM 状态切换
退出 Reset 状态,进入 Polling 链路训练状态,准备重新协商高速链路。
阶段五:Polling 链路重训练 + 主机完整设备重枚举
1. Polling 内部子流程
- Rx.Detect:检测对端接收终端电阻,确认物理连接未断开;
- 收发 TS1/TS2 训练有序集:完成比特锁、符号锁;协商链路速率(Gen1 5Gbps / Gen2 10Gbps);调整均衡 CTLE 参数补偿信道损耗;
- 链路协商完成后,LTSSM 切入 U0 正常工作状态。
2. 软件层完整重枚举流程
因设备地址已归零,主机驱动必须完整走初次枚举流程:
- Hub 下发 SetPortFeature 确认端口复位完成;
- 向默认地址 0 获取设备描述符;
- 发送 Set Address 命令,为设备分配全新唯一 USB 地址;
- 读取配置/接口/端点描述符,加载对应设备驱动;
- 分配带宽资源,开启正常业务传输。
实战场景:Linux xHCI 休眠恢复死锁处理
- 典型故障场景
系统 S3/S4 休眠后 Resume 唤醒,xHCI 主机恢复但设备滞留在 U3 深度休眠,两端 LTSSM 状态不匹配,链路死锁无法通信。 - 内核处理逻辑
xhci_hub_control 调用 xhci_port_reset,检测链路 Inactive/低功耗卡死状态,置 PORTSC.WR 发起 Warm Reset。 - 内核自定义稳定延时
规范无强制 100ms 恢复延时,100ms 是 Linux 内核保守容错延时(厂商控制器范围 50~200ms);延时结束后重新发起地址分配。 - 故障兜底策略
若重枚举多次失败,主机将该端口标记为 Device Disconnected,上层通知设备离线。
Warm Reset 完整标准闭环总结
软件置 PORTSC.WR → LTSSM 强制进入 Reset → PHY 输出 Warm Reset LFPS 至少 3.5ms → 设备识别 LFPS、回复应答脉冲并执行 Function Reset(地址置0、释放资源)→ 主机满足最小时长后停止 LFPS,链路进入 Electrical Idle、LTSSM 切 Polling → Rx.Detect + TS 序列速率均衡训练 → 链路进入 U0 → 主机执行全套设备重枚举、分配新地址。
Warm Reset 与 Hot Reset 核心对比
| 对比项 | Warm Reset | Hot Reset |
|---|---|---|
| 触发寄存器 | PORTSC.WR (Bit31) | PORTSC.PR (Bit4) |
| 物理层信令 | LFPS 低频脉冲 | TS1/TS2 高速有序集 |
| 可发起链路状态 | U0/U1/U2/U3/Inactive 全部状态 | 仅 U0 工作态 |
| 低功耗唤醒能力 | 可强制退出 U1/U2/U3 | 无法唤醒省电状态 |
| LTSSM 通路 | 任意状态 → Reset | 仅 U0 → Recovery |
| 设备内部行为 | 均触发 Function Reset,地址清零、重枚举 | 均触发 Function Reset,地址清零、重枚举 |
| 典型使用场景 | 休眠唤醒恢复、低功耗链路死锁 | U0 内传输卡顿、普通链路异常 |
USB3知识点





