设备电源状态

设备电源状态描述计算机中设备的电源状态,独立于计算机中的其他设备。 设备电源状态命名为 D0、D1、D2 和 D3。 D0 完全处于状态,D1、D2 和 D3 是低功率状态。 状态号与电源消耗相反:编号较高的状态使用更少的电源。 从 Windows 8 开始,D3 状态分为两个子状态:D3hot 和 D3cold。

设备电源状态具有以下属性:

  • 电源消耗:设备使用的电量是多少?

  • 设备上下文:设备在此状态下保留多少操作上下文?

  • 设备驱动程序行为:设备驱动程序必须执行哪些操作才能将设备还原到完全运行状态?

  • 还原时间:将设备还原到完全操作状态需要多长时间? 大多数类型的设备还原时间略有不同,与一个设备类不同。 只有少数类型的设备(如 GPU)具有较长时间才能还原的大型硬件上下文。

  • 唤醒功能:设备是否可以从此状态请求唤醒? 一般情况下,如果设备可以从给定电源状态(例如 D2)请求唤醒,它还可以从任何更高功率状态(D1)请求唤醒。

电源状态的确切定义特定于设备。 并非所有设备都定义所有状态;许多设备仅定义 D0 和 D3 状态。 有关详细信息,请参阅设备类电源管理参考规范,了解为特定设备定义哪些设备电源状态,以及每个状态的操作要求。 (参考规范在 ACPI/Power Management 网站。

设备电源状态不需要与系统电源状态匹配。 例如,某些设备可能处于 off (D3) 状态,即使系统处于系统工作状态(S0)。

设备的电源状态似乎与设备的父总线的电源状态无关。 例如,当 USB 设备处于 D2(选择性挂起)状态时,其父主机控制器处于 D3 状态。 这两种状态似乎不一致,因为 DX 状态的定义在 USB 和总线(通常是 PCI 或 PCI Express)上,USB 主机控制器连接到。

某些设备能够在单个设备电源状态内采用多种不同的低功率模式。 如果设备驱动程序可以自动将设备从一种模式切换到另一种模式,而无需更改设备电源状态,则此类设备可以使用这些模式。 但是,作为一般规则,如果模式之间没有用户感知的差异,设备应仅使用最低电源模式。 如果低功率模式(如低速模式)对性能产生不利影响,或者对设备驱动程序以外的软件不透明,则硬件不应自动使用它。 有关详细信息,请参阅设备类电源管理参考规范。

驱动程序或电源管理器可以请求设备电源状态转换,并且所有驱动程序都必须准备好处理请求此类转换的 IRP。 有关详细信息,请参阅以下文章:

为设备电源状态发送IRP_MN_QUERY_POWER或IRP_MN_SET_POWER

处理设备电源状态的IRP_MN_QUERY_POWER

处理设备电源状态的IRP_MN_SET_POWER

与系统一样,设备可以从工作状态(D0)转换为任何低功率状态(D1、D2 或 D3),以及从任何低功率状态转换为工作状态。 下图是显示有效设备电源状态转换的状态图。

说明有效设备电源状态转换的关系图。

此图显示了 D3 到 D3hot 和 D3cold 的细分。 从 Windows 8 开始定义 D3hot 和 D3cold。 所有设备都需要支持 D0 状态和 D3hot 子状态。 关系图中显示的其他状态是可选的。

在上图中,从 D3hot 到 D3cold 的转换是设备低功率状态之间的唯一直接转换。 低功率状态之间的所有其他转换都需要中间转换到 D0,这允许设备驱动程序根据需要配置设备硬件,要么进入下一个低功率状态,要么保持 D0。 但是,设备退出 D3hot 并在关闭设备电源时进入 D3cold,这不需要设备驱动程序的干预。 此驱动程序在设备进入 D3hot 之前执行设备硬件的任何必要配置;无需其他配置即可为从 D3hot 到 D3cold 的转换准备设备。 有关详细信息,请参阅在驱动程序中支持 D3cold

PCI 根端口到终结点 D 状态映射

在 Windows 10 系统上,整体平台电源状态取决于 SoC(芯片上的系统)集成设备的电源状态(D 状态),包括 PCI 根端口。 根据正在开发的平台,PCI 根端口的 D 状态要求可能因每个平台电源状态而异。 建议 OEM 参考特定于 IHV 平台的文档,了解平台和设备电源状态要求。

下表枚举 PCI 根端口及其附加终结点的电源状态映射。 必须实现下面列出的终结点的 D 状态,才能使根端口进入目标 D 状态。

根端口目标 D 状态 终结点 D 状态
D0 D0、D0:F1
D0:F1 D3hot
D3hot D3cold (请参阅下面的注释)

注意

PCI D3cold 电源状态需要 BIOS 和设备驱动程序支持。 如果缺少支持,PCI 终结点将只能实现 D3Hot。 有关详细信息,请参阅 驱动程序中的支持 D3Cold。