センサーの電源管理
通常、モバイル PC には、環境光センサー (ALS)、3-D 加速度計、3-D ジャイロメーター、3-D 磁力計などのセンサー デバイスが組み込まれています。 センサー デバイスがオペレーティング システムまたはアプリケーションで使用されていない場合は、電源管理ソフトウェアでデバイスが低電力モードに切り替わり、電力消費を削減できます。 モダン スタンバイ電源モデルがサポートされている PC では、PC がモダン スタンバイに入った直後にセンサー デバイスが低電力モードに切り替わり、PC でモダン スタンバイが終了するまで、この状態のままであることが想定されています。
この記事では、センサー デバイスに電源管理を実装する方法について説明します。 さらに、この記事では、オプションのセンサー マイクロコントローラー (センサー フュージョン ハブやセンサー MCU とも呼ばれます) の電源管理と、集約されたセンサー デバイスについても説明します (例:センサーマイクロコントローラーの制御下にある加速度計、ジャイロメーター、磁力計を集約することによって、コンパスセンサーデバイスを実装できます。マイクロコントローラーは、これらのセンサーデバイスを1つの論理センサーデバイスとしてWindowsに公開します。)
センサーとセンサー マイクロコントローラー
センサー ハードウェアは、最新のモバイル エクスペリエンスに不可欠です。 Windows 10 以降では、複数のセンサー デバイスを公開して管理するための豊富なシステム インフラストラクチャを使用できます。 このインフラストラクチャによって、センサー情報が組み込まれたアプリケーションの開発が簡素化され、重要な組み込み Windows シナリオ (画面の自動回転や環境光に基づくディスプレイの明るさの変更など) がサポートされます。
センサーが使用されていないときは、システムの実行時に、個別に電源をオフにすることができます。 特定のセンサー デバイスを使用するための要件は、Windows センサー API を使用してデバイスとそのドライバーに通知されます。 オペレーティング システムまたはアプリケーションでセンサー デバイスが使用されていない場合は、センサー ドライバーまたはセンサー マイクロコントローラー上で実行されているファームウェアで、デバイスの電源をオフにすることができます。
システム ディスプレイがオフになり、ハードウェア プラットフォームがモダン スタンバイに入ったら、プラットフォーム全体が低電力状態に入ることができるように、まだ低電力状態でないすべてのセンサー デバイスとオプションのセンサー マイクロコントローラーが数秒以内に低電力スタンバイ状態に入る必要があります。 ただし、センサー デバイスの電源をオンまたはオフにするタイミングを決定するために、センサー ドライバーではモダン スタンバイ間の切り替えが直接監視されません。 代わりに、デバイスが 1 つ以上のクライアント (アプリケーションまたはオペレーティング システム コンポーネント) でアクティブに使用されている場合は、センサー ドライバーからデバイスの電源が供給できる必要があります。 クライアントでデバイスが使用されていない場合は、ドライバーでデバイスから電源が削除される必要があります。
レポート センサーのサンプルの読み取りを開始するようにセンサー クラス拡張機能からドライバーに要求されると、センサー ドライバーの EvtSensorStart コールバック メソッドが呼び出されます。 レポート センサーのサンプルの読み取りを停止するようにセンサー クラス拡張機能からドライバーに要求されると、ドライバーの EvtSensorStop コールバック メソッドが呼び出されます。 詳細については、センサー ドライバー イベントに関するページを参照してください。
コンピューターがモダン スタンバイに入り、すべてのセンサー デバイスが低電力状態に入ると、すべてのシステム センサー ハードウェアの合計電力消費が 1 ミリワット未満になる必要があります。 センサー デバイスとオプションのセンサー マイクロコントローラーは、センサー ハードウェアに固有の低電力スタンバイ状態に入る場合があります。 また、センサー ドライバーやシステム ACPI ファームウェアの制御下では、センサー デバイスとオプションのセンサー マイクロコントローラーへのハードウェア電源レールをオフにすることができます。
Windows 10 以降では、モダン スタンバイ プラットフォームのコア シリコンまたは System on a Chip (SoC) に限定されたセンサー ハードウェア接続オプションがサポートされています。 次のセクションでは、サポートされているハードウェアとソフトウェアの構成と、モダン スタンバイ時とプラットフォームがアクティブに使用されているときの電源管理の動作について詳しく説明します。
電源管理モード
Windowsでは、各センサーデバイスまたはセンサーマイクロコントローラーに3つのデバイス電源モード (アクティブ、アイドル、およびスタンバイ) が必要です。また、オプションのゼロワット、電源削除モードも必要です。 次の表では、センサー デバイスとオプションのセンサー マイクロコントローラーの電源モードについて説明します。 この表では、センサー ハードウェアが使用されているが、現在はアイドル状態であるアイドル モードと、センサー ハードウェアが使用されていないアイドル モードが区別されています。
モード | 説明 | 平均電力消費量 | アクティブまでの終了待機時間 | 切り替えメカニズム |
---|---|---|---|---|
アクティブ |
センサー デバイスやセンサー マイクロコントローラーでは、環境の変化が積極的に提供または処理されています。 |
< 100 ミリワット |
該当なし |
該当なし |
アイドル (使用中) |
センサー デバイスやセンサー マイクロコントローラーは、1 つ以上のアプリケーションで使用され、次のセンサー情報セットがメイン プロセッサに提供されるまで待機しています。 |
< 50 ミリワット |
センサー固有 |
ハードウェア自律 |
アイドル (未使用) |
センサー デバイスやセンサー マイクロコントローラーは、どのアプリケーションでも使用されていません。 センサーまたはセンサー マイクロコントローラーの調整データが保持されます。 |
< 5 ミリワット |
センサー固有 |
センサー デバイスの現在の使用状況について説明するヒューマン インターフェイス デバイス (HID) コマンドまたはセンサー フレームワーク メッセージ。 |
Standby |
センサー デバイスやセンサー マイクロコントローラーは、どのアプリケーションでも使用されていません。 センサーまたはセンサー マイクロコントローラーの調整データが保持されます。 センサーやセンサー マイクロコントローラーでは、メイン プロセッサで実行されているソフトウェアから要求されるまで、それ以上のアクションは実行されません。 |
< 1 ミリワット (すべてのシステム センサーの場合) |
< 10 ミリ秒 |
複数のオプション:
|
電源切断 |
センサー デバイスやセンサー マイクロコントローラーから電源が削除され、すべてのハードウェア コンテキストが失われています。 |
0 ミリワット |
< 100 ミリ秒 |
外部エンティティでは、D3 電源 IRP に応答して、ACPI ファームウェア経由で電源が削除されるか、電源が適用されます。 |
Note
上記の表では、スタンバイという用語は、モダン スタンバイ (プラットフォーム全体の電源状態) とは異なるデバイス電源モードを表しています。
ソフトウェアの電源管理メカニズム
センサー デバイスとセンサー マイクロコントローラーの実行時の電源管理は、主に使用中であるかどうかによって決定されます。 一般に、センサー ドライバーとハードウェアでは、オペレーティング システムまたはアプリケーションでセンサーが使用されていないときに、アイドル電源モードになると想定されています。 Windows センサー プラットフォームでは、特定のセンサーに接続されているアプリケーションまたはオペレーティング システム クライアントの数と、センサーのデューティ サイクルまたはデータ速度の要件に関する情報が提供されます。 センサー ドライバーやハードウェアでは、システムが実行され、ディスプレイがオンになっている間は、この情報を使用してセンサー デバイスがアイドル電源モードにシームレスに切り替わります。
Windows では、システム ディスプレイの電源がオフになり、プラットフォームがモダン スタンバイに入ると、すべてのセンサーとセンサー マイクロコントローラーがスタンバイ モードまたは電源削除モードに入ります。
センサー デバイスとオプションのセンサー マイクロコントローラーで使用されるソフトウェア電源管理メカニズムの選択は、デバイス ドライバーでセンサー ハードウェアが Windows に公開される方法と、センサー ハードウェアが SoC またはコア シリコンに物理的に接続される方法によって異なります。 Windows では、センサー デバイスを公開して接続する 2 つの方法がサポートされています。 1 つ目の方法では、I2C 接続上で組み込みセンサー HID クラス ドライバーが使用されます (組み込み HIDI2C ドライバーでは、I2C 接続上で HID 情報が転送されます)。 2 つ目の方法では、ユニバーサル センサー ドライバー インターフェイスを実装し、SensorscxFunctions テーブルでメソッドを呼び出すサード パーティのドライバーが必要です。
次の表では、センサーまたはセンサー マイクロコントローラーに接続するための 2 つのオプションが比較されています。 センサー ハードウェアに接続するための 2 つのオプションのいずれかを選択すると、センサー ハードウェアをスタンバイ モードまたは電源削除モードに切り替えるために必要なソフトウェアの電源管理メカニズムが決定されます。
接続オプション | バス接続 | センサー ドライバーが必要 | ドライバー プロバイダー | Comments |
---|---|---|---|---|
HIDI2C |
センサー ハードウェアは、I2C 上で SoC またはコア シリコンに直接接続します。 |
センサー HID クラス ドライバー + HID-over-I2C クラス ドライバー |
Microsoft. 受信トレイ コンポーネント (Windows 8 以降)。 |
長所/短所 |
サード パーティのセンサー ドライバー |
センサー ハードウェアは、I2C または UART 上で SoC またはコア シリコンに直接接続します。 |
SENSOR_CONTROLLER_CONFIG を実装するサード パーティのドライバー |
センサー デバイスのベンダー。 |
長所/短所 |
HIDI2C
HIDI2C オプションの場合、オプションのセンサー マイクロコントローラーは、I2C バス経由で SoC またはコア シリコンに物理的に接続されます。 マイクロコントローラーでは、複数の最上位レベルの HID コレクションが (論理センサー デバイスごとに 1 つ) 公開されます。 たとえば、コンパス センサーは、センサー マイクロコントローラーの背後にある加速度計、ジャイロメーター、磁力計センサーが集約された 1 つの論理センサー デバイスとして HID 経由で公開できます。 センサー デバイスにはサード パーティのソフトウェアが必要ないため、接続とソフトウェアの観点から見て最も簡単な実装方法です。
Windows HIDI2C スタックは、2 つのソフトウェア電源管理メカニズム (インバンド HID コマンドと D3 状態への実行時切り替え) がサポートされている点で、タッチ コントローラーやペン デジタイザーのスタックと似ています。
インバンド HID コマンド
SET_POWER(Sleep) ディスプレイがオフになり、プラットフォームがモダン スタンバイに入ると、デバイスに送信されます。 このコマンドでは、デバイスをスタンバイ電源モードに切り替えることができます。
SET_POWER(On) プラットフォームでモダン スタンバイが終了し、ディスプレイが再度オンになると、デバイスに送信されます。
HID センサー デバイス スタックの D3 状態への実行時切り替え
D3 IRP IRP_MJ_POWER(Sleep) コマンドの直後に、デバイスのドライバー スタックに送信される SET_POWER 要求です。 これにより、D3 デバイス電源状態に入るようにデバイスに指示されます。 D3 への切り替えの一環として、システム ACPI ファームウェアで制御メソッドが実行され、デバイスがスタンバイ モードまたは電源削除モードに切り替わる場合があります。
D0 IRP プラットフォームでモダン スタンバイが終了し、ディスプレイがオンになると、デバイスのドライバー スタックに送信される IRP_MJ_POWER 要求です。 これにより、D0 デバイス電源状態に入るようにデバイスに指示されます。 必要に応じて、システム ACPI ファームウェアで制御メソッドを実行して、デバイスをアイドル (未使用) モードに戻すことができます。
サード パーティのセンサー ドライバー
サード パーティのセンサー ドライバーの場合は、センサー マイクロコントローラーが I2C バスまたは UART 経由でコア シリコンに物理的に接続されます。
センサー デバイスのベンダーは、SENSOR_CONTROLLER_CONFIG インターフェイスを実装する User-Mode Driver Framework (UMDF) ドライバーを提供する必要があります。 UMDF ドライバーは、I2C または UART 経由でセンサー デバイスと通信します。 これは、センサーマイクロコントローラーの背後にあるセンサーごとに1回ずつ、複数回実装できます。 サード パーティのセンサー ドライバーの役割は、すべての電源管理を作成して調整することです。
サード パーティのセンサー ドライバーは、Windows Driver Frameworks (WDF) を使用して構築され、Adxl354acc サンプル ドライバーに基づいていると想定されています。 ドライバーでは電源管理対象キューが使用され、IWDFDevice3::AssignS0IdleSettingsEx メソッドを呼び出すことで D3 アイドル状態が構成される必要があります。 デバイスがアイドル状態またはアクティブ状態になったときに WDF に指示するには、ドライバーで IWDFDevice2::StopIdle メソッドと IWDFDevice2::ResumeIdle メソッドが使用される必要があります。 また、ドライバーで WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体の ExcludeD3Cold メンバーを WdfFalse に設定して、D3cold を有効にする必要もあります。 D3cold を有効にすると、プラットフォームがアイドル状態になり、D3 状態に入ると、センサー デバイスから電源が削除されます。
ベスト プラクティスとして、ドライバーにデバイス固有のコードを配置し、ACPI ファームウェアにプラットフォーム固有のコードを配置すると、複数のプラットフォーム間でドライバー コードを低コストで再使用できます。
モダン スタンバイに入る要件
電源管理を行うためのサード パーティのセンサー ドライバーの要件は、センサー ハードウェアのスタンバイ電力消費の機能です。
サード パーティのセンサー ドライバーでは、デバイスでインバンド通信メカニズムを使用して電力消費が 1 ミリワット未満の電源モードに切り替えることができる場合でも、センサー デバイスがスタンバイモードまたは電源削除モードに入る準備ができたら、D3 への切り替えを開始する必要があります。 この要件の理由は、Windows の多くのバス ドライバーでエンドポイント デバイスのデバイス電源状態が追跡され、すべてのエンドポイント デバイスの電源がオフになったときにのみ電源がオフになるためです。 一部の SoC 設計や接続バス (特にユニバーサル シリアル バス (USB)) では、モダン スタンバイ時に SoC が最低電力状態に入るには、すべてのエンドポイント デバイスとホスト コントローラーが D3 状態である必要があります。 最低電力状態に入れない場合は、容易にシステムがバッテリ残量のモダン スタンバイ要件を満たすことができなくなる可能性があります。
制御されているすべてのセンサー ハードウェアでセンサー ハードウェアのスタンバイ電力消費が 1 ミリワット未満である場合は、センサー (またはマイクロコントローラー上のすべてのセンサー) が使用されなくなったときに、センサー ドライバーでデバイスがスタンバイ モードに自動的に切り替わる必要があります。
センサー ハードウェアのスタンバイ電力消費が 1 ミリワットを超える場合は、センサー ドライバーで D3 の切り替えが実行され、ACPI 制御メソッドでセンサー デバイスから電源を削除できる必要があります。 センサー ドライバーでは、D3 時にデバイスから電源を削除できるように、必要なセンサー デバイスの状態がすべて保存される必要があります。 センサー ハードウェアのベンダーは、センサー ハードウェアとドライバーで確実かつ迅速に D3 の切り替えが実行されるように、システム インテグレーターと密接に共同作業する必要があります。
重要
デバイスが D3 に入る前に、ドライバーですべてのセンサー デバイス コンテキストが保存され、デバイスが D0 に入ったら、すべてのセンサー デバイス コンテキストが復元される必要があります。
Windows では、モダン スタンバイに入った直後に、オペレーティング システムによるセンサーの使用 (環境光や回転など) を無効にし、アプリケーションを中断することで、自動的にすべてのセンサーの使用が停止されます。 センサー ドライバーでは、制御されているセンサー ハードウェアの状態がすべて集約され、すべてのセンサーが使用されなくなると、このハードウェアがスタンバイ デバイス電源モードに切り替わる必要があります。
センサー デバイスをスタンバイ モードに切り替えるメカニズムは、デバイスを SoC に接続するバス経由でインバンド通信を使用するように設計できます。 たとえば、専用のスタンバイ コマンドをバス経由でセンサー ハードウェアに送信できます。 また、デバイスをスタンバイ モードを切り替える GPIO ラインにセンサー ハードウェアが接続されている場合もあります。
Note
GPIO ラインを使用してデバイスをスタンバイ モードに切り替えると、センサー ドライバーではドライバー スタックが D3 に切り替わり、デバイスの ACPI 制御メソッド (_PS3 など) でハードウェアをスタンバイ モードにするために必要な状態に GPIO ラインを設定できる必要があります。 このスキームにより、センサードライバーは、プラットフォームに依存しない方法で記述できます。特定のGPIO行、タイミング要件、およびその他のプラットフォーム固有の情報は、デバイス固有のドライバーではなく、システムインテグレーターによって提供されるACPIファームウェアでエンコードされます。
モダン スタンバイを終了する要件
プラットフォームでモダン スタンバイが終了したら、センサー ドライバーでセンサー ハードウェアをアイドル (未使用) モードに戻す必要があります。 Windows では、システム サービスが再開されると、システム機能を実行するために必要なセンサー (回転や環境光など) の使用が要求されます。 アプリケーションが再開されると、センサー情報が要求される場合もあります。 デバイスをアイドル モードに戻すためにセンサー ハードウェアでインバンド メッセージが必要な場合は、センサー情報に対する最初の要求が送信されたたらすぐに、このメッセージがデバイス ドライバーから送信される必要があります。 アイドル状態に戻すようにデバイスに通知するためにセンサー ハードウェアに GPIO ラインが必要な場合は、センサー情報に対する最初の要求が提供されたらすぐに、この GPIO ラインをドライバーで使用して D0 への切り替えが実行される必要があります。 この場合、必要に応じて、ACPI 制御メソッド (_PS0 など) で GPIO ラインを切り替えて、切り替えを開始する必要があります。 最後に、以前にスタンバイ モードの電力消費が 1 ミリワットを超えたために、センサー ハードウェアを電源削除モードに切り替える必要があった場合は、センサー ドライバーで D0 への切り替えが実行され、ACPI 制御メソッドでデバイスへの電源を復元できる必要があります。
サポートされているハードウェア電源の構成
センサー デバイスで使用されるハードウェア電源管理の構成は、スタンバイ モード時のセンサー ハードウェアの電力消費と、オプションのセンサー マイクロコントローラーでデバイスが管理されるかどうかによって異なります。
スタンバイ電源 < 1 ミリワット
スタンバイ電源モード時のセンサー デバイスの電力消費が 1 ミリワットを超えない場合、プラットフォームの設計者は、ACPI 制御メソッドでオンとオフを切り替えることができる電源レールにセンサー ハードウェアを接続する必要がありません。 次のメカニズムのいずれかを使用すると、センサーがスタンバイ電源モードに切り替わります。
- HID SET_POWER(Sleep) コマンド。
- SoC からの GPIO ライン。
- サード パーティのセンサー ドライバーからセンサー ハードウェアに送信される専用のコマンド。
プラットフォームにセンサー マイクロコントローラーが搭載されている場合は、マイクロコントローラー チップに 1 つ以上の統合センサー デバイスが搭載されているか、1 つ以上の外部センサー デバイスに接続されている可能性があります。 どちらの場合でも、これらのセンサー デバイスは、ソフトウェアの観点から見るとマイクロコントローラーの背後に隠れていて、Windows には表示されません。 マイクロコントローラーとセンサー ハードウェアがスタンバイ電源モードのときに、センサー マイクロコントローラーとその集約されたセンサー デバイスの合計電力消費が 1 ミリワット未満である場合、プラットフォームの設計者は、ACPI 制御メソッドでオンとオフを切り替えることができる電源レールにマイクロコントローラーまたはセンサー ハードウェアを接続する必要がありません。 センサー マイクロコントローラーでは、次のメカニズムのいずれかを使用して、マイクロコントローラー自体と、スタンバイ モードの切り替えを管理するすべてのセンサーが切り替わります。
- 通信バス経由で送信される HIDI2C SET_POWER コマンド (または同様のコマンド)。
- SoC からの GPIO ライン。
スタンバイ モードの切り替えを開始するために、センサーに SoC からの GPIO ラインが必要な場合は、プラットフォーム ファームウェアで、センサー ハードウェア デバイスにある ACPI 名前空間に _PS3 オブジェクトと _PS0 オブジェクトの両方を指定する必要があります。 ACPI ファームウェアには、SoC からセンサー ハードウェアへの GPIO ラインを記述する GPIO 操作領域も含める必要があります。 _PS3 制御メソッドでは、GPIO ラインを切り替えるとデバイスがスタンバイ モードに切り替わり、_PS0 制御メソッドでは、GPIO ラインを切り替えるとセンサー ハードウェアがアイドル モードに切り替わります。
次のブロック図は、スタンバイ電源モード時の電力消費が 1 ミリワット未満であるスタンドアロン センサーの電源管理オプションを示しています。
1 つ目のオプションは、上記の図の左側に示すように、Windows HIDI2C スタックを使用する方法です。 この場合、センサーのスタンバイ電源モードへの切り替えは、インバンド HID SET_POWER(Sleep) コマンド、またはセンサーの _PS3 制御メソッドを実行して ACPI ドライバーで処理される D3 IRP から開始できます。
2 つ目のオプションは、上記の図の右側に示すように、サード パーティのセンサー ドライバーを使用する方法です。 サード パーティのセンサー ドライバーでは、独自のインバンド コマンドを使用するか、センサーの _PS3 制御メソッドを実行して ACPI ドライバーで処理される D3 IRP を送信することで、スタンバイ電源モードへの切り替えを開始できます。
プラットフォームの設計者は、センサー デバイスがマイクロコントローラー チップに統合されているかどうかに関係なく、どちらのメカニズムも選択できます。
スタンバイ電源 > 1 ミリワット
スタンバイ電源モード時の合計電力消費が 1 ミリワットを超えるセンサー ハードウェアやセンサー マイクロコントローラーがプラットフォームに搭載されている場合は、システムがモダン スタンバイ状態になると、センサー ハードウェアとマイクロコントローラーが電源削除モードに切り替わる必要があります。 この構成では、SoC からの GPIO ラインの制御下でオンとオフに切り替わる単一の電源レールに、センサー、オプションのセンサー マイクロコントローラー、マイクロコントローラーの背後にあるセンサーを配置する必要があります。
この構成では、プラットフォームの設計者が、SoC からの GPIO ラインで制御される切り替え可能な電源レールにすべてのセンサー ハードウェアを配置する必要があります。 センサー ハードウェアに複数の入力電圧が必要な場合は、(それぞれが同じ GPIO ラインで制御される) 複数のスイッチを使用できます。 プラットフォーム ACPI ファームウェアでは、切り替え可能な電源レールに加えて、電源リソースを名前空間に定義する必要があります。 この電源リソースでは、センサー ハードウェアについて説明され、GPIO 操作領域を使用して SoC からの GPIO ラインを切り替える _ON メソッドと _OFF メソッドが含まれています。
プラットフォーム ファームウェアには、切り替え可能な電源レール上の ACPI 名前空間に各センサー デバイスにある電源リソースへの参照 (_PR0 オブジェクトや _PR3 オブジェクトなど) を含める必要があります。
次のブロック図は、スタンバイ電源モード時の合計電力消費が 1 ミリワットを超えるセンサー ハードウェアやセンサー マイクロコントローラーの電源管理オプションを示しています。 2 つのオプションは、図の左側に示すように Windows HIDI2C スタックを使用する方法、または右側に示すようにサード パーティのセンサー ドライバーを使用する方法です。
上記の図の左側に示すように、組み込み HIDI2C ドライバー スタックを使用する構成では、ディスプレイがオフになり、プラットフォームがモダン スタンバイに入ると、HIDI2C ドライバーで D3 の切り替えが開始されます。 D3 IRP が ACPI ドライバーを通過すると、_PR3 オブジェクトが評価され、Windows で _OFF メソッドが実行され、指定された電源リソースがオフになります。 電源リソースが複数のセンサーで共有されている場合は、Windows で自動的にすべてのセンサーが参照カウントされ、すべてのセンサーが D3 に入った後にのみ _OFF メソッドが実行されます。
上記の図の右側に示すように、センサー ハードウェアでサード パーティのセンサー ドライバーが使用されている場合は、センサー ドライバーで D3 への切り替えが開始される点を除いて、以前と同じ制御フローです。
プラットフォームがモダン スタンバイから再開され、アプリケーションまたはオペレーティング システムからセンサーの使用が要求されると、ドライバーが D0 に切り替わります。 D0 IRP が ACPI ドライバーを通過し、_PR0 オブジェクトが評価され、関連付けられている電源リソースで _ON メソッドが実行されます。 _ON メソッドで GPIO ラインを切り替えると、切り替え可能な電源レールがオンになります。 システムでサード パーティのセンサー ドライバーが使用されている場合は、ドライバーで D0 IRP が要求され、オペレーティング システムまたはアプリケーションからセンサー データが要求された直後に、D0 への切り替えが開始される必要があります。
スリープ解除に関する懸念事項
センサーやオプションのセンサー マイクロコントローラーには、スリープ解除に関する懸念事項はありません。 センサー デバイスでは、モダン スタンバイ時にスタンバイモードまたは電源削除モードであることが想定され、プラットフォームがモダン スタンバイ状態の間に SoC をスリープ解除することは想定されていません。
テストおよび検証
モダン スタンバイでディスプレイの電源がオフになっている場合は、システムの設計者がセンサー ハードウェアがスタンバイ モードまたは電源削除モードに入っていることを確認することが重要です。 デバイス電源管理のテストと検証に使用される方法は、センサー デバイスの接続方法によって異なります。
HIDI2C に接続されたセンサー
システムで Windows HIDI2C スタックが使用されている場合、システム インテグレーターは、ドライバーで電源管理が正常に実行されていることを確認する最適な方法について、センサー ドライバーのベンダーに問い合わせてください。 センサー ドライバーのベンダーは、デバイス ドライバーのすべての電源管理を決定する際に Event Tracing for Windows (ETW) トレースを使用し、ETW イベントと Windows Performance Toolkit (WPT) を使用して正常な電源管理操作を確認する方法について説明するサンプル ドキュメントをシステム インテグレーターに提供することをお勧めします。
サード パーティのセンサー ドライバー
システムでサード パーティのセンサー ドライバーが使用されている場合、システム インテグレーターは、ドライバーで電源管理が正常に実行されていることを確認する最適な方法について、センサー ドライバーのベンダーに問い合わせてください。 センサー ドライバーのベンダーは、デバイス ドライバーのすべての電源管理を決定する際に Event Tracing for Windows (ETW) トレースを使用し、ETW イベントと Windows Performance Toolkit (WPT) を使用して正常な電源管理操作を確認する方法について説明するサンプル ドキュメントをシステム インテグレーターに提供することをお勧めします。
すべてのセンサー デバイスが使用されなくなるとドライバーで D3 への切り替えが開始される場合は、次の一覧の手順に従って、この切り替えが想定どおりに発生し、アプリケーションまたはオペレーティング システムでデバイスを再使用する必要があればセンサー デバイスが D0 に戻る必要があることを確認できます。
ソフトウェアに重点を置く方法では、Windows インストルメンテーションを使用して、D3 IRP がセンサー デバイスのデバイス ドライバー スタックを通過することが確認されます。 Windows の電源管理には、ETW インストルメンテーション (Dx IRP (デバイスの電源要求) を検出するインストルメンテーションを含む) が組み込まれています。 この情報を手動モードで表示するには、Windows Performance Toolkit をダウンロードし、テスト中のシステムにインストールします。
Windows Performance Toolkit をインストールしたら、次の手順に従ってユーザー モードの XPerf トレースを起動します。
管理者としてコマンドプロンプトウィンドウを開きます。
\%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\ フォルダーを参照します。
Xperf を起動するには、
xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power
コマンドを実行します。電源ボタンを押して、システムをモダン スタンバイに切り替えます。
30 秒待機します。
電源ボタンを押して、システムをモダン スタンバイから切り替えます。
xperf.exe -stop power_session
コマンドを実行して、イベント ログを停止します。バイナリ トレース ファイルを .csv と人間が判読できる形式
xperf.exe –i \user.etl > power.txt
に変換します。テキスト エディターで Power.txt ファイルを開き、センサー デバイスのハードウェア ID を検索します。 センサー デバイスのハードウェア ID は、[デバイス インスタンス パス] にあるデバイス マネージャーのデバイス プロパティの [詳細] タブで確認できます。 次の例では、センサー デバイスのデバイス インスタンス パスは ACPI\MST0731\2&daba3ff&0 です。
センサー デバイスの D3 IRP の先頭は、センサー デバイスのデバイス インスタンス パスがあり、最後のイベント値が 3 (ターゲット状態が D3) である Microsoft-Windows-Kernel-Power/IRP/Stop 型のイベントで示されます。 次の Power.txt からの出力イベントは、D3 IRP の先頭を示しています。 このイベントの最後の 2 つのパラメーター値 (右端に表示) は、デバイス インスタンスのパスとターゲットの状態を示します。
Microsoft-Windows-Kernel-Power/Irp/Start, 7605393, "Unknown" (4), 256, 0,,,,, 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\MSFT0731\2&daba3ff&0", 3
このイベントは、Power.txt 出力ファイルの先頭近くに記録されている必要があります。 上記の出力イベントのパラメーター値
0x868e2728
は、D3 IRP の IRP 構造体へのポインターです。 この同じ IRP ポインターを持つトレース ファイル内の後続のイベントを検索すると、D3 IRP がセンサー デバイスのドライバー スタックを通過する際の進行状況を追跡できます。Microsoft-Windows-Kernel-Power/Irp/Start, 7605393, "Unknown" (4),256, 0,,,,, 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\ATML1000\2&daba3ff&0", 3
Microsoft-Windows-Kernel-Power/Driver/Start, 7605416, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"
Microsoft-Windows-Kernel-Power/Driver/Stop, 7605515, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0
Microsoft-Windows-Kernel-Power/Driver/Start, 7605522, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fab6a0, "\Driver\i2cdrv"
Microsoft-Windows-Kernel-Power/Driver/Stop, 7608342, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fab6a0
Microsoft-Windows-Kernel-Power/Driver/Start, 7608351, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x857ffb90, "\Driver\ACPI"
Microsoft-Windows-Kernel-Power/Driver/Stop, 7608416, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x857ffb90
Microsoft-Windows-Kernel-Power/Driver/Start, 7608424, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"
Windows ACPI ドライバー Acpi.sys で D3 IRP が処理されると、Acpi.sys で対応する _PR3 制御メソッドが実行されます。 システム ファームウェアの設計者は、センサー デバイスが D3 状態に入るためにオフにする必要がある電源リソースを示すために、この制御メソッドを提供します。 また、Acpi.sys では、電源リソースで _OFF 制御メソッドも実行されます。
同様のプロセスを使用して、プラットフォームでモダン スタンバイが終了するとセンサーデバイスが D0 に戻り、ディスプレイがオンになることを確認できます。 電源ボタンを押してシステムがスリープ解除され、オペレーティング システムまたは再開されたアプリケーションからセンサー データが要求された直後に、センサー デバイスの Microsoft Windows-Kernel/IRP/Start イベントがターゲット状態 0 (D0 を示す) でログに記録されます。
センサーとセンサー マイクロコントローラーの電源管理チェックリスト
システム インテグレーターとセンサー デバイスのベンダーは、次のチェックリストを使用して、システムの電源管理設計に Windows 8 以上との互換性があることを確認する必要があります。
- 組み込み HIDI2C ドライバーと HIDSensor ドライバー スタックとの互換性があるセンサー ハードウェアを選択します。
- スタンバイ電力消費が 1 ミリワット未満であるセンサー ハードウェアを選択します。
- センサーハードウェアとサードパーティ製のドライバー (必要な場合) が、ディスプレイがオンになっているときに実行時のアイドル状態の電源管理をサポートしていることを確認します。
- アプリケーションやオペレーティング システムでセンサーが使用されていないときに、センサーの電源をオフにすると、自動的に D3 に入ります。
- アプリケーションやオペレーティング システムからセンサー データが要求されたときに、センサーの電源をオンにすると、自動的に D0 に入ります。
- サード パーティのセンサー ドライバーは、WDF ドライバーとして実装する必要があり、SpbAccelerometer サンプル ドライバーに基づくことができます。
- センサー情報のポーリングは、できる限り低い電力消費レベルで制限され、有効にする必要があります。 たとえば、アナログ センサーのポーリングは、マイクロ コントローラーやその他の低電力制御ハードウェアの背後で発生する必要があります。これにより、新しいセンサー データが一部のしきい値の検出値を超えると、SoC が中断される可能性があります。 SoC で定期的に実行されるドライバーでセンサーをポーリングすると、システム全体の電力消費が大幅に増加する可能性があるため、このようなポーリングは避けてください。
- センサーハードウェアがサードパーティ製のドライバーを使用している場合:
- システム インテグレーターは、センサー ハードウェアの電源管理を実装する方法について、センサー デバイスのベンダーに問い合わせる必要があります。
- スタンバイ電源モードでセンサー ハードウェアの電力消費が 1 ミリワットを超える場合は、SoC からの GPIO ラインで制御されるスタンドアロンの電源レールにセンサー ハードウェアを配置します。 (以下で説明するように) ACPI 名前空間のセンサー デバイスに、必要な ACPI 電源リソース、_ON/_OFF 制御メソッド、電源リソースへの参照を指定します。
- センサー ハードウェアで SoC からの GPIO ラインを使用してデバイスをスタンバイ電源モードに切り替える場合は、(以下で説明するように) システム ACPI ファームウェアに適切な _PS3 制御メソッドと _PS0 制御メソッドが含まれていることを確認してください。
- センサー ハードウェアでセンサー マイクロコントローラーの背後にセンサー デバイスが接続されている場合は、センサー マイクロコントローラーでセンサー デバイスの電源をオフにする方法が必要です。 デバイスの電源は、マイクロコントローラーをデバイスに接続するバス経由でインバンド通信を使用するか、マイクロコントローラーからデバイスへの GPIO ラインを使用することでオフにすることができます。
- デバイスをスタンバイ電源モードに切り替えるために、センサー ハードウェアで SoC からの GPIO ラインが必要な場合:
- SoC からの GPIO ラインが、センサー ハードウェアのベンダーで設定されたレベルとトリガーの要件を満たしていることを確認します。
- ACPI 名前空間で、GPIO 操作領域の一部として SoC GPIO ピンを記述します。
- センサー ハードウェアをスタンバイ電源モードに切り替えるには、必要に応じて ACPI 名前空間のセンサー デバイスに _PS3 制御メソッドを指定して、GPIO ラインのシグナルを切り替えます。
- デバイスを D0 に切り替えた後に、センサー ハードウェアをアイドル モードまたはアクティブ モードに切り替えるには、必要に応じて ACPI 名前空間のセンサー デバイスに _PS0 制御メソッドを指定して、GPIO ラインのシグナルを切り替えます。
- センサーハードウェアがスタンバイ電源モードで1ミリワットを超える電力を消費している場合:
- SoC からの GPIO ラインでオンとオフを切り替えることができる電源レールに、すべてのセンサーハードウェアを配置します。 または、さまざまな供給電圧の要件がある複数のセンサーがプラットフォームに搭載されている場合は、独立して切り替えることができる個別のレールを用意します。
- ACPI 名前空間で電源リソースとして切り替え可能な電源レールを記述します。
- この電源リソースで、GPIO 操作領域の一部として記述されている GPIO ラインを使用して、電源レールのオンとオフに切り替える _ON 制御メソッドと _OFF 制御メソッドを指定します。
- ACPI 名前空間で、センサー ハードウェアの電源リソースを指定する _PR3 オブジェクトと _PR0 オブジェクトを指定します。
- _ON メソッドと _OFF メソッドにセンサー ハードウェアのデバウンスまたはタイミングの要件が組み込まれていることを確認します。
- プラットフォームのセンサー デバイスの実行時電源管理をテストして検証します。 センサー ハードウェアのベンダーと緊密に連携して、システム ディスプレイがオンのときの実行時電源管理を検証します。
- プラットフォームがモダン スタンバイに入ると、センサー ハードウェアがスタンバイ モードまたは電源削除モードに入ることをテストして確認します。
- Windows に搭載されている HIDI2C + HID センサー ドライバースタックがセンサー ハードウェアで使用されている場合は、「テストおよび検証」で詳細を確認してください。
- サード パーティのドライバーがセンサー ハードウェアで使用されている場合は、推奨されるテスト方法についてセンサードライバーのベンダーに問い合わせてください。
- スタンバイ モードまたは電源削除モード入る操作の一環として、センサー ドライバーで D3 への切り替えが実行される場合は、「テストおよび検証」で説明されているように、Windows Performance Toolkit を使用します。 プラットフォームがモダン スタンバイに入るとセンサー ハードウェアが D3 に入ることと、システムでモダン スタンバイが終了するとセンサー ハードウェアが D0 に入り、センサー情報が再度要求されることを確認します。
- センサー ハードウェアの電力消費をスタンバイ モードまたは電源削除モードで測定します。
- モダン スタンバイ間で複数の切り替えを開始して、ディスプレイがオンになるとセンサー情報が使用されるセンサー デバイスとアプリケーションの動作をストレステストします。