电池和充电
电池充电用户体验
本主题介绍有关 Windows 10 中的电池和充电的建议。 运行 Windows 的所有设备都具有一致的电池充电体验,无论外形规格、指令集或平台体系结构如何。 因此,用户在电池充电方面获得了一致且优质的体验。
连接到充电器时,始终会进行充电。
除了电池故障的情况外,运行 Windows 的设备始终能够在电池连接到充电器时为电池充电。
Windows 在连接到充电器时始终可以启动。
Windows 10 桌面版(家庭版、专业版、企业版和教育版):
如果设备处于 S5(关机状态),则在连接到充电器时,无论电池电量如何和电池是否存在(如果电池可拆卸),它始终可以启动到 Windows。
Windows 10 移动版:
电池必须存在并且具有足够的电量才能使系统启动。
硬件自主管理充电。
硬件为设备的电池充电,无需在主 CPU 上运行固件、Windows、驱动程序或其他软件。 此要求仅适用于 Windows 10 桌面版系统。 Windows 10 移动版系统可能需要 UEFI 充电应用和/或其他软件组件的支持才能为电池充电。
当电池完全充满电或发生故障时,充电会自动停止。
电池完全充满电时,硬件会自动停止充电。 这是在不需要固件、Windows、驱动程序或在主 CPU 上运行的其他软件的情况下完成的。 如果存在电池或热故障情况,充电也会自动停止。
连接到充电器时会进行充电
用户希望他们的设备在连接到充电器时充电。 因此,无论电源状态如何,每当设备连接到充电器时,硬件都必须始终尝试为电池充电。 此预期适用于所有电源状态,包括活动 (S0)、睡眠 (S3)、休眠 (S4)、关机 (S5)、硬关机 (G2/G3) 和 S0 空闲。 电池充满电或发生故障时,可能会停止充电。
不建议在 Windows 或固件尚未启动或运行时以较低的速率为电池充电的设计。 例如,当系统完全关闭并连接到充电器时,电池可能会以较慢的速率充电,在设备启动时以更快的速度充电,以及 ACPI 固件可用于定期监视电池。
最后,设计当系统处于热状态时可能会以较低的速率为电池充电的情况。 在这种情况下,可以通过减慢或完全取消电池充电来减少热量。 在任何良好的系统设计中,热条件都是例外。
Windows 在连接到交流电源时始终可启动
Windows 10 桌面版
用户希望只要设备连接到充电器,他们就可以立即启动并使用设备。 因此,设备必须始终启动,并且在连接到交流电源时可以充分使用。 无论电池电量、电池/充电器状态如何以及无论是否存在电池(如果电池是可拆卸的),这都成立。
如果设备需要最小电池容量来启动固件和 Windows,则硬件必须确保平台始终保留电池容量。 保留的电池容量不得公开给 Windows。
Windows 10 移动版
当系统连接到交流电源并且电池存在时,只要电池有足够的电量在启动过程中为系统供电,系统就应尝试启动到操作系统。
硬件自主管理充电
如上所述,用户希望他们的设备在连接到充电器时充电。 因此,硬件必须在不需要固件、Windows、驱动程序或其他软件在主 CPU 上运行的情况下为电池充电,因为一个或多个这些组件可能无法运行,或者在任何给定时间都可能处于故障状态。 此要求仅适用于 Windows 10 桌面版系统。 Windows 10 移动版系统可能需要 UEFI 充电应用和/或其他软件组件的支持才能为电池充电。
充满电或发生故障时自动停止充电
当电池完全充满电或发生故障时,硬件会自动停止充电。 与充电一样,这必须在不需要固件、Windows、驱动程序或在主 CPU 上运行的其他软件的情况下完成。 此外,硬件需要符合所有电池安全法规条件。
电源和充电指示器
Windows 使用用户可以在多个位置看到的图标提供电源和电池状态指示器。 位置包括电池系统托盘图标和锁定屏幕。
设备还可以具有物理指示器,例如指示充电状态的 LED。 此指示器对功耗的影响必须很小。
Windows 电源和充电图标
Windows 在三个位置显示电源和充电状态:
在锁屏界面上:
Windows 显示一个电池图标,其中包含电源和充电状态。
桌面系统托盘(仅限 Windows 10 桌面版):
Windows 显示一个电池图标,其中包含电源和充电状态。 当用户单击电池图标时,他们可以查看剩余容量、估计剩余时间和每个电池的详细信息(如果配备了多个电池)等信息。
状态栏(仅移动 SKU):
Windows 显示一个电池图标,其中包含电源和充电状态。 当用户从屏幕顶部向下轻扫以展开操作中心时,他们可以查看实际的电池电量百分比。
节电模式设置:
在“节电模式”设置页(“设置”>“系统”->“节电模式”)中,Windows 显示总体电池百分比、电池状态(充电与放电)以及预计剩余充电/放电时间。
对于支持 S0 空闲的平台,如果显示屏可见,则当系统连接到充电器或断开充电器连接时,Windows 会短暂点亮显示屏,以通知用户电源更换。
平台硬件充电指示器
Windows 中内置的图标仅用于 Windows 正在运行且显示对用户可见的情况。 但是,当系统关闭或处于 S0 空闲状态(显示关闭)时,屏幕上的指示器不可见。 由于用户无法在屏幕上看到视觉提示,因此该平台可能包括物理充电指示器以指示存在电源。
以下部分提供了有关使用扩展坞解决方案在 S0 空闲平台上实现键盘和鼠标/触摸板的建议。 本部分还讨论了挑战和原则以及潜在的解决方案。 这两种潜在的解决方案都适用于移动和交流电源供电的固定式扩展坞。
向 Windows 公开电源和充电子系统
每个运行 Windows 的移动设备都包括一个或多个电池和一个电源,如交流适配器。 来自这些子系统的信息将电源管理状态传达给用户。 状态包括随时的剩余电池容量、交流电源适配器和电池充电的状态以及估计的剩余电池时间。 电源子系统信息在 Windows 电池指示器和其他电源管理诊断实用程序中公开。
以下部分提供了有关使用扩展坞解决方案在 S0 空闲平台上实现键盘和鼠标/触摸板的建议。 本部分还讨论了挑战和原则以及潜在的解决方案。 这两种潜在的解决方案都适用于移动和交流电源供电的固定式扩展坞。
典型的电源子系统硬件拓扑
通常,Windows 需要电源和充电子系统的两种硬件拓扑之一。
下图说明了使用平台的嵌入式控制器的第一个拓扑,这在运行 Windows 的现有设备中很常见。 嵌入式控制器在移动设备中执行多种功能,包括电源控制、电池充电管理、电源按钮/开关检测以及 PS/2 兼容键盘和鼠标输入。 嵌入式控制器通常通过低引脚数 (LPC) 总线连接到内核芯片。 Windows 通过 ACPI 嵌入式控制器接口查询电源子系统信息并接收相关通知。
下图说明了第二种拓扑结构,该拓扑利用电池充电控制器和电量计组件,通过 I²C 等轻量级外设总线直接连接到平台的核心芯片。 在此配置中,Windows 通过 I²C 总线进行通信来查询电源子系统更改并收到通知。 ACPI 控制方法环境不是将设备驱动程序用于电池或充电子系统,而是通过支持简单外设 (SPB) 操作区域进行扩展。 SPB 操作区域允许 ACPI 控制方法代码通过 I²C 与连接到核心芯片的电池充电控制器和电量计组件进行通信。
电池和电源子系统驱动程序模型
Windows 具有可靠的电池和电源子系统设备驱动程序模型。 电源管理信息通过电池设备驱动程序传送到 Windows 电源管理器,然后通过电池设备 IRP 和一组电源管理软件 API 聚合并公开给 Windows 用户界面。
电池驱动程序模型是端口/微型端口模型,即电池模型和接口的定义使得新的电池类型可以通过微型端口公开。 但是,在实践中,只有两个微型端口在 Windows 生态系统中具有任何重要用途 - 支持 ACPI 控制方法电池的电池微型端口驱动程序和用于 USB 连接的不间断电源 (UPS) 设备的 HID 电池微型端口驱动程序。
所有电脑都应通过 ACPI 控制方法接口公开电池和充电子系统。 电池微型端口接口不应用于特定于平台的电池充电子系统。 有一些 ACPI 规范定义的控制方法允许 Windows 轮询电池信息和状态。 同样,有一个事件驱动的模型,允许硬件平台通知 Windows 电池和电源的变化,例如从交流电到电池电源的转换。
状态轮询
Windows 电源管理器定期从电池请求状态信息,包括剩余充电容量和当前消耗速率。 此请求源自电源管理器、更高级别的用户界面组件或应用程序。 电源管理器将请求转换为电池设备的 I/O 请求数据包 (IRP)。 当电池通过 ACPI 控制方法接口公开时,控制方法电池驱动程序 (cmbatt.sys) 将执行相应的 ACPI 控制方法。 对于状态信息,将执行 _BST(电池状态)方法。
_BST 方法要求 ACPI 固件从电源子系统获取当前信息,然后使用 ACPI 规范指定的格式将该信息打包到缓冲区中。 从嵌入式控制器或通过 I²C 连接的电池充电器访问电池状态所需的特定代码包含在 ACPI 固件和包含 _BST 方法的部分代码中。 _BST 方法的最终结果是所需信息的缓冲区,该缓冲区返回到控制方法电池驱动程序。 控制方法电池驱动程序最终将缓冲区转换为电池驱动程序和 Windows 电源管理器所需的格式。
状态更改通知
电源和电池子系统将向 Windows 生成多个状态更改通知,包括从交流电到电池电源的转换。 Windows 对这些状态更改进行轮询是不切实际的,因为需要轮询的频率很高。 因此,硬件平台必须使用事件驱动的模型在电池状态发生重大变化时通知 Windows。
当电池状态(包括剩余容量或充电状态)发生更改时,ACPI 固件会在控制方法电池设备上发出 Notify(0x80)。 然后,Windows 控制方法电池驱动程序评估 _BST 方法,并将更新的信息返回到电源管理器。
当电池静态数据(包括上次完全充电容量、设计容量和循环计数)发生变化时,ACPI 固件会在控制方法电池设备上发出 Notify(0x81)。 然后,Windows 控制方法电池驱动程序评估 _BIX 方法,并将更新的信息返回到电源管理器。
对于配备嵌入式控制器的平台,该平台通过系统控制中断 (SCI) 中断 ACPI 固件环境;对于电池子系统硬件直接连接到核心芯片的平台,则通过 GPIO 中断 ACPI 固件环境。
使用嵌入式控制器进行 ACPI 操作
将电池和电源子系统连接到典型嵌入式控制器的平台使用 ACPI 嵌入式控制器操作区域来促进 ACPI 控制方法环境与平台硬件之间的通信。
ACPI 固件必须在 ACPI 命名空间中定义嵌入式控制器,如 ACPI 规范第 12.11.1 节中所述,包括:
- 嵌入式控制器的 Device() 节点。
- 指示设备是嵌入式控制器的 _HID 对象。
- 表示嵌入式控制器的 IO 资源的 _CRS 对象。
- 定义嵌入式控制器的 SCI 的 _GPE 对象。
- 描述嵌入式控制器中包含的信息的操作区域,这些信息可由命名空间中的其他 ACPI 控制方法代码访问,包括电池状态和信息方法。
ACPI 规范的第 12 节中介绍了完整的详细信息。
从嵌入式控制器访问电池信息
ACPI 控制方法通过读取嵌入式控制器操作区域中描述的值来访问嵌入式控制器中的信息。
电池状态更改时通知操作系统
当嵌入式控制器检测到电池状态的变化(包括 _BTP 指定的充电状态或剩余容量的变化)时,嵌入式控制器会生成 SCI,并在嵌入式控制器状态命令 (EC_SC) 寄存器中设置 SCI_EVT 位。 Windows ACPI 驱动程序将与嵌入式控制器通信,并发出查询命令 (QR_EC) 以请求有关要发出的通知的特定信息。 然后,嵌入式控制器设置与要执行的 _QXX 方法对应的字节值。 例如,嵌入式控制器和 ACPI 固件可以将值 0x33 定义为电池状态信息的更新。 当嵌入式控制器将值 0x33 设置为通知时,ACPI 驱动程序将执行 _QXX 方法。 _QXX 方法的内容通常是命名空间中控制方法电池设备上的 Notify(0x80)。
使用 I²C 连接的充电系统的 ACPI 操作
平台还可以通过低功耗串行总线(如 I²C)将其电池和电源子系统连接到核心芯片组。 在这些设计中,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 重新评估状态和静态信息方法以更新电池状态。
电源对象的 ACPI 实现
ACPI 固件必须实现 ACPI 电源设备。 此对象必须使用“ACPI0003”的硬件 ID (_HID) 报告自身。 此对象还必须实现 ACPI _PSR(电源)方法。 此方法返回电源的状态,并传达电源当前是联机(交流电源)还是脱机(使用电池电源)。 系统的所有输入电源必须通过单一 _PSR 方法进行多路复用。 例如,如果系统通过 DC 桶插孔连接器或单独的基座连接器供电,则必须在线传输 _PSR。 请勿使用多个 ACPI 电源设备。
_PSR 方法必须仅在系统连接到主电源时报告联机(交流电源)。 当 _PSR 状态发生更改时,平台必须在 ACPI 命名空间中的设备上生成中断和 Notify(0x80)。 这必须在平台检测到物理状态更改后立即执行。
电池静态信息的 ACPI 实现
ACPI 固件必须为每个电池实现 ACPI _BIX 方法,该方法提供有关电池的静态信息,包括设计容量、周期计数和序列号。 下表扩展了 ACPI 规范中描述的字段的定义,并枚举了此信息的 Windows 特定要求。
字段 | 说明 | Windows 特定要求 |
---|---|---|
修订 | 指示 _BIX 修订 | 必须设置为 0x0 |
电源单元 | 确定硬件报告的单元。 两者之一:MA/MAh 或 mW/mWh。 | 必须设置为 0x0以指示单位为 mW/mWh |
设计容量 | 指示电池原始容量,以 mWh 为单位 | 必须设置为准确的值,不能为 0x0 或 0xFFFFFFFF |
上次完全充电容量 | 指示电池的当前完全充电容量 | 必须设置为准确的值,不能为 0x0 或 0xFFFFFFFF 每次周期计数增加时,此值都必须更新。 |
电池技术 | 指示电池是可充电还是一次性使用。 | 必须设置为 0x1 以指示电池可充电 |
设计电压 | 指示电池的设计电压 | 必须设置为新电池的设计电压,单位为 mV。 不得设置为 0x0 或 0xFFFFFFFF。 |
警告设计容量 | 指示 OEM 提供的低电池电量警告级别。 | 此值将被 Windows 忽略。 |
低电量设计容量 | 指示 Windows 在系统关闭电源之前必须立即关机或休眠的关键电池电量。 | 必须设置为介于电池设计容量的 0x0% 和 5% 之间的值。 |
电池容量粒度 1 | 指示硬件在“警告设计容量”和“低电量设计容量”之间可以检测到的剩余电量变化的最小量。 | 必须设置为不大于电池设计容量的 1% 的值。 |
电池容量粒度 2 | 指示硬件在“上次完全充电容量”和“警告设计容量”之间可以检测到的剩余电量变化的最小量。 | 必须设置为不大于 75mW(大约 25Whr 电池的 0.25%)的值,即电池设计容量的 (1/400)。 |
周期计数 | 指示电池周期计数。 | 必须设置为大于 0x0 的值。 不得设置为 0xFFFFFFFF。 |
度量准确性 | 指示电池容量度量的准确性。 | 必须设置为 95,000 或更高,表示准确率为 95% 或更高。 |
最大采样时间 | 两个连续 _BST 评估之间支持的最大采样时间,这将显示剩余容量的差异。 | 无特定要求。 |
最小采样时间 | 两个连续 _BST 评估之间支持的最小采样时间,这将显示剩余容量的差异 | 无特定要求。 |
最大平均间隔 | 电池电量计支持的最大平均间隔(以毫秒为单位)。 | 无特定要求。 |
最小平均间隔 | 电池电量计支持的最小平均间隔(以毫秒为单位)。 | 无特定要求。 |
型号 | OEM 提供的电池型号 | 不得为 NULL。 |
序列号 | OEM 提供的电池序列号 | 不得为 NULL。 |
电池类型 | OEM 提供的电池类型信息 | 无特定要求。 |
OEM 信息 | OEM 提供的信息 | 无特定要求。 |
电池实时状态信息的 ACPI 实现
ACPI 固件必须为每个电池实现 ACPI _BST 方法,该方法提供有关电池的实时状态信息,包括剩余容量和当前消耗速率。 下表扩展了 ACPI 规范中描述的字段的定义,并枚举了此信息的 Windows 特定要求。
字段 | 说明 | Windows 特定要求 |
---|---|---|
电池状态 | 指示电池当前是否正在充电、正在放电或处于严重状态。 | 仅当电池正在充电时,电池状态必须报告正在充电。 同样,仅当电池放电时,电池状态必须报告放电。 既不在充电也不在放电的电池不得报告这两种状态的任何位。 |
电池存在率 | 提供电池的电流消耗率(以 mW 为单位)。 | 必须大于 0x0 且小于 0xFFFFFFFF。 准确度必须在 _BIX 的测量准确度值内。 |
电池剩余容量 | 提供剩余电池容量(以 mWh 为单位)。 | 必须大于 0x0 且小于 0xFFFFFFFF。 准确度必须在 _BIX 的测量准确度值内 |
电池当前电压 | 指示电池端子两端的电流电压。 | 必须是介于 0x0 和 0xFFFFFFFF 之间的值(以 mV 为单位)。 |
当 _BST 中的任何数据发生更改时,平台必须在 ACPI 命名空间中的电池设备上生成中断和 Notify(0x80)。 这必须在平台检测到物理状态更改后立即执行。 这包括充电(即 Bit0)或放电(即 Bit1)位的电池状态字段中的任何更改。
此外,平台必须实现 _BTP 电池跳变点方法。 _BTP 允许 Windows 指定一个剩余容量阈值,当超过该阈值时,平台必须在 ACPI 命名空间中的电池设备上生成中断和 Notify(0x80)。 _BTP 方法使得 Windows 无需定期轮询电池。
电池控制方法
ACPI 规范通过特定于设备的方法或 _DSM 控制方法为特定于设备和操作系统的控制方法提供了条件。 ACPI 规范的第 9.14.1 节介绍了 _DSM。
Windows 支持以下 _DSM 方法用于控制方法电池设备的方法。
热充电速率方向
字段 | Value | 说明 |
---|---|---|
UUID | 4c2067e3-887d-475c-9720-4af1d3ed602e | 指示 Windows 控制方法电池驱动程序支持的扩展的 GUID |
修订 ID | 0x0 | 此功能的第一个修订版本 |
功能索引 | 0x1 | 设置电池电量限制 |
参数 | 热限制 | 0 到 100 之间的整数值表示热充电限制。 值为 40% 表示电池应以最大速率的 40% 充电。 值为 0% 表示应停止电池充电,直到再次调用此方法。 |
返回值 | None | 不适用 |
用户可维修的电池
字段 | Value | 说明 |
---|---|---|
UUID | 4c2067e3-887d-475c-9720-4af1d3ed602e | 指示 Windows 控制方法电池驱动程序支持的扩展的 GUID |
修订 ID | 0x0 | 此功能的第一个修订版本 |
功能索引 | 0x2 | 指示此 _DSM 供 OSPM 确定电池设备是否可供用户维修。 |
参数 | 无 | 不需要参数。 |
返回值 | 包含单个整数的包。 | 如果电池不能由用户维修且无法由最终用户更换,或者最终用户可以使用其他工具更换,则为 0x0。 如果最终用户可以在没有其他工具的情况下更换电池,则为 0x1。 |
需要充电监视器
字段 | Value | 说明 |
---|---|---|
UUID | 4c2067e3-887d-475c-9720-4af1d3ed602e | 指示 Windows 控制方法电池驱动程序支持的扩展的 GUID |
修订 ID | 0x0 | 此功能的第一个修订版本 |
功能索引 | 0x3 | 指示此 _DSM 供 OSPM 确定电池控制方法是否需要定期监视器重置以保持高电流充电以及必须重置监视器的时间段 |
参数 | 无 | 不需要参数。 |
返回值 | 包含单个整数的包。 | 如果电池不需要监视器维修,则为 0x0。
包含 0x0000001e 和 0x12C 的值表示最大轮询间隔,以秒为单位。 所有其他值都将被忽略,并被视为 0x0,并且不需要监视器重置。 如果指定了有效的监视器间隔,则每当 _BST 方法中的 BatteryState 值设置为“充电”时,Windows 将以不超过指定的监视器值的间隔执行 _BST 方法。 不支持动态更新此值。 |
第三方电池微型端口驱动程序
在 Windows 10 中,OEM 和 IHV 可以开发自己的第三方电池微型端口驱动程序,以替换 Microsoft cmbatt.sys 驱动程序,并直接与电池硬件通信。 示例电池驱动程序由 Microsoft 在 GitHub 上提供,并作为 WDK 示例工具包的一部分提供。
USB 充电(Windows 10 桌面版)
Microsoft 认识到提供支持移动设备 USB 充电的选项的价值。 随着标准化工作(例如欧盟对手机充电器进行标准化的举措),USB 充电器广泛可用,并且可以在各种设备上使用,包括 Windows Phone,MP3 播放器,GNSS 设备等。Microsoft 了解提供单个充电器的价值,该充电器可用于为多个设备充电,包括运行 Windows 的设备。 此外,鉴于 USB 充电的广泛行业支持,还具有降低成本和环境影响的辅助优势。
从 Windows 8 开始,只要满足下面列出的电池充电要求,就可以通过 USB 为移动设备供电和/或充电。 此外,必须满足许多特定于 USB 的要求,以确保高质量的用户体验。
USB 电源/充电必须完全在平台固件中实现。 支持不得要求操作系统、驱动程序或应用程序。
设备在连接到其他设备时不得枚举。 因此,当连接到标准电脑 USB 端口时,设备将无法充电,因为默认情况下这些端口被限制为 500mA。 唯一的例外是当此端口用于调试和初始工厂固件编程时。
该设备支持从专用 USB 充电端口充电。 当连接到符合 USB 电池充电规范版本 1.2 的充电器时,设备必须充电。 连接到标准 USB 充电器时,设备每个充电标准的电流不应超过 1.5A。 如果满足以下条件,OEM 可以选择支持更高的电流水平:
- 该设备自动检测充电器类型,并根据特定充电器类型以适当的速率充电。
- 设备和充电器符合所有相关的电气和安全标准。
- OEM 将充电器和关联的电缆与设备一起寄出。
通过标准微型 AB 插座、USB-C(推荐)或专有基座连接器支持 USB 充电。 设备上不允许使用微型 B 插座。 如果使用专有的基座连接器,OEM 必须随设备一起提供适当的电缆,以便从标准 USB 充电器充电。
如果实现了微型 AB 端口,则设备必须自动检测电缆类型、配置并承担相应的角色。 如果插入了微型 B 插头,但端口上未启用调试,则应假定充电器角色。 如果插入了 微型B 插头并在端口上启用了调试,则应承担调试角色(即不支持充电)。 如果插入了微型 A 插头,则在 Windows 识别连接的 USB 设备的位置将承担 USB 主机角色。
如果微型 AB 端口还充当调试端口,则设备必须通过固件提供一种在充电器和调试角色之间切换的方法。 提供给最终用户的默认设置必须禁用调试功能。
如果微型 AB 端口还用作调试端口,则设备应通过专用的桶插孔连接器或专有的基座连接器提供备用输入电源路径。
平台设计人员和实现者清单
可以使用以下清单来验证平台设计和系统固件是否符合概述的电池和充电子系统指南。
电池子系统和 ACPI 固件实现清单
系统设计人员应确保在其 ACPI 固件中已完成以下任务,以确保向 Windows 正确报告电池和电源子系统信息:
为 ACPI 命名空间中的每个电池设备添加一个 Device() 对象。
每个电池设备必须提供以下控制方法和对象:
- 值为 PNP0C0A 的 _HID。
- _BIX 电池信息扩展:
传达电池静态信息,包括上次完全充电容量、设计容量和循环计数。
_BST 电池状态:
传达当前电池状态,包括剩余容量、消耗速率和充电状态。
_BTP 电池跳变点:
启用事件驱动的电池状态模型,以减少轮询的定期工作。 _BTP 允许 Windows 指定剩余充电容量的阈值,平台应在电池设备上的 Notify(0x80) 处发出该阈值,以请求 Windows 更新电池状态信息。
_STA 常规状态:
允许 Windows 知道设备中是否存在电池,电池可能是可拆卸的,或者便携式扩展坞中是否有电池。
在 ACPI 命名空间中为交流适配器/电源添加单个 Device() 对象。
电源设备必须提供以下控制方法和对象:
值为 ACPI0003 的 _HID
_PSR 电源:
传达电源当前是联机(交流电源)还是脱机(使用电池电源)。 设备的所有输入电源都必须通过 _PSR 方法进行多路复用。 例如,如果设备通过 DC 桶插孔连接器或单独的基座连接器供电,则必须在线传输 _PSR。 请勿使用多个 ACPI 电源设备。
_BIX 方法必须支持上述电池静态信息中描述的字段和约束:
- “修订”字段必须设置为 0x0。
- “电源单元”字段必须设置为 0x0。
- “设计容量”和“上次完全充电容量”值必须设置为电池和充电子系统中的精确值,并且不能设置为等于 0xFFFFFFFF 或 0x00000000。
- “电池技术”字段必须设置为 0x1。
- “设计电压”字段必须准确设置,并且不等于 0x00000000 或 0xFFFFFFFF。
- 必须将“低电量设计容量”设置为休眠或从完全打开状态关闭系统所需的最小值。
- “电池容量粒度 1”和“电池容量粒度 2”字段必须设置为不大于电池设计容量 1% 的值。
- 必须从电池子系统中准确填写“循环计数”字段。
- “测量精度”字段必须设置为 80,000d 或更高。
- “型号编号和序列号”字段不得设置为 NULL。
提供 _BST 方法,允许 Windows 轮询实时电池状态。 _BST 方法中的字段都必须从基础电源和电池充电子系统动态返回。 它们的精度必须在 _BIX 方法的测量精度值内。
提供一个 _BTP 方法,该方法允许 Windows 指定剩余充电容量阈值,平台将在该阈值下使用电池设备上的 Notify(0x80) 中断 Windows。
确保仅在响应电池状态更改或 _BTP 充电容量限制触发时才发出 Notify(0x80)。 不要定期执行 Notify(0x80)。
当电池电量达到 _BIX.DesignCapacityofLow 中指定的值时,平台必须在控制方法电池设备上生成 Notify(0x80)。
对于具有多个电池的系统,请为每个电池完全实现一个控制方法电池设备。
- 命名空间中的第一个电池应该是系统的主要电池,以帮助进行调试。
在每个电池设备下实现 _DSM 方法,以指示电池是否可供用户维修。
如果在充电期间需要定期重置监视器,则实现 _DSM 方法,并且 Windows 将保证在该轮询窗口中定期执行 _BST 方法。
如果平台上的热模型需要电池充电速率控制,则实现 _DSM 方法。