USB3知识点
+ -

USB3.0 Warm Reset

2026-07-19 本文链接为:http://www.usbzh.com/article/detail-1771.html ,欢迎转载,转载请附上本文链接。

USB3.0 Warm Reset整体分为 5 个标准阶段,全程依托xHCI 端口寄存器控制、LFPS 带内低频信令、LTSSM 链路状态机协同工作;同时区分 Warm/Hot/Cold Reset 核心差异,修正寄存器、时序、LTSSM、信令等全部错误点。

前置基础概念区分

  1. Cold Reset 冷复位:端口断电再上电,硬件彻底复位 PHY 与设备;
  2. Hot Reset 热复位:仅 U0 工作态可发起,依靠 TS1/TS2 高速有序集,无法唤醒 U1/U2/U3;同样触发设备 Function Reset;
  3. 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 有序集。

  1. LFPS 标准参数
    规范基准频率固定 20 MHz,不存在 10~50 MHz 区间;差分输出摆幅为标准 USB3 电平,无“强度更大”定义,仅时序区分不同 LFPS 类型。
  2. 最小发送约束(强制时序规则)
    端口持续输出 Warm Reset 专用 LFPS,最小时长 TReset = 3.5 ms;
    关键约束:未满 3.5ms 时,即便收到设备应答 LFPS,主机也不能停止发送脉冲,必须凑足最小时长。
  3. 低功耗强制唤醒作用
    长时 LFPS 脉冲会强制远端设备 PHY 退出 U1/U2/U3 省电模式,强制接收电路进入信号侦听模式。

阶段三:设备端 LFPS 检测、应答、执行功能复位

设备上行 PHY 持续侦听差分链路信号,完成握手与内部复位:

  1. 信号识别
    接收端识别出符合时序的 Warm Reset LFPS,判定链路复位请求。
  2. 握手应答
    在规范窗口 TResetReply 内,向上行回送应答型 LFPS,完成链路握手。
  3. 设备 Function Reset(功能复位)
    收发应答同步执行设备内部复位动作:
    • 清空全部端点状态、管道资源、带宽分配记录;
    • USB 设备地址强制归零为默认地址 0;
    • 清除设备所有配置描述符激活状态;

      补充:Hot Reset 同样会触发该 Function Reset,“地址清零”并非 Warm Reset 独有特性。

阶段四:复位信令终止,链路进入电气空闲、跳转 Polling

  1. 停止 LFPS 输出
    主机满足 TReset ≥3.5ms 最小时长后,无论是否收到应答,停止发送 LFPS。
  2. 链路进入标准 Electrical Idle
    两端 PHY 保持接收端终端匹配电阻,进入无数据电气空闲;区别于 U1/U2 低功耗轻量级 Idle。
  3. LTSSM 状态切换
    退出 Reset 状态,进入 Polling 链路训练状态,准备重新协商高速链路。

阶段五:Polling 链路重训练 + 主机完整设备重枚举

1. Polling 内部子流程

  1. Rx.Detect:检测对端接收终端电阻,确认物理连接未断开;
  2. 收发 TS1/TS2 训练有序集:完成比特锁、符号锁;协商链路速率(Gen1 5Gbps / Gen2 10Gbps);调整均衡 CTLE 参数补偿信道损耗;
  3. 链路协商完成后,LTSSM 切入 U0 正常工作状态。

2. 软件层完整重枚举流程

因设备地址已归零,主机驱动必须完整走初次枚举流程:

  1. Hub 下发 SetPortFeature 确认端口复位完成;
  2. 向默认地址 0 获取设备描述符
  3. 发送 Set Address 命令,为设备分配全新唯一 USB 地址;
  4. 读取配置/接口/端点描述符,加载对应设备驱动;
  5. 分配带宽资源,开启正常业务传输。

实战场景:Linux xHCI 休眠恢复死锁处理

  1. 典型故障场景
    系统 S3/S4 休眠后 Resume 唤醒,xHCI 主机恢复但设备滞留在 U3 深度休眠,两端 LTSSM 状态不匹配,链路死锁无法通信。
  2. 内核处理逻辑
    xhci_hub_control 调用 xhci_port_reset,检测链路 Inactive/低功耗卡死状态,置 PORTSC.WR 发起 Warm Reset。
  3. 内核自定义稳定延时
    规范无强制 100ms 恢复延时,100ms 是 Linux 内核保守容错延时(厂商控制器范围 50~200ms);延时结束后重新发起地址分配。
  4. 故障兜底策略
    若重枚举多次失败,主机将该端口标记为 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 内传输卡顿、普通链路异常
本文链接为:http://www.usbzh.com/article/detail-1771.html ,欢迎转载,转载请附上本文链接。

0 篇笔记 写笔记

BOT MASS_STORAGE_RESET
Bulk-Only Mass Storage Reset类特定请求是USB大容量存储设备独有的。 该特定类请求的功能用于复位大容量存储设备和与之关联的接口。通知设备接下来的批量端点输出数据为命令块包(CBW)。由于该请求是控制请求,所以是通过端点0发送的。在设备完成该请求即复位之前,设备应......
TYPE-C PD供电协议常用功能序列(接口数据包开始SOP,线缆数据包开始SOP''、硬件复位、线缆复位
使用TYPE-C PD供电协议信号-4b5b编码对照表的序列组合,可以组成一些常用的功能序列。硬件复位hard Reset硬件复位信令是为了被物理层识别而发送的一组有序字节。硬复位信号顺序集定义为:三个RST-1 K代码,后跟一个RST-2 K代码。硬件复位的功能是对接口和线缆进行复位K......
USB高速基础知识
USB 2.0 中引入了对规范的高速添加,以响应 Firewire 的更高速度。由于 High Speed 是事后才添加的,并且必须在不影响性能的情况下保持兼容性,所以我们将保留对 High Speed 的描述,直到我们涵盖了原始规范的基础知识数据传输高速实现的数据速率为 480 Mb/s。这需要......
USB设备复位、挂起和恢复命令
USB主机除了在正常的操作期间发送到设备的控制命令外,主机还可以发出三种独特的信号条件:复位、挂起或恢复挂起的设备。设备复位RESET在枚举过程中,主机向设备发出复位信号。注意此USB 复位与硬件或上电复位不相同,是两个概念。USB 复位的目的是设置设备的软件状态,以便进行枚举。当 D- 和 D......
HID键盘鼠标复位报告描述符
0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) 0xa1, 0x01, ......
USB设备通过BUSHOUND抓包IRP被取消USTS状态为0xC0010000
通过BUSHOUND抓包内容为: 16.0 CTL 80 06 00 02 00 00 20 00 GET DESCRIPTOR 336us 16.0 32 IN 09 02 20 00 ......
Windows系统实现USB设备的拨出与重新插入
最近在搞USBHOUND,原理比较简单,但是涉及的东西还是比较多,这不,为了搞清楚URB之间的传递脉路,又开始进入了USBCCGP淅代码中。USBCCGP是Windows系统中关于USB比较重要的一个驱动,其实原了USB物理复合设备到逻辑设备的基本功能,其中有大量的关于USB相关处理请求,是值得我......
复位USB端口设备IOCTL_USB_HUB_CYCLE_PORT
在设备管理器中通过设备的实例ID查找到设备后,然后确定设备端口中,再根据设备端口号获取其父设备即USB集本器,打开集线器,发送IOCTL_USB_HUB_CYCLE_PORT 请求来复位集线器端口达到复位设备。IOCTL_USB_HUB_CYCLE_PORT在Vista和Windows 7下不支持......
通过软件层复位重启USB设备源代码
复位USB设备,这样USB设备会重新枚举加载void RestartDevice(char* strHardWareId){ HDEVINFO devs = INVALID_HANDLE_VALUE; devs = SetupDiGetClassDevs(NULL, NULL, ......
USBIP 复位集线器下游端口/IOCTL_INTERNAL_USB_RESET_PORT
向USB集线器下发的IOCTRL之一就是IOCTL_INTERNAL_USB_RESET_PORT。用于复位USB集线器的下游端口。static NTSTATUSstore_urbr_submit(PIRP irp, struct urb_req *urbr){... case IO......
USB集线器复位端口
USB集线器复位端口使用的IOCTL为IOCTL_INTERNAL_USB_RESET_PORT,即当需要复位USB集线器的某个端口时,只需要对该USB集线器下发该请求即可。复位端口对应的URB功能号为:USB_REQUEST_SET_FEATURE.对应的USB集线器类请求为:Requ......
Windows复位USB集线器HUB端口设备RestartUsbPort
本人描述了如何在 Windows 下使用IOCTL_USB_HUB_CYCLE_PORT 重新启动USB端口。具体过程为:通过给定的设备实例ID在 Windows设备管理中查找USB 备、确定使用的 USB 端口号、获取其父设备(其 USB 集线器)、打开集线器并执行 IOCTL_USB_HUB_C......
USB2.0复位信号SE0
USB2.0 主机发出的复位信号,本质就是持续的 SE0 状态。1. USB 复位信号 = 持续 SE0SE0 = D+ = 0,D− = 0主机要复位设备时,强制把 D+、D− 同时拉低,保持一段时间这段持续的 SE0,就叫 USB Reset 信号2. 规范要求的时长低速 / 全速设备:......
USB 连接 · 复位 · 断开 完整时序速查表
硬件约定主机端口:D+、D− 各 15kΩ 下拉低速设备:D− 1.5k 上拉全速设备:D+ 1.5k 上拉SE0 = D+=0,D−=0LS/FS 空闲 = J 状态HS 空闲 = SE01. 设备插入连接(Attach)低速 LS 连接设备插入,D− 被 1.5k 上拉主机检测到:持续 ......
USB2.0高速设备复位与挂起态的区分
高速模式下,空闲态(Idle)和复位信号(Reset)确实都是 SE0(D+ 和 D- 都为低电平),但设备端有一套精密的机制来区分它们:通过时序长短和后续的设备行为(重新挂起上拉电阻)来判断。判断步骤挂起 (Suspend) 信号复位 (Reset) 信号总线空闲检测到 S......
关注公众号
  • HID人机交互
  • Linux&USB
  • Linux-USB百科
  • MIDI V1.0
  • TinyUSB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB3测试
  • USB3知识点
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • XHCI 1.2b 规范
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!