USB のセレクティブ サスペンドについて

みなさん、こんにちは。Windows 開発統括部の古内です。

今日は久しぶりに USB 関連のネタとして、2011 年 5 月 11 日に Microsoft Windows USB Core Team Blog に投稿された 「Demystifying USB Selective Suspend」 の翻訳をお届けします。

なお、このたび Windows ハードウェア デベロッパー センター (WHDC Web サイト) で提供しているホワイト ペーパー 「Selective Suspend in USb Drivers」 も日本語に翻訳しました。日本語のホワイト ペーパーは  「USB ドライバーでのセレクティブ サスペンド」 のページからダウンロードできます。このホワイト ペーパーは、USB ドライバーにセレクティブ サスペンドを実装する方法について具体的に説明しています、 一方、今回の英語 Blog 記事は、USB 3.0 のセレクティブ サスペンドについて触れられています。目的に応じてそれぞれご活用ください。(どちらもかなり長い資料ですが...)


USB のセレクティブ サスペンドについての解説

こんにちは。USB チームでソフトウェア開発をしている Vivek Gupta です。このブログでは、USB の セレクティブ サスペンド (英語) のメカニズムが必要かつ重要である理由と、デバイスおよびドライバーでの正しい実装方法について説明します。まず、デバイスでの実行時の電源管理の概念を説明した後、USB 固有のセレクティブ サスペンドのメカニズムを説明し、最後に USB 3.0 でのこのメカニズムの実装方法について触れます。

実行時の電源管理

セレクティブ サスペンドについて説明する前に、より一般的な概念である「実行時の電源管理」について確認しておきましょう。

システムの消費電力を節約する方法には、システム全体を「スリープ」または「休止」などの低電力状態に移行する方法があります。このメカニズムでは、システムをオフにする必要があるため、この方法が有効なのはシステム全体が使用されていないときだけです。システム全体としては使用され、稼働状態にある場合でも、特定のコンポーネントはアクティブではない可能性もあります。このようなコンポーネントの状態を「アイドル状態」と言います。実行時の電源管理とは、アイドル状態のコンポーネントを、再び使用されるときまで低電力状態に移行しておくことを指します。該当するコンポーネントとしては、プロセッサ、メモリなどのハードウェアが考えられますが、ここでは、デバイスの実行時の電源管理のみを取り上げます。

デバイスおよびデバイス ドライバーでは、このメカニズムが大幅な消費電力の節約につながるため、デバイスの実行時の電源管理に積極的に取り組む必要があります。ドライバー スタックには複数のドライバーが含まれているため、デバイスを低電力状態に移行したり、稼働状態に復帰させたりするときに、ドライバー間の調整が必要になります。Windows Driver Model (WDM) およびカーネル モード ドライバー フレームワークはいずれもこの調整のメカニズムを提供します。デバイス スタック内のドライバーの 1 つ (通常はファンクション ドライバー) が、電源ポリシー所有者 (英語) になります。この電源ポリシー所有者は、デバイスがアイドル状態であることを検出し、デバイスを低電力状態に移行するプロセスを開始します。また、電源ポリシー所有者は、ユーザーがそのデバイスを必要としたときに、デバイスを稼働状態に復帰させる処理 (デバイスのスリープ解除とも呼ばれます) も行います。

ホストによるスリープ解除とデバイスによるスリープ解除

電源ポリシー所有者であるドライバーは、デバイスを使用しようとするユーザーの意図をどう認識し、デバイスをスリープ解除しているのでしょうか。これはデバイスの種類によって異なります。たとえば、低電力状態になっている記憶域デバイスがあり、ユーザーはそのデバイスとの間でファイルを転送し合う必要があるとしましょう。ユーザーが (特定のアプリケーションを使用して) 転送プロセスを開始すると、電源ポリシー所有者はアプリケーションからの I/O 要求を取得し、デバイスをスリープ解除する必要があると認識します。しかし、デバイスがマウスの場合、デバイスはある種の信号を送信して、スリープ解除処理を開始する必要があります。デバイスによって開始される電源状態の移行を、USB の分野では「リモート スリープ解除機能」と呼びます。マウスはこのような再開信号を生成する必要があるため、電源を完全にオフにすることはできません。デバイスでこの再開信号を生成する機能は、通常、プログラム可能です。したがって、デバイスをスリープ状態にする前に、中断状態のデバイスのリモート スリープ解除機能を有効にするようにドライバーからデバイスに指示しておく必要があります。この処理は、「デバイスのリモート スリープ解除への対応」と呼ばれます。

ソフトウェアでのスリープ解除の伝達

通常、デバイス スタック内のバス ドライバー (PDO を管理するドライバー) が、デバイスからの再開信号に関する通知を受信し、その信号が到着したことをファンクション ドライバーに通知します。Windows では、この通知を取得するために、ファンクション ドライバーが wait wake IRP (IRP_MN_WAIT_WAKE、英語) をバス ドライバーに送信します。バス ドライバーは、デバイスが低電力状態である間、この IRP を保留にしておきます。バス ドライバーは、デバイスからのスリープ解除信号に関する通知を受信すると、以前に送信された wait wake IRP を完了することによってファンクション ドライバーに通知します。

親と子の電源の関係

親デバイスを管理しているデバイス スタックは、そのすべての子が低電力状態になるまで、低電力状態に移行できません。子デバイスが稼働状態である場合、通常、その親デバイスも稼働状態である必要があるためです。たとえば、USB デバイスがハブ経由で接続されている場合、転送が正常に完了するには、ハブが稼働状態である必要があります。

子デバイス スタックがすべて低電力状態になれば、親デバイス スタックも低電力状態に移行できます。このように、デバイスのツリーでは、最初にリーフ ノードが低電力状態になり、次にその親ノードが低電力状態になります (ノードがアイドル状態であると仮定した場合)。それ以降も、ツリーのルートが低電力状態になるまで同様に処理されます。前に説明したスリープ解除メカニズムも、このノードの各レベルで繰り返されます。あるデバイスが稼働状態になるには、そのデバイスとルートとの間にあるすべてのノードが稼働状態になる必要があります。

セレクティブ サスペンド

実行時の電源管理の概念が把握できたところで、USB デバイスの詳細についての説明に進みましょう。USB 2.0 デバイスは、最初に、そのデバイスが接続されているポートを中断状態にすることによって中断状態になります。そのために、デバイスがハブ経由で接続されている場合はハブに制御転送を送信し、デバイスがルート ハブに直接接続されている場合はポート レジスタを操作します。

ポートが中断されると、親コントローラーまたはハブはその USB デバイスへの SOF (Start of Frame) の送信を中止します。USB デバイスは、3 ミリ秒間 SOF を受信しないと中断状態になります。このメカニズムは「セレクティブ サスペンド」と呼ばれています。「セレクティブな」サスペンドとは、USB ツリーの一部のみを中断状態にすることを意味します。コントローラー レベルで SOF を中止し、バス全体を中断状態にする「グローバルな」サスペンドとは対照的です。

セレクティブ サスペンドでのソフトウェアとハードウェアの連携動作を理解するため、次の図のように、USB ホスト コントローラーに接続された USB マウスの例を考えてみます。

clip_image002[5]

稼働状態のデバイス

通常、USB マウスの管理には、複数のデバイス スタック (英語) が関係します。ただし、ここでは説明のために、USB ドライバー スタック上のすべてのドライバーを集合的に "マウス ドライバー" と呼ぶことにします。このデバイス スタックを単純化して図に示すと、ハブ ドライバーがデバイスのバス ドライバーになり、マウス ドライバーがファンクション ドライバーになります。マウス ドライバーは、デバイスの電源ポリシー所有者にもなります。前の図で "Power Policy Owner (電源ポリシー所有者)" というラベルの付いた矢印は、USB HID デバイスのデバイス スタックにおける電源ポリシー所有者である特定のドライバーを指しています。デバイスには割り込みエンドポイントがあり、ボタンの押下など、ユーザーが開始したさまざまなイベントに関するデータを送信するために使用されます。マウス ドライバーは、通常、マウスからこのデータを受信するために、USB コア スタックを使用して、1 つ以上の割り込み転送を保留にします。マウス ドライバーは電源ポリシー所有者であるため、ドライバーはマウスの使用状況を追跡し、マウスがアイドル状態になったことを検出します。前の図に、この設定が示されています。

低電力状態への移行

マウス ドライバーがデバイスのアイドル状態を検出した後、ドライバーはマウスを低電力状態に移行する処理を開始します。マウス ドライバーは、wait wake IRP をハブ ドライバーに送信します。ハブ ドライバーはその IRP を保留にして、格納しておきます。次に、マウス ドライバーは、デバイス スタック上のターゲット状態として D2 を指定して set-power IRP (IRP_MN_SET_POWER、英語) を要求することにより、低電力状態への移行を開始します。D2 IRP は最初にマウス ドライバーに到着し、IRP 処理の一環として、マウス ドライバーは保留中の割り込み転送を取り消します。次に、ハブ ドライバーが D2 IRP を受信します。wait wake IRP が保留になっているので、ハブ ドライバーはデバイスに制御転送を送信して、デバイスをリモート スリープ解除対応にした後、コントローラー上の特定のポート レジスタを操作してポートを中断状態にします。デバイスは低電力状態に移行し、スリープ解除イベントの検出とイベント発生時の再開信号の生成に十分な電力のみを保持します。次の図に、この処理を示します。

clip_image002[5]

注: コントローラーとマウスとの間にハブがある場合のポートの中断操作は、レジスタ操作の実行ではなく、ハブに制御転送を送信することによって実行されます。また、ハブ ドライバーおよび USB ドライバー スタック内のその他のドライバーは、協調してハードウェアと対話します。前の図では、説明を簡潔にするためにこの対話は示されていません。

リモート スリープ解除

ユーザーがマウスを小刻みに動かすと、マウスはアップストリームのケーブル上で特定の再開信号を生成します。この再開信号を受信したコントローラーは、その信号をダウンストリームのマウスにも伝達します。次に、コントローラーは、割り込み転送を完了することによってポートが再開されたことを USB ドライバー スタックに通知します。USB ドライバー スタックは、マウス ドライバーが以前に送信した wait wake IRP を完了することによって、マウスが稼働状態になったことをマウス ドライバーに通知します。次に、マウス ドライバーは、D0 電力状態を要求する set-power IRP (D0 IRP) をデバイス スタックに送信して、マウスを稼働状態にします。D0 IRP は最初にハブ ドライバーによって処理されます。ポートは既に再開されているので、ハブ ドライバーは処理を行うことなく IRP を完了します。完了すると、D0 IRP がマウス ドライバーに到達します。完了ルーチンで、マウス ドライバーは割り込み転送を送信して、マウスのアクティビティを取得し、通常の機能を再開することができます。次の図に、この処理を示します。clip_image006[4]

マウスの再開信号を送信する機能は、マウスが中断状態になっているときにのみアクティブ化されます。マウスが中断状態にない場合、マウス ドライバーは 1 つ以上の保留中の割り込み転送を送信してユーザー イベントを識別します。したがって、ソフトウェアは、常に妥当な時間の範囲内でマウスでのユーザー イベントに応答できます。

前のシナリオでマウス ドライバーによって実装される機能を見れば、セレクティブ サスペンドを実装するために Windows が提供している D-IRP および wait wake IRP によって構成された一般的なメカニズムを、その機能が使用していることがわかります。このメカニズムを使用できない特定の USB クライアント ドライバーでは、I/O 制御要求 IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION (英語) の送信を必要とする、より複雑な方法を実装する必要があります。その理由を次に説明します。

マルチファンクション デバイスでのセレクティブ サスペンドの実装

USB の仕様により、同時にアクティブになる複数の機能をUSB デバイスで実装することができます。このようなマルチファンクション デバイスは、「複合 (コンポジット) デバイス」とも呼ばれます。たとえば、複合デバイスに、キーボード用の機能とマウス用の別の機能を含めることができます。マイクロソフトが提供する USBCCGP ドライバーは、通常、複合デバイスのファンクション ドライバーとして読み込まれ、サポートされる各機能の PDO を列挙します。これらの個々の PDO は、マウス ドライバーのような個別の USB ファンクション ドライバーによって管理されます。次の図に、この例のデバイス スタックを示します。clip_image008[4]

複合デバイスの D-IRP メカニズムに関する問題

前の例で、複合デバイスの個々の機能を管理するファンクション ドライバーが、D-IRP メカニズムを使用して実行時の電源管理をしようとした場合、どのようになるでしょうか。これらの各ファンクション ドライバーは、それぞれの割り込みエンドポイントで割り込み転送を保留します。各機能はそれぞれ独立してアイドル状態になることができます。たとえば、キーボードは使用されたままで、マウス機能がアイドル状態になるというシナリオを考えてみます。マウスのマウス ドライバーは wait wake IRP を送信し、割り込み転送を取り消して、D2 IRP を送信します。キーボードは稼働状態のままであり、USBCCGP スタックは低電力状態に移行できません。USB 2.0 では、デバイスのいずれかの部分が低電力状態に移行するには、デバイス全体がセレクティブ サスペンドの状態になる必要があります。デバイスは中断状態ではないので、再開信号を送信する機能を有効にできません。したがって、マウスでユーザー イベントが発生しても、マウスには保留中の割り込み転送がないので、マウスはマウス ドライバーに通知する手段がありません。つまり、マウスはキーボードもアイドル状態になるまでは使用することができず、それがいつになるのかもわからないのです。

アイドル IRP メカニズム

前のシナリオから、複合デバイスが中断状態に移行できるのは、すべての機能がアイドル状態のときだけであるということがわかります。さらに、各ファンクション ドライバーが低電力状態への移行を開始できるのは、他のすべての機能がアイドル状態であることをその機能が認識している場合だけです。これを実現するために、Windows では「アイドル IRP メカニズム」と呼ばれる 2 段階の処理を定義しています。

1. ファンクション ドライバーは、I/O 制御要求 IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION (英語) を送信することによって、ドライバーが低電力状態に移行しようとしていることを、USB ドライバー スタックに通知します。

2. すべての機能がアイドル状態に移行する準備ができると、USB ドライバー スタックは、ファクション ドライバーによって実装されているアイドル コールバック ルーチンを呼び出し、ファンクション ドライバーに通知します。このような状態になったときにのみ、ファクション ドライバーは低電力状態に移行できます。

複合デバイスの場合、USBCCGP は、複数のファンクション ドライバーを調整し、そのコールバックを呼び出すタスクを実装しています。Windows USB ドライバー スタックは、ファンクション ドライバーが、マルチファンクション デバイスのいずれかの機能の上に読み込まれている場合と、単機能 (非複合) デバイスを管理している場合とを区別する必要がないように設計されています。この目標を達成するために、非複合デバイスの場合、ハブ ドライバーは存在しない USBCCGP の代わりにアイドル コールバックを呼び出します。

D-IRP メカニズムが十分に適切である場合

ファンクション ドライバーは、アイドル IRP メカニズムを実装する必要はなく、次のような場合には D IRP メカニズムを使用できます。

  • ファンクション ドライバーが再開信号の通知に依存しない場合、他のファンクションがアイドル状態であるかどうか認識する必要はありません。その場合、デバイスが最終的にセレクティブ サスペンドに移行しなくても問題ありません。
  • ファクション ドライバーが単機能デバイスを制御する場合。

前述のシナリオでは D-IRP メカニズムで用が足りることもあると述べましたが、ドライバーを Windows Vista よりも前のバージョンの Windows オペレーティング システムで実行する場合は、ドライバーでアイドル IRP メカニズムを実装することが必要になる可能性があります。アイドル IRP メカニズムが必要になる、OS のバージョンとデバイスの種類の組み合わせについては、「USB のセレクティブ サスペンド (英語)」を参照してください。

ファンクション ドライバーの中には、非複合デバイスと複合デバイスの両方で動作するように作成されたものがあり、このようなドライバーでは最終的にアイドル IRP メカニズムを実装し、単機能デバイスと多機能デバイスのいずれで動作しているかに関係なくアイドル IRP メカニズムを使用することになります。

セレクティブ サスペンドの重要性

セレクティブ サスペンド機能によって、消費電力は大幅に節約されます。したがって、USB デバイスとそのファクション ドライバーでこの機能を実装することは不可欠です。セレクティブ サスペンド機能を実装していない USB デバイスは、システムの他のコンポーネントが低電力状態に移行するときに妨げとなる可能性があります。たとえば、ハブ経由で接続されているデバイスは、ハブおよびホスト コントローラーの低電力状態への移行を妨げます。このため、プロセッサなどの他のシステム コンポーネントも低電力状態に移行できなくなります。したがって、デバイスがこの機能を適切に実装していない場合、システムの構成によっては、重大なシステムの電力浪費を引き起こす可能性があります。これは USB 2.0 デバイスで特に重要です。USB 2.0 プロトコルでは対話が非常に多いからです。たとえば、保留中の割り込み転送では、ホスト コントローラーとデバイスの間で定期的なポーリングが必要です。デバイスに割り込みエンドポイントがない場合でも、割り込みエンドポイントを持つ (デバイスとコントローラーの間の) ハブによってコントローラー内の定期的なスケジューラーはアクティブ状態に保たれます。

ファンクション ドライバーでのセレクティブ サスペンドの正しい実装

WDM ファンクション ドライバーに電源管理を正しく実装するのは容易な作業ではありません。また、アイドル IRP メカニズムの実装によって、作業はより複雑になります。ここではこれらの実装の詳細については説明しませんが、WDF によって電源管理の実装が大幅に簡素化され、アイドル IRP メカニズムの実装も容易になることは覚えておいてください。ドライバーにセレクティブ サスペンドのサポートを追加しようと計画している場合、WDF を使用することを強くお勧めします。KMDF での実行時の電源管理については、「アイドル時の低電力化機能のサポート」を参照してください。セレクティブ サスペンドを実装する場合は、実行時の電源管理メソッド「WdfDeviceAssignS0IdleSettings メソッド」で適切なオプションを選択してください。UMDF ドライバーの場合は、「UMDF での電源ポリシーの所有権」を参照してください。こちらのブログの記事 (英語) では、ファンクション ドライバーで WinUSB (英語) が使用されている場合のセレクティブ サスペンドの実装方法の概要が示されています。

まれなシナリオですが、WDF でドライバーを作成しない正当な理由が存在する場合は、MSDN のドキュメント (英語)、「USB ドライバーでのセレクティブ サスペンド」、および「アイドル状態の検出によってシステムの電源効率を上げる」を参照してください。

デバイスでのセレクティブ サスペンドの正しい実装

セレクティブ サスペンドはユーザー アクティビティが行われていないときでも発生するので、セレクティブ サスペンドへの移行またはセレクティブ サスペンドからの移行が、ユーザーにまったく意識されないようにすることが非常に重要です。そうでないと、エンドユーザー エクスペリエンスの一貫性が失われる原因となる可能性があります。

たとえば、中断状態でバスを停止するような方法でデバイスが実装されている場合、ユーザーが予期していない遅延が発生したり、PnP によるデバイスの再列挙のためにシステム サウンドが再生されたりする可能性があります。ハードウェア ベンダーは、デバイスおよびハブにセレクティブ サスペンドを実装し、幅広くテストする必要があります。

セレクティブ サスペンド状態のデバイスは、通常の状態で応答するユーザー アクションが発生したときに、再開信号を送信できる必要があります。たとえば、マウスがセレクティブ サスペンド状態になる場合は、ユーザーがマウスのボタンをクリックしたときだけでなく、ユーザーがマウスを動かしたときにも再開信号を送信できる必要があります。任意のイベントの発生時にスリープを解除するという要件は、システム中断には適用されないことに注意してください。システム中断の場合は、特殊なイベントの発生時にのみデバイスのスリープを解除する方が合理的である可能性があります。

また、デバイスには、再開を開始したユーザー アクションに関連付けられたデータをキャッシュするのに十分なバッファーも必要です。再開時に、デバイス ドライバーはデバイスとの対話を開始でき、デバイスはドライバーにデータを返すことができます。このため、ユーザーはキーボードのキーを押すなどのアクションを繰り返す必要がありません。

USB 3.0 でのセレクティブ サスペンド

次に、USB3.0 がセレクティブ サスペンドにどのように影響するかを見てみましょう。USB 3.0 では、U1 から U3 までの異なるリンク状態での「リンクの電源管理 (LPM)」を定義しています。リンク状態は、数字が大きくなるほど、節電効果は高くなり、終了時の待ち時間も長くなります。U1 および U2 のリンク状態では、ソフトウェアが初期設定を実行した後、その状態の開始と終了はハードウェア レベルで行われ、それ以上のソフトウェアの介入はありません。USB ドライバー スタックは、ファンクション ドライバーの介入なしに、この設定を処理します。

U3 リンク状態とセレクティブ サスペンド

USB 3.0 ポートのリンク状態が U3 になると、接続されたデバイスはセレクティブ サスペンド状態になります。このメカニズムを詳細に検討し、特にドライバーの観点から、USB 2.0 のセレクティブ サスペンド状態と比較してみましょう。USB 2.0 とは異なり、ハブが送信を中止する SOF はありません。その代わりに、ドライバーが制御転送をハブに送信することによって特定のリンクを U3 にすると、そのリンクに接続されたダウンストリーム デバイスは直接中断状態になります。USB 2.0 と同様に、デバイスはコントロール エンドポイントではなく、デバイスのインターフェイスに制御転送を直接送信することによって、リモート スリープ解除に対応できるようになります (詳細は後で説明します)。中断状態のデバイスがリモート スリープ解除に対応している場合、このデバイスはユーザーの指示によるイベントを検出すると、再開信号 (U3 スリープ解除信号) を送信します。ハブは同じ信号を使用してデバイスに応答します。ただし、USB 2.0 とは異なり、ハブは、ポートのステータス変更割り込みイベントを再開イベントとして送信しません。代わりに、ホストに再開イベントを通知する FUNCTION_WAKE デバイス通知を送信します。

機能の中断

USB 3.0 の仕様では、「機能の中断」機能も定義されています。これはファンクション ドライバーの観点からするとセレクティブ サスペンドに関連しています。USB 3.0 複合デバイスでは、ある機能をデバイス内の他の機能とは独立して稼働状態またはアイドル状態にすることができます。したがって、ファンクション ドライバーが低電力状態への移行を要求したときには、対応する機能は中断状態になる必要があります。すべての機能が中断状態になっている場合は、アップストリーム リンクを U3 にすることによって、デバイスを中断状態に移行することができます。個々の機能を中断できるだけでなく、個々にリモート スリープ解除に対応させることもできます。このため、他の機能が中断状態ではない場合でも、ある機能を中断およびスリープ解除することができます。これにより、前に説明したアイドル IRP メカニズムは、USB 3.0 複合デバイスでは必要ありません。機能がスリープ解除されると、その機能はスリープ解除通知パケットを送信し、スリープ解除されたデバイスおよび個々の機能をホストに通知します。USB ドライバー スタックでは、この情報を使用して、スリープ解除された機能の wait wake IRP を完了することができ、中断状態の他の機能をスリープ解除する必要がありません。

ある機能は、その機能の最初のインターフェイスに制御転送を送信することによって、リモート スリープ解除および中断に対応します。非複合デバイスは複合デバイスの特殊なケースとみなされます。非複合デバイスをスリープ解除に対応させるには、ファンクション ドライバーが、選択された構成の最初のインターフェイスに制御転送を送信する必要があります。デバイスのリモート スリープ解除への対応は適用されないことに注意してください。この設計から導かれる結果の 1 つとして、デバイスが非複合デバイスか複合デバイスかによって、USB ドライバー スタック内の異なるドライバーでデバイスのリモート スリープ解除への対応を処理できます。複合デバイスが USBCCGP ではなくカスタマイズされたドライバーを使用している場合、カスタム ドライバーは、そのドライバーがリモート スリープ解除への対応を処理することを USB ドライバー スタックに通知する必要があります。

USB 3.0 のファンクション ドライバーの変更点

USB 3.0 デバイスをサポートする USB ドライバー スタックは、3.0 デバイスで動作するようにするために、ファンクション ドライバーを変更する必要がほとんどないような方法で設計するのが理想的です。このことは電源管理についても当てはまり、USB 2.0 と 3.0 の相違点は USB ドライバー スタックで吸収する必要があります。USB 2.0 デバイス用に作成された既存のファンクション ドライバーは、クラス プロトコルが変更されていないことを条件として、USB 3.0 デバイスについてもそのままで動作する必要があります。既に説明したように、USB 3.0 デバイスでは電源管理のために機能間の調整を必要としないので、機能を管理するファンクション ドライバーでアイドル IRP メカニズムを実装する必要はありません。もちろん、多くのファンクション ドライバーは一般的に USB 2.0 と 3.0 の両方のデバイスで動作するように作成されると考えられるので、最終的にはアイドル IRP メカニズムを実装することになります。これは、1 つには、ホストで SuperSpeed がサポートされていない場合、USB 3.0 デバイスは 2.1 デバイスとして動作することが求められているからです。

このブログでは、セレクティブ サスペンドを中心に説明しました。LPM の U1 および U2 状態についても簡単に述べましたが、詳しくは説明していません。LPM は消費電力を節約するための強力なメカニズムですが、新しい課題もいくつかあります。これについては、次のブログの投稿で説明することにします。