eXtensible Host Controller Interface ( xHCI ) は、ユニバーサル シリアル バス(USB)用のコンピューターのホスト コントローラーの機能に関する詳細なフレームワークを提供する技術仕様です。USB 3.0ホスト コントローラー仕様とも呼ばれる xHCI は、下位互換性を持つように設計されており、古い USB 1.x から最新の USB 3.x バージョンまで、幅広い USB デバイスをサポートします。
先行技術であるOpen Host Controller Interface (OHCI) やUniversal Host Controller Interface (UHCI) とは異なり、xHCI にはいくつかの技術的な改善点があります。具体的には、単一の統合規格内で複数のデータ転送速度 (低速、全速、高速、SuperSpeed) を処理できるように設計されています。これにより、計算リソースと電力リソースの管理がより効率的になります。この機能は、タブレットやスマートフォンなど、電力能力が限られているモバイル デバイスに特に役立ちます。さらに、xHCI は、低速デバイスと高速デバイスの組み合わせをサポートするために必要なアーキテクチャを簡素化し、ドライバーとシステム ソフトウェアの開発を効率化します。
xHCI は、いくつかの重要な点で、その前身である Open Host Controller Interface (OHCI) および Universal Host Controller Interface (UHCI) に比べて大幅に改善されています。
- マルチスピード サポート: 特定の USB 速度に制限されていた OHCI や UHCI とは異なり、xHCI は、低速、フル、高速、SuperSpeed など、複数のデータ転送速度を単一の標準で管理できます。これにより、さまざまな種類の USB デバイスを扱う際に複数のホスト コントローラーや複雑な切り替えメカニズムが不要になり、効率が向上します。
- 電源管理: xHCI には、USB デバイスの選択的な一時停止とよりきめ細かな電力配分を可能にする高度な電源管理機能が含まれています。これは、電力利用を最大化し、バッテリー寿命を延ばすのに役立つため、タブレットやスマートフォンなど、バッテリー寿命が限られているモバイル デバイスに特に役立ちます。
- 合理化されたアーキテクチャ: xHCI のアーキテクチャは、よりシンプルでわかりやすくなるように設計されており、ドライバー開発の複雑さを軽減します。OHCI や UHCI などの古いアーキテクチャでは、低速デバイスと高速デバイスの混合をサポートするには、複雑なアルゴリズムと複数のトランザクション トランスレータが必要でした。xHCI は、これらの機能をホスト コントローラ自体に統合することでこれを簡素化し、システム ソフトウェアとドライバー開発者の負担を軽減します。
複数の速度のサポートを強化し、電源管理を最適化し、基盤となるアーキテクチャを簡素化することで、xHCI は USB ホスト コントローラーのより効率的で統一された標準として機能します。
アーキテクチャの目標
xHCI は、多くの点で、以前の世代の USB ホスト コントローラ インターフェイス アーキテクチャ (つまり、Open Host Controller Interface (OHCI)、Universal Host Controller Interface (UHCI)、およびEnhanced Host Controller Interface (EHCI)) とは根本的に異なります。xHCI アーキテクチャの主な目標は次のとおりです。
- 効率的な操作 - 従来の USB ホスト コントローラー アーキテクチャよりもアイドル電力とパフォーマンスが優れています。
- 既存のUSBソフトウェアモデルと完全に一致するデバイスレベルのプログラミングモデル
- ソフトウェアに提示されるホストコントローラインターフェースを基盤となるUSBプロトコルから分離する
- ホストメモリへのアクセスを最小限に抑え、USBデバイスがアイドル状態のときは完全に排除します。
- 通常のデータ転送ではレジスタ書き込みを排除し、レジスタ読み取りを最小限に抑えます。
- 「コンパニオン コントローラー」モデルを排除する
- システムリソースが制限されている状況でハードウェアの「フェイルオーバー」モードを有効にすると、デバイスは引き続きアクセス可能になりますが、電力/パフォーマンスの点では最適ではない可能性があります。
- さまざまな市場向けにハードウェア機能を差別化する機能を提供します。たとえば、特定の市場向けのターゲットホストコントローラの電力、パフォーマンス、コストのトレードオフなどです。
- 新たなUSBホストコントローラインターフェイスの定義を必要とせずに、より高帯域幅のインターフェイス、光伝送媒体などの新しいUSB仕様や技術への容易なパスを提供する拡張可能なアーキテクチャを定義します。
建築の詳細
すべての速度をサポート
OHCI および UHCI コントローラは USB 1 速度デバイス (1.5 Mbit/s および 12 Mbit/s) のみをサポートし、EHCI は USB 2 デバイス (480 Mbit/s) のみをサポートします。
xHCI アーキテクチャは、SuperSpeed (5 Gbit/s) や将来の速度を含むすべての USB 速度を単一のドライバー スタックでサポートするように設計されています。
電力効率
USB が最初に開発されたのは 1995 年で、当時は PC に登場しつつあったPS/2、シリアル ポート、パラレル ポート、ゲーム ポートなどのコネクタの急増を食い止めるためにデスクトップ プラットフォームを対象としており、ホストの電力消費は当時は重要な考慮事項ではありませんでした。その後、モバイル プラットフォームがプラットフォームとして選ばれるようになり、そのバッテリーによって電力消費が重要な考慮事項になりました。従来の USB ホスト コントローラ (OHCI、UHCI、EHCI) のアーキテクチャは、USB で実行されるトランザクションの「スケジュール」がホスト メモリ内のソフトウェアによって構築され、ホスト コントローラのハードウェアがスケジュールを継続的に読み取り、データが移動されない場合でも、USB で実行する必要があるトランザクションとそのタイミングを決定するという点で非常に似ていました。さらに、デバイスからの読み取りの場合、読み取るデータがない場合でも、デバイスはスケジュール間隔ごとにポーリングされました。
- xHCI は、ホスト メモリ ベースの USB トランザクション スケジュールを排除し、USB データの移動がないときにホスト メモリのアクティビティをゼロにします。
- xHCI は、USB 3.0 以降のデバイスが読み取り可能なデータがある場合にホスト コントローラに通知できるようにすることで、定期的なデバイス ポーリングの必要性を減らし、割り込みトランザクションを使用する USB 2.0 および 1.1 デバイスのポーリングの管理を CPU 駆動の USB ドライバから USB ホスト コントローラに移行します。EHCI、OHCI、および UHCI ホスト コントローラは、変更の必要がない場合、および送信する割り込みがデバイスにない場合、CPU のポーリングを自動的に処理しますが、コントローラのスケジュールの設定はすべて CPU に依存しています。[1] [2] [3]割り込みトランザクションを使用する USB デバイスに送信するデータがある場合、xHCI ホスト コントローラは割り込みを送信して、処理が必要な USB 割り込みトランザクションがあることを CPU に通知します。CPU は USB バスのポーリングを管理する必要がなくなるため、低電力状態でより多くの時間を費やすことができます。
- xHCI では、実装で USB 2 LPM、USB 3 U1 および U2 状態、HERD、LTM、Function Wake などのすべての高度な USB 2 および 3 電源管理機能のサポートを提供する必要はありませんが、xHCI のすべての利点を実現するにはこれらの機能が必要です。
仮想化サポート
従来の USB ホスト コントローラ アーキテクチャは、仮想化環境に適用すると、いくつかの重大な欠点を示します。従来の USB ホスト コントローラ インターフェイスは、比較的単純なハードウェア データ ポンプを定義します。この場合、全体的なバス管理 (帯域幅の割り当て、アドレスの割り当てなど) に関連する重要な状態は、ホスト コントローラ ドライバー(HCD) のソフトウェアに存在します。従来の USB ホスト コントローラ インターフェイスに、標準的なハードウェア IO 仮想化手法 (I/O インターフェイス レジスタの複製) を適用しようとすると、仮想マシン(VM) 間で管理する必要がある重要な状態がハードウェアで利用できないため、問題が発生します。xHCI アーキテクチャは、この重要な状態の制御をハードウェアに移動し、VM 間での USB リソース管理を可能にします。xHCI 仮想化機能では、次の機能も提供されます。
- 個々のUSBデバイス(バストポロジ内の位置に関係なく)を任意のVMに直接割り当てる
- 実行時のVM間通信を最小限に抑える
- ネイティブUSBデバイス共有のサポート
- PCIe SR-IOV(シングルルートI/O仮想化)のサポート
簡素化されたドライバーアーキテクチャ
EHCI は、OHCI または UHCI コントローラーを「コンパニオン コントローラー」として使用します。USB 2 デバイスは EHCI スタックを通じて管理され、EHCI のポート ロジックにより、低速またはフルスピード USB デバイスを「コンパニオン」UHCI または OHCI コントローラーのポートにルーティングできます。低速またはフルスピード USB デバイスは、それぞれの UHCI または OHCI スタックを通じて管理されます。たとえば、4 つの USB「標準 A」コネクターを備えた USB 2 PCIe ホスト コントローラー カードは、通常、システム ソフトウェアに 1 つの 4 ポート EHCI コントローラーと 2 つの 2 ポート OHCI コントローラーを提供します。高速 USB デバイスが 4 つのコネクターのいずれかに接続されると、デバイスは EHCI コントローラーの 4 つのルート ハブ ポートのいずれかを通じて管理されます。低速またはフルスピード USB デバイスがコネクタ 1 または 2 に接続されている場合、そのデバイスは管理のために OHCI コントローラの 1 つのルート ハブ ポートにルーティングされ、コネクタ 3 または 4 に接続されている低速およびフルスピード USB デバイスは、他の OHCI コントローラのルート ハブ ポートにルーティングされます。高速 USB デバイスと低速およびフルスピード USB デバイスのグループ用の個別のホスト コントローラへの EHCI の依存により、EHCI と OHCI/UHCI ドライバ間の複雑な相互作用と依存関係が生じます。
- xHCI アーキテクチャにより、コンパニオン コントローラーと個別のドライバー スタックが不要になります。
- 以前はドライバーによって実行されていたスケジュール、帯域幅管理、および USB デバイス アドレス割り当て機能を xHCI ハードウェアに組み込むことで、xHCI 用のよりシンプルで軽量、低レイテンシのソフトウェア スタックが可能になります。
ストリームサポート
ストリームのサポートは、主に USB 経由の高性能ストレージ操作を可能にするために、USB 3.0 SuperSpeed 仕様に追加されました。従来、USB エンドポイントとシステム メモリ内のバッファーは 1:1 の関係にあり、ホスト コントローラーはすべてのデータ転送を単独で管理していました。ストリームは、1 対多の「エンドポイントとバッファー」の関連付けを提供し、デバイスがホスト コントローラーにどのバッファーを移動するかを指示できるようにすることで、このパラダイムを変更しました。USB ストリーム エンドポイントに関連付けられた USB データ転送は、他のバルク エンドポイントと同じように xHCI によってスケジュールされますが、転送に関連付けられたデータ バッファーはデバイスによって決定されます。
- xHCI USB ストリーム サポートにより、最大 64K のバッファーを単一のエンドポイントに関連付けることができます。
- xHCI ストリーム プロトコルのサポートにより、エンドポイントがスケジュールされたときに xHCI が転送するバッファーを USB デバイスが選択できるようになります。
スケーラビリティ
xHCI アーキテクチャは、1 ~ 255 個の USB デバイスと 1 ~ 255 個のルート ハブ ポートをサポートできる、非常にスケーラブルな設計になっています。各 USB デバイスは最大 31 個のエンドポイントを定義できるため、255 個のデバイスをサポートする xHCI は合計 7,906 個の個別のエンドポイントをサポートする必要があります。従来、エンドポイントに関連付けられた各メモリ バッファーは物理メモリ ブロックのキューで記述され、キューにはその状態を定義するためにヘッド ポインター、テール ポインター、長さ、およびその他のレジスタが必要です。キューの状態を定義する方法は多数ありますが、各キューに 32 バイトのレジスタ スペースがあると仮定すると、7,906 個のキューをサポートするには約 256 KB のレジスタ スペースが必要になります。通常、一度にシステムに接続される USB デバイスの数はわずかで、平均すると USB デバイスは 3 ~ 4 個のエンドポイントをサポートしますが、同時にアクティブになるのはエンドポイントのサブセットのみです。xHCI は、キューの状態をエンドポイント コンテキスト データ構造としてシステム メモリに保持します。コンテキストは、xHCI によってキャッシュされ、エンドポイント アクティビティに応じて「ページング」されるように設計されています。したがって、ベンダーは、サポートするアーキテクチャ上の制限ではなく、製品に期待される実際の使用モデルに合わせて、内部の xHCI エンドポイント コンテキスト キャッシュ スペースとリソースを拡張できます。理想的には、内部キャッシュ スペースは、通常の使用状況では xHCI によるコンテキスト ページングが発生しないように選択されます。また、USB エンドポイント アクティビティはバースト的になる傾向があります。つまり、どの時点でも多数のエンドポイントがデータを移動する準備ができている場合がありますが、アクティブにデータを移動しているのはサブセットのみです。たとえば、マウスの割り込み IN エンドポイントは、ユーザーがデスクから離れている場合、何時間もデータを転送しないことがあります。xHCI ベンダー固有のアルゴリズムは、この状態を検出し、他のエンドポイントがビジーになった場合にそのエンドポイントをページング アウトの候補にすることができます。
- xHCI アーキテクチャでは、サポートされる USB デバイス、ポート、割り込みベクターなどの数に大きな最大値を設定できますが、実装ではマーケティング要件を満たすために必要な数のみを定義する必要があります。たとえば、ベンダーはタブレット xHCI 実装でサポートする USB デバイスの数を 16 台に制限することを選択できます。
- ベンダーは、xHCI アーキテクチャ機能をさらに活用して、ターゲットの使用モデルに合わせて内部リソースを拡張できます。たとえば、ベンダーがユーザビリティ テストを通じて、タブレット ユーザーの 95% が 4 台を超える USB デバイスを接続することはなく、各 USB デバイスが通常 4 個 (またはそれ以下) のエンドポイントを定義すると判断した場合、16 個のエンドポイント コンテキストの内部キャッシュにより、通常の状況ではエンドポイント コンテキストのページングによるシステム メモリ アクティビティが発生しないことが保証されます。
歴史
オープン ホスト コントローラ インターフェイス (OHCI) 仕様は、USB 1.0 デバイスをサポートするオープン仕様として、企業連合 (Compaq、Microsoft、National Semiconductor) によって定義されました。ユニバーサル ホスト コントローラ インターフェイス (UHCI) は、もともとIntel がUSB 1.0 デバイスをサポートする独自のインターフェイスとして定義した仕様です。UHCI 仕様は最終的に公開されましたが、それは業界の他の企業が OHCI 仕様を採用した後のことでした。
EHCI 仕様は、USB 2.0 デバイスをサポートするために Intel によって定義されました。EHCI アーキテクチャは、メモリ内に USB トランザクション スケジュールを構築し、帯域幅とアドレス割り当てを管理するソフトウェアを必要とする UHCI および OHCI コントローラをモデルにしています。USB 2.0 ホスト コントローラ インターフェイスのオープン バージョンを定義するという業界の無駄な作業を排除するために、Intel は EHCI 仕様をライセンス料なしで業界に提供しました。
EHCI ライセンス モデルは Intel の xHCI 仕様でも継続されましたが、業界の貢献は大幅に拡大されました。100 社を超える企業が xHCI 仕様に貢献しています。USB Implementers Forum (USB-IF) も、さまざまな xHCI 実装の互換性を最大限に高めるために、一連の xHCI コンプライアンス テストに資金を提供しています。
xHCI 1.0 コントローラーは 2009 年 12 月から出荷されています。2009 年以降の Linux カーネルには xHCI ドライバーが含まれていますが[4]、古いカーネル用のドライバーはオンラインで入手できます。XP、Vista、Windows 7 用の Windows ドライバーは、それぞれの xHCI ベンダーから入手できます。組み込みシステム用の xHCI ドライバーは、MCCI、Jungo、およびその他のソフトウェア ベンダーから入手できます。xHCI IP ブロックも、SOC 環境でのカスタマイズ用に複数のベンダーから入手できます。xHCI 1.1 コントローラーとデバイスの出荷は 2015 年に開始されました。
バージョン履歴
xHCI 仕様では、特定のリリースに対する更新と説明を定義するために「エラッタ」ファイルを使用します。エラッタ ファイルの変更は、各リリースに蓄積されます。特定の変更の詳細については、関連するエラッタ ファイルを参照してください。xHCI エラッタ ファイルで定義されている変更のほとんどは、説明、文法またはスペルの修正、追加の相互参照などであり、ドライバーの実装には影響しません。アーキテクチャ上の変更であると判断された場合、特定の機能が xHCI 実装でサポートされているかどうかを判断するためにCapabilityフラグが使用され、機能をオンにするためにEnableフラグが使用されます。
プレリリース
xHCI 仕様は、2010 年に正式リリースされるまでにいくつかのバージョンを経て進化しました。
- xHCI 0.9 : 2008 年 8 月にリリースされました。
- USB 0.95 : 2008 年 12 月にリリースされました。
- USB 0.96 : 2009 年 8 月にリリースされました。
- USB 0.96a : 1.0 リリース候補、2010 年 4 月にリリース。このバージョンに基づく最初の出荷デバイス。
1.0 の新機能
- xHCI 1.0 : 2010 年 5 月 21 日に初めて公開されました。
指定された USB データ レートは1.5 Mbit/s (低速)、12 Mbit/s (全速)、480 Mbit/s (高速)、および5 Gbit/s ( SuperSpeed ) です。 - xHCI 1.0、エラッタ ファイル 1 ~ 4 : 2011 年 1 月 17 日にリリースされました。1.0 の
より大規模な一般ユーザーからの初期レビュー フィードバック、保存と復元の明確化、およびハードウェア LPM サポートが組み込まれました。 - xHCI 1.0、エラッタ ファイル 1 ~ 6 : 2011 年 3 月 18 日にリリース
。明確化。 - xHCI 1.0、エラッタ ファイル 1 ~ 7 : 2011 年 6 月 13 日にリリース
。明確化。
1.1 の
- xHCI 1.1 : 2013 年 12 月 21 日にリリースされました。USB 3.1 のデータ レートを10 Gbit/s ( SuperSpeed+ ) に指定しました。これには、xHCI 1.0 エラッタ ファイル 1 ~ 21 が組み込まれています。コントローラが HCSPARAMS2 機能レジスタでより多くのスクラッチパッド バッファ (最大 1023) を要求できるようになります。
1.2 の
- xHCI 1.2 : 2019年5月発行。USB 3.2データレートを10Gbit/s(SuperSpeedPlus Gen1x2)および20Gbit/s(SuperSpeedPlus Gen2x2 )に規定。[5]
参考文献
- ^ "UHCI11D.DOC" (PDF) . Ftp.netbsd.org . 2017年1月9日閲覧。
- ^ 「アーカイブコピー」(PDF) 。 2015年8月10日時点のオリジナル(PDF)からアーカイブ。 2014年7月2日閲覧。
{{cite web}}: CS1 maint: アーカイブされたコピーをタイトルとして (リンク) - ^ [1] [リンク切れ ]
- ^ 「Linux カーネルの USB 3.0」hvera.wordpress.com 2009 年 6 月 10 日2017 年 2 月 2 日閲覧。
- ^ 「Intel | データセンター ソリューション、IoT、PC イノベーション」。
外部リンク
- USB公式サイト(USB Implementers Forum, Inc.)
- オープン ホスト コントローラ インターフェイス (OHCI) [永久リンク切れ ]
- Intel ユニバーサル ホスト コントローラ インターフェイス (UHCI) アーカイブ済み
- Intel 拡張ホスト コントローラ インターフェイス (EHCI)
- Intel 拡張ホスト コントローラ インターフェイス (xHCI)
