問題の声明
私たちのテストラボでは、Kingston DataTraveler 3.0 USBフラッシュドライブが登場しました。 製造元によると、デバイスはUSB 3.0をサポートしています。 USBフラッシュドライブを分解したり、保証に違反したりすることなく、これが本当に正しいかどうかを確認します。
ハードウェアテスト
コネクタをよく見て、USB 2.0をサポートする4つの「 近い 」接点の後ろに、予想どおり、 USB 3.0スーパースピードモードでのみ使用される5つの「 遠い 」接点を見つけました。 USB 3.0信号線の接地抵抗を測定すると、無限大以外の値が得られます。 結論:USB 3.0接点は物理的に存在し、行き止まりに終わっていません。 測定は、半導体ダイオードのテストに使用される限界でオーム計を使用して実行されました。 USB 3.0コネクタの「遠い」接点にアクセスするには、アダプタを設計するか、針などの細長いプローブを使用します。 結果は必要ですが、デバイスがUSB 3.0スーパースピードモードで機能するための十分な条件ではありません。 信号回路が終端抵抗器で終わっているが、コントローラに接続されていない場合があります。 したがって、次のテストであるソフトウェアに進みます。
ソフトウェアテスト
この実験は、 Denlow チップセット 上に構築された 、かなり新しく、まだ調査されていないTyan S5533マザーボードで実行されます。
![Tyan S5533マザーボード Tyan S5533](https://habrastorage.org/getpro/habr/post_images/eb7/5fa/58f/eb75fa58fe7e462339142a74725a0202.png)
図1 。 ITX形式のTyan S5533マザーボード
オペレーティングシステムセッションで起動されたドライバーの影響を排除するため、テストは「非常に低レベル」になり、DOSで実行し、USBコントローラーのメモリマップI / Oレジスタのダンプを表示して結果を制御します。
アクションのシーケンスは次のとおりです。
1)IC Book Labsが開発したUSB.EXEユーティリティのベータ版を使用して、XHCIコントローラー構成レジスタブロックのアドレスを決定します。この例では、bus = 0、device = 14h、function = 0です。 また、メモリマップドI / O空間の操作レジスタのブロックのベースアドレスを定義します。この例ではF7500000hです。
![画像](https://habrastorage.org/getpro/habr/post_images/67a/b7b/39b/67ab7b39b8bbb049800ac7e0794222ec.png)
図2 。 USB.EXEユーティリティの結果。 XHCI構成レジスタブロックアドレス:バス= 0、デバイス= 14h、機能= 0。 XHCI動作レジスタのベースアドレスはF7500000hです。
2)既知のとおり、このプラットフォームでUSB 3.0 XHCIコントローラーをサポートしないソフトウェアと互換性を持たせるために、デフォルトでUSB 3.0ポートはUSB 2.0 EHCIコントローラーによって提供されます。 私たちのタスクは、USB 3.0 XHCIコントローラーを使用してそれらをメンテナンスモードにすることです。 Intel 8シリーズ/ C220シリーズチップセットファミリプラットフォームコントローラーハブデータシートのドキュメントと、システムロジックレジスタの内容を編集できるユーティリティを使用します。
USB 3.0ポートルーティングマスクレジスタをプログラムします。 アドレスバス= 0、デバイス= 14h、関数= 0、レジスタ= 0DChバイトに値0FFhで書き込みます。
レジスタUSB 3.0ポートスーパースピードイネーブルレジスタをプログラムします。 アドレスバス= 0、デバイス= 14h、関数= 0、レジスタ= 0D8hバイトに値0FFhで書き込みます。
![画像](https://habrastorage.org/getpro/habr/post_images/d97/8d8/348/d978d8348927a84cb91158f95bc2f487.png)
図3 。 USB 3.0ポートルーティングマスクレジスタ
![画像](https://habrastorage.org/getpro/habr/post_images/5a9/e68/10f/5a9e6810f12b6b8512db2dd93d474785.png)
図4 USB 3.0ポートスーパースピードイネーブルレジスタ
3)デバイスを調査対象のポートに接続する前に、図5および図6に従って、32ビットレジスタPORTSCNUSB3の下位16ビットからのいくつかのビットフィールドの初期状態を読み取り、デコードします。 レジスタは、コントローラの動作レジスタブロックのベースアドレスからオフセット0570hにあります。そのアドレスはF7500000h + 0570h = F7500570hです。
読み取り値= 02A0h = 00 00.00 10.1010.00 00 b
D0 =現在の接続ステータス= 0。 デバイスが接続されていません。
D1 =ポートが有効/無効= 0。 ポートは使用されません。
D [13-10] =ポート速度= 0000b。 速度が決定されていません。
![画像](https://habrastorage.org/getpro/habr/post_images/baa/93b/603/baa93b6031cceefe2be66cc9ce1aa26c.png)
図5 。 USB 3.0ポートステータスおよび制御レジスタ、ビット[4〜0]
![画像](https://habrastorage.org/getpro/habr/post_images/5dd/bbb/742/5ddbbb742895c185c8f02bc1deef999a.png)
図6 。 USB 3.0ポートステータスおよび制御レジスタ、ビット[13-10]
4)USB 3.0フラッシュドライブを接続し、レジスタを再読み取りして同じビットフィールドを復号化します。
読み取り値= 1203h = 00 01.00 10.0000.00 11 b
D0 =現在の接続ステータス= 1。 デバイスが接続されています。
D1 =ポートが有効/無効= 1。 ポートは使用中です。
D [13-10] =ポート速度= 0100b。 速度は5.0 Gbit / S、USB 3.0スーパースピードモードで動作します。
5)自己制御の場合、USB 2.0フラッシュドライブを同じポートに接続し、レジスタを再読み取りして同じビットフィールドを復号化します。 読み取り値= 02A0h、これは接続なしを意味します。 PORTSCNUSB3レジスタは別のサブシステムから提供され、接続ステータスは別のレジスタ-PORTSCNUSB2を介してアクセスできるため、USB 2.0デバイスは「見えない」はずです。この検討は調査の範囲外です。
まとめ
テスト済みのフラッシュドライブは、 実際にUSB 3.0モードをサポートしています 。
記述されたアクションをDOSプログラムまたはUEFIアプリケーションの形式で形式化し、プログラムする場合、USBデバイスがどの高速モードで動作するかをすばやく判断できる小さなユーティリティが表示されます。 この例を単純化するために、特別な場合-Tyan S5533 USBボードのサブシステムと最初のポートの使用のために実装しました。したがって、この例のPORTSCNUSB3レジスタのアドレスは一定です。 一般に、プログラムがすべてのプラットフォームで機能するためには、USB 3.0 XHCI仕様に従って、XHCI機能フィールドの内容に基づいてPORTSCNUSB3レジスタアドレスを計算する必要があります。 一方、汎用性を実現することは、コントローラーレジスタと直接やり取りする代わりに、UEFIプロトコルを使用することで、はるかにシンプルでエレガントになります。
情報源
UPD
「実験ウサギ」として、容量16 GBのKingston DataTraveler 100 G3デバイスが使用されました。
![画像](https://habrastorage.org/getpro/habr/post_images/ead/cd2/23b/eadcd223bdef68a33e64029c87f7a83a.png)
UPD-II
1.さまざまな情報ユーティリティを使用して表示できるデバイス記述子は、デバイスの潜在的な機能を示しています。 デバイスの接続時にUSBポートに設定された速度モードは、記述子で宣言された機能に常に対応するとは限りません。
USB 3.0をサポートすると主張するデバイスは、工場の欠陥、ケーブルの欠陥、その他多くの理由により、USB 2.0モードで動作する場合があります。 記述子の内容は、USB 3.0モードのサポートを示している場合があります。
USB仕様では、実際の設定速度に応じて、デバイスが異なる記述子のセットを生成することを推奨しています。 ただし、フラッシュドライブの開発者がこの推奨事項に従うことを保証するものではありません。
もちろん、デバイス記述子の内容は、フラッシュドライブの表記や売り手の誓約よりも信頼性の高い情報源です。 ただし、上記の理由により、信頼性は100%とは異なります。
信頼性を100%に高めたいという願望が、私たちを極めて低レベルの研究へと駆り立てました。
2.別の方法-USBフラッシュドライブ(USB 2.0 EHCIまたはUSB 3.0 XHCI)の親であるコントローラーをデバイスマネージャーでトレースすることも非効率的です。スーパースピード したがって、親コントローラーがフラッシュドライブのxHCIであるという事実から、デバイスがスーパースピードモードで動作することにはなりません。