モダン スタンバイのためのハードウェアの準備
モダン スタンバイ状態に入った場合は、低電力操作への移行を行うハードウェア コンポーネントを準備する必要があります。 ソフトウェア コンポーネントとアプリが低電力動作用に準備された後、ソフトウェア デバイス ドライバーを含むハードウェア コンポーネントも同様に低電力動作用に準備する必要があります。
この記事の残りの部分では、ハードウェア プラットフォームがスタンバイ状態に入った後、低電力モードで動作するために、System on a Chip (SoC) の外部および内部でデバイスを準備する方法について説明します。
低電力モードへのハードウェアの切り替え
SoC の外部および SoC 内のすべてのデバイスは、スリープ中にバッテリの寿命を長くするために、低電力モードにする必要があります。 ハードウェア プラットフォームがスリープ状態に入った後、プラットフォーム内のデバイスは、SoC の外部にあるデバイスから始まる順序付けされたプロセスで、低電力モードに切り替えます。
まず、SoC またはコア シリコンの外部のすべてのデバイスは、低電力モードにする必要があります。 電源モードは、クロックゲート アイドル状態である場合があります。たとえば、I ² C 接続タッチ コントローラーをスリープ モードにした場合などです。 または、電源モードは、D3cold と呼ばれる電源ゲート付き 0-watt 状態である場合があります。 USB に接続された Web カメラは、多くの場合、モダン スタンバイ中に D3cold に移行します。 詳細については、「USB デバイスの D3cold のサポート」をご覧ください。
各デバイス クラスと接続バスには、デバイスを最小電力モードに移行する独自の用語と要件があります。 ただし、システム デザイナーは、モダン スタンバイ中にプラットフォーム内の各デバイスに対して低電力の操作モードを計画する必要があります。 システムのバッテリ寿命と、SoC 自体を低電力モードにする機能は、SoC 自体の外部にある各デバイスの正しい電源管理に依存します。
次に、ネットワーク デバイスと無線デバイスは、スリープ用に低電力モードに配置されます。 スリープ中、これらのデバイスには接続を維持するために電源が適用されている場合が多く、必要に応じて SoC をスリープ解除する必要があります。 通信および無線デバイスは通常、D2/D3 低電力状態になりますが、各状態へのエントリはデバイス クラス固有でバス固有です。
通信デバイスを含め、SoC の外部のすべてのデバイスの電源がオフになった後、SoC 上のホスト コントローラーはオフになります。 ほぼすべての SoC に USB、I、I、GPIO、SDIO、および UART ホスト コントローラーがあります。 SoC が低電力モードに入るには、SoC 上のこれらの各コンポーネントをオフにする必要があります。
次の図に示すように、スリープ中に低電力用にハードウェアを準備するプロセスは、逆さまなピラミッドとして視覚化できます。 最も低い電力は、SoC チップ全体が電源をオフにした場合に実現されますが、これは、ピラミッド内の上の各デバイス セットの電源がオフにされた後にのみ発生する可能性があります。
SoC の外部でデバイスの電源をオフにする
SoC チップの外部にある各デバイスは、次の 2 つの重要な目標に対して低電力モードに入る必要があります。
- デバイスの電力消費量を減らします。
- デバイスが接続されている On-SoC ホスト コントローラーの電源をオフにすることで、SoC 自体の電源をオフにできます。
SoC の外部で各デバイスの電源をオフにするメソッドは、デバイス クラスと接続されているバスによって異なります。
SoC の外部にある一部のデバイスは、D3cold と呼ばれる no-power-consumed 状態の 0-watt に配置されます。 D3cold の一般的なデバイスには、カメラとセンサーが含まれます。 ドライバーは、デバイスのレジスタ状態を保存してから、デバイスを D3 電源状態に移行する必要があります。 GPIO ラインを切り替えるか、電源管理 IC (PMIC) から電源レールをオフにすることで、ACPI ファームウェアによって電源が取り外されます。
SoC の外部にある一部のデバイスは、レジスタ状態が維持される低電力アイドル モードに配置されます。または、デバイスが単にクロック ゲートされている可能性があります。 たとえば、多くのタッチ コントローラーでは、1 ミリワット未満の電力を消費するクロック ゲート状態が特徴です。 クロック ゲート状態を使用する一般的な利点は、デバイスを切り替え可能な電源レールに接続する必要がなされ、電源オン時間が短縮され、コストが削減されるという利点があります。
一般に、SoC の外部のすべてのデバイスは、電力消費量が 1 ミリワット未満の低電力モードに入る必要があります。 内部クロック ゲート状態でこの電力レベルを実現できないデバイスは、D3cold を介して電源ゲーティングを実装する必要があります。
ネットワーク デバイスと無線デバイスは、1 ミリレット ガイドラインの注目すべき例外です。 ネットワークデバイスと無線デバイスでは、ネットワークへの接続を維持したり、ワイヤレス デバイスをリッスンしたりするために、より多くの電力が必要になる場合があります。 一部のシステム デザイナーには、これらの電源状態遷移はランタイムD3 (RTD3) と呼ばれています。
PCIe デバイス用の指示電源管理
SoC の外部にある PCIe カードは、低電力モードに入る可能性を確保するために、Device-S4 と呼ばれるダイレクト電源管理メカニズムを有効にする必要があります。 Device-S4 を使用しない場合、ユーザーがデスクトップのモダン スタンバイ システム上のユーザーがアクセスできるスロットを使用して PCIe ルート ポートにデバイスを接続し、デバイスのドライバーがランタイム D3 (RTD3) をサポートしていない場合、PCIe デバイスはシステムが「SLOTSS」に入るのを妨げる可能性があります。 この問題を回避するには、OEM は PCIe デバイスのルート ポートを Device-S4 にオプトインする必要があります。 特定の PCIe デバイスに対して Device-S4 を使用するには、次の要件を満たす必要があります。
- デバイスの親 PCIe ルート ポートは、CONSTRAINTS の制約として指定する必要があります。
- 親 PCIe ルート ポートは、ルート ポートの D0- D3 遷移時にルート ポートの下流のすべての子に基本的なデバイス リセットを適用し、>D3- D0 移行時にそれらの子に対する基本的なデバイス リセットをデアサートする>必要があります。 PCIe の基本的なリセットの詳細については、「PCI Express Base Specification のセクション 6.6.1」を参照してください。 基本的なリセットの適用は、補助的な ACPI メカニズムによって提供できます。 詳細については、「PCI 電源管理に関するこのガイド」を参照してください。 プラットフォームがこの基本的なリセット要件を満たしていることを示すために、ファームウェアは GUID {FDF06FAD-F744-4451-BB64-ECD792215B10} をサポートする _DSD を定義する必要があります。 この設定がない場合、その PCIe ルート ポート下にあるデバイスに対して Directed DRIPS はトリガーされません。 詳細については、「PCIe ルート ポートの ACPI デバイス固有データ (_DSD)」を参照してください。
- 電源リソースは、特定の PCIe ルート ポートに対して一意である必要があります。つまり、他のルート ポートと共有されていない必要があります。
互換性サポート モジュール (CSM) を必要とする PCIe カードは、モダン スタンバイ システムでは機能しません。 CSM は、UEFI セキュア ブートの要件により、モダン スタンバイ システム上の BIOS ではサポートされていません。 詳細については、「Windows ハードウェア互換性プログラムの仕様」を参照してください。
特定のデバイス クラスの電源管理の詳細については、システム デザイナーが、モダン スタンバイ用のデバイス固有の電源管理に関するページと、Microsoft Collaborate に関するデバイス固有のドキュメントを確認してください。
ネットワーク デバイスの電源をオフにする
ネットワーク デバイスと無線デバイスの電源をオフにすることは、スリープ中の低電力操作のためにハードウェアを準備するもう 1 つの重要な部分です。 ネットワーク デバイスと無線デバイスは、SoC の外部にある他のデバイスとは異なります。これらは、興味深いイベントをリッスンして SoC をスリープ解除するために電源を適用した状態を維持する必要があります。 たとえば、Wi-Fi 無線では、WoL パターンに一致するパケットをリッスンし、一致するパケットが検出された場合に SoC をスリープ状態にすることができる必要があります。
Windows、SoC をスリープ解除する必要がある場合は、スリープ中にネットワーク デバイスを D2/D3 状態に移行します。 この Windows のネットワークでは、デバイスを低電力の D2/D3 状態にする前に、WoL パターンとプロトコル オフロードが構成されます。 Wi-Fi、モバイル ブロードバンド (MBB)、有線イーサネットを含むすべてのネットワーク デバイスは、スリープ中に D2/D3 状態に入る必要があります。 ネットワーク デバイスがシステムのスリープ解除に必要ない場合、Windows デバイスが D3 状態に遷移します。 ユーザーが機内モードを有効にした場合、または特定のネットワーク デバイスを無効にしている場合は、ネットワーク デバイスを D3 状態にすることができます。
各デバイスには、SoC を最低電力モードからスリープ解除する異なる物理方法があります。 SDIO または UART 上のネットワーク デバイスは、SoC をスリープ解除するために GPIO 回線に通知する必要があります。 USB または HSIC 経由で接続されたネットワーク デバイスでは、インバンド USB 再開シグナルを使用して SoC をスリープ解除する必要があります。 PCI または PCI バスのネットワーク デバイスでは、インバンド PME シグナルを使用して SoC をスリープ解除する必要があります。
さらに、ユーザーがこのデバイスの無線をオンにしている場合、Bluetooth や近距離通信 (NFC) デバイスなどの無線デバイスは D2 状態に移行する必要があります。 D2 状態では、ペアリングされたマウスおよびキーボードからの入力イベントを、Bluetooth 無線がリッスンします。 入力イベントが検出されると、Bluetooth ラジオによって SoC に接続されている GPIO 行が切り替わります。そのため、SoC は低電力モードからスリープ解除します。
各ネットワークまたは無線デバイスには、モダン スタンバイ用に電源をオフにする独自の実装があります。 システム デザイナーには、Microsoft Collaborate Web サイトでデバイス クラス固有のドキュメントを読み取ることをお勧めします。
On-SoC ホスト コントローラーの電源をオフにする
SoC の外部のすべてのデバイス (ネットワーク デバイスと無線デバイスを含む) の電源がオフにされた後には、デバイスが接続されているホスト コントローラーの電源がオフになっている必要があります。 一般的なホスト コントローラーには、USB、PCI、SDIO、GPIO、I²C があります。
各ホスト コントローラーのドライバーは、ホスト コントローラーに接続されているすべてのデバイスの電源がオフにされた後にのみ、ハードウェアの電源をオフにできます。 一般的な例として、USB ホスト コントローラーがあります。 USB ホスト コントローラーは、接続されているすべての USB デバイスがセレクティブ サスペンド状態に入った後にのみ電源をオフにできます。 USB ホスト コントローラーに USB マウスとキーボードが接続されている場合、ホスト コントローラーは、マウスとキーボードの両方が電源をオフにした後にのみ電源をオフにできます。 マウスまたはキーボードのどちらかの電源がオンのままの場合、USB ホスト コントローラーの電源もオンのままになります。
SoC 自体の電源をオフにするには、SoC 上のすべてのホスト コントローラーの電源をオフにし、スリープ状態に設定する必要があります。 これが、すべてのデバイスでデバイスの電源管理を実行する必要がある所以です。 SoC 自体は、各ホスト コントローラーの電源がオフになっている場合にのみ電源をオフにできます。 ホスト コントローラーは、接続されているすべてのデバイスの電源がオフにされた後にのみ電源をオフにできます。
CPU と GPU の電源をオフにする
電源管理の点において、SoC チップ上の CPU と GPU は他のデバイスとは異なります。 CPU と GPU は、SoC 自体の電源オフと連動して電源をオフにして、対象となるソフトウェア アクティビティがない場合は常に電源をオフにできます。
システム上のほとんどのソフトウェア アクティビティは、「モダン スタンバイ用のソフトウェアを準備する」で詳しく説明されている準備段階で停止されます。 Microsoft Store のアプリは、PLM フェーズの一部として一時停止されます。 デスクトップ アプリケーションは、DAM フェーズの完了の一部として一時停止されます。 プラットフォームが回復性フェーズに入った後に残っている CPU アクティビティは、Windows 自体のアイドル オペレーションです。 同様に、すべてのアプリが一時停止され、画面がオフになるため、GPU アクティビティはほとんどありません。
画面がオンで、ユーザーが PC を操作している場合でも、Windows はシステム上の CPU の電源状態を継続的に管理できます。 同じ CPU 電源状態管理によって、スリープ中に CPU が低電力モードになります。 すべての CPU が低電力モードであり、SoC のすべてのホスト コントローラーの電源がオフになっている場合は、SoC 自体の電源をオフにすることができます。
SoC の電源をオンにする
SoC のすべてのホスト コントローラー、CPU、および GPU の電源がオフになっている場合、Windows によって、すべての SoC 自体の電源を切ることが安全かどうかが判断されます。 SoC ベンダーは、SoC のすべての状態が保存されたときに Windows に通知するパワー エンジン プラグイン (PEP) を提供します。これにより、SoC が低電力モードに入る準備が整います。 Intel ベースのソケットの場合、PEP には受信トレイが指定されます。
SoC ベンダーによりそれぞれ、SoC 全体の低電力状態の実装が異なります。 これらの状態は、通常、クロックゲート状態またはパワーゲート状態であり、メモリの内容が自己更新で保持され、システムは、プログラム可能なタイマーと、電力をほとんど消費しない少数の GPIO ピンによりスリープ解除できます。 Windows は、最も深いランタイム アイドル プラットフォーム状態 (DRIPS) として最も低い SoC 電源状態を参照します。
DRIPS 状態には、常に次の特性があります。
- DRIPS は、セルフリフレッシュ モードでメモリが保持される SoC の最低電力消費状態です。
- DRIPS を使用することで、SoC はネットワーク、ラジオ、および入力デバイスからイベントをスリープ解除できます。
- DRIPS 状態中に CPU コードを実行することはできません。
- SoC が DRIPS 状態である場合、プラットフォームはスリープ中に可能な限り電力量の消費が少なくなります (ネットワークと無線デバイスによる電力消費の差異は例外です)。