xhci d3-cold 模式下,主电源断电了,辅助电源有电,这样 XHCI 根 HUB 下的 Vbus 也是没有电的吧,这样就算有键盘(支持唤醒),也会因为键盘没有电而无法唤醒主机吧
xHCI D3‑Cold 唤醒逻辑分析
D3cold:主电源掉电,仅辅助电源(AUX)供电,注意区分:D3hot 是设备挂起、主电源还在。
先明确两个关键点:
- xHCI 控制器进入 D3cold,xHCI 控制器自身由 AUX 辅助电源维持供电,PCIe PME 功能可用;
- xHCI 根 Hub 的 VBUS,来源于主板主电源域,不是 AUX 辅助电源域。
你的推论
D3‑Cold,主电源断电、辅助电源有电 → xHCI根Hub VBUS无电 → USB键盘得不到供电 → 键盘无法发出信号,不能唤醒主机。
结论:这个推论大体正确,但存在主板硬件特例。
标准xHCI硬件行为(绝大多数PC)
- 系统S3待机 / 设备D3cold,主电源轨关闭。
- xHCI控制器:PCIe侧走AUX电源,控制器内部寄存器、PME逻辑还活着。
- 根Hub端口VBUS来自主电源,主电源关断 → VBUS=0V。
- USB设备(键盘)没有VBUS供电,键盘内部MCU完全失电,键盘什么信号都发不出来,LFPS、任何USB报文都不会产生。
此时就算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再怎么配置唤醒使能,物理层上设备没电,一切无效。
容易混淆概念澄清
- S3系统睡眠:系统挂起内存,很多主板保留USB 5V,键盘可以唤醒;此时xHCI不一定进入D3cold。
- D3cold是PCI设备状态,可以发生在S0(现代待机S0ix)下,也可以S3下;D3cold不等于系统关机。
- S0ix现代待机:很多笔记本会把xHCI打入D3cold,同时把USB VBUS切掉,这时候USB键盘按了没反应,只能电源键唤醒,就是你描述的现象。
总结你的观点复述确认
xHCI处于D3‑Cold,主电源断电,仅辅助电源有电;根Hub的VBUS跟随主电源断电,USB键盘得不到供电,键盘内部电路完全失电,无法产生USB唤醒信号,因此无法唤醒主机。
在标准台式机/大多数笔记本硬件上,这句话完全成立。只有主板硬件特殊将USB 5V接到AUX辅助电源域,才可以打破这个行为,这不属于xHCI协议标准行为。
补充踩坑点
很多人调试时,打开了Windows设备管理器里“允许此设备唤醒计算机”,但D3cold下键盘还是唤不醒,根源就是上面硬件电源域问题,不是驱动或xHCI寄存器配置的问题。驱动再怎么打开Wake使能,硬件把VBUS掐断,就没有任何作用。
PCIe扫盲系列(五)





