PCIe扫盲系列(五)
+ -

xhci d3-cold 模式下,主电源断电了,辅助电源有电,这样 XHCI 根 HUB 下的 Vbus 也是没有电的吧,这样就算有键盘(支持唤醒),也会因为键盘没有电而无法唤醒主机吧

2026-08-27 1 0

xHCI D3‑Cold 唤醒逻辑分析

D3cold:主电源掉电,仅辅助电源(AUX)供电,注意区分:D3hot 是设备挂起、主电源还在。

先明确两个关键点:

  1. xHCI 控制器进入 D3cold,xHCI 控制器自身由 AUX 辅助电源维持供电,PCIe PME 功能可用;
  2. xHCI 根 Hub 的 VBUS,来源于主板主电源域,不是 AUX 辅助电源域

你的推论

D3‑Cold,主电源断电、辅助电源有电 → xHCI根Hub VBUS无电 → USB键盘得不到供电 → 键盘无法发出信号,不能唤醒主机。

结论:这个推论大体正确,但存在主板硬件特例。


标准xHCI硬件行为(绝大多数PC)

  1. 系统S3待机 / 设备D3cold,主电源轨关闭。
  2. xHCI控制器:PCIe侧走AUX电源,控制器内部寄存器、PME逻辑还活着。
  3. 根Hub端口VBUS来自主电源,主电源关断 → VBUS=0V
  4. USB设备(键盘)没有VBUS供电,键盘内部MCU完全失电,键盘什么信号都发不出来,LFPS、任何USB报文都不会产生
  5. 此时就算xHCI端口使能了Wake on Disconnect / Wake on Connect,键盘本身没电,没有任何电气事件,无法触发xHCI唤醒,也无法向上提交PME

    普通USB键盘,D3cold下确实不能唤醒,因为设备本身没电。

注意:S3(挂起到内存)和D3cold不一样:S3很多主板不会把USB VBUS全部关掉,会保留5V给USB口,所以S3下USB键盘可以唤醒;但D3cold是设备级深度断电状态。

那什么USB设备可以在D3cold下唤醒?

场景1:设备自带独立供电

例如自供电USB设备,外接电源,不受主板VBUS控制。

  • 主板根Hub VBUS=0V,但设备自己有电;
  • 设备可以驱动差分数据线发出LFPS唤醒脉冲;
  • xHCI Rx电路由AUX有电,可以检测到LFPS,触发PME,唤醒主机。

场景2:主板硬件做了特殊改造(少数笔记本)

部分笔记本硬件做了:USB端口5V VBUS切到AUX辅助电源域
即便主电源关闭,USB口5V依然由AUX供电,此时键盘有电,可以发出LFPS,xHCI就可以D3cold唤醒。
但是!这不是xHCI规范强制要求,属于主板OEM自定义硬件设计,绝大多数台式机没有这个设计
xHCI spec没有规定D3cold时根端口VBUS必须维持,规范允许VBUS掉电。

xHCI寄存器层面约束

  • D3cold状态,xHCI控制器核心、PME逻辑、LTSSM的Rx检测电路依靠AUX电源;
  • 但是根Hub端口电源开关是硬件电源域,不受xHCI寄存器控制;xHCI寄存器只能发送关闭VBUS请求,最终由主板电源IC执行。
  • 如果主板电源IC在D3cold切断USB 5V,那么xHCI再怎么配置唤醒使能,物理层上设备没电,一切无效。

容易混淆概念澄清

  1. S3系统睡眠:系统挂起内存,很多主板保留USB 5V,键盘可以唤醒;此时xHCI不一定进入D3cold。
  2. D3cold是PCI设备状态,可以发生在S0(现代待机S0ix)下,也可以S3下;D3cold不等于系统关机。
  3. S0ix现代待机:很多笔记本会把xHCI打入D3cold,同时把USB VBUS切掉,这时候USB键盘按了没反应,只能电源键唤醒,就是你描述的现象。

总结你的观点复述确认

xHCI处于D3‑Cold,主电源断电,仅辅助电源有电;根Hub的VBUS跟随主电源断电,USB键盘得不到供电,键盘内部电路完全失电,无法产生USB唤醒信号,因此无法唤醒主机。

在标准台式机/大多数笔记本硬件上,这句话完全成立。只有主板硬件特殊将USB 5V接到AUX辅助电源域,才可以打破这个行为,这不属于xHCI协议标准行为。

补充踩坑点

很多人调试时,打开了Windows设备管理器里“允许此设备唤醒计算机”,但D3cold下键盘还是唤不醒,根源就是上面硬件电源域问题,不是驱动或xHCI寄存器配置的问题。驱动再怎么打开Wake使能,硬件把VBUS掐断,就没有任何作用。

0 篇笔记 写笔记

关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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