バッテリーおよび電源サブシステムのハードウェア設計
Windows 8 以降、システム ハードウェア設計者は、Windows プラットフォームのバッテリと電源サブシステムについて 2 種類の異なるハードウェア トポロジから選択できます。
ハードウェアのトポロジ
通常、Windows は、電源および充電サブシステムについて、2 種類のハードウェア トポロジのいずれかを想定しています。
1 つ目のトポロジを次のブロック図で説明します。 このトポロジは Windows 7 を実行する PC で一般的で、プラットフォームに埋め込みコントローラーが使用されています。 埋め込みコントローラーは、通常、電源管理、バッテリ充電管理、電源ボタンまたはスイッチの検出、PS/2 互換キーボードおよびマウス入力など、モバイル Windows PC で複数の機能を実行します。 通常、埋め込みコントローラーは、Low Pin Count (LPC) バスを介してコア シリコンに接続されます。 Windows は、ACPI 埋め込みコントローラー インターフェイスを介して電源サブシステム情報に関する通知を受け取ります。
2 つ目のトポロジを次のブロック図で説明します。 このトポロジでは、バッテリ充電コントローラーと電力ゲージ コンポーネントが使用されています。これは、I²C などの単純な周辺機器バス経由でプラットフォームのコア シリコンに直接接続されています。 この構成では、Windows は I²C バスを介した通信経由で電源サブシステムの変更についてクエリを実行し、通知を受けます。 SPB (Simple Peripheral Bus) 操作領域を使用すると、ファームウェアの ACPI 制御方法コードが I²C バス上のコア シリコンに接続されているバッテリ充電コントローラーと電力ゲージ コンポーネントと通信できます。
埋め込みコントローラーを使用した 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 電源状態を使用する PC では、埋め込みコントローラーがバッテリ寿命目標に影響を与えないことを確認します。 S3/S4 を使用するシステムでは、特定の電力要件はありません。
SPB 接続充電サブシステムを使用した ACPI 操作
プラットフォームは、I²C などの低電力の SPB (simple peripheral bus) を使用して、コア チップセットに接続されたバッテリと電源サブシステムを接続することもできます。 これらの設計では、ACPI の制御メソッドとバッテリ サブシステムのハードウェア間の通信に、ACPI GenericSerialBus 操作領域が使用されます。 バッテリ サブシステムのハードウェアを GPIO 割り込みに接続すると、バッテリの状態の変化時に ACPI の制御メソッドを実行できます。
バッテリと電源サブシステムのハードウェアが I²C を使用して接続されている場合、ACPI ファームウェアは次を定義する必要があります。
- I²C 割り込みが接続されている GPIO コントローラー デバイスのDevice() ノード。次が含まれます:
- _HID GPIO コントローラーのハードウェア ID を記述するオブジェクト。
- GPIO コントローラーの割り込みリソースとハードウェア リソースを記述する _CSR オブジェクト。
- 1 つ以上の GPIO 線を ACPI イベントメソッドの実行にマップする _AEI オブジェクト。 これにより、GPIO 線の割り込みに応答して、ACPI メソッドを実行できるようになります。
- バッテリ残量ゲージと充電ハードウェアが接続されている I²C コントローラーの Device() ノード。次が含まれます。
- I²C コントローラーのハードウェア ID とリソースを記述する _HID および _CSR オブジェクト。
- I²C デバイスの仮想コマンド レジスタを記述する、I²C デバイスの範囲内の GenericSerialBus 操作領域。
- GenericSerialBus 操作領域のフィールド定義。 フィールド定義を使用すると、I²C デバイス外部の ASL コードが I²C デバイスの仮想コマンド レジスタにアクセスできるようになります。
GPIO コントローラーを記述し、GPIO 線を ACPI イベントにマッピングすると、I²C デバイスからの GPIO 割り込みの発生時に、バッテリー状態と通知の制御メソッドを実行できます。 GenericSerialBus 動作領域を記述することにより、バッテリ状態の ACPI コードが I²C バスを介して通信し、バッテリ残量ゲージおよび充電サブシステムからレジスタと情報を読み取れます。
充電サブシステムからのバッテリ情報へのアクセス
バッテリ サブシステムのハードウェアが接続されている I²C バス上でコマンドを送受信することによって、ACPI 制御メソッドでバッテリの状態を実行できます。 状態とバッテリの静的情報メソッドをバックアップするコントロール メソッド コードは、ACPI 名前空間で記述された GenericSerialBus 操作領域からデータを読み書きします。 制御メソッドのコードは、GenericSerialBus 操作領域を通じて、I²C バス上の電力ゲージ デバイスまたはバッテリ容量とサイクル カウントに関する静的情報を読み取ることができます。
バッテリの状態の変化時に Windows に通知 (サブシステム ハードウェア)
バッテリ サブシステム ハードウェアは、状態が変化したとき、またはコア シリコンの GPIO 線からの割り込みを生成できます。 GPIO 線は、ACPI で記述される GPIO コントローラー下の _AEI オブジェクトを使用して、特定の制御メソッドの実行にマッピングできます。 GPIO 割り込みが発生すると、Windows ACPI サブシステムは、特定の GPIO 線に関連付けられたメソッドを実行します。これにより、制御メソッド バッテリ デバイスで Notify() コマンドを発行できます。 これにより、Windows が状態および静的情報のメソッドを再評価して、バッテリの状態を更新するようになります。
電源インジケーターと充電インジケーター
Windows は、オペレーティング システムの電源とバッテリの状態の情報を提供します。 これは、デスクトップのバッテリ トレイ アイコン、スタート メニュー、ロック画面など、いくつかの場所でユーザーに直接表示されます。
Windows 8 のプラットフォームでは、充電状態時に表示されるインジケーターを表示することもできます。 次の図は、2 種類の UI の例を示しています。 使用されるインジケーターは、電力消費およびユーザー エクスペリエンスにほとんど影響しません。
Windows 電源と充電のユーザー インターフェイス要素
Windows は、次の 3 つの主要な場所で電源と充電の状態を示します。
- ロック画面。 電源と充電の状態を示すバッテリ アイコンが表示されます。
- スタート ボタンの上にカーソルを置いたときの日付と時刻のインジケーター。 電源と充電の状態を示すバッテリ アイコンが表示されます。
- デスクトップのバッテリ アイコン。 電源と充電の状態を示すバッテリ アイコンが表示されます。 バッテリ アイコンをクリックすると、詳細情報が表示されます。これには、システムに複数のバッテリがある場合の電源残量、推定残り時間、バッテリごとの詳細が含まれます
. モダン スタンバイ対応プラットフォームでは、システム電力残量が S0 となり、カバー (存在する場合) が閉じていない場合、Windows がシステムが充電器に接続されて電源が供給されるとディスプレイを短時間明るく表示します。 これにより、ユーザーは、プラットフォームが充電器に接続する操作に応答していることを確認できます。
プラットフォーム ハードウェア充電インジケーター
Windows に組み込まれているユーザー インターフェイス要素は、Windows が実行されていて、表示がユーザーに表示されるシナリオに対処します。 ただし、これらの画面上のインジケーターは、システムがシャットダウン中、休止状態、スリープ状態、またはその他の方法で実行されていない場合、表示されません。
プラットフォームには、電源があることを示す LED が搭載されている場合があります。 このような LED はシステム シャーシに配置しないことをお勧めします。 その代わりに、電源ブリック、電源ケーブル、または電源コネクタのいずれかに LED と搭載します。 必要に応じて、この LED はユーザーに対して充電状態を表示することもできます。
LED が搭載されていると、ユーザーの邪魔になるため、時間の経過と共に輝度や色が変化しないようにする必要があります。 ただし、充電状態を示すために色を変化させることもできます。たとえば、充電時は黄色、完全に充電された場合は緑、障害が発生した場合は赤色が使用できます。
リアルタイム クロック予約バッテリ容量
優れたユーザー エクスペリエンスを実現するには、正確な時間を維持することが不可欠です。 さらに、Microsoft Store などのサービスに接続するには正確な時間が必要です。 すべての Windows システムは、オフの場合でも、最低 4 週間は正確な時間を維持する必要があります。 通常、これは、リアルタイム クロック (RTC) を維持するために個別のバックアップ バッテリを採用することによって実現されます。 これは、常に実現可能であるとは限りません。また、移植性の高いフォーム ファクターでは現実的ではありません。
システム デザイナーは、専用のバッテリの使用も、メインのシステムバッテリの一部の予約という設計を選択できます。 RTC の適度な電力要件を考慮すると、比較的低い予約しきい値を使用すると、現在の PC にで使用される専用バックアップ バッテリに相応する保証が得られます。
デザインのガイドライン
OSPM には、システム デザイナーが Windows OS の重要なバッテリ イベントを上書きするための方法が提供されています。 バッテリが重大レベル (ミリワット時間) に近づくと、コントロール メソッドのバッテリ実装の _BIX (バッテリ情報拡張 – 低電力の設計容量) メソッドで定義されているとおり、ファームウェアは Notify コマンドを OS に発行します。 その時点で、Windows はシステム状態を維持するために緊急シャットダウンまたは休止を実行します。
すべてのデザインは、次の要件を満たす必要があります。
- _BIX メソッドの低向け設計能力は、(重要なアクションを確実に実行するために必要な容量に加え)、完全な設計容量の少なくとも 675 ミリワット時間に設定する必要があります。
- 上記の予約容量は、完全な設計容量の 4% 未満である必要があります。
充電パフォーマンス
システム バッテリを完全に充電するために必要な時間は、ユーザーの懸念事項です。 多くのシステムでは、ユーザーのシステム インタラクションがない夜間などの期間中に充電が行われます。 ただし、バッテリが完全になくなり、ユーザーがポータブル方式でシステムを使用している場合は、充電パフォーマンスが主な懸念となります。
Windows では、すべてのプラットフォームにおいて、システムが起動され、画面がオフの状態でモダン スタンバイ状態中、4 時間以内にシステム バッテリを 5% から 90% まで充電できる必要があります。
システム デザイナーは、ユニバーサル シリアル バス (USB) ベースの充電のみをサポートするシステム充電に特に注意する必要があります。 USB 充電のみを備え、バッテリ容量が大きいシステムでは、充電パフォーマンスに対する顧客の期待を満たしていない可能性があります。
バッテリ容量が大きい (30 時間以上の) プラットフォームで USB 充電が必要な場合は、システム デザイナーは高電力 DC 入力を提供し、高電力 DC バッテリをシステムにバンドルする必要があります。 これにより、インタラクション中にプラットフォームのバッテリを充電できます。そうしないと、バッテリ容量が大きい USB 充電専用プラットフォームの入力電力が低くなり、電力消費が多い場合に使用できなくなる場合があります。