设备电源状态

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

设备电源状态的特征如下:

  • 功耗:设备使用多少功率?

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

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

  • 还原时间:将设备还原到完全运行状态需要多长时间? 大多数类型的设备的还原时间适中,从一个设备类到另一个设备类几乎没有区别。 只有少数类型的设备(如 GPU)具有非常大的硬件上下文,还原时间要长很多。

  • 唤醒功能:设备是否可以请求从此状态唤醒? 通常,如果设备可以从给定的电源状态 ((例如 D2) )请求唤醒,则设备也可以从任何更高功率的状态 (D1) 请求唤醒。

电源状态的确切定义特定于设备。 并非所有设备都定义所有状态;许多设备仅定义 D0 和 D3 状态。 请参阅设备类电源管理参考规范,了解为特定设备定义的设备电源状态以及每种状态的操作要求。 (ACPI/电源管理 网站提供了参考规范。)

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

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

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

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

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

处理设备电源状态的 IRP_MN_QUERY_POWER

处理设备电源状态的 IRP_MN_SET_POWER

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

说明有效设备电源状态转换的示意图。

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

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

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

在Windows 10系统上,整个平台电源状态取决于 SoC (System 片上) 集成设备的电源状态 (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