USB デバイスの電力状態
この記事では、ユニバーサル シリアル バス 2.0 仕様のセクション 9.1 で規定されている USB デバイスの電源状態に使用する Windows Driver Model (WDM) デバイスの状態について説明します。
USB デバイスの電源状態 (ユニバーサル シリアル バス 2.0 仕様のセクション 9.1 で指定) は、次の 3 つの一般的なカテゴリに分類できます。
- Attached: デバイスは接続されていますが、完全には電源が供給されていません。
- Powered: デバイスは、完全に電力が供給されている状態 (Default、Address、Configured) のいずれかになっています。
- Suspended: デバイスはアイドル状態であり、低電力で動作しています。
WDM 電源モデルで定義されたデバイスの電源状態と USB 標準で定義されたデバイスの電源状態の間には、直接の相関関係はありません。 たとえば、サスペンドおよびアイドルという用語は、USB 仕様では特別な意味を持っています。一方、WDM 電源モデルでは、これらの用語が異なる意味で使用されることがよくあります。 Windows クライアント ドライバーは、USB デバイスをサスペンド状態にすることができます。 詳細については、「USB 選択的サスペンド」を参照してください。 クライアント ドライバーは、デバイスをサスペンド状態にする準備ができると、デバイスをアイドル状態にするようにバス ドライバーに指示します。 アイドル要求の詳細については、「USB 選択的サスペンド」を参照してください。
WDM モデルのデバイス電源状態は、次のように要約できます。
- D0 - 動作状態。 デバイスには完全に電力が供給されています。
- D1/D2 - 中間スリープ状態。 これらの状態では、デバイスをリモート ウェイクアップ用に備えることができます。
- D3 - 最も深いスリープ状態。 状態 D3 のデバイスは、リモート ウェイクアップ用に備えることができません。
WDM 電源モデルでのデバイスの電源状態の詳細については、「デバイスの電源状態」を参照してください。
WDM 電力モデルでは、リモート ウェイクアップのためのデバイスのアーミングという用語が使用されます。 アーミングは一般的に、USB デバイスでリモート ウェイクアップ機能を有効にするハードウェア操作につながるソフトウェア操作です。 デバイスをリモート ウェイクアップ用にアーミングする WDM ソフトウェア操作は、ウェイク待機 IRP (IRP_MN_WAIT_WAKE) です。 この IRP の詳細については、「Wake-Up 機能を備えたデバイスのサポート」を参照してください。
このソフトウェア操作と USB リモート ウェイクアップ機能の有効化の関係については、USB デバイスのリモート ウェイクアップに関する記事を参照してください。
このセクションには、次のサブセクションが含まれています。
非複合デバイスの電源状態の変更
USB デバイスの電源ポリシー マネージャーは、デバイスの電源状態を設定する役割を担います。 電力ポリシー マネージャーは、WDM 電源 (IRP_MN_SET_POWER) IRP を発行して電源状態を設定します。 電源ポリシー マネージャーの詳細については、「電源ポリシーの所有権」を参照してください。
バス ドライバーによって実行されるアクションは、電源ポリシー マネージャーが要求するデバイスの電源レベルによって異なります。 設定された電源要求のレベルごとにバス ドライバーが実行するアクションの一覧を以下に示します。
D0
バス ドライバーは、以下のタスクを実行します。
- すべてのアップストリーム USB ハブに電源が供給され、要求を受信する準備ができていることを確認します。
- デバイスの USB ポートがサスペンド状態の場合は、PORT_SUSPEND 機能をクリアしてポートを再開します。
- デバイスのアイドル IRP が保留中の場合は、STATUS_SUCCESS で完了します。
- デバイスがアーミング済みの場合は、リモート ウェイク用にデバイスをアーミング解除します。
D1/D2
バス ドライバーは、以下のタスクを実行します。
- ウェイク待機 IRP (IRP_MN_WAIT_WAKE) が保留中の場合は、リモート ウェイクアップ用にデバイスのアーミングを行います。
- PORT_SUSPEND 機能を設定して、デバイスの USB ポートをサスペンド状態にします。
D3
バス ドライバーは、以下のタスクを実行します。
- PORT_SUSPEND 機能を設定して、デバイスの USB ポートをサスペンド状態にします。
- デバイスのウェイク待機 IRP が保留中の場合は、STATUS_POWER_STATE_INVALID で完了します。
- デバイスのアイドル IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) が保留中の場合は、STATUS_POWER_STATE_INVALID で完了します。
複合デバイスの電源状態の変更
複合デバイス上のインターフェイスのクライアント ドライバーは、複合デバイスの電源状態を、デバイス上の他のインターフェイスのクライアント ドライバーと共有する必要があります。 このため、任意のインターフェイスのクライアント ドライバーは、デバイス上の他のインターフェイスに影響を与えずに、複合デバイスの電源状態を低くすることはできません。 USB 汎用親ドライバー (Usbccgp.sys) は、いずれかのインターフェイスのクライアント ドライバーが IRP_MN_SET_POWER 要求を送信すると、以下のアクションを実行します。
D0
バス ドライバーは、以下のタスクを実行します。
- すべてのアップストリーム USB ハブに電源が供給され、要求を受信する準備ができていることを確認します。
- デバイスの USB ポートがサスペンド状態の場合は、PORT_SUSPEND 機能をクリアしてポートを再開します。
- クライアント ドライバーのアイドル IRP が保留中の場合は、STATUS_SUCCESS で完了します。
D1/D2
バス ドライバーは何も行いません。
D3
バス ドライバーは、以下のタスクを実行します。
- クライアント ドライバーのウェイク待機 IRP (IRP_MN_WAIT_WAKE) が保留中の場合は、STATUS_POWER_STATE_INVALID で完了します。
- クライアント ドライバーのアイドル IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) が保留中の場合は、STATUS_POWER_STATE_INVALID で完了します。
次の条件のいずれかが当てはまる場合、汎用親ドライバーはデバイスの USB ポートをサスペンド状態にします。
- システムが、より低い電源状態に移行している。
- 複合デバイス上のすべての機能のクライアント ドライバーが、選択的サスペンドを開始した。