次の方法で共有


U1 と U2 の遷移

このトピックでは、まず、U1 と U2 の切り替えを有効にするためにソフトウェアによって行われる初期セットアップについて説明した後、これらの遷移がハードウェアでどのように発生するかを説明します。

ソフトウェアによる初期セットアップ

このトピックでは、ソフトウェアがデバイスを列挙する方法について説明します。

U1 または U2 の遷移が発生した場合、ソフトウェアはデバイスの列挙中に以下の手順を実行します。

  1. ソフトウェアは、列挙プロセス時に U1 または U2 終了待機時間情報をデバイスと交換します。 この交換の最初の部分として、デバイス固有の待機時間は、SuperSpeed USB デバイス機能の bU1DevExitLat フィールドと wU2DevExitLat フィールド (USB 3.0 仕様のセクション 9.6.2.2 で定義されています) でデバイスによって入力されます。 交換の 2 番目の部分として、ホストは、USB 3.0 仕様のセクション 9.4.12 に従って、SET_SEL コントロール転送を送信することによって、デバイスの全体的な終了待機時間についてデバイスに通知します。 待機時間情報には、アップストリーム リンクとコントローラーに関連付けられている待機時間が含まれています。

  2. デバイスが接続されている DS ポートの場合、ソフトウェアは PORT_U1_TIMEOUT と PORT_U2_TIMEOUT の 2 つの値を構成します。 これらの値を決定する際、ソフトウェアはデバイスの特性 (エンドポイントの種類など) と、デバイスを U1 または U2 から U0 に戻す際の待機時間を考慮に入れます。 タイムアウト値を次の表に示します。

    表 1 PORT_U1_TIMEOUT および PORT_U2_TIMEOUT 値

    説明
    01H-FEH DS ポートは、非アクティブな期間が経過した後に遷移を開始する必要があります。 正確な期間は、タイムアウト値から派生します。 ポートは、保留中のトラフィックがない限り、リンク パートナーによって開始された遷移を受け入れる必要があります。
    FFH DS ポートは遷移を開始してはなりませんが、保留中のトラフィックがない限り、リンク パートナーによって開始される遷移を受け入れる必要があります。
    0 DS ポートは、移行を開始してはなりません。さらに、リンク パートナーによって開始された遷移を受け入れてはなりません。
  3. PORT_U2_TIMEOUT 値が 01H-FEH の間にある場合、手順 2 の結果としてハードウェアで追加の手順が発生します。 DS ポートは、その値についてリンク パートナーに通知します。 この手順の重要性については、「U1 から U2 への直接移行」で説明されています。

  4. デバイスまたはハブごとに、ソフトウェアは、SET_FEATURE (U1_ENABLE/U2_ENABLE) コントロール転送を送信することによって U1_ENABLE と U2_ENABLE の 2 つの値を構成します。 次の表では、それらの値を説明します。

    表 2 U1_ENABLE および U2_ENABLE 値

    説明
    [有効] US ポートは、移行を開始し、リンク パートナーによって開始された遷移を受け入れることができます (デバイス ポリシーで許可されている場合)。
    無効 US ポートは移行を開始してはなりませんが、リンク パートナーによって開始された移行を受け入れることもできます。

ハードウェアの移行

このトピックでは、U1 と U2 へのハードウェアの移行について説明します。

ソフトウェアによる初期セットアップの後、ハードウェアは、ソフトウェアからさらに介入することなく、U1 と U2 に自律的に移行します。

アクティブにパケットを転送している限り、リンクは動作状態 (U0) です。 パケットが送信されていない場合、リンクはアイドル状態と見なされます。 アイドル状態の場合、リンク パートナーは U1 または U2 への移行を開始できます。 もう 1 つのリンク パートナーは、移行の承認または拒否を選択できます。 リンク パートナーが移行を受け入れた場合、リンクはその U 状態に移行します。 遷移が拒否された場合、リンクは U0 のままになります。

DS ポートによって開始された遷移

DS ポートには、ポートの非アクティブ状態を追跡するタイマー メカニズムが実装されます。 タイマーは、そのポートがパケットを送受信するたびにリセットされます。 さらに、ソフトウェアが新しいタイムアウト値をプログラミングすると、タイマーもリセットされます。 ソフトウェアが U1 または U2 の遷移のみを開始するよう DS ポートをプログラミングした場合、リンクが最初に U0 になったときに DS ポートがタイマーを開始します。 タイマー値は、ソフトウェアによってプログラミングされた U1 (または U2) タイムアウト値に基づいています。 タイマーの有効期限が切れたときにリンクが U0 にある場合、DS ポートは U1 (または U2) 遷移を開始します。

US ポート リンク パートナーは、移行がパフォーマンスまたは待機時間の要件を満たすデバイスの機能に影響を与える可能性があることをデバイスが認識している場合、移行の拒否を選択できます。 たとえば、デバイスが ERDY 通知を送信し、ホストからの転送要求を想定している場合、デバイスはそれまでの間に U1 または U2 状態遷移を拒否する可能性があります。

ソフトウェアが U1 と U2 の両方の遷移を開始するよう DS ポートをプログラムしている場合、DS ポートはまずタイマーに基づいて U1 遷移を開始します (このセクションで前述)。 U1 から U2 への移行については、「U1 から U2 への直接移行」のこのトピックで説明します。

リンクが U1 または U2 にある場合、DS ポートは、ポートに接続されているデバイスのトラフィックを受信するたびに、ポートを U0 に戻すことができます。

デバイス (US ポート) によって開始された遷移

デバイスは、ソフトウェアによって機能が有効になっている限り、U0 から U1 または U0 から U2 への移行を開始することを選択できます。 デバイスが U1 へのリンクを切り替える場合、リンクは DS ポートの U2 タイマーに基づいて直接 U2 に移行できます (「U1 から U2 への直接移行」で説明されています)。 ただし、U2 タイマーが設定されていない場合、デバイスは U1 から U2 への直接移行を単独では開始できません。 その場合、U2 への移行を開始する前に、デバイスがリンクを U0 に戻す必要があります。

これらの遷移を開始するタイミングを決定する際、デバイスは終了待機時間とパフォーマンス要件を考慮する必要があります。 このドキュメントの「ソフトウェアによる初期設定」で前述したように、デバイスが移行をどの程度積極的に開始できるかに関して、情報に基づいた意思決定を行えるようにするため、ソフトウェアにはさまざまな終了待機時間値が用意されています。

リンクが U1 または U2 にある場合、US ポートはいつでも U0 に戻すことができます。 通常、US ポートは、パケットをホストに送信しようとしていることを認識している場合、またはホストからのパケットを予測している場合、U0 への移行を開始します。

デバイスによって開始された LPM の利点

DS ポートのソフトウェアによって設定されるタイマー値は、一般的なヒューリスティックに基づいています。 これらのタイマー値を選択すると、デバイスのパフォーマンス低下がソフトウェアにより防止されます。 デバイスのパフォーマンスを維持するため、ソフトウェアは小さすぎる値を選択できません。 DS ポート開始遷移はタイマーに基づいており、デバイスの正確な状態を考慮しないため、このメカニズムでは、デバイスを U1 または U2 状態に送信する可能性のあるすべての機会を利用できるわけではありません。

一方、デバイスは、その特性と現在の状態を正確に把握しています。 したがって、次の転送がいつ行われるかについてインテリジェントな推測を行うことができます。 その情報に基づいて、デバイスは、パフォーマンスに大きな影響を与えることなく、これらの移行をアクティブに開始することを選択できます (かつ選択すべきです)。

たとえば、デバイスはエンドポイントの 1 つに NRDY 通知を送信しており、しばらくの間トラフィックがないことを認識しているとします。 その場合、デバイスはすぐに U1 または U2 への移行を開始できます。 ERDY 通知を送信する直前に、デバイスはそのデータを送信する準備として、リンクを U0 に戻すことができます。 このプロセスについて詳しくは、USB 3.0 仕様のセクション C.3.1 をご覧ください。

U1 から U2 への直接移行

リンクが U1 にある場合、その間に U0 を入力しなくても、リンクを U2 に直接切り替えることができます。 これは、U1 への移行を開始したリンク パートナーに関係なく発生する可能性があります。 ただし、U1 から U2 への移行は、リンクの DS ポートの U2 タイムアウトが 01H-FEH の値に設定されている場合のみ発生します。

「ソフトウェアによる初期セットアップ」セクションでは、DS ポートがタイムアウト値をリンク パートナーに通信できるようにする追加の手順について説明します。 リンクが U1 に入った後、両方のリンク パートナーは DS ポートの U2 タイムアウト値に従って設定されたタイムアウト値を使用してタイマーを開始します。 トラフィックが原因でタイマーがリセットされず、有効期限が切れた場合、どちらのリンク パートナーも、明示的な通信を行うことなく、自動的に U2 に移行します。

U1 または U2 から U3 への移行

U1 または U2 への移行はハードウェアで自律的に開始されますが、U3 への移行はソフトウェアによって開始されます。 U3 移行は非アクティブな期間の後のみ開始されるため、移行前にリンクが U1 または U2 (U0 ではなく) にあった可能性が非常に高くなります。

USB 3.0 仕様では、U1 または U2 から U3 への直接移行は定義されていません。 親ハブまたはコントローラーは、リンクを U0 に自動的に切り替えてから U3 に切り替える役割を担います。

ハブの U1 または U2 移行

USB 3.0 仕様では、US ポートで U 状態移行を開始するタイミングに関する特定のガイドラインがハブに提供されます。 すべての DS ポートがリンク状態 U1 またはそれ以下の場合、ソフトウェアによってハブが U1 移行を開始できるようになったと仮定すると、ハブは US ポートで U1 移行を開始する必要があります。

同様に、すべての DS ポートがリンク状態 U2 またはそれ以下の場合、ソフトウェアによってハブが U2 移行を開始できるようになったと仮定すると、ハブは US ポートで U2 移行を開始する必要があります。

Note

DS ポートに接続されているデバイスがない場合、ポートの状態は Rx.Detect で、U2 より低くなります。 そのため、デバイスが接続されていない場合、ハブは US ポートを U2 に送信する必要があります。 また、すべての DS ポートが最初は U1 以下であり、U2 以下に移行した場合、ハブは US ポートを U1 から U2 に移行する必要があります。 この移行は U2 アクティビティ タイマーに基づいていないため、ハブは US ポートを U0 に持ち込み、U2 に送信する必要があります。

パケット遅延

USB 3.0 仕様では、パケット遅延と呼ばれるメカニズムについて説明します (C.1.2.2 のセクションを参照)。 このメカニズムは、LPM がバス使用率に与える影響を最小限に抑えるために使用されます。

アップストリーム リンクが U1 または U2 にあるデバイスにホストが転送要求を送信した場合、ホストは、リンクが U0 に戻るのを待ってからデバイスの応答を待機することにより、バス帯域幅を無駄にする可能性があります。 この待機を回避するため、親ハブは、遅延パケット ヘッダーをホストに送信してデバイスに代わって応答します。 ホストは、NRDY と同様の方法で遅延パケット ヘッダーを処理し、他のエンドポイントとの転送を自由に開始できます。 同時に、ハブはリンクの U0 移行を開始し、遅延パケットについてデバイスに通知します。 その後、デバイスは ERDY をホストに送信し、デバイスが転送の準備ができていることを示します。 その後、ホストはデバイスへの転送のスケジュールを変更できます。

デバイスの重要な役割は、ERDY を送信した後、ホストが ERDY に応答を送信するまで、または tERDYTimeout (500 ミリ秒) の時間が経過するまで、デバイスが U0 でリンクを保持する必要があるという点です。 その間、デバイスは U1 または U2 移行を開始しないでください。さらに、リンク パートナーによって開始された移行も拒否する必要があります。