电池和电源子系统硬件设计

从 Windows 8 开始,系统硬件设计人员可对其 Windows 平台中的电池和电源子系统选择两种不同硬件拓扑中的一种。

硬件拓扑

一般情况下,Windows 需要对电源和充电子系统使用两种硬件拓扑中的一种。

第一种拓扑如以下框图中所示。 此拓扑在运行 Windows 7 的电脑中很常见,它在平台中使用嵌入式控制器。 嵌入式控制器通常在 Windows 移动电脑中执行多种功能,包括电源控制、电池充电管理、电源按钮/开关检测,以及 PS/2 兼容的键盘和鼠标输入。 嵌入式控制器通常通过低引脚数 (LPC) 总线连接到核心芯片。 Windows 通过 ACPI 嵌入式控制器接口查询电源子系统信息并接收相关通知。

Topology common in Windows 7

第二种拓扑如以下框图中所示。 此拓扑使用电池充电控制器和电量计组件,它们通过简单外围总线(例如 I²C)直接连接到平台的核心芯片。 在此配置中,Windows 通过 I²C 总线进行通信来查询电源子系统更改并接收相关通知。 借助简单外围总线 (SPB) 操作区域,可将固件中的 ACPI 控制方法代码传达给通过 I²C 总线连接到核心芯片的电池充电控制器和电量计组件。

battery charge controller and fuel gage

使用嵌入式控制器进行 ACPI 操作

将电池和电源子系统连接到典型平台嵌入式控制器的平台使用 ACPI 嵌入式控制器操作区域来简化 ACPI 控制方法环境与平台硬件之间的通信。

ACPI 固件必须在 ACPI 命名空间中定义嵌入式控制器。 此定义包括以下项:

  • 嵌入式控制器的 Device() 节点。
  • 指示设备是嵌入式控制器的 _HID 对象。
  • 表示嵌入式控制器的 I/O 资源的 _CRS 对象。
  • 定义嵌入式控制器的 SCI 的 _GPE 对象。
  • 描述嵌入式控制器中包含的信息的操作区域,这些信息可由命名空间中的其他 ACPI 控制方法代码访问,包括电池状态和信息方法。

有关详细信息,请参阅 ACPI 5.0 规范中的第 12.11 部分“在 ACPI 命名空间中定义嵌入式控制器设备”。

从嵌入式控制器访问电池信息

ACPI 控制方法通过读取嵌入式控制器操作区域中描述的值来访问嵌入式控制器中的信息。

电池状态更改时通知 Windows(嵌入式控制器)

当嵌入式控制器检测到电池状态的变化(包括 _BTP 指定的充电状态或剩余容量的变化)时,嵌入式控制器会生成 SCI,并在嵌入式控制器状态命令 (EC_SC) 寄存器中设置 SCI_EVT 位。 Windows ACPI 驱动程序 Acpi.sys 将与嵌入式控制器通信,并发出查询命令 (QR_EC) 以请求有关要发出的通知的特定信息。 嵌入式控制器设置与要执行的 _QXX 方法对应的字节值。 例如,嵌入式控制器和 ACPI 固件可以将值 0x33 定义为电池状态信息的更新。 当嵌入式控制器将值 0x33 设置为通知时,Acpi.sys 将执行 _QXX 方法。 _QXX 方法通常在命名空间中对电池控制方法设备发出 Notify(0x80) 命令。

功耗

在新式待机系统上必须特别注意,确保实现新式待机的电池寿命最低目标。 在新式待机系统上,电源和电池子系统的嵌入式控制器消耗的额定功率必须低于 5 毫瓦。 在使用传统 S3/S4 电源状态的电脑上,确保嵌入式控制器不会影响电池寿命目标。 对于使用 S3/S4 的系统,没有具体的额定功率要求。

使用 SPB 连接的充电子系统进行 ACPI 操作

平台还可以使用 I²C 等低功耗简单外围总线 (SPB) 将电池和电源子系统连接到核心芯片组。 在这些设计中,ACPI GenericSerialBus 操作区域用于在 ACPI 控制方法和电池子系统硬件之间进行通信。 通过将电池子系统硬件连接到 GPIO 中断,可以在电池状态更改时执行 ACPI 控制方法。

当电池和电源子系统硬件通过 I²C 连接时,ACPI 固件必须定义以下项:

  • I²C 中断连接到的 GPIO 控制器设备的 Device() 节点,包括:
    • _HID 描述 GPIO 控制器的硬件 ID 的对象。
    • 描述 GPIO 控制器的中断和硬件资源的 _CSR 对象。
    • _AEI 对象,它将一个或多个 GPIO 线路映射到 ACPI 事件方法执行。 这样就可以执行 ACPI 方法以响应 GPIO 线路中断。
  • 用于连接电池电量计和充电硬件的 I²C 控制器的 Device() 节点,包括:
    • _HID 和 _CSR 描述 I²C 控制器的硬件 ID 和资源的对象。
    • I²C 设备范围内的 GenericSerialBus 操作区域,描述 I²C 设备的虚拟命令注册。
    • GenericSerialBus 操作区域中的字段定义。 利用字段定义,I²C 设备之外的 ASL 代码可以访问 I²C 设备的虚拟命令注册。

通过描述 GPIO 控制器并将 GPIO 线路映射到 ACPI 事件,可以在引发来自 I²C 设备的 GPIO 中断时执行电池状态和通知的控制方法。 描述 GenericSerialBus 操作区域允许电池状态的 ACPI 代码通过 I²C 总线进行通信,并从电池电量计和充电子系统中读取寄存器和信息。

从充电子系统访问电池信息

电池状态可以通过 ACPI 控制方法执行,方法是通过电池子系统硬件连接到的 I²C 总线发送和接收命令。 支持状态和电池静态信息方法的控制方法代码从 ACPI 命名空间中描述的 GenericSerialBus 操作区域读取和写入数据。 控制方法代码可以通过 GenericSerialBus 操作区域读取来自电量计设备的数据或有关 I²C 总线上的电池容量和循环计数的静态信息。

电池状态更改时通知 Windows(子系统硬件)

电池子系统硬件可以在状态更改时生成中断,也可以从核心芯片上的 GPIO 线路生成中断。 可以使用 ACPI 中描述的 GPIO 控制器下的 _AEI 对象将 GPIO 线路映射到特定的控制方法执行。 发生 GPIO 中断时,Windows ACPI 子系统将执行与特定 GPIO 线路关联的方法,而该方法又可以对电池控制方法设备发出 Notify() 命令。 这会导致 Windows 重新评估状态和静态信息方法以更新电池状态。

电源和充电指示器

Windows 在操作系统中提供电源和电池状态指示。 这种指示会在多个位置呈现给用户,包括桌面上的电池托盘图标、在“开始”菜单中,以及直接在锁屏界面上呈现。

Windows 8 平台还可以向用户呈现充电状态的视觉指示器。 下图显示了两个 UI 示例。 使用的指示器必须对功耗和用户体验影响极小。

Windows 电源和充电用户界面元素

Windows 在三个关键位置提供电源和充电状态指示:

  • 在锁屏界面上。 显示带有电源和充电状态的电池图标。
  • 将鼠标悬停在“开始”按钮上时,在时间和日期指示器上显示状态。 显示带有电源和充电状态的电池图标。
  • 桌面上的电池图标。 显示带有电源和充电状态的电池图标。 单击电池图标可查看详细信息;如果系统有多块电池,则此信息还包括剩余容量、估计剩余时间和每块电池的详细信息

。 对于支持新式待机的平台,如果系统处于 S0 状态且机盖(如果有)未关闭,则在系统连接到充电器并通电后,Windows 会短暂打开显示器。 这样,用户便可以看到平台对连接充电器的动作做出响应。

平台硬件充电指示器

Windows 中内置的用户界面元素解决了在 Windows 运行时使用户可以看到显示画面的方案。 但是,当系统已关闭、已休眠、正在睡眠或未运行时,这些屏幕指示器将不可见。

可以在平台中提供一个 LED 来指示通电状态。 最好不要将此类 LED 安装在系统机箱上。 应该将此类 LED 安装在电源模块、电源线或电源连接器上。 此 LED 还可以选择性地向用户指示充电状态。

如果提供了 LED,其亮度或颜色不应该时而变化或闪烁,因为这会分散用户的注意力。 不过,它可以改变颜色来指示充电状态;例如,充电时为黄色,充满电时为绿色,或者发生故障时为红色。

实时时钟预留电池容量

保持准确的时间对于提供出色的用户体验至关重要。 此外,时间必须准确才能连接到 Microsoft Store 等服务。 所有 Windows 系统应至少保持准确的时间四个星期,即使在关闭时也是如此。 为此,通常会采用一块单独的后备电池来维护实时时钟 (RTC)。 在高度便携式外形规格的设备上,这种做法并不总能实现或者不实用。

系统设计人员可以使用专用电池,或者预留主系统电池的一部分。 鉴于 RTC 的适度功耗要求,相对较低的预留阈值可以保证与当今电脑中存在的专用后备电池相适应。

设计指南

OSPM 为系统设计人员提供了一种替代 Windows 操作系统关键电池事件的方法。 当电池达到电池控制方法实现中的 _BIX(扩展电池信息 - 低设计容量)方法定义的临界水平(以毫瓦时为单位)时,固件会向操作系统发出 Notify 命令。 此时,Windows 将执行紧急关机或休眠以保留系统状态。

所有设计必须满足以下要求:

  • _BIX 方法中的低设计容量必须设置为占总设计容量的至少 675 毫瓦时(此外,需要预留可靠执行关键操作所需的容量)。
  • 上述预留容量必须小于总设计容量的 4%。

充电性能

为系统电池充满电所需的时间是用户关心的问题。 许多系统在夜间充电,或者在用户不与系统交互的其他时间段充电。 但是,当电池电量完全耗尽并且用户希望以便携方式使用系统时,充电性能便成了主要考虑因素。

Windows 建议所有平台都能够在系统已启动并处于新式待机模式且屏幕关闭的情况下,在四小时或更短时间内将系统电池电量从 5% 充至 90%。

系统设计人员应特别注意仅支持基于通用串行总线 (USB) 充电的系统的充电速度。 仅支持 USB 充电的系统和电池容量较大的系统可能无法满足客户对充电性能的预期。

如果需要在电池容量较大(大于 30 瓦时)的平台上进行 USB 充电,系统设计人员还应提供大功率直流输入,并将大功率直流充电器与系统捆绑在一起。 这样还可以在交互使用期间为平台电池充电,否则可能做不到这一点,因为电池容量较大的、仅支持 USB 充电的平台的输入功率较低,但功耗较高。