传感器电源管理

移动 PC 通常包含传感器设备,例如环境光传感器 (ALS)、3-D 加速度计、3-D 陀螺仪或 3-D 磁力计。 当操作系统或应用程序未使用传感器设备时,电源管理软件可以将设备切换到低功耗模式以降低功耗。 在支持现代待机电源模型的 PC 中,传感器设备应在 PC 进入新型待机后不久切换到低功耗模式,并保持此模式,直到 PC 退出现代待机。

本文介绍了如何实现传感器设备的电源管理。 此外,本文还讨论了可选传感器微控制器(也称为传感器融合集线器或传感器 MCU)和聚合传感器设备的电源管理。 (例如,罗盘传感器设备可以通过在传感器微控制器的控制下聚合加速度计、陀螺仪和磁力计来实现。微控制器将这些传感器设备作为单个逻辑传感器设备公开给 Windows。)

传感器和传感器微控制器

传感器硬件对于现代移动体验至关重要。 从 Windows 10 开始,丰富的系统基础结构可用于公开和管理多个传感器设备。 这一基础架构简化了包含传感器信息并支持关键内置 Windows 场景的应用程序的开发,例如屏幕自动旋转或根据环境光更改显示器亮度。

在系统运行期间,各个传感器可以在不使用时关闭。 使用特定传感器设备的要求通过 Windows Sensor API 传达给设备及其驱动程序。 当操作系统或任何应用程序未使用传感器设备时,可以通过传感器驱动程序或传感器微控制器上运行的固件关闭设备。

在系统显示器关闭并且硬件平台进入现代待机后,所有尚未处于低功耗状态的传感器设备和可选传感器微控制器应在几秒钟内进入其低功耗待机状态,以便整个平台可以进入低功耗状态。 但是,传感器驱动程序不是通过直接监视与现代待机之间的转换来确定何时应该打开和关闭传感器设备。 相反,当设备正在由一个或多个客户端(可以是应用程序或操作系统组件)主动使用时,传感器驱动程序应该允许设备接收电源。 当没有客户端使用设备时,驱动程序应断开设备的供电。

当传感器类扩展请求驱动程序开始报告传感器样本读数时,它会调用传感器驱动程序的 EvtSensorStart 回调方法。 当传感器类扩展请求驱动程序停止报告传感器样本读数时,它会调用驱动程序的 EvtSensorStop 回调方法。 有关详细信息,请参阅关于传感器驱动程序事件

在计算机进入现代待机并且所有传感器设备进入低功耗状态后,所有系统传感器硬件的总功耗必须低于一毫瓦。 传感器设备和可选传感器微控制器可能会进入特定于传感器硬件的低功耗待机状态。 或者,可以在传感器驱动程序和/或系统 ACPI 固件的控制下关闭传感器设备和可选传感器微控制器的硬件电源轨。

从 Windows 10 开始,支持一组有限的传感器硬件连接选项到现代备用平台中的核心芯片或片上系统 (SoC)。 以下部分详细介绍了受支持的硬件和软件配置以及它们在现代待机期间和活跃使用平台时的电源管理行为。

电源管理模式

Windows 期望每个传感器设备或传感器微控制器具有三种设备电源模式(活动、空闲和待机)以及可选的零瓦断电模式。 下表描述了传感器设备和可选传感器微控制器的电源模式。 该表区分了正在使用传感器硬件但当前处于空闲状态的空闲模式和未使用传感器硬件的空闲模式。

“模式” 说明 平均功率消耗 退出延迟到活动状态 转换机制

活动

传感器设备和/或传感器微控制器主动提供或处理环境变化。

< 100 毫瓦

空值

空值

空闲(使用中)

传感器设备和/或传感器微控制器正被一个或多个应用程序使用,并等待向主处理器提供下一组传感器信息。

< 50 毫瓦

特定于传感器

硬件自治

空闲(未使用)

传感器设备和/或传感器微控制器没有被任何应用程序使用。 保持传感器或传感器微控制器的校准数据。

< 5 毫瓦

特定于传感器

描述传感器设备当前使用情况的人机接口设备 (HID) 命令或传感器框架消息。

Standby

传感器设备和/或传感器微控制器没有被任何应用程序使用。 保持传感器或传感器微控制器的校准数据。 传感器和/或传感器微控制器在主处理器上运行的软件请求之前不会采取任何进一步的操作。

< 1 毫瓦(适用于所有系统传感器)

< 10 毫瓦

多个选项:

  • HIDI2C 命令 SET_POWER(Sleep)
  • 第三方驱动程序专用消息
  • 从 SoC 到传感器硬件的 GPIO 线路

电源移除

传感器设备和/或传感器微控制器断电,所有硬件上下文都丢失。

0 毫瓦

< 100 毫瓦

外部实体通过 ACPI 固件移除电源或施加电源以响应 D3 电源 IRP。

注意

在上表中,“待机”一词是指不同于现代待机的设备电源模式,现代待机是平台范围的电源状态。

软件电源管理机制

传感器设备和传感器微控制器的运行时电源管理主要取决于它们是否被使用。 作为一般规则,传感器驱动程序和硬件在操作系统或应用程序不使用传感器时应将其置于空闲电源模式。 Windows 传感器平台提供有关连接到给定传感器的应用程序或操作系统客户端数量以及传感器占空比或数据速率要求的信息。 在系统运行和显示器打开期间,传感器驱动程序和/或硬件使用此信息将传感器设备无缝转换到空闲电源模式。

在系统显示器关闭且平台进入现代待机后,Windows 期望所有传感器和传感器微控制器进入待机或断电模式。

选择用于传感器设备和可选传感器微控制器的软件电源管理机制时,取决于设备驱动程序如何向 Windows 公开传感器硬件,以及传感器硬件如何物理连接到 SoC 或核心芯片。 Windows 支持两种公开和连接传感器设备的方法。 一种方法是通过 I2C 连接使用内置传感器 HID 类驱动程序,其中内置 HIDI2C 驱动程序通过 I2C 连接传输 HID 信息。 另一个需要第三方驱动,实现通用传感器驱动接口并调用 SensorscxFunctions 表中的方法。

下表比较了连接到传感器或传感器微控制器的两个选项。 选择用于连接到传感器硬件的两个选项之一决定了将传感器硬件转换到待机或断电模式所需的软件电源管理机制。

连接选项 总线连接 需要传感器驱动程序。 驱动程序提供商 注释

HIDI2C

传感器硬件通过 I2C 直接连接到 SoC 或核心芯片。

传感器 HID 类驱动程序 + HID-over-I2C 类驱动程序

Microsoft. 从 Windows 8 开始提供收件箱组件。

优点/缺点

第三方传感器驱动程序

传感器硬件通过 I2C 或 UART 直接连接到 SoC 或核心芯片。

实现 SENSOR_CONTROLLER_CONFIG 的第三方驱动程序

传感器设备供应商。

优点/缺点

HIDI2C

对于 HIDI2C 选项,可选传感器微控制器通过 I2C 总线物理连接到 SoC 或核心芯片。 微控制器公开了多个顶级 HID 集合,每个逻辑传感器设备一个。 例如,指南针传感器可以通过 HID 作为逻辑传感器设备公开,该设备是传感器微控制器后面的加速度计、陀螺仪和磁力计传感器的集合。 这在连接性和软件方面是最容易实现的,因为它不需要用于传感器设备的第三方软件。

Windows HIDI2C 堆栈与触摸控制器和笔数字化仪的堆栈相似,因为它支持两种软件电源管理机制:带内 HID 命令和运行时转换到 D3 状态。

带内 HID 命令

SET_POWER(Sleep) 在显示器关闭且平台进入现代待机后发送到设备。 此命令可以将设备转换到待机电源模式。

SET_POWER(On) 当平台存在现代待机并且显示器再次打开时发送到设备。

HID 传感器设备堆栈的运行时转换到 D3 状态

D3 IRP 在 SET_POWER(Sleep) 命令之后立即发送到设备的驱动程序堆栈的 IRP_MJ_POWER 请求。 这告诉设备进入 D3 设备电源状态。 作为向 D3 过渡的一部分,系统 ACPI 固件可能会运行控制方法以将设备切换到待机或断电模式。

D0 IRP 一个 IRP_MJ_POWER 请求,当平台存在现代待机并且显示器打开时发送到设备的驱动程序堆栈。 这告诉设备进入 D0 设备电源状态。 如有必要,系统 ACPI 固件可以运行控制方法将设备切换回空闲(未使用)模式。

第三方传感器驱动程序

对于第三方传感器驱动程序,传感器微控制器通过 I2C 总线或 UART 物理连接到核心芯片。

传感器设备供应商必须提供实现 SENSOR_CONTROLLER_CONFIG 接口的用户模式驱动程序框架 (UMDF) 驱动程序。 UMDF 驱动程序通过 I2C 或 UART 与传感器设备通信。 这可以实现多次,即,针对传感器微控制器后面的每个传感器实现一次。 第三方传感器驱动程序负责创建和协调所有电源管理。

第三方传感器驱动程序应使用 Windows 驱动程序框架 (WDF) 构建并基于 Adxl354acc 示例驱动程序。 驱动程序必须使用电源管理队列并通过调用 IWDFDevice3::AssignS0IdleSettingsEx 方法来配置 D3 空闲状态。 驱动程序应使用 IWDFDevice2::StopIdle 和 IWDFDevice2::ResumeIdle 方法向 WDF 指示设备何时处于空闲或活动状态。 驱动程序还应该通过将 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 结构的 ExcludeD3Cold 成员设置为 WdfFalse 来启用 D3cold。 启用 D3cold 允许平台在传感器设备空闲并进入 D3 状态后断开其电源。

作为最佳实践,请将特定于设备的代码放在驱动程序中,并将特定于平台的代码放在 ACPI 固件中,以便在多个平台上以低成本重用驱动程序代码。

进入现代待机要求

第三方传感器驱动程序对电源管理的要求是传感器硬件待机功耗的功能。

当传感器设备准备好进入待机或断电模式时,第三方传感器驱动程序应启动到 D3 的转换,即使设备能够使用带内通信机制切换到功耗更低的电源模式超过一毫瓦。 提出此要求的原因是 Windows 中的许多总线驱动程序会跟踪其终结点设备的设备电源状态,并且仅在所有终结点设备都已断电时才断电。 对于某些 SoC 设计和连接总线(特别是通用串行总线 (USB)),所有终结点设备和主机控制器必须处于 D3 中,以便 SoC 在现代待机期间进入最低功耗状态。 如果无法进入最低功耗状态,则会导致系统很难满足现代待机对电池寿命的要求。

如果传感器硬件的所有受控传感器硬件的待机功耗小于 1 毫瓦,则传感器驱动程序应在传感器(或微控制器上的所有传感器)不再使用时自动将设备切换到待机模式。

如果传感器硬件的待机功耗大于 1 毫瓦,则传感器驱动程序必须执行 D3 转换并允许 ACPI 控制方法从传感器设备中移除电源。 传感器驱动程序必须保存所有必需的传感器设备状态,以便在 D3 期间可以从设备中断开电源。 传感器硬件供应商应与系统集成商密切合作,以确保传感器硬件和驱动程序可靠、快速地执行 D3 转换。

重要

驱动程序必须在设备进入 D3 之前保存所有传感器设备上下文,并且必须在设备进入 D0 后恢复所有传感器设备上下文。

进入现代待机后不久,Windows 通过禁用操作系统对传感器的使用(例如,环境光和旋转)和挂起应用程序,从而自动停止使用所有传感器。 传感器驱动程序应聚合所有受控传感器硬件的状态,并在所有传感器不再使用时将此硬件切换到备用设备电源模式。

将传感器设备切换到待机模式的机制可以设计为通过将设备连接到 SoC 的总线使用带内通信。 例如,可以通过总线将专有待机命令发送到传感器硬件。 或者,传感器硬件可能连接到 GPIO 线,将设备切换到待机模式和退出待机模式。

注意

当使用 GPIO 线路将设备切换到待机模式时,传感器驱动程序应将驱动程序堆栈转换为 D3 并允许设备的 ACPI 控制方法(例如,_PS3)将 GPIO 线设置为放置所需的状态硬件处于待机模式。 此方案允许以与平台无关的方式编写传感器驱动程序,特定的 GPIO 线路、时序要求和其他特定于平台的信息在系统集成商提供的 ACPI 固件中编码,而不是在特定于设备的驱动程序中。

退出现代待机要求

当平台退出现代待机时,传感器驱动程序必须将传感器硬件转换回空闲(未使用)模式。 随着系统服务的恢复,Windows 将请求使用执行系统功能所需的传感器,例如旋转和环境光。 在应用程序恢复时,它们可能会请求传感器信息。 如果传感器硬件需要带内消息以使设备返回空闲模式,则设备驱动程序应在发送第一个传感器信息请求后立即发送此消息。 如果传感器硬件要求使用 GPIO 线路来指示设备返回到空闲状态,则在提供第一次传感器信息请求时,驱动程序必须使用此 GPIO 行执行到 D0 的转换。 在这种情况下,ACPI 控制方法(例如,_PS0)应根据需要切换 GPIO 线以启动转换。 最后,如果传感器硬件之前要求过转换到断电模式(因为待机模式下的功耗超过 1 毫瓦),传感器驱动程序必须执行到 D0 的转换,并允许 ACPI 控制方法恢复设备的电源。

支持的硬件电源配置

用于传感器设备的硬件电源管理配置取决于传感器硬件在待机模式下的功耗以及可选传感器微控制器是否管理设备。

待机功率 1 毫瓦<

如果传感器设备在待机功耗模式下的功耗不超过 1 毫瓦,则平台设计师不需要将传感器硬件连接到可以通过 ACPI 控制方法打开和关闭的电源轨。 以下一种机制用于将传感器切换到待机电源模式:

  • HID SET_POWER(Sleep) 命令。
  • SoC 中的 GPIO 线路。
  • 由第三方传感器驱动程序发送到传感器硬件的专有命令。

如果平台包括传感器微控制器,则微控制器芯片可能包含一个或多个集成传感器设备,或者可能连接到一个或多个外部传感器设备。 在任何一种情况下,从软件的角度来看,这些传感器设备都隐藏在微控制器后面,对 Windows 是不可见的。 如果当微控制器和传感器硬件处于待机电源模式时,传感器微控制器及其聚合传感器设备的总功耗低于 1 毫瓦,则平台设计师无需将微控制器或传感器硬件连接到可以通过 ACPI 控制方法打开和关闭的电源轨。 传感器微控制器使用以下机制之一将自身及其管理的所有传感器转换为待机模式和从待机模式转换:

  • 通过通信总线发送的 HIDI2C SET_POWER(或类似)命令。
  • SoC 中的 GPIO 线路。

如果传感器需要来自 SoC 的 GPIO 线路来启动与待机模式之间的转换,则平台固件必须在传感器硬件设备下的 ACPI 命名空间中提供 _PS3 对象和 _PS0 对象。 ACPI 固件还必须包含一个 GPIO 操作区域,用于描述从 SoC 到传感器硬件的 GPIO 线路。 _PS3 控制方法切换 GPIO 线以将设备切换到待机模式,_PS0 控制方法切换 GPIO 线以将传感器硬件切换到空闲模式。

以下框图显示了独立传感器的电源管理选项,该传感器在待机电源模式下的功耗低于 1 毫瓦。

一种选择是使用 Windows HIDI2C 堆栈,如上图左侧所示。 在这种情况下,要让传感器开始转换到待机功率模式,可以通过带内 HID SET_POWER(Sleep) 命令或通过 ACPI 驱动程序(通过执行传感器的 _PS3 控制方法)处理的 D3 IRP。

另一种选择是使用第三方传感器驱动程序,如上图右侧所示。 第三方传感器驱动程序可以通过如下两种方法来启动到待机电源模式的转换:使用专有的带内命令;或发送 D3 IRP,ACPI 驱动程序通过执行传感器的 _PS3 控制方法来处理。

无论传感器设备是集成在微控制器芯片中还是在微控制器芯片外部,平台设计人员都可以选择其中一种机制。

待机功率 1 毫瓦>

如果平台包括传感器硬件和/或传感器微控制器,它们在待机电源模式下的功耗合计超过 1 毫瓦,则传感器硬件和微控制器必须在系统处于现代待机状态时转换到断电模式。 在此配置中,传感器、可选传感器微控制器和微控制器后面的任何传感器都应放置在单个电源轨上,该电源轨在 SoC 的 GPIO 线路的控制下打开和关闭。

此配置要求平台设计师将所有传感器硬件放置在可切换电源轨上,由 SoC 的 GPIO 线路控制。 如果传感器硬件需要多个输入电压,则可以使用多个开关,每个开关由同一 GPIO 线路控制。 除了可切换电源轨之外,平台 ACPI 固件还必须在命名空间中定义电源资源。 此电源资源描述传感器硬件,并包括负责使用 GPIO 操作区域从 SoC 切换 GPIO 线路的 _ON 和 _OFF 方法。

平台固件必须包含对可切换电源轨上 ACPI 命名空间中每个传感器设备下的电源资源的引用,包括 _PR0 和 _PR3 对象。

以下框图显示了传感器硬件和/或传感器微控制器的电源管理选项,它们在待机电源模式下的总功耗超过 1 毫瓦。 这两个选项是使用 Windows HIDI2C 堆栈,如图左侧所示,或者使用第三方传感器驱动程序,如图右侧所示。

在使用内置 HIDI2C 驱动程序堆栈的配置中,如上图左侧所示,HIDI2C 驱动程序在显示器关闭且平台进入现代待机后启动 D3 转换。 当 D3 IRP 流经 ACPI 驱动程序时,将评估 _PR3 对象,并且 Windows 将通过运行 _OFF 方法关闭指定的电源资源。 如果多个传感器共享电源资源,Windows 会自动对所有传感器进行引用计数,并仅在所有传感器都进入 D3 后运行 _OFF 方法。

如果传感器硬件使用第三方传感器驱动,如上图右侧所示,控制流程与之前相同,只是由传感器驱动负责发起到 D3 的转换。

在平台从现代待机恢复并且应用程序或操作系统请求使用传感器后,驱动程序将转换到 D0。 D0 IRP 流经 ACPI 驱动程序并且 _PR0 对象接受评估,以便 ACPI 驱动程序为关联的电源资源执行 _ON 方法。 _ON 方法切换 GPIO 线路以打开可切换电源轨。 如果系统使用第三方传感器驱动程序,则驱动程序必须请求 D0 IRP 并在操作系统或应用程序请求传感器数据后立即启动到 D0 的转换。

唤醒问题

传感器或可选传感器微控制器没有唤醒问题。 传感器设备在新式待机期间应处于待机或断电模式,并且在平台处于新式待机时不会唤醒 SoC。

测试和验证

对于系统设计师来说,验证在显示器关闭进行现代待机时传感器硬件是否进入待机或断电模式,这一点至关重要。 用于测试和验证设备电源管理的方法取决于传感器设备的连接方式。

HIDI2C 连接的传感器

如果系统使用 Windows HIDI2C 堆栈,系统集成商应联系传感器驱动程序供应商以获取有关如何最好地验证驱动程序是否正确执行电源管理的信息。 我们鼓励传感器驱动程序供应商使用 Windows 事件跟踪 (ETW) 跟踪其设备驱动程序中的所有电源管理决策,并向系统集成商提供示例文档,以描述如何使用 ETW 事件和 Windows 性能工具包 (WPT)。

第三方传感器驱动程序

如果系统使用第三方传感器驱动程序,系统集成商应联系传感器驱动程序供应商以获取有关如何最好地验证驱动程序是否正确执行电源管理的信息。 我们鼓励传感器驱动程序供应商使用 Windows 事件跟踪 (ETW) 跟踪其设备驱动程序中的所有电源管理决策,并向系统集成商提供示例文档,以描述如何使用 ETW 事件和 Windows 性能工具包 (WPT)。

如果驱动程序在其所有传感器设备不再使用时启动到 D3 的转换,你可以按照以下列表中的说明验证此转换是否按预期发生,并且传感器设备在应用程序或操作系统需要再次使用该设备。

以软件为中心的方法使用 Windows 检测来验证 D3 IRP 是否通过传感器设备的设备驱动程序堆栈。 Windows 电源管理器具有内置的 ETW 检测工具,其中包括用于检测 Dx IRP(设备电源请求)的检测工具。 若要在手动模式下查看此信息,请下载 Windows Performance Toolkit 并将其安装在受测系统上。

安装 Windows Performance Toolkit 后,请按照以下说明启动用户模式 XPerf 跟踪:

  1. 以管理员身份打开命令提示符窗口。

  2. 浏览到 \%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\ 文件夹。

  3. 要启动 Xperf,请运行以下命令:xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power

  4. 按电源按钮将系统转换为现代待机。

  5. 等待 30 秒。

  6. 通过按电源按钮将系统脱离现代待机。

  7. 运行以下命令以停止事件记录:xperf.exe -stop power_session

  8. 将二进制跟踪文件转换为 .csv 和人类可读的格式:xperf.exe –i \user.etl > power.txt

  9. 在文本编辑器中打开 Power.txt 文件并搜索传感器设备的硬件 ID。 你可以在设备管理器中“设备实例路径”下设备属性的“详细信息”选项卡中查找传感器设备的硬件 ID。 在以下示例中,传感器设备的设备实例路径为 ACPI\MST0731\2&daba3ff&0。

  10. 传感器设备的 D3 IRP 的启动由 Microsoft-Windows-Kernel-Power/IRP/Stop 类型的事件指示,该事件具有传感器设备的设备实例路径和最后一个事件值 3,这表明目标状态是 D3。 Power.txt 文件中的以下输出事件显示了 D3 IRP 的开始。 此事件的最后两个参数值(显示在最右侧)指示设备实例路径和目标状态。

    Microsoft-Windows-Kernel-Power/Irp/Start, 7605393, "Unknown" (4), 256, 0,,,,, 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\MSFT0731\2&daba3ff&0", 3

  11. 此事件应记录在 Power.txt 输出文件的开头附近。 上述输出事件中的参数值 0x868e2728 是指向 D3 IRP 的 IRP 结构的指针。 通过在跟踪文件中搜索具有相同 IRP 指针的后续事件,你可以跟踪 D3 IRP 在流经传感器设备的驱动程序堆栈时的进度。

  12. Microsoft-Windows-Kernel-Power/Irp/Start, 7605393, "Unknown" (4),256, 0,,,,, 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\ATML1000\2&daba3ff&0", 3

  13. Microsoft-Windows-Kernel-Power/Driver/Start, 7605416, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"

  14. Microsoft-Windows-Kernel-Power/Driver/Stop, 7605515, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0

  15. Microsoft-Windows-Kernel-Power/Driver/Start, 7605522, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fab6a0, "\Driver\i2cdrv"

  16. Microsoft-Windows-Kernel-Power/Driver/Stop, 7608342, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fab6a0

  17. Microsoft-Windows-Kernel-Power/Driver/Start, 7608351, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x857ffb90, "\Driver\ACPI"

  18. Microsoft-Windows-Kernel-Power/Driver/Stop, 7608416, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x857ffb90

  19. Microsoft-Windows-Kernel-Power/Driver/Start, 7608424, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"

当 Windows ACPI 驱动程序 Acpi.sys 处理 D3 IRP 时,Acpi.sys 运行相应的 _PR3 控制方法。 系统固件设计师提供此控制方法来指示必须关闭哪个电源资源才能使传感器设备进入 D3 状态。 Acpi.sys 还执行 Power Resource 下的 _OFF 控制方法。

当平台退出现代待机并且显示器打开时,你可以使用类似的过程来验证传感器设备是否返回到 D0。 按下电源按钮唤醒系统和操作系统或恢复的应用程序后,将立即记录传感器设备的 Microsoft-Windows-Kernel-Power/IRP/Start 事件,目标状态为 0(表示 D0)请求传感器数据。

传感器和传感器微控制器电源管理清单

系统集成商和传感器设备供应商应使用以下清单来确保其系统电源管理设计与 Windows 8 及更高版本兼容。

  • 选择与内置 HIDI2C 驱动程序和 HIDSensor 驱动程序堆栈兼容的传感器硬件。
  • 选择待机功耗小于 1 毫瓦的传感器硬件。
  • 验证打开显示器时传感器硬件和第三方驱动程序(如果需要)是否支持运行时空闲电源管理:
    • 当应用程序或操作系统不使用传感器时,应关闭传感器并自动进入 D3。
    • 当应用程序或操作系统请求传感器数据时,传感器应开机并自动进入 D0。
    • 第三方传感器驱动程序应实现为 WDF 驱动程序,并且可以基于 SpbAccelerometer 示例驱动程序。
    • 应限制对传感器信息的轮询,并以尽可能低的功耗水平启用。 例如,轮询模拟传感器应该发生在微控制器或其他低功耗控制硬件之后,当新的传感器数据超过某个阈值检测值时,这可能会中断 SoC。 避免在 SoC 上定期运行的驱动程序中轮询传感器,这会显著增加整体系统功耗。
  • 如果传感器硬件使用第三方驱动程序:
    • 系统集成商应与传感器设备供应商沟通,以了解如何为传感器硬件实施电源管理。
    • 如果传感器硬件在待机电源模式下消耗超过 1 毫瓦,请将传感器硬件放置在由 SoC 的 GPIO 线路控制的独立电源轨上。 提供对 ACPI 命名空间中传感器设备下所需 ACPI 电源资源、_ON/_OFF 控制方法和电源资源的引用(如下所述)。
    • 如果传感器硬件使用 SoC 的 GPIO 线路将设备切换到待机电源模式,请确保系统 ACPI 固件包含正确的 _PS3 和 _PS0 控制方法(如下所述)。
  • 如果传感器硬件包括一个传感器微控制器,其后面连接有传感器设备,则传感器微控制器必须有办法关闭传感器设备。 可以通过使用将微控制器连接到设备的总线上的带内通信或从微控制器到设备的 GPIO 线路来关闭设备。
  • 如果传感器硬件需要 SoC 的 GPIO 线路将设备切换到待机电源模式:
    • 确保 SoC 的 GPIO 线路满足传感器硬件供应商设置的电平和触发要求。
    • 在 ACPI 命名空间中,将 SoC GPIO 引脚描述为 GPIO 操作区域的一部分。
    • 在 ACPI 命名空间中的传感器设备下提供 _PS3 控制方法,以根据需要切换 GPIO 线上的信号,从而将传感器硬件切换到待机电源模式。
    • 在 ACPI 命名空间中的传感器设备下提供 _PS0 控制方法,用于在设备切换到 D0 后根据需要切换 GPIO 线上的信号,从而将传感器硬件切换到空闲或活动模式。
  • 如果传感器硬件在待机功耗模式下消耗超过 1 毫瓦:
    • 将所有传感器硬件放置在电源轨上,该电源轨可以通过 SoC 的 GPIO 线路打开和关闭。 或者,如果平台包含具有不同电源电压要求的多个传感器,则提供可独立切换的单独导轨。
    • 将可切换电源轨描述为 ACPI 命名空间中的电源资源。
    • 在此电源资源下,提供 _ON 和 _OFF 控制方法,通过使用被描述为 GPIO 操作区域一部分的 GPIO 线来打开和关闭电源轨。
    • 在 ACPI 命名空间中,提供为传感器硬件指定电源资源的 _PR3 和 _PR0 对象。
    • 确保 _ON 和 _OFF 方法包含传感器硬件的任何去抖动或时序要求。
  • 测试和验证平台中传感器设备的运行时电源管理。 与传感器硬件供应商密切合作,验证在系统显示开启时运行时电源管理。
  • 测试并验证当平台进入现代待机时传感器硬件进入待机或断电模式。
    • 如果传感器硬件使用 Windows 附带的 HIDI2C + HID 传感器驱动程序堆栈,请参阅“测试和验证”了解详细信息。
    • 如果传感器硬件使用第三方驱动程序,请联系传感器驱动程序供应商以获取推荐的测试方法。
    • 如果传感器驱动程序在进入待机或断电模式的过程中执行到 D3 的转换,请使用测试和验证中所述的 Windows Performance Toolkit。 验证平台进入现代待机时传感器硬件进入 D3,系统退出现代待机并再次请求传感器信息后传感器硬件进入 D0。
  • 在待机或断电模式下测量传感器硬件的功耗。
  • 启动进入和退出现代待机的多次转换,然后在显示器打开时对传感器设备和使用传感器信息的应用程序的操作进行压力测试。