ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 10 章

    • 总览
    • 10.1. 智能电池子系统
    • 10.2. 控制方法电池
      • 10.2.1. 电池事件
      • 10.2.2. 电池控制方法
        • 10.2.2.1. _BCT(电池充电时间)
        • 10.2.2.2. _BIF(电池信息)
        • 10.2.2.3. _BIX(扩展电池信息)
        • 10.2.2.4. _BMA(电池测量平均间隔)
        • 10.2.2.5. _BMC(电池维护控制)
        • 10.2.2.6. _BMD(电池维护数据)
        • 10.2.2.7. _BMS(电池测量采样时间)
        • 10.2.2.8. _BPC(电池功率特性)
        • 10.2.2.9. _BPS(电池功率状态)
        • 10.2.2.10. _BPT(电池功率阈值)
        • 10.2.2.11. _BST(电池状态)
        • 10.2.2.12. _BTH(电池节流限制)
        • 10.2.2.13. _BTM(电池时间)
        • 10.2.2.14. _BTP(电池触发点)
        • 10.2.2.15. 控制方法电池的 _OSC 定义
    • 10.3. AC 适配器和电源对象
    • 10.4. 功率计
    • 10.5. 无线电源控制器
    • 10.6. 无线功率校准事件
    • 10.7. 示例:电源和电表命名空间

10.1. 智能电池子系统

智能电池子系统由以下规范定义:

  • 系统管理总线规范(SMBS)

  • 智能电池数据规范(SBDS)

  • 智能电池充电器规范(SBCS)

  • 智能电池系统管理器规范(SBSM)

  • 智能电池选择器规范(SBSS)

一个兼容 ACPI 的智能电池子系统由以下部分组成:

  • 一个 SMB-HC(CPU 到 SMB-HC)接口

  • 至少一个智能电池

  • 一个智能电池充电器

  • 如果支持多个智能电池,则还需要智能电池系统管理器或智能电池选择器之一

在这样的子系统中,与智能电池和智能电池充电器通信的标准方式是通过 SMBus 物理协议。智能电池系统管理器或智能电池选择器为任何智能电池子系统提供事件通知(电池插入/移除等)以及充电器 SMBus 路由能力。一个典型的智能电池子系统如下图所示:

../_images/Power_Source_and_Power_Meter_Devices-2.png

图 10.1 典型智能电池子系统(SBS)

SMBus 为每个设备定义了固定的 7 位从地址。这意味着系统中的所有电池都具有相同的地址(定义为 0xB)。与智能电池子系统组件关联的从地址如下表所示。

表 10.1 SMBus 设备从地址示例

SMBus 设备说明SMBus 从地址 (A0-A6)
SMBus 主机从接口0x8
智能电池充电器/充电器选择器或充电器系统管理器0x9
智能电池系统管理器或智能电池选择器0xA
智能电池0xB

每个 SMBus 设备最多具有 256 个寄存器,这些寄存器通过 SMBus 协议的命令值寻址。通过提供从地址以及所需寄存器的命令值来寻址 SMBus 设备。每个 SMBus 寄存器可以具有非线性的寄存器内容;也就是说,命令寄存器 1 可以具有一个 32 字节字符串,而命令寄存器 2 可以具有一个字节,命令寄存器 3 可以具有一个字。

SMBus 主机从接口为主机 CPU 生成与 SMBus 设备(换言之,智能电池组件)通信所需的 SMBus 协议命令提供了标准机制。ACPI 定义了这样一种位于嵌入式控制器地址空间中的 SMB-HC;但是,操作系统可以支持任何具有原生 SMB-HC 设备驱动程序的 SMB-HC。

  • 电池插入和移除的事件通知

  • 交流电源连接或断开的事件通知

  • 哪个智能电池正在与 SMB-HC 通信的状态

  • 哪个或哪些智能电池正在为系统供电的状态

  • 哪个或哪些智能电池已连接到充电器的状态

  • 系统中存在哪些智能电池的状态

  • 当智能电池系统管理器从一个电源切换到另一个电源时的事件通知

  • 当供电的智能电池电量低时,硬件切换到备用智能电池

  • 在电池供电和交流供电运行之间进行硬件切换

智能电池系统管理器功能可以位于独立的 SMBus 从设备中(响应 0xA 从地址的智能电池系统管理器),也可以存在于智能充电器设备中(响应 0x9 从地址的智能电池充电器),或者可以集成在嵌入式控制器中(响应 0xA 从地址)。如果在同一个智能电池子系统中同时存在智能电池充电器和独立的智能电池系统管理器,则驱动程序假定独立的智能电池系统管理器已连接到电池。

智能电池充电器是一种 SMBus 设备,它提供标准编程模型来控制智能电池子系统中存在的智能电池的充电。对于单电池系统,智能电池充电器还负责将电池和交流电状态通知系统。

智能电池为系统提供与化学体系无关的智能电源。智能电池能够将其充电需求通知智能电池充电器(从而实现与化学体系无关),并提供平台电池管理所需的电池状态和告警功能。

10.1.1. ACPI 智能电池状态变化通知要求

智能电池系统管理器、智能电池选择器和智能电池充电器各自都有一种可选机制,用于通知系统电池配置或交流电状态已经变化。ACPI 要求该中断机制通过 SMBus Alarm Notify 机制实现。

对于使用嵌入式控制器作为 SMBus 主机的系统,电池系统设备通过以下两种方式之一发出状态变化通知:主控 SMBus 以将通知直接发送到 SMBus 主机,或者在嵌入式控制器中对其进行仿真。无论哪种情况,过程都是相同的。在通知被接收或仿真之后,嵌入式控制器将置位一个 SCI。SCI 的来源由一个 GPE 标识,该 GPE 表示该 SCI 是由嵌入式控制器引起的。嵌入式控制器的状态寄存器告警位被置位,表示 SMBus 主机接收到了一条告警消息。Alarm Address Register 包含发出告警的 SMBus 设备地址,而 Alarm Data Registers 包含该设备状态寄存器的内容。

10.1.1.1. 智能电池充电器

这要求智能电池充电器在电池或交流电状态发生变化时生成一个 SMBus Alarm Notify。智能电池充电器的 ChargerStatus() 命令寄存器(0x13)的内容被放入嵌入式控制器的 Alarm Data Registers 中,智能电池充电器的从地址(见下方注释)(0x09)被放入嵌入式控制器的 Alarm Address Register 中,并且 EC 的 Status Register 的 Alarm 位被置位。然后嵌入式控制器置位一个 SCI。

注释

1.0 SMBus 协议规范对于写入主控制器命令字段中的“从地址”定义表述不明确。在这种情况下,从地址实际上是 7 位从地址与 Write 协议位的组合。因此,发起设备从地址的位 0 与主控制器从命令寄存器的位 1 对齐,从地址的位 1 与控制器从命令寄存器的位 2 对齐,依此类推。

10.1.1.2. 带有可选系统管理器或选择器的智能电池充电器

包含可选系统管理器或选择器功能的智能电池充电器(由 ChargerSpecInfo() 命令寄存器 0x11 的第 4 位指示)必须在电池或交流电状态发生变化时生成一个 SMBus Alarm Notify。带有可选系统管理器的智能电池充电器的 BatterySystemState() 命令寄存器(0x21)的内容(或者在可选选择器的情况下,SelectorState()(0x01)的内容)被放入 EC 的 Alarm Data Registers 中,智能电池充电器的从地址(0x09)被放入嵌入式控制器的 Alarm Address Register 中,并且嵌入式控制器的 Status Register 的 Alarm 位被置位。然后嵌入式控制器置位一个 SCI。

10.1.1.3. 智能电池系统管理器

智能电池系统管理器必须在电池或交流电状态发生变化时生成一个 SMBus Alarm Notify。智能电池系统管理器的 BatterySystemState() 命令寄存器(0x01)的内容被放入 EC 的 Alarm Data Registers 中,智能电池系统管理器的从地址(0x0A)被放入 EC 的 Alarm Address Register 中,并且嵌入式控制器的 Status Register 的 Alarm 位被置位。然后嵌入式控制器置位一个 SCI。

10.1.1.4. 智能电池选择器

智能电池选择器的要求与智能电池系统管理器的要求相同,不同之处在于使用 SelectorState() 命令寄存器(0x01)的内容,而不是 BatterySystemState()。智能电池选择器是智能电池系统管理器的一个子集,不具备对多个电池同时充电/放电的附加支持。系统管理器是首选实现。

10.1.2. 智能电池对象

智能电池子系统需要若干对象来定义其接口。总结如下:

表 10.2 智能电池对象

对象说明
_HID这是包含一个字符串的硬件 ID 命名对象。对于智能电池子系统,此对象返回值 “ACPI0002”。这将智能电池子系统标识给智能电池驱动程序。
_SBS这是包含一个 DWORD 的智能电池命名对象。此命名对象返回智能电池的配置。

10.1.3. _SBS(智能电池子系统)

_SBS 控制方法返回智能电池子系统的配置。该命名对象返回一个 DWORD 值,数值范围为 0 到 4。如果电池数量大于 0,则智能电池驱动程序假定存在 Smart Battery System Manager 或 Smart Battery Selector。如果为 0,则智能电池驱动程序假定只有一个 Smart Battery,且不存在 Smart Battery System Manager 或 Smart Battery Selector。

参数:

无

返回值:

_SBS 返回的 DWORD 是一个 Integer,包含智能电池子系统配置:

  • 0 - 最多一个 Smart Battery,且没有 Smart Battery System Manager 或 Smart Battery Selector。

  • 1 - 最多一个 Smart Battery,且有一个 Smart Battery System Manager 或 Smart Battery Selector。

  • 2 - 最多两个 Smart Battery,且有一个 Smart Battery System Manager 或 Smart Battery Selector。

  • 3 - 最多三个 Smart Battery,且有一个 Smart Battery System Manager 或 Smart Battery Selector。

  • 4 - 最多四个 Smart Battery,且有一个 Smart Battery System Manager 或 Smart Battery Selector。

最大电池数量针对整个系统而言。因此,如果平台能够支持四块电池,但系统中通常只存在两块,则该字段应返回 4。请注意,值 0 表示最多支持一块电池,并且系统中不存在 Smart Battery System Manager 或 Smart Battery Selector

由于 SMBus 不是可枚举总线,总线上的所有设备都必须在 ACPI 命名空间中声明。由于智能电池驱动程序能够理解 Smart Battery、Smart Battery Charger 以及 Smart Battery System Manager 或 Smart Battery Selector;因此每个智能电池子系统只需要声明一个设备。驱动程序通过硬件 ID(其定义了一个智能电池子系统)以及该子系统支持的 Smart Battery 数量(_SBS 命名对象)获取关于该子系统的信息。ACPI 智能电池表指示平台应在何种能量级别向用户发出警告,然后进入睡眠状态。随后智能电池驱动程序将这些反映为 Smart Battery 的阈值告警。

如果非 OS 代码可能会对设备资源执行存在争用的访问,则 ACPI 命名空间中的智能电池设备声明需要 _GLK 对象。有关 _GLK 对象的详细信息,请参见 _GLK(全局锁)。

10.1.3.1. 示例:单 Smart Battery 子系统

本节说明如何定义一个包含单个 Smart Battery 和充电器的智能电池子系统。平台实现如下所示:

../_images/Power_Source_and_Power_Meter_Devices-3.png

图 10.2 单 Smart Battery 子系统

在此示例中,平台使用一个位于嵌入式控制器内的 SMB-HC,并且其符合 ACPI 对嵌入式控制器接口和 SMB-HC 接口的标准。嵌入式控制器接口位于系统 I/O 端口地址 0x62 和 0x66。SMB-HC 在嵌入式控制器地址空间内的基址为 0x80(由 ACPI 嵌入式控制器规范定义),并响应查询值 0x30 上的事件。

在此示例中,智能电池子系统仅支持单个 Smart Battery。用于描述此接口的 ASL 代码如下所示:

Device (EC0) {
   Name (_HID, EISAID("PNP0C09"))
   Name (_CRS,
      ResourceTemplate () {                // port 0x62 and 0x66
         IO (Decode16, 0x62, 0x62, 0, 1),
         IO (Decode16, 0x66, 0x66, 0, 1)
      }
   )
   Name (_GPE, 0)
   Device (SMB0) {
      Name (_HID, "ACPI0001")              // Smart Battery Host Controller
      Name (_EC, 0x8030)                   // EC offset (0x80), Query (0x30)
      Device (SBS0){                       // Smart Battery Subsystem
         Name (_HID, "ACPI0002")           // Smart Battery Subsystem ID
         Name(_SBS, 0x1)                   // Indicates support for one battery
      }                                    // end of SBS0
   }                                       // end of SMB0
}                                          // end of EC

10.1.3.2. 多 Smart Battery 子系统:示例

本节说明如何定义一个包含三个 Smart Battery、一个 Smart Battery System Manager 和一个 Smart Battery Charger 的智能电池子系统。平台实现如下所示:

../_images/Power_Source_and_Power_Meter_Devices-4.png

图 10.3 智能电池子系统

在此示例中,平台使用一个位于嵌入式控制器内的 SMB-HC,并且其符合 ACPI 对嵌入式控制器接口和 SMB-HC 接口的标准。嵌入式控制器接口位于系统 I/O 端口地址 0x100 和 0x101。SMB-HC 位于嵌入式控制器地址空间内,基址为 0x90(由 ACPI 嵌入式控制器规范定义),并响应查询值 0x31 上的事件。

在此示例中,智能电池子系统支持三个 Smart Battery。Smart Battery Charger 和 Smart Battery System Manager 位于嵌入式控制器内,符合 Smart Battery System Manager 和 Smart Battery Charger 接口规范,并响应它们各自的 7 位地址(分别为 0xA 和 0x9)。用于描述此接口的 ASL 代码如下所示:

Device (EC1) {

Name (_HID, EISAID("PNP0C09"))
   Name (_CRS,
      ResourceTemplate () {             // port 0x100 and 0x101
         IO(Decode16, 0x100, 0x100, 0, 2)
      }
   )
   Name (_GPE, 1)
   Device (SMB1) {
      Name (_HID, "ACPI0001")           // Smart Battery Host Controller
      Name (_EC, 0x9031)                // EC offset (0x90), Query (0x31)
      Device (SBS1){                    // Smart Battery Subsystem
         Name (_HID, "ACPI0002")        // Smart Battery Subsystem ID
         Name (_SBS, 0x3)               // Indicates support for three batteries
      }                                 // end of SBS1
   }                                    // end of SMB1
}                                       // end of EC
Prev
总览
Next
10.2. 控制方法电池