进入现代待机模式时,硬件组件必须已准备好以转换到低功耗运行状态。 在软件组件和应用程序准备好低功率运行后,硬件组件(包括其软件设备驱动程序)也必须同样做好低功率运行的准备。
本文的其余部分介绍如何在硬件平台进入待机状态后,在芯片(SoC)上的系统外部和内部准备设备以低功率模式运行。
硬件转换为低功率模式
SoC 和 SoC 内部的所有设备都必须进入低功率模式,才能在睡眠期间实现长时间的电池使用时间。 硬件平台进入睡眠状态后,平台中的设备在有序的进程中切换到低功率模式,以 SoC 外部的设备开头。
首先,SoC 或核心硅以外的所有设备都必须进入低功率模式。 电源模式可能是时钟封闭空闲状态(例如,将 I²C 连接的触摸控制器置于睡眠模式)。 或者,电源模式可能是名为 D3cold 的电源封闭 0 瓦状态。 USB 连接的 Web 摄像头通常会在新式待机期间转换为 D3cold。 有关详细信息,请参阅“为 USB 设备支持 D3cold”。
每个设备类和连接总线都有自己的术语和要求,用于将设备转换为最低电源模式。 但是,在现代待机状态下,为平台中的每台设备设计低功耗模式对系统设计师来说至关重要。 系统的电池使用时间以及将 SoC 本身置于低功率模式下的能力取决于 SoC 本身外部每个设备的正确电源管理。
接下来,将网络和无线电设备置于低功率模式下进行睡眠。 在睡眠期间,这些设备通常仍应用电源来维护连接,并在必要时唤醒 SoC。 通信和无线电设备通常进入 D2/D3 低功耗状态,不过进入这些状态的方法因设备类别和总线类型而异。
在 SoC 之外的所有设备(包括通信设备)都已关闭后,SoC 上的主机控制器将关闭。 几乎每个 SoC 都有 USB、I²C、GPIO、SDIO 和 UART 主机控制器。 SoC 上的每个组件都必须关闭,以便 SoC 进入低功率模式。
为硬件在睡眠期间进入低功耗模式的准备过程可以形象化为倒三角形,如下图所示。 当整个 SoC 芯片停电时,将达到最低功率,但只有在金字塔上方的每组设备都停电后,才会发生这种情况。
将 SoC 外部的设备切换至关闭状态
SoC 芯片外部的每个设备必须进入低功率模式才能实现两个关键目标:
- 减少设备的能耗。
- 允许 SoC 自身关闭,具体方法是允许设备连接到的 SoC 内部主机控制器关闭。
在 SoC 外部关闭每个设备的方法因设备类和附加总线而异。
SoC 外部的某些设备置于 0 瓦的未使用电源状态(称为 D3cold)。 D3cold 的常见设备包括相机和传感器。 驱动程序必须保存设备的注册状态,然后将设备转换为 D3 电源状态。 ACPI 固件会通过切换 GPIO 线路或是从电源管理 IC (PMIC) 关闭电源轨,来移除电源。
某些 SoC 外部设备被置于低功耗闲置模式,在此模式下寄存器状态保持不变,或者设备可能只是处于时钟门控的状态。 例如,许多触摸控制器都具有功耗不到 1 毫瓦的时钟封闭状态。 使用时钟封闭状态的典型优点是,无需将设备连接到可切换电源轨,从而加快开机时间,降低成本。
通常,SoC 外部的每个设备都必须能够进入低功率模式,消耗不到 1 毫米的功率。 在具有内部时钟封闭状态时无法实现此功率级别的设备应通过 D3cold 实现电源封闭。
网络和无线电设备是 1 米瓦特准则的显著例外。 网络和无线电设备可能需要更多电源来维护与网络的连接或侦听无线设备。 某些系统设计器将这些电源状态转换称为 运行时 D3 (RTD3 )。
PCIe 设备的定向电源管理
SoC 外部的 PCIe 卡必须启用名为 Device-S4 的定向电源管理机制,以确保它们能够进入低功率模式。 如果没有 Device-S4,如果用户在桌面新式待机系统上将设备插入具有用户可访问槽的 PCIe 根端口,并且设备的驱动程序不支持运行时 D3 (RTD3),PCIe 设备可能会阻止系统进入 DRIPS。 若要避免此问题,OEM 必须将 PCIe 设备的根端口选择加入 Device-S4。 若要将 Device-S4 与给定 PCIe 设备结合使用,必须满足以下要求:
- 设备的父 PCIe 根端口必须被指定为 DRIPS 的限制条件。
- 父 PCIe 根端口必须在根端口的 D0->D3 时为根端口的所有下游子级应用基础设备重置,并在 D3->D0 转换时对这些子级解除基础设备重置的断言。 有关 PCIe 基本重置的详细信息,请参阅 PCI Express Base 规范的第 6.6.1 节。 可通过补充 ACPI 机制来提供基础重置的应用。 有关详细信息,请参阅 有关 PCI 电源管理的本指南。 若要指示平台遵循此基础重置要求,固件必须使用对 GUID {FDF06FAD-F744-4451-BB64-ECD792215B10} 的支持定义 _DSD。 如果不这样做,则不会为该 PCIe 根端口下的设备触发导向式 DRIPS。 有关详细信息,请参阅 PCIe 根端口的 ACPI 设备特定数据(_DSD)。
- 电源资源对于给定的 PCIe 根端口必须是唯一的,即不与其他任何根端口共享。
请注意,需要兼容性支持模块(CSM)的 PCIe 卡在现代待机系统中不起作用。 由于 UEFI 安全启动要求,新式待机系统上的 BIOS 不支持 CSM。 有关详细信息,请参阅 Windows 硬件兼容性计划规范。
有关特定设备类的电源管理的详细信息,建议系统设计人员查看用于新式待机的特定于设备的电源管理,以及 Microsoft Collaborate 上的特定于设备的文档。
关闭网络设备
关闭网络和无线电设备是准备硬件以便在睡眠期间进行低功率运行的另一个关键部分。 网络和无线电设备与 SoC 外部的其他设备不同,因为它们必须在应用电源的情况下保持开机,以便侦听感兴趣的事件并唤醒 SoC。 例如,Wi-Fi 无线电必须能够侦听与 WoL 模式匹配的数据包,并在检测到匹配数据包时唤醒 SoC。
Windows 在睡眠期间将网络设备转换为 D2/D3 状态(如果预期它们会唤醒 SoC)。 在将设备置于低功率 D2/D3 状态之前,Windows 网络堆栈会配置 WoL 模式和协议卸载。 所有网络设备(包括 Wi-Fi、移动宽带(MBB)和有线以太网,都必须能够在睡眠期间进入 D2/D3 状态。 如果不需要网络设备来唤醒系统,Windows 会将设备转换为 D3 状态。 如果用户启用了飞行模式或禁用了特定的网络设备,则可以将网络设备置于 D3 状态。
每个设备都有一种不同的物理方法,用于从其最低功率模式唤醒 SoC。 SDIO 或 UART 上的网络设备应向 GPIO 线路发出信号以唤醒 SoC。 通过 USB 或 HSIC 连接的网络设备应使用带内 USB 恢复信号来唤醒 SoC。 PCI 或 PCIe 总线上的网络设备预计将使用带内 PME 信号来唤醒 SoC。
此外,若用户已为此设备打开无线电,则无线电设备(例如蓝牙或近场通信(NFC)设备)有可能转入 D2 状态。 在 D2 状态下,蓝牙无线电侦听配对鼠标和键盘的输入事件。 如果检测到输入事件,蓝牙无线电会切换连接到 SoC 的 GPIO 线路,这会导致 SoC 从其低功率模式唤醒。
每个网络或无线电设备都具有其自己针对新式待机的关闭功能实现。 建议系统设计器在 Microsoft Collaborate 网站上读取特定于设备类的文档。
关闭 SoC 内部主机控制器
在 SoC 之外的所有设备(包括网络和无线电设备)都已关闭后,设备连接到的主机控制器必须关闭电源。 常见的主机控制器包括 USB、PCI、SDIO、GPIO 和 I IoC。
每个主机控制器的驱动程序只能在连接到主机控制器的每个设备关闭电源后才能关闭硬件。 常见示例是 USB 主机控制器。 仅当连接到它的所有 USB 设备都进入了选择性挂起状态后,USB 主机控制器才能关闭。 如果 USB 主机控制器已连接 USB 鼠标和键盘,则主机控制器只能在鼠标和键盘关闭后关闭电源。 如果鼠标或键盘保持打开状态,USB 主机控制器也会保持打开状态。
SoC 上的所有主机控制器必须关闭睡眠状态,以便 SoC 本身关闭电源。 这就是为什么每个设备执行设备电源管理至关重要的原因。 SoC 本身只能在每个主机控制器关闭时断电。 只有在连接到主机的所有设备都已关闭电源后,主机控制器才能关闭电源。
关闭 CPU 和 GPU
就电源管理而言,SoC 芯片上的 CPU 和 GPU 与其他设备不同。 CPU 和 GPU 会作为关闭 SoC 自身的一部分进行关闭,每当没有针对它们的软件活动时,便能够关闭。
系统上的大多数软件活动都通过“为新式待机准备软件”中详细介绍的准备阶段来停止。 Microsoft商店应用将在 PLM 阶段暂停。 桌面应用程序将在完成 DAM 阶段时暂停。 平台进入弹性阶段后,唯一保留的 CPU 活动是 Windows 本身的空闲运行。 同样,几乎没有 GPU 活动,因为所有应用都已暂停,并且屏幕已关闭。
即使屏幕处于打开状态并且用户正在使用电脑,Windows 也会持续管理系统上 CPU 的电源状态。 相同的 CPU 电源状态管理在睡眠期间将 CPU 置于低功率模式下。 当所有 CPU 处于低功率模式且 SoC 上的所有主机控制器都已关闭时,SoC 本身可以关闭。
关闭 SoC
当 SoC 上的所有单个主机控制器、CPU 和 GPU 都已关闭时,Windows 将确定是否可以安全地关闭整个 SoC 本身。 SoC 供应商提供电源引擎插件(PEP)来告知 Windows SoC 是否已保存所有状态,以便 SoC 已准备好进入低功率模式。 对于基于 Intel 的 SoC,PEP 是内置提供的。
每个 SoC 供应商都具有不同的 SoC 范围低功率状态实现。 这些状态通常是时钟封闭或电源封闭状态,在这些状态下,内存内容以自刷新方式保留,系统可以通过可编程计时器和少量 GPIO 引脚(功耗非常小)来进行唤醒。 Windows 将最低 SoC 电源状态称为最深层运行时空闲平台状态(DRIPS)。
DRIPS 状态始终具有以下特征:
- 对于在自刷新模式下保留内存的 SoC,DRIPS 是最低功耗状态。
- DRIPS 允许 SoC 在出现来自网络、无线电和输入设备的事件时唤醒。
- 不允许在 DRIPS 状态期间运行 CPU 代码。
- 当 SoC 处于 DRIPS 状态时,平台在睡眠期间消耗的电量最少(网络和无线电设备导致的能耗差异除外)。