电源和充电子系统实现

Windows 平台中的电池电源和充电子系统应实现 ACPI 控制方法电池接口。 Windows 使用此接口从电池子系统获取状态信息,并接收电池事件通知。

Windows 电池和电源子系统驱动程序模型

Windows 具有可靠的电池和电源子系统设备驱动程序模型。 电源管理信息通过电池设备驱动程序传达到 Windows 电源管理器。 该信息然后通过电池设备 IRP 和一组电源管理软件 API 聚合并公开给 Windows 用户界面。

Windows 的电池驱动程序模型是端口/微型端口模型,也就是说,电池模型和接口的定义使得新的电池类型可以通过微型端口驱动程序公开,如以下块图所示。 但在实践中,只会使用 ACPI 控制方法电池接口。 支持将人机接口设备 (HID) 电池微型端口驱动程序用于通过 USB 连接的不间断电源 (UPS) 设备,但此驱动程序不用于系统电池。

所有 Windows 平台都预期通过 ACPI 控制方法电池接口公开其电池和充电子系统。 电池微型端口接口不应该用于特定于平台的电池充电子系统。 使用 ACPI 5.0 规范定义的控制方法,Windows 可以获取电池信息和当前状态。 另外,使用 ACPI 接口提供的事件,硬件平台可以向 Windows 告知电池和电源的变化,例如从交流电到电池电源的转换。

获取电池状态

Windows 电源管理器定期从电池请求状态信息,包括剩余充电容量和当前消耗速率。 此请求源自电源管理器本身、更高级别的用户界面组件或应用程序。 先由电源管理器将请求转换为电池设备的 I/O 请求数据包 (IRP),再由 Windows 控制方法电池驱动程序 Cmbatt.sys 将其转换为适当的控制方法。 此方法执行后,结果返回到驱动程序堆栈。

对于状态信息,电池状态 (_BST) 方法是适当的控制方法。 _BST 方法要求 ACPI 固件从电源子系统获取当前信息。 _BST 方法的结果是一个包含必需信息的缓冲区,该缓冲区返回到控制方法电池驱动程序。 控制方法电池驱动程序将缓冲区内容转换为电池驱动程序和 Windows 电源管理器所需的格式。

状态变化通知

电源和电池子系统将为操作系统生成多个状态变化(包括充电情况变化、从交流电到电池电源的转换,等等)通知。 不要持续轮询这些状态变化,因为这样做需要高轮询频率。 因此,硬件平台必须实现事件驱动模型,以将电源和电池子系统的变化通知给 Windows。

当电池状态(包括剩余容量或充电状态)发生变化时,ACPI 固件必须在控制方法电池设备上发出 Notify(0x80) 命令。 在响应时,Windows 中的控制方法电池驱动程序会评估 _BST 方法,并将更新的信息返回到电源管理器。

当电池静态数据(包括上次完全充电容量、设计容量和循环计数)发生变化时,ACPI 固件必须在控制方法电池设备上发出 Notify(0x81) 命令。 在响应时,Windows 中的控制方法电池驱动程序会评估 _BIX 方法,并将更新的信息返回到电源管理器。

对于配备嵌入式控制器的平台,将会通过系统控制中断 (SCI) 发出 ACPI 通知事件信号;对于电池子系统硬件直接连接到核心芯片的平台,则通过常规用途 I/O (GPIO) 发出 ACPI 通知事件信号。