モバイル PC には、通常、環境光センサー (ALS)、3-D 加速度計、3-D ジャイロメーター、3-D 磁力計などのセンサー デバイスが組み込まれています。 センサー デバイスがオペレーティング システムまたはアプリケーションによって使用されていない場合、電源管理ソフトウェアはデバイスを低電力モードに切り替えて電力消費を削減できます。 最新のスタンバイ電源モデルをサポートする PC では、センサー デバイスは、PC がモダン スタンバイに入った直後に低電力モードに切り替え、PC が最新のスタンバイを終了するまでこのモードを維持することが期待されます。
この記事では、センサー デバイスの電源管理を実装する方法について説明します。 さらに、この記事では、オプションのセンサー マイクロコントローラー (センサー 融合ハブまたはセンサー MCU とも呼ばれます) と集計されたセンサー デバイスの電源管理について説明します。 (たとえば、コンパス センサー デバイスは、センサー マイクロコントローラーの制御下で加速度計、ジャイロメーター、磁力計を集計することによって実装できます。マイクロコントローラーは、これらのセンサー デバイスを単一の論理センサー デバイスとして Windows に公開します。
センサとセンサマイクロコントローラー
センサー ハードウェアは、最新のモバイル エクスペリエンスにとって非常に重要です。 Windows 10 以降では、複数のセンサー デバイスを公開および管理するための豊富なシステム インフラストラクチャを使用できます。 このインフラストラクチャは、センサー情報を組み込み、画面の自動回転や周囲光に基づくディスプレイの明るさの変更など、重要な組み込み Windows シナリオをサポートするアプリケーションの開発を簡略化します。
システムの実行時に、個々のセンサーが使用されていないときに電源をオフにすることができます。 特定のセンサー デバイスを使用するための要件は、 Windows センサー API を介してデバイスとそのドライバーに伝達されます。 センサー デバイスがオペレーティング システムまたはアプリケーションで使用されていない場合は、センサー ドライバーまたはセンサー マイクロコントローラーで実行されているファームウェアによって、デバイスの電源を切ることができます。
システム ディスプレイがオフになり、ハードウェア プラットフォームが最新のスタンバイ状態になったら、まだ低電力状態ではないすべてのセンサー デバイスとオプションのセンサー マイクロコントローラーは、プラットフォーム全体が低電力状態に入ることができるように、数秒以内に低電力のスタンバイ状態に入る必要があります。 ただし、センサー ドライバーは、センサー デバイスの電源をオンまたはオフにする必要があるタイミングを決定するために、最新のスタンバイとの間の遷移を直接監視しません。 代わりに、センサー ドライバーは、デバイスが 1 つ以上のクライアント (アプリケーションまたはオペレーティング システム コンポーネント) によってアクティブに使用されているときに、デバイスが電源を受信できるようにする必要があります。 クライアントがデバイスを使用していない場合、ドライバーはデバイスから電源を取り外す必要があります。
センサー クラス拡張機能は、センサー のサンプルの読み取りの報告を開始するドライバーを要求すると、センサー ドライバーの EvtSensorStart コールバック メソッドを呼び出します。 センサー クラス拡張機能は、センサーサンプルの読み取りの報告を停止するようにドライバーに要求すると、ドライバーの EvtSensorStop コールバック メソッドを呼び出します。 詳細については、「 センサー ドライバー イベントについて」を参照してください。
コンピューターが最新のスタンバイ状態になり、すべてのセンサー デバイスが低電力状態になると、すべてのシステム センサー ハードウェアの総電力消費量が 1 ミリワット未満である必要があります。 センサー デバイスとオプションのセンサー マイクロコントローラーは、センサー ハードウェアに固有の低電力スタンバイ状態になる可能性があります。 または、センサー デバイスとオプションのセンサー マイクロコントローラーへのハードウェア電源レールを、センサー ドライバーやシステム ACPI ファームウェアの制御下でオフにすることができます。
Windows 10 以降では、最新のスタンバイ プラットフォームのコア シリコンまたは System on a Chip (SoC) へのセンサー ハードウェア接続オプションの限られたセットのサポートが提供されます。 次のセクションでは、サポートされているハードウェアとソフトウェアの構成と、最新のスタンバイ中とプラットフォームがアクティブに使用されている場合の両方の電源管理動作について詳しく説明します。
電源管理モード
Windows では、各センサー デバイスまたはセンサー マイクロコントローラーに、オプションの 0 ワットの電源取り外しモードに加えて、アクティブ、アイドル、スタンバイの 3 つのデバイス電源モードが必要です。 次の表では、センサー デバイスとオプションのセンサー マイクロコントローラーの電源モードについて説明します。 この表では、センサー ハードウェアが使用されているが、現在はアイドル状態であるアイドル モードと、センサー ハードウェアが使用されていないアイドル モードが区別されています。
モード | 説明 | 平均消費電力 | アクティブまでの終了待機時間 | 遷移メカニズム |
---|---|---|---|---|
アクティブです |
センサー デバイスやセンサー マイクロコントローラーは、環境の変化を積極的に提供または処理しています。 |
< 100 ミリワット |
なし |
なし |
アイドル (使用中) |
センサー デバイスやセンサー マイクロコントローラーは、1 つ以上のアプリケーションで使用されており、次の一連のセンサー情報をメイン プロセッサに提供するのを待機しています。 |
< 50 ミリワット |
センサー固有 |
ハードウェア自律型 |
アイドル (未使用) |
センサー デバイスやセンサー マイクロコントローラーは、どのアプリケーションでも使用されていません。 センサーまたはセンサー マイクロコントローラーのキャリブレーション データが保持されます。 |
< 5 ミリワット |
センサー固有 |
センサー デバイスの現在の使用状況を説明するヒューマン インターフェイス デバイス (HID) コマンドまたは Sensor Framework メッセージ。 |
スタンバイ |
センサー デバイスやセンサー マイクロコントローラーは、どのアプリケーションでも使用されていません。 センサーまたはセンサー マイクロコントローラーのキャリブレーション データが保持されます。 センサーやセンサーマイクロコントローラーは、メインプロセッサ上で実行されているソフトウェアによって要求されるまで、それ以上のアクションを実行しません。 |
< 1 ミリワット (すべてのシステム センサー用) |
< 10 ミリ秒 |
複数のオプション:
|
電源切断 |
センサー デバイスやセンサー マイクロコントローラーから電源が取り除かれ、すべてのハードウェア コンテキストが失われます。 |
0 ミリワット |
< 100 ミリ秒 |
外部エンティティは、電源を削除するか、D3 電源 IRP に応答して ACPI ファームウェア経由で電源を適用します。 |
注
前の表では、スタンバイという用語は、プラットフォーム全体の電源状態である最新のスタンバイとは異なるデバイス電源モードを指します。
ソフトウェア電源管理メカニズム
センサー デバイスとセンサー マイクロコントローラーの実行時の電源管理は、使用されているかどうかによって主に駆動されます。 一般に、センサー ドライバーとハードウェアは、オペレーティング システムまたはアプリケーションで使用されていない場合に、センサーをアイドル状態の電源モードにすることが想定されます。 Windows センサー プラットフォームは、特定のセンサーに接続されているアプリケーションまたはオペレーティング システム クライアントの数、およびセンサーのデューティ サイクルまたはデータ レートの要件に関する情報を提供します。 センサー ドライバーやハードウェアは、この情報を使用して、システムが実行されていてディスプレイがオンになっている時間帯に、センサー デバイスをアイドル状態の電源モードにシームレスに移行します。
システム ディスプレイの電源がオフになり、プラットフォームが最新のスタンバイ状態になると、Windows ではすべてのセンサーとセンサー マイクロコントローラーがスタンバイモードまたは電源取り外しモードに入ります。
センサー デバイスとオプションのセンサー マイクロコントローラーに使用するソフトウェア電源管理メカニズムの選択は、デバイス ドライバーによってセンサー ハードウェアが Windows に公開される方法と、センサー ハードウェアが SoC またはコア シリコンに物理的に接続される方法によって異なります。 Windows では、センサー デバイスの公開と接続の 2 つの方法がサポートされています。 1 つのメソッドは、I2C 接続経由で組み込みのセンサー HID クラス ドライバーを使用します。この場合、組み込みの HIDI2C ドライバーは、I2C 接続経由で HID 情報を転送します。 もう 1 つには、ユニバーサル センサー ドライバー インターフェイスを実装し、SensorscxFunctions テーブル内のメソッドを呼び出すサードパーティ製ドライバーが必要です。
次の表では、センサーまたはセンサー マイクロコントローラーに接続するための 2 つのオプションを比較します。 センサー ハードウェアに接続するための 2 つのオプションのいずれかを選択すると、センサー ハードウェアをスタンバイ モードまたは電源取り外しモードに移行するために必要なソフトウェアの電源管理メカニズムが決まります。
接続オプション | バス接続 | センサー ドライバーが必要 | ドライバー プロバイダー | コメント |
---|---|---|---|---|
HIDI2C |
センサー ハードウェアは、I2C 経由で SoC またはコア シリコンに直接接続します。 |
センサー HID クラス ドライバー + HID-over-I2C クラス ドライバー |
Microsoft。 受信トレイ コンポーネント (Windows 8 以降)。 |
長所と短所 |
サード パーティ製センサー ドライバー |
センサー ハードウェアは、I2C または UART 経由で SoC またはコア シリコンに直接接続します。 |
SENSOR_CONTROLLER_CONFIGを実装するサード パーティ製ドライバー |
センサー デバイス ベンダー。 |
長所と短所 |
HIDI2C
HIDI2C オプションの場合、オプションのセンサー・マイクロコントローラーは、I2C バスを介して SoC またはコア・シリコンに物理的に接続されます。 マイクロコントローラーは、論理センサー デバイスごとに 1 つずつ、複数の最上位レベルの HID コレクションを公開します。 たとえば、コンパス センサーは、センサー マイクロコントローラーの背後にある加速度計、ジャイロメーター、磁力計センサーの集計である論理センサー デバイスとして HID を介して公開できます。 これは、センサー デバイスにサードパーティ製のソフトウェアを必要としないため、接続とソフトウェアの観点から実装するのが最も簡単です。
Windows HIDI2C スタックは、2 つのソフトウェア電源管理メカニズム (インバンド HID コマンドと D3 状態への実行時の遷移) をサポートするという点で、タッチ コントローラーとペン デジタイザーのスタックに似ています。
インバンド HID コマンド
SET_POWER(スリープ) ディスプレイがオフになり、プラットフォームが最新のスタンバイ状態に入った後、デバイスに送信されます。 このコマンドは、デバイスをスタンバイ電源モードに切り替えることができます。
SET_POWER(オン) プラットフォームが最新のスタンバイ状態にあり、ディスプレイが再びオンになったときにデバイスに送信されます。
HID センサー デバイス スタックの D3 状態へのランタイム遷移
D3 IRP SET_POWER(Sleep) コマンドの直後にデバイスのドライバー スタックに送信されるIRP_MJ_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 アイドル状態を構成する必要があります。 ドライバーは、 IWDFDevice2::StopIdle メソッドと IWDFDevice2::ResumeIdle メソッドを使用して、デバイスがアイドル状態またはアクティブのときに WDF に指示する必要があります。 また、WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS構造体のExcludeD3Cold メンバーを WdfFalse に設定して、ドライバーで D3cold を有効にする必要があります。 D3cold を有効にすると、プラットフォームはアイドル状態になり、D3 状態になった後にセンサー デバイスから電源を取り外すことができます。
ベスト プラクティスとして、デバイス固有のコードをドライバーに配置し、ACPI ファームウェアにプラットフォーム固有のコードを配置して、複数のプラットフォームでドライバー コードを低コストで再利用できるようにします。
モダン スタンバイに入る要件
電源管理のためのサードパーティ製センサー ドライバーの要件は、センサー ハードウェアのスタンバイ電力消費の機能です。
サード パーティ製センサー ドライバーは、デバイスがインバンド通信メカニズムを使用してミリワット未満の電力モードに切り替えることができる場合でも、センサー デバイスがスタンバイモードまたは電源取り外しモードに入る準備ができたときに D3 への移行を開始する必要があります。 この要件の理由は、Windows の多くのバス ドライバーは、エンドポイント デバイスのデバイスの電源状態を追跡し、すべてのエンドポイント デバイスの電源がオフになっている場合にのみ電源をオフにすることです。 一部の SoC 設計と接続バス (特にユニバーサル シリアル バス (USB)) では、最新のスタンバイ中に SoC が最も低い電源状態に入るために、すべてのエンドポイント デバイスとホスト コントローラーが D3 に存在する必要があります。 最も低い電源状態に入ることができなくなると、システムがバッテリ寿命の最新のスタンバイ要件を満たすことを簡単に防ぐことができます。
センサー ハードウェアのスタンバイ電力消費量が、すべての制御されたセンサー ハードウェアに対して 1 ミリワット未満の場合、センサー (またはマイクロコントローラー上のすべてのセンサー) が使用されなくなったときに、センサー ドライバーは自動的にデバイスをスタンバイ モードに切り替える必要があります。
センサー ハードウェアのスタンバイ電力消費量が 1 ミリワットを超える場合、センサー ドライバーは D3 遷移を実行し、ACPI 制御メソッドがセンサー デバイスから電力を取り除くことを許可する必要があります。 センサー ドライバーは、D3 中にデバイスから電源を取り外すことができるように、必要なすべてのセンサー デバイスの状態を保存する必要があります。 センサー ハードウェア ベンダーは、システム インテグレーターと密接に連携して、センサーハードウェアとドライバーが確実かつ迅速に D3 遷移を実行するようにする必要があります。
重要
ドライバーは、デバイスが D3 に入る前にすべてのセンサー デバイス コンテキストを保存する必要があり、デバイスが D0 に入った後にすべてのセンサー デバイス コンテキストを復元する必要があります。
Windows は、モダン スタンバイに入った直後に、オペレーティング システムによるセンサーの使用 (環境光や回転など) を無効にし、アプリケーションを中断することで、すべてのセンサーの使用を自動的に停止します。 センサー ドライバーは、制御されているすべてのセンサー ハードウェアの状態を集計し、すべてのセンサーが使用されなくなったときに、このハードウェアをスタンバイ デバイスの電源モードに切り替える必要があります。
センサー デバイスをスタンバイ モードに切り替えるメカニズムは、デバイスを SoC に接続するバスを介してインバンド通信を使用するように設計できます。 たとえば、独自のスタンバイ コマンドをバス経由でセンサー ハードウェアに送信できます。 または、センサー ハードウェアが、デバイスをスタンバイ モードに切り替える GPIO 回線に接続されている可能性があります。
注
デバイスをスタンバイ モードに切り替えるために GPIO 行を使用する場合、センサー ドライバーはドライバー スタックを D3 に移行し、デバイスの ACPI 制御メソッド (たとえば、_PS3) が、GPIO 行をスタンバイ モードでハードウェアを配置するために必要な状態に設定できるようにする必要があります。 このスキームにより、センサー ドライバーをプラットフォームに依存しない方法で記述できます。特定の GPIO 行、タイミング要件、およびその他のプラットフォーム固有の情報は、デバイス固有のドライバーではなく、システム インテグレーターによって提供される ACPI ファームウェアでエンコードされます。
モダン スタンバイを終了する要件
プラットフォームが最新のスタンバイ状態を終了すると、センサー ドライバーはセンサー ハードウェアをアイドル (非使用中) モードに戻す必要があります。 システム サービスが再開されると、Windows はシステム機能の実行に必要なセンサー (回転や周囲光など) の使用を要求します。 アプリケーションが再開すると、センサー情報が要求される場合があります。 デバイスをアイドル モードに戻すためにセンサー ハードウェアでインバンド メッセージが必要な場合、デバイス ドライバーは、センサー情報の最初の要求が送信されるとすぐにこのメッセージを送信する必要があります。 デバイスがアイドル状態に戻るように通知するためにセンサー ハードウェアで GPIO 行が必要な場合、ドライバーは、センサー情報の最初の要求が提供されるとすぐに、この GPIO 行を使用して D0 への移行を実行する必要があります。 この場合、ACPI 制御メソッド (_PS0 など) は、移行を開始するために必要に応じて GPIO 行を切り替える必要があります。 最後に、スタンバイ モードの電力消費量が 1 ミリワットを超えるため、センサー ハードウェアが以前に電源取り外しモードへの移行を必要とした場合、センサー ドライバーは D0 への移行を実行し、ACPI 制御方法でデバイスに電力を復元できるようにする必要があります。
サポートされているハードウェア電源構成
センサー デバイスに使用するハードウェア電源管理構成は、スタンバイ モードでのセンサー ハードウェアの電力消費量と、オプションのセンサー マイクロコントローラーがデバイスを管理するかどうかによって異なります。
スタンバイ電源 < 1 ミリワット
スタンバイ電源モードのセンサー デバイスの電力消費量が 1 ミリワットを超えない場合、プラットフォーム デザイナーは、ACPI 制御方法でオンとオフを切り替えることができる電源レールにセンサー ハードウェアを接続する必要はありません。 センサーをスタンバイ電源モードに切り替えるには、次のいずれかのメカニズムを使用します。
- HIDのSET_POWER(スリープ)コマンド。
- 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 によって開始できます。
もう 1 つのオプションは、前の図の右側に示すように、サード パーティ製センサー ドライバーを使用することです。 サード パーティ製センサー ドライバーは、独自のインバンド コマンドを使用するか、センサーの_PS3制御メソッドを実行して ACPI ドライバーが処理する D3 IRP を送信することによって、スタンバイ電源モードへの移行を開始できます。
プラットフォーム・デザイナーは、センサ・デバイスがマイクロコントローラー・チップに統合されているか外部であるかに関係なく、メカニズムを選択できます。
スタンバイ電源 > 1 ミリワット
プラットフォームに、スタンバイ電源モードで複数のミリワットを消費するセンサー ハードウェアやセンサー マイクロコントローラーが含まれている場合は、システムが最新のスタンバイ状態にあるときに、センサー ハードウェアとマイクロコントローラーを電源取り外しモードに移行する必要があります。 この構成では、センサー、オプションのセンサー マイクロコントローラー、およびマイクロコントローラーの背後にあるセンサーを、SoC の GPIO ラインの制御下でオン/オフする単一の電源レールに配置する必要があります。
この構成では、プラットフォーム デザイナーは、SoC の GPIO ラインによって制御される、スイッチ可能な電源レールにすべてのセンサー ハードウェアを配置する必要があります。 センサー ハードウェアに複数の入力電圧が必要な場合は、それぞれが同じ GPIO ラインによって制御される複数のスイッチを使用できます。 スイッチ可能な電源レールに加えて、プラットフォーム ACPI ファームウェアでは、名前空間に電源リソースを定義する必要があります。 この Power Resource では、センサー ハードウェアについて説明し、GPIO 操作領域を使用して SoC から GPIO 行を切り替える_ONと_OFFメソッドが含まれています。
プラットフォーム ファームウェアには、_PR0オブジェクトや_PR3 オブジェクトなど、スイッチ可能な電源レール上の ACPI 名前空間の各センサー デバイスの下に、電源リソースへの参照を含める必要があります。
次のブロック図は、スタンバイ電源モードで複数のミリワットを消費するセンサー ハードウェアまたはセンサー マイクロコントローラーの電源管理オプションを示しています。 2 つのオプションは、図の左側に示すように Windows HIDI2C スタックを使用するか、右側に示すようにサード パーティ製センサー ドライバーを使用することです。
前の図の左側に示すように、組み込みの HIDI2C ドライバー スタックを使用する構成では、HIDI2C ドライバーは、ディスプレイがオフになり、プラットフォームが最新のスタンバイに入った後に D3 遷移を開始します。 D3 IRP が ACPI ドライバーを通過すると、_PR3 オブジェクトが評価され、Windows は、_OFF メソッドを実行して、指定した電源リソースをオフにします。 複数のセンサーが Power Resource を共有している場合、Windows はすべてのセンサーを自動的に参照カウントし、すべてのセンサーが D3 に入った後にのみ _OFF メソッドを実行します。
前の図の右側に示すように、センサー ハードウェアでサード パーティ製のセンサー ドライバーが使用されている場合、制御フローは以前と同じですが、センサー ドライバーが D3 への移行を開始する役割を担う点が異なります。
プラットフォームが最新のスタンバイから再開され、アプリケーションまたはオペレーティング システムがセンサーの使用を要求すると、ドライバーは D0 に移行します。 D0 IRP は ACPI ドライバーを通過し、_PR0 オブジェクトは、ACPI ドライバーが関連付けられている電源リソースの_ONメソッドを実行するように評価されます。 _ON メソッドは、GPIO 行を切り替えて、切り替え可能な電源レールをオンにします。 システムがサード パーティ製センサー ドライバーを使用する場合、ドライバーは D0 IRP を要求し、オペレーティング システムまたはアプリケーションによってセンサー データが要求された直後に D0 への移行を開始する必要があります。
ウェイクの懸念事項
センサーやオプションのセンサー マイクロコントローラーには、スリープ解除に関する懸念事項はありません。 センサー デバイスは、最新のスタンバイ中にスタンバイ モードまたは電源削除モードになると予想され、プラットフォームが最新のスタンバイ状態にある間は SoC をスリープ解除することは想定されません。
テストと検証
システム デザイナーは、最新のスタンバイでディスプレイの電源がオフになっているときに、センサー ハードウェアがスタンバイ モードまたは電源取り外しモードに入っていることを確認することが重要です。 デバイスの電源管理をテストおよび検証するために使用される方法は、センサー デバイスの接続方法によって異なります。
HIDI2C 接続センサー
システムが Windows HIDI2C スタックを使用している場合、システム インテグレーターは、ドライバーが電源管理を正しく実行することを最もよく確認する方法について、センサー ドライバー ベンダーに問い合わせる必要があります。 センサー ドライバー ベンダーは、デバイス ドライバーのすべての電源管理の決定に Windows イベント トレーシング (ETW) トレースを使用し、ETW イベントと Windows パフォーマンス ツールキット (WPT) を使用して正しい電源管理操作を検証する方法を説明するサンプル ドキュメントをシステム インテグレーターに提供することをお勧めします。
サード パーティ製センサー ドライバー
システムがサード パーティ製センサー ドライバーを使用している場合、システム インテグレーターは、ドライバーが電源管理を正しく実行することを最もよく確認する方法について、センサー ドライバー ベンダーに問い合わせる必要があります。 センサー ドライバー ベンダーは、デバイス ドライバーのすべての電源管理の決定に Windows イベント トレーシング (ETW) トレースを使用し、ETW イベントと Windows パフォーマンス ツールキット (WPT) を使用して正しい電源管理操作を検証する方法を説明するサンプル ドキュメントをシステム インテグレーターに提供することをお勧めします。
すべてのセンサー デバイスが使用されなくなったときにドライバーが D3 への移行を開始した場合は、次の一覧の手順に従って、この切り替えが想定どおりに発生し、アプリケーションまたはオペレーティング システムがデバイスを再度使用する必要があるときにセンサー デバイスが D0 に戻っていることを確認できます。
ソフトウェアに重点を置いたメソッドは、Windows インストルメンテーションを使用して、D3 IRP がセンサー デバイスのデバイス ドライバー スタックを通過することを確認します。 Windows Power Manager には組み込みの 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 を持つ Microsoft-Windows-Kernel-Power/IRP/Stop の種類のイベントによって示されます。これは、ターゲットの状態が D3 であることを示します。 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 は、Power Resource の_OFF制御メソッドも実行します。
同様のプロセスを使用して、プラットフォームが最新のスタンバイを終了し、ディスプレイがオンになったときにセンサー デバイスが D0 に戻っていることを確認できます。 センサー デバイスの Microsoft-Windows-Kernel-Power/IRP/Start イベントは、電源ボタンを押してシステムをスリープ解除した直後に、ターゲット状態が 0 (D0 を示す) でログに記録され、オペレーティング システムまたは再開されたアプリケーションがセンサー データを要求します。
センサーとセンサーのマイクロコントローラーの電源管理チェックリスト
システム インテグレーターとセンサー デバイス ベンダーは、次のチェックリストを使用して、システムの電源管理設計が Windows 8 以降と互換性があることを確認する必要があります。
- 組み込みの HIDI2C ドライバーおよび HIDSensor ドライバー スタックと互換性のあるセンサー ハードウェアを選択します。
- スタンバイ消費電力が 1 ミリワット未満のセンサー ハードウェアを選択します。
- センサー ハードウェアとサード パーティ製ドライバー (必要な場合) が、ディスプレイの電源が入っているときの実行時アイドル状態の電源管理をサポートしていることを確認します。
- センサーは、アプリケーションまたはオペレーティング システムで使用されていない場合は、電源をオフにして D3 を自動的に入力する必要があります。
- センサーは、アプリケーションまたはオペレーティング システムによってセンサー データが要求されたときに、電源をオンにして D0 を自動的に入力する必要があります。
- サード パーティ製センサー ドライバーは WDF ドライバーとして実装する必要があり、SpbAccelerometer サンプル ドライバーに基づくことができます。
- センサー情報のポーリングは制限され、可能な限り最小の消費電力レベルで有効にする必要があります。 たとえば、アナログ センサーのポーリングは、マイクロコントローラーまたはその他の低電力制御ハードウェアの背後で行われる必要があります。これは、新しいセンサー データがしきい値検出値を超えたときに SoC を中断する可能性があります。 SoC で定期的に実行されるドライバーでセンサーをポーリングしないようにします。この場合、システム全体の電力消費量が大幅に増加する可能性があります。
- センサー ハードウェアがサード パーティ製ドライバーを使用する場合:
- システム インテグレーターは、センサー ハードウェアの電源管理を実装する方法を理解するために、センサー デバイス ベンダーと通信する必要があります。
- センサー ハードウェアがスタンバイ電源モードで複数のミリワットを消費する場合は、SoC の GPIO ラインによって制御されるスタンドアロンの電源レールにセンサー ハードウェアを配置します。 必要な ACPI 電源リソース、_ON/_OFF制御方法、および ACPI 名前空間のセンサー デバイスの下の電源リソースへの参照を提供します (後述)。
- センサー ハードウェアが SoC の GPIO 回線を使用してデバイスをスタンバイ電源モードに切り替える場合は、システム ACPI ファームウェアに適切な_PS3と_PS0制御方法が含まれていることを確認します (後述)。
- センサー ハードウェアの背後にセンサー デバイスが接続されているセンサー マイクロコントローラーが含まれている場合、センサー マイクロコントローラーにはセンサー デバイスの電源を切る方法が必要です。 デバイスは、マイクロコントローラーをデバイスに接続するバス経由のインバンド通信、またはマイクロコントローラーからデバイスへの GPIO ラインを使用して電源を切ることができます。
- デバイスをスタンバイ電源モードに切り替えるために、センサー ハードウェアで SoC からの GPIO 回線が必要な場合:
- SoC の GPIO 行が、センサー ハードウェア ベンダーによって設定されたレベルとトリガーの要件を満たしていることを確認します。
- ACPI 名前空間で、GPIO 操作領域の一部として SoC GPIO ピンについて説明します。
- ACPI 名前空間のセンサー デバイスの下に_PS3制御方法を指定して、センサー ハードウェアをスタンバイ電源モードに切り替えるために必要に応じて GPIO ラインの信号を切り替えます。
- ACPI 名前空間のセンサー デバイスの下に_PS0制御メソッドを指定して、デバイスが D0 に切り替えた後にセンサー ハードウェアをアイドルモードまたはアクティブ モードに切り替えるために必要に応じて GPIO ラインの信号を切り替えます。
- センサー ハードウェアがスタンバイ電源モードで複数のミリワットを消費する場合:
- SoC の GPIO ラインでオンとオフを切り替えることができる電源レールにすべてのセンサー ハードウェアを配置します。 または、プラットフォームに異なる電源電圧要件を持つ複数のセンサーが含まれている場合は、個別に切り替えることができる個別のレールを提供します。
- ACPI 名前空間の電源リソースとして、切り替え可能な電源レールについて説明します。
- この電源リソースの下で、GPIO 操作領域の一部として記述されている GPIO 行を使用して電源レールのオンとオフを切り替える_ONおよび_OFF制御メソッドを提供します。
- ACPI 名前空間で、センサー ハードウェアの電源リソースを指定する_PR3オブジェクトと_PR0 オブジェクトを指定します。
- _ONおよび_OFFメソッドに、センサー ハードウェアのバウンス解除またはタイミングの要件が組み込まれていることを確認します。
- プラットフォーム内のセンサー デバイスの実行時の電源管理をテストして検証します。 システムの表示がオンのときに、センサー ハードウェア ベンダーと密接に連携して、実行時の電源管理を検証します。
- プラットフォームが最新のスタンバイに入ったときに、センサー ハードウェアがスタンバイ モードまたは電源取り外しモードに入っていることをテストして確認します。
- センサー ハードウェアが Windows に含まれている HIDI2C + HID センサー ドライバー スタックを使用する場合は、「テストと検証」を参照してください。
- センサー ハードウェアがサード パーティ製ドライバーを使用している場合は、推奨されるテスト手法についてセンサー ドライバー ベンダーに問い合わせてください。
- センサー ドライバーがスタンバイ モードまたは電源削除モードへのエントリの一部として D3 への移行を実行する場合は、「テストと検証」の説明に従って Windows パフォーマンス ツールキットを使用します。 プラットフォームが最新のスタンバイに入ったときにセンサー ハードウェアが D3 に入り、システムが最新のスタンバイを終了し、センサー情報が再度要求された後にセンサー ハードウェアが D0 に入っていることを確認します。
- スタンバイ モードまたは電源取り外しモードのセンサー ハードウェアの電力消費量を測定します。
- 最新のスタンバイとの間で複数の切り替えを開始し、ディスプレイの電源が入ったときにセンサー情報を使用するセンサー デバイスとアプリケーションの動作をストレス テストします。