USB デバイスの電源状態

このトピックでは、ユニバーサル シリアル バス 2.0 仕様のセクション 9.1 で規定されている USB デバイスの電源状態に使用する 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

    バス ドライバーは、以下のタスクを実行します。

    1. すべてのアップストリーム USB ハブに電源供給が行われ、要求を受信する準備ができていることを確認します。
    2. デバイスの USB ポートがサスペンド状態の場合は、PORT_SUSPEND 機能をクリアしてポートを再開します。
    3. デバイスのアイドル IRP が保留中の場合は、STATUS_SUCCESS で完了します。
    4. デバイスがアーミング済みの場合は、リモート ウェイク用にデバイスをアーミング解除します。
  • D1/D2

    バス ドライバーは、以下のタスクを実行します。

    1. ウェイク待機 IRP (IRP_MN_WAIT_WAKE) が保留中の場合は、リモート ウェイクアップ用にデバイスのアーミングを行います。
    2. PORT_SUSPEND 機能を設定して、デバイスの USB ポートをサスペンド状態にします。
  • D3

    バス ドライバーは、以下のタスクを実行します。

    1. PORT_SUSPEND 機能を設定して、デバイスの USB ポートをサスペンド状態にします。
    2. デバイスのウェイク待機 IRP が保留中の場合は、STATUS_POWER_STATE_INVALID で完了します。
    3. デバイスのアイドル IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) が保留中の場合は、STATUS_POWER_STATE_INVALID で完了します。

複合デバイスの電源状態の変更

複合デバイス上のインターフェイスのクライアント ドライバーは、複合デバイスの電源状態を、デバイス上の他のインターフェイスのクライアント ドライバーと共有する必要があります。 このため、いずれかのインターフェイスのクライアント ドライバーが、デバイス上の他のインターフェイスに影響を与えずに、複合デバイスの電源状態を低くすることはできません。 USB 汎用親ドライバー (Usbccgp.sys) は、いずれかのインターフェイスのクライアント ドライバーが IRP_MN_SET_POWER 要求を送信すると、以下のアクションを実行します。

  • D0

    バス ドライバーは、以下のタスクを実行します。

    1. すべてのアップストリーム USB ハブに電源供給が行われ、要求を受信する準備ができていることを確認します。
    2. デバイスの USB ポートがサスペンド状態の場合は、PORT_SUSPEND 機能をクリアしてポートを再開します。
    3. クライアント ドライバーのアイドル IRP が保留中の場合は、STATUS_SUCCESS で完了します。
  • D1/D2

    バス ドライバーは何も行いません。

  • D3

    バス ドライバーは、以下のタスクを実行します。

    1. クライアント ドライバーのウェイク待機 IRP (IRP_MN_WAIT_WAKE) が保留中の場合は、STATUS_POWER_STATE_INVALID で完了します。
    2. クライアント ドライバーのアイドル IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) が保留中の場合は、STATUS_POWER_STATE_INVALID で完了します。

次の条件のいずれかが当てはまる場合、汎用親ドライバーはデバイスの USB ポートをサスペンド状態にします。

  • システムが、より低い電源状態に移行している。
  • 複合デバイス上のすべてのファンクションのクライアント ドライバーが、選択的サスペンドを開始した。

USB Power Management