バッテリーと充電

バッテリー 充電のユーザー エクスペリエンス

このトピックでは、Windows 10 のバッテリおよび充電に関する推奨事項について説明します。 Windows を実行しているすべてのデバイスは、フォームファクタ、命令セット、またはプラットフォーム アーキテクチャに関係なく、バッテリー 充電の一貫したエクスペリエンスを提供します。 その結果、ユーザーはバッテリ充電で一貫した質の高いエクスペリエンスが得られます。

  1. 充電器に接続すると、常に充電が行われます。

    バッテリー 障害の場合を除き、Windows を実行しているデバイスは、バッテリー が充電器に接続されるたびに常に充電できます。

  2. Windows は、充電器に接続されているときは常にブートできます。

    • Windows 10 デスクトップ エディション (Home、Pro、Enterprise、Education):

      デバイスが S5 (シャットダウン状態) の場合、バッテリー が取り外し可能であれば、バッテリー の充電レベルやバッテリー の有無に関係なく、充電器に接続すると常に Windows を起動できます。

    • Windows 10 Mobile:

      システムが起動するためには、バッテリー が存在し、十分な充電量があることが必要です。

  3. ハードウェアは、充電を自律的に管理します。

    ハードウェアは、ファームウェア、Windows、ドライバー、またはメイン CPU で実行されているその他のソフトウェアを必要とせずにデバイスのバッテリー を充電します。 この要件は、Windows 10 デスクトップ エディション システムにのみ適用されます。 Windows 10 Mobile システムでは、バッテリー を充電するために、UEFI 充電アプリや他のソフトウェア コンポーネントのサポートが必要な場合があります。

  4. バッテリが完全に充電されるか、障害が発生すると、充電は自動的に停止します。

    バッテリー が完全に充電されると、ハードウェアは自動的に充電を停止します。 これは、メイン CPU 上で動作するファームウェア、Windows、ドライバー、その他のソフトウェアを必要とせずに実行されます。 バッテリーまたは温度の障害状態がある場合、充電も自動的に停止されます。

充電器に接続すると充電される

ユーザーは、デバイスが充電器に接続されればいつでも充電されると想定します。 そのため、電源の状態に関係なく、デバイスが充電装置に接続されるたびに、ハードウェアは常にバッテリー の充電を試みる必要があります。 このユーザーの想定は、アクティブ (S0)、スリープ (S3)、休止 (S4)、シャットダウン (S5)、ハードオフ (G2/G3)、または S0 アイドルなど、すべてのシステム電源状態に当てはまります。 バッテリー が完全に充電されるか、障害状態が発生すると、充電が停止する場合があります。

Windows またはファームウェアがブートされていないか、実行されていない場合、バッテリー の充電速度を下げる設計はお勧めしません。 たとえば、システムが完全にオフであり、充電器に接続されている場合は、バッテリー はより遅い速度で充電し、一方でデバイスがブートされ、ACPI ファームウェアを使用してバッテリー を定期的に監視できる場合は、より速い速度で充電します。

最後に、システムによっては、システムが温度状態にある場合には、バッテリー の充電がより低速になる場合があります。 この場合、バッテリーの充電速度を遅くしたり、充電を停止したりして熱を抑えます。 システム設計が優れていれば、温度状態になるのは例外です。

AC 電源に接続すると、Windows は常に起動可能

  • Windows 10 デスクトップ エディション

    ユーザーは、充電器に接続すればいつでもすぐにデバイスを起動し、使用できると想定します。 そのため、AC 電源に接続した場合は、常にデバイスが起動し、完全に使用可能でなけらばなりません。 これは、バッテリー の充電レベル、バッテリー /充電器の状態、バッテリー の有無 (バッテリー が取り外し可能な場合) に関係なく当てはまります。

    デバイスでファームウェアを起動するために、最小バッテリー 容量を必要とする場合、ハードウェアはバッテリー 容量が常にプラットフォームによって予約されているようにする必要があります。 予約済みのバッテリー 容量を Windows に公開しないでください。

  • Windows 10 Mobile

    システムが AC 電源に接続され、バッテリー が存在する場合、ブート プロセス中にシステムに電力を供給するのに十分なバッテリー の充電がある限り、システムはオペレーティング システムへのブートを試みるはずです。

ハードウェアが自律的に充電を管理する

上述のように、ユーザーは、充電器に接続されるとデバイスが充電されると想定します。 そのため、ハードウェアは、メイン CPU 上で動作するファームウェア、Windows、ドライバー、またはその他のソフトウェアを必要とせずにバッテリー を充電する必要があります。これらのコンポーネントの 1 つ以上が動作していない、または任意の時点で障害状態である可能性があるからです。 この要件は、Windows 10 デスクトップ エディション システムにのみ適用されます。 Windows 10 Mobile システムでは、バッテリー を充電するために、UEFI 充電アプリや他のソフトウェア コンポーネントのサポートが必要な場合があります。

完全に充電されたときまたは障害が発生したときに充電は自動的に停止する

バッテリー が完全に充電されたとき、または障害が発生した場合、ハードウェアは自動的に充電を停止します。 充電と同様、これは、メイン CPU 上で動作するファームウェア、Windows、ドライバー、その他のソフトウェアを必要とせずに実行される必要があります。 さらに、ハードウェアはすべてのバッテリー 安全性規制条件に準拠する必要があります。

電源インジケーターと充電インジケーター

Windows は、ユーザーが複数の場所で表示できるアイコンを使用して、電源とバッテリー のステータス インジケーターを提供します。 それらの場所には、バッテリー システム トレイ アイコンとロック画面が含まれます。

デバイスには、充電状態を示す LED などの物理的なインジケーターを設定することもできます。 このインジケーターは、消費電力にほとんど影響を与えないものでなければなりません。

Windows の電源および充電アイコン

Windows では、次の 3 つの場所に電源と充電状態が表示されます。

  • ロック画面:

    Windows で、電源と充電の状態を示すバッテリー アイコンが表示されます。

  • デスクトップ システム トレイ (Windows 10 デスクトップ エディションのみ):

    電源および充電の状態を示すバッテリー アイコンが表示されます。 ユーザーは、バッテリー アイコンをクリックすると、残量、推定残量、バッテリー ごとの詳細 (複数のバッテリー を搭載している場合) などの情報を表示できます。

  • ステータス バー (モバイル SKU のみ):

    電源および充電の状態を示すバッテリー アイコンが表示されます。 ユーザーが画面上部から下にスワイプしてアクション センターを展開すると、実際のバッテリー 残量が表示されます。

  • バッテリー 節約機能の設定:

    Windows は、[バッテリー 節約機能] 設定ページ ([設定] -> [システム] -> [バッテリー 節約機能]) に、バッテリー の全体的な割合、バッテリー の状態 (充電と放電)、充電/放電の推定残り時間を表示します。

S0 アイドルが可能なプラットフォームでは、ディスプレイが表示されている場合、システムが充電器に接続または切断されると、Windows によって一時的にディスプレイが点灯し、電源の変更がユーザーに通知されます。

プラットフォーム ハードウェア充電インジケーター

Windows に組み込まれたアイコンは、Windows が動作しており、ディスプレイがユーザーに表示されるシナリオにのみ対応します。 ただし、システムがシャットダウンされている場合や、表示がオフの S0 アイドル状態の場合、画面のインジケーターは表示されません。 ユーザーが画面上で視覚的な手掛かりを見ることができないので、電源が存在すことを示す物理的な充電インジケーターがプラットフォームに含まれる場合があります。

次のセクションでは、ドッキング ソリューションを使用して S0 アイドル プラットフォームにキーボードとマウス/タッチパッドを実装するための推奨事項を示します。 このセクションでは、潜在的な解決策と共に、課題と原則について説明します。 いずれのソリューションはどちらも、モバイルおよび A/C 搭載の固定ドックに適用されます。

電源サブシステムと充電サブシステムを Windows に公開

Windows を実行しているすべてのモバイル デバイスには、1 つ以上のバッテリー と AC アダプターなどの電源が含まれています。 これらのサブシステムからの情報は、電源管理の状態をユーザーに伝えます。 この状態には、任意の時点でのバッテリー 残量、AC アダプターとバッテリー 充電の状態、残りの推定バッテリー 時間が含まれます。 電源サブシステム情報は、Windows のバッテリー メーターやその他の電源管理診断ユーティリティで表示されます。

次のセクションでは、ドッキング ソリューションを使用して S0 アイドル プラットフォームにキーボードとマウス/タッチパッドを実装するための推奨事項を示します。 このセクションでは、潜在的な解決策と共に、課題と原則について説明します。 いずれのソリューションはどちらも、モバイルおよび A/C 搭載の固定ドックに適用されます。

一般的な電源サブシステムのハードウェア トポロジ

通常、Windows は、電源および充電サブシステムについて、2 種類のハードウェア トポロジのいずれかを想定しています。

次の図は、Windows を実行している既存のデバイスで一般的な、プラットフォームの組み込みコントローラーを使用する最初のトポロジを示しています。 埋め込みコントローラーは、電源管理、バッテリー 充電管理、電源ボタンまたはスイッチの検出、PS/2 互換キーボードおよびマウス入力など、モバイル デバイスで複数の機能を実行します。 通常、埋め込みコントローラーは、Low Pin Count (LPC) バスを介してコア シリコンに接続されます。 Windows は、ACPI 埋め込みコントローラー インターフェイスを介して電源サブシステム情報に関する通知を受け取ります。

power and charging subsystem with an embeddded controller

次の図は、2 番目のトポロジを示しています。このトポロジでは、バッテリ充電コントローラーと燃料計コンポーネントが、I²C などの軽量周辺機器バスを使用してプラットフォームのコア シリコンに直接接続されています。 この構成では、Windows は I²C バスを介した通信経由で電源サブシステムの変更についてクエリを実行し、通知を受けます。 ACPI 制御メソッド環境は、バッテリー または充電サブシステムにデバイス ドライバーを使用する代わりに、簡易周辺機器 (SPB) 操作領域のサポートによって拡張されます。 SPB 操作領域を使用すると、ACPI 制御メソッド コードは、I²C を介してコア シリコンに接続されているバッテリ充電コントローラーおよび燃料ゲージ コンポーネントと通信できます。

power and charging subsystem using the platform controller

バッテリおよび電源サブシステムのドライバー モデル

Windows は、堅牢なバッテリーおよび電源サブシステム デバイス ドライバー モデルを備えています。 電源管理情報は、バッテリー デバイス ドライバーを介してWindows 電源マネジャー に伝達され、バッテリー デバイス のIRP と一連の電源管理ソフトウェア API を介して Windows ユーザー インターフェイス に集約され公開されます。

バッテリー ドライバー モデルはポート モデルまたはミニポート モデルで、新しいバッテリーの種類がミニポートを介して公開されるように、バッテリー モデルとインターフェイスが定義されています。 ただし、実際には、Windows エコシステムで重要な役割を果たすミニポートは 2 つのみです。それらは、ACPI 制御メソッドのバッテリをサポートするバッテリ ミニポート ドライバーと、USB 接続の無停電電源装置 (UPS) デバイス用の HID バッテリ ミニポート ドライバーです。

battery and power system driver model

すべての PC は、ACPI 制御メソッド インターフェイスを介してバッテリー と充電サブシステムを公開する必要があります。 プラットフォーム固有のバッテリー充電サブシステムに対して、バッテリー ミニポート インターフェイスを使用すべきではありません。 ACPI 仕様で定義された制御メソッドを使用すると、Windows でバッテリー の情報と状態をポーリングできます。 同様に、ハードウェア プラットフォームが AC からバッテリー電源への切り替えなど、バッテリー と電源の変更を Windows に通知できるイベントドリブン モデルがあります。

ステータス ポーリング

Windows 電源マネージャーは、バッテリー の充電残量や現在の消耗速度などの状態に関する情報を定期的に要求します。 この要求は、電源マネージャー、上位レベルのユーザーインターフェイス コンポーネント、またはアプリケーションから発信されます。 電源マネージャーは、要求をバッテリー デバイスに I/O 要求パケット (IRP) に変換します。 ACPI 制御メソッド インターフェイスを介してバッテリー が公開されている場合、制御メソッド バッテリー ドライバー (cmbatt.sys) は、適切な ACPI 制御メソッドを実行します。 状態に関する情報の場合は、_BST (バッテリー の状態) メソッドが実行されます。

_BST では、ACPI ファームウェアが電源サブシステムから現在の情報を取得し、その情報を ACPI 仕様で指定された形式でバッファーにパッケージ化する必要があります。 埋め込みコントローラーからバッテリー の状態にアクセスするために必要な特定のコード、または I²C を介して接続されたバッテリー 充電器は、ACPI ファームウェアと、_BST メソッドを構成するコードの一部に含まれます。 _BST メソッドの最終結果は、制御メソッドのバッテリー ドライバーに返される必要な情報のバッファーです。 制御メソッドのバッテリー ドライバーは、最後にバッファーをバッテリー ドライバーと Windows 電源マネージャーが必要とする形式に変換します。

状態変化の通知

電源サブシステムとバッテリー サブシステムは、AC からバッテリー 電源への切り替えなど、状態の変更について、Windows にいくつかの通知を生成します。 Windows によるこれらの状態の変更のポーリングは、ポーリングが必要になる頻度が高いため、実用的ではありません。 そのため、ハードウェア プラットフォームでは、バッテリー の状態が大幅に変化した場合に Windows を通知するために、イベントドリブン モデルを使用する必要があります。

バッテリー の残量や充電状態などの状態が変化すると、ACPI ファームウェアは制御メソッドバッテリー デバイスに Notify(0x80) を発行します。 その後、Windows 制御メソッド バッテリー ドライバーは _BST メソッドを評価し、更新された情報を電源マネージャーに返します。

バッテリーの静的データ (最後の完全充電状態における容量、設計容量、サイクル数など) が変更されると、ACPI ファームウェアは制御メソッドのバッテリー デバイスで Notify(0x81) を発行します。 その後、Windows 制御メソッド バッテリー ドライバーは _BIX メソッドを評価し、更新された情報を電源マネージャーに返します。

プラットフォームは、埋め込みコントローラー搭載プラットフォームの場合はシステム制御割り込み (SCI) を介して、コア シリコンに直接接続されたバッテリー サブシステム ハードウェアを備えたプラットフォームの場合は GPIO を介して、ACPI ファームウェア環境に割り込みます。

埋め込みコントローラーを使用した ACPI 操作

バッテリー と電源サブシステムが一般的な組み込みコントローラーに接続されているプラットフォームを使用すると、ACPI 組み込みコントローラー操作領域を使用して、ACPI 制御メソッド環境とプラットフォーム ハードウェア間の通信が容易になります。

ACPI ファームウェアは、ACPI の仕様の 12.11.1 項に記載されているように、ACPI 名前空間に次の埋め込みコントローラーを定義する必要があります。

  • 埋め込みコントローラーの Device() ノード。
  • デバイスが組み込みコントローラーであることを示す _HID オブジェクト。
  • 組み込みコントローラーの I/O リソースを示す _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 の制御メソッドとバッテリー サブシステムのハードウェア間の通信に、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 が状態と静的な情報メソッドを再評価してバッテリーの状態を更新します。

電源オブジェクトの ACPI 実装

ACPI ファームウェアは、ACPI 電源デバイスを実装する必要があります。 このオブジェクトは、"ACPI0003" のハードウェア ID (_HID) を使用して自身を報告する必要があります。 また、このオブジェクトは、ACPI _PSR (Power Source) メソッドを実装する必要もあります。 このメソッドは、電源の状態を返し、電源が現在オンライン (AC 電源) かオフライン (バッテリー電源) かを伝えます。 システムの入力電源はすべて、単一の _PSR メソッドで多重化する必要があります。 たとえば、システムが DC _PSR コネクタまたは別のドッキング コネクタを介して電源を供給されている場合、システムはオンラインで伝える必要があります。 複数の ACPI 電源デバイスは使用しないでください。

_PSR メソッドは、システムが主電源に接続されている場合は、オンライン (AC 電源) のみを報告する必要があります。 _PSR の状態が変化すると、プラットフォームは ACPI 名前空間のデバイスで割り込みと Notify(0x80) を生成する必要があります。 これは、プラットフォームによって物理的な状態の変更が検出された直後に実行する必要があります。

バッテリの静的情報の ACPI 実装

ACPI ファームウェアは、設計容量、サイクル数、シリアル番号など、バッテリーに関する静的な情報を提供する各バッテリーの ACPI _BIX メソッドを実装する必要があります。 次の表では、ACPI 仕様で説明されているフィールドの定義を拡張し、この Windows 固有の要件を列挙しています。

フィールド 説明 Windows 固有の要件
リビジョン リビジョン_BIX 示します 0x0 に設定する必要があります
電力の単位 ハードウェアによって報告される単位を決定します。 MA/MAh または mW/mWh のいずれか。 単位が mW/mW であることを示すには、0x0 に設定する必要があります
設計容量 バッテリーの元の容量 (mWh) を示します 正確な値に設定する必要があり、0x0 または 0xFFFFFFFF は使用できません
最後の完全充電の容量 バッテリの現在の完全充電の容量を示します

正確な値に設定する必要があり、0x0 または 0xFFFFFFFF は使用できません

この値は、サイクル数が増えるごとに更新する必要があります。

バッテリー技術 バッテリーが充電可能か 1 回限りの使用かを示します。 充電可能であることを示すには、0x1 に設定する必要があります
設計電圧 バッテリーの設計電圧を示します

バッテリーが新品の場合、設計電圧 (mV) に設定する必要があります。

0x0 または 0xFFFFFFFF に設定しないでください。

警告の設計容量 OEM が提供するバッテリ低下の警告レベルを示します。 この値は Windows によって無視されます。
低設計容量 システムの電源がオフになるのを防ぐために、Windows を直ちにシャットダウンまたは休止状態にする必要がある、バッテリー切れのレベルを示します。 バッテリーの設計容量の 0x0 ~ 5% の値に設定する必要があります。
バッテリー容量の粒度 1 警告の設計容量と低設計容量の間でハードウェアが検出できる、充電の最小残量を示します。 バッテリー設計容量の 1% 未満の値に設定する必要があります。
バッテリー容量の粒度 2 最後の完全充電の容量と警告の設計容量の間でハードウェアが検出できる、充電の最小残量を示します。 バッテリー設計容量の 1/400 である 75 mW (およそ、25 Whr バッテリーの 0.25%) 未満の値に設定する必要があります。
循環棚卸 バッテリのサイクル数を示します。 0x0 より大きい値に設定する必要があります。 0xFFFFFFFFF に設定しないでください。
測定精度 バッテリ容量の測定精度を示します。 精度が 95% 以上であることを示す 95,000 以上に設定する必要があります。
最大サンプリング時間 2 つの連続する _BST 評価間でサポートされる最大サンプリング時間。これにより、残量の差異が示されます。 特定の要件はありません。
最小サンプリング時間 2 つの連続する _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-Battery Trip Point- メソッドを実装する必要があります。 _BTP を使用すると、Windows は残りの容量のしきい値を指定できます。このしきい値を超えると、プラットフォームは ACPI 名前空間のバッテリー デバイスで割り込みと Notify(0x80) を生成する必要があります。 _BTP メソッドでは、Windows がバッテリを定期的にポーリングする必要がなくなります。

バッテリー制御メソッド

ACPI 仕様では、デバイス固有のメソッドまたは_DSM 制御メソッドを使用して、デバイスおよびオペレーティング システム固有の制御メソッドを提供しています。 _DSM については、ACPI 仕様の 9.14.1 セクションを参照してください。

Windows では、制御メソッドのバッテリー デバイスに対して次の _DSM メソッドがサポートされています。

温度充電率の方向

フィールド Value 説明
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows コントロールのメソッドのバッテリー ドライバー サポートの拡張を示す GUID
改訂 ID 0x0 この機能の最初のリビジョン
関数インデックス 0x1 バッテリー充電スロットルを設定します
引数 温度制限

温度充電制限を示す 0 から 100 までの整数値。

値を 40% に設定すると、バッテリーは最大充電率の 40% で充電されます。

値を 0% に設定すると、このメソッドが再度呼び出されるまで、バッテリーの充電を停止する必要があることを示します。

戻り値 なし 該当なし

ユーザーが保守点検できるバッテリー

フィールド Value 説明
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows コントロールのメソッドのバッテリー ドライバー サポートの拡張を示す GUID
改訂 ID 0x0 この機能の最初のリビジョン
関数インデックス 0x2 この_DSM は、バッテリ デバイスがユーザーが保守点検できるかどうかを OSPM が判断するためのものであることを示します。
引数 なし 必須の引数はありません。
戻り値 1 つの整数を含むパッケージ。

ユーザーがバッテリを保守点検できず、エンドユーザーがバッテリを交換できない場合、またはエンドユーザーが追加の工具を使用して交換できる場合、0x0。

追加の工具を使用せずにエンドユーザーがバッテリを交換できる場合、0x1。

充電ウォッチドッグが必要です

フィールド Value 説明
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows コントロールのメソッドのバッテリー ドライバー サポートの拡張を示す GUID
改訂 ID 0x0 この機能の最初のリビジョン
関数インデックス 0x3 この_DSM は、制御メソッド バッテリーが高電流充電を維持するために定期的なウォッチドッグのリセットを必要とするかどうか、およびウォッチドッグをリセットする必要がある期間を OSPM が判断するためのものであることを示します
引数 なし 必須の引数はありません。
戻り値 1 つの整数を含むパッケージ。 バッテリがウォッチ ドッグサービスを必要としない場合、0x0。

0x0000001e と 0x12C を含む値は、ポーリング間隔の最大値 (秒) を示します。

それ以外の値は無視され、0x0 として扱われ、ウォッチドッグのリセットは必要ありません。

有効なウォッチドッグ間隔が指定されている場合、_BST メソッドの BatteryState の値が充電に設定されているときは常に、指定されたウォッチドッグ値より短い間隔で_BST メソッドが実行されます。

この値の動的更新はサポートされていません。

3rd Party製バッテリ ミニポート ドライバー

Windows 10 では、OEM と IHV は、Microsoft cmbatt.sys ドライバーに置き換え、バッテリー ハードウェアと直接通信するように、独自の3rd party製バッテリー ミニポート ドライバーを開発できます。 Microsoft は、サンプルのバッテリー ドライバーを GitHub および WDK サンプル キットの一部として提供しています。

USB 充電 (Windows 10 デスクトップ エディション)

Microsoft は、モバイル デバイスの USB 充電をサポートするオプションを提供する価値を認識しています。 携帯電話の充電器を標準化する EU の動きなどの標準化の取り組みにより、USB 充電器は広く利用され、Windows Phone、MP3 プレーヤー、GNSS デバイスなどの幅広いデバイスで動作します。Microsoft は、Windows を実行するデバイスなどの複数のデバイスを充電するために使用できる単一の充電器を提供することの価値を理解しています。 さらに、USB 充電に対する広範な業界のサポートを考えると、コストと環境への影響を軽減する副次的な利点もあります。

Windows 8 以降、以下の充電条件を満たせば、USB 経由でモバイル デバイスへの電源供給や充電が可能になりました。 さらに、高品質のユーザー エクスペリエンスを確保するために満たす必要のある、USB 固有の要件がいくつかあります。

  1. USB 電源/充電は、プラットフォーム ファームウェアに完全に実装する必要があります。 サポートには、オペレーティング システム、ドライバー、またはアプリケーションが必要であってはなりません。

  2. デバイスは、別のデバイスに接続されている場合は列挙してはなりません。 その結果、標準の PC の USB ポートに接続した場合、これらのポートはデフォルトで 500mA に制限されているため、デバイスを充電できません。 唯一の例外は、このポートがデバッグおよび工場出荷時のファームウェア プログラミングに使用される場合です。

  3. デバイスは、専用の USB 充電ポートからの充電をサポートします。 デバイスは、USB バッテリー充電仕様バージョン 1.2 に準拠している充電装置に接続すると、充電されるはずです。 デバイスを標準 USB 充電器に接続した場合は、充電規格に従って 1.5 A を超えないようにしてください。 OEM は、次の条件を満たす場合、より高い電流レベルをサポートすることを選択できます:

    • デバイスが充電器の種類を自動的に検出し、特定の充電器の種類に適した速度で充電します。
    • デバイスと充電器が関連するすべての電気および安全基準を満たしています。
    • OEM が充電器および関連ケーブルをデバイスと一緒に出荷します。
  4. USB 充電は、標準のマイクロ AB タイプ、USB-C (推奨)、または独自のドッキング コネクタでサポートされています。 デバイスではマイクロ B タイプは許可されません。 専用のドック コネクタを使用する場合、OEM は、標準の USB 充電器から充電できるように、デバイスに適切なケーブルを同梱する必要があります。

  5. マイクロ AB ポートが実装された場合、デバイスはケーブルの種類と構成を自動的に検出し、適切な役割を担う必要があります。 マイクロ B プラグが挿入された際に、ポートでデバッグが有効になっていない場合、充電器の役割を担う必要があります。 マイクロ B プラグが挿入された際に、ポートでデバッグが有効になっている場合、充電器の役割を担う必要があります (つまり、充電はサポートされていません)。 マイクロ A プラグが挿入された場合、Windows によって接続された USB デバイスが認識され、USB ホストの役割を担います。

  6. マイクロ AB ポートがデバッグポートとしても機能する場合、デバイスはファームウェアを通じて充電器とデバッグの役割を切り替える手段を提供しなければなりません。 エンド ユーザーに出荷される既定の設定では、デバッグが無効になっている必要があります。

  7. マイクロ AB ポートがデバッグ ポートとしても機能する場合、デバイスは専用バレル コネクタまたは専用ドック コネクタのいずれかを介して代替入力電源パスを提供する必要があります。

プラットフォーム設計者と実装者のチェックリスト

次のチェックリストを使用して、プラットフォーム設計とシステム ファームウェアがバッテリーおよび充電サブシステムのガイダンスに準拠していることを確認できます。

バッテリー サブシステムと ACPI ファームウェアの実装チェックリスト

システム設計者は、ACPI ファームウェアで次のタスクを完了して、バッテリーおよび電源サブシステム情報が Windows に正しく報告されるようにする必要があります:

  • ACPI 名前空間内の各バッテリー デバイスの Device() オブジェクト。

  • 各バッテリーに、following control メソッドとオブジェクトが用意されている必要があります:

    • PNP0C0A という値を持つ _HID。
    • _BIX バッテリー情報拡張:

    最後の完全充電の容量、設計容量、サイクル数など、バッテリーの静的な情報を伝達します。

    • _BST バッテリーの状態:

      バッテリーの残量、消耗速度、充電状態など、現在のバッテリーの状態を伝えます。

    • _BTP バッテリー トリップ ポイント:

      イベントドリブン バッテリー状態モデルを有効にし、ポーリングの定期的な作業を減らします。 _BTP を使用すると、Windows が、バッテリー残量のしきい値を指定できます。プラットフォームは、このしきい値に基づいて、バッテリー デバイス上で Notify(0x80) コマンドを発行し、バッテリーの状態に関する情報を更新するように Windows に要求します。

    • _STA 一般状態:

      バッテリーが取り外し可能なデバイスに存在するかどうか、またはポータブル ドックにバッテリーが存在するかどうかを Windows が認識できるようにします。

  • ACPI 名前空間内に AC アダプター/電源の単一の Device() オブジェクトを追加します。

  • 電源デバイスは、次の制御メソッドとオブジェクトを提供する必要があります:

    • ACPI 0003 という値を持つ _HID

    • _PSR 電源:

      電源が現在オンライン (AC 電源) またはオフライン (バッテリー電源) の場合に伝達されます。 デバイスの入力電源はすべて、_PSR メソッドで多重化する必要があります。 たとえば、デバイスが DC _PSR コネクタまたは別のドッキング コネクタを介して電源を供給されている場合、システムはオンラインで伝える必要があります。 複数の ACPI 電源デバイスは使用しないでください。

  • _BIX メソッドは、前述のバッテリーの静的情報で説明されているように、次のフィールドと制約をサポートする必要があります:

    • "リビジョン" フィールドは 0x0 に設定されている必要がある。
    • "電力の単位" フィールドは 0x0 に設定されている必要があります。
    • 設計容量最後の完全充電容量の値は、バッテリーおよび充電サブシステムからの正確な値に設定されている必要がある。0xFFFFFFFF または0x00000000 と同じには設定できない。
    • "バッテリー技術" フィールドは 0x1 に設定されている必要があります。
    • "設計電圧" フィールドは正確に設定されている必要がある。0x00000000 または0xFFFFFFFF と同じには設定できない。
    • 設計容量 (低) は、完全にオン状態のシステムを休止またはシャットダウンするのに必要な最小値に設定されている必要がある。
    • "バッテリー容量粒度 1" フィールドと "バッテリー容量粒度 2" フィールドは、バッテリー設計容量の 1% 以下の値に設定されている必要があります。
    • "サイクル数" フィールドは、バッテリー サブシステムから正確に入力されている必要があります。
    • "測定精度" フィールドは 80,000d 以上に設定されている必要があります。
    • "モデル番号" と "シリアル番号" フィールドは NULL に設定できません。
  • Windows がリアルタイムのバッテリーの状態をポーリングできるようにする _BST メソッドを提供します。 BST メソッドのフィールドはすべて、基盤となる電源およびバッテリー充電サブシステムから動的に返される必要があります。 これらの精度は、_BIX メソッドの測定精度の値の範囲内である必要があります。

  • バッテリー デバイスで Notify(0x80) を使用してプラットフォームが Windows に割り込むバッテリーの残量のしきい値を Windows が指定できるようにする _BTP メソッドを提供します。

  • Notify(0x80) が、バッテリーの状態の変更または_BTP 充電容量制限トリップへの応答としてのみ発行されるようにします。 Notify(0x80) は定期的に実行しないでください。

  • バッテリー レベルが _BIX.DesignCapacityofLow で指定された値に達したとき、プラットフォームは、制御メソッド バッテリーデバイス上で Notify (0x80) を生成する必要があります。

  • 複数のバッテリーが搭載されたシステムの場合、バッテリーごとに制御メソッドのバッテリー デバイスを完全に実装します。

    • 名前空間の最初のバッテリーは、デバッグのためにシステムが使用するプライマリ バッテリーにする必要があります。
  • ユーザーが処理できるバッテリーかどうかを示すために、各バッテリー デバイスで_DSM メソッドを実装します。

  • 充電中に定期的なウォッチドッグ リセットが必要で、ポーリング ウィンドウ内で Windows により _BST メソッドの定期的な実行が保証される場合、_DSM メソッドを実装します。

  • プラットフォームの温度モデルにバッテリー充電率制御が必要な場合は、_DSM メソッドを実装します。