この記事では、特定のハードウェア イベントのテストとデバッグに使用される USB ハードウェア検証ツール (USB3HWVerifierAnalyzer.exe) について説明します。
ほとんどのハードウェアの問題は、エンドユーザー エクスペリエンスの低下につながる方法で現れ、正確な障害を特定することが困難なことがよくあります。 USB ハードウェア検証ツールは、デバイス、ポート、ハブ、コントローラー、またはその組み合わせで発生するハードウェア障害をキャプチャすることを目的としています。
USB ハードウェア検証ツールは、次のタスクを実行できます。
- ハードウェア イベントをキャプチャし、リアルタイムで情報を表示します。
- すべてのイベントに関する情報を含むトレース ファイルを生成します。
- イベント情報については、既存のトレース ファイルを解析します。
この記事には、次のセクションが含まれています。
USB ハードウェア検証アナライザーツールの取得
USB ハードウェア検証ツールは、MUTT ソフトウェア パッケージのツールでダウンロードできる MUTT ソフトウェア パッケージに含まれています。
ツール パッケージには、ストレス テストと転送テスト (電源遷移を含む) と SuperSpeed テストを実行するいくつかのツールが含まれています。 パッケージには Readme ドキュメントもあります (別のダウンロードとして利用できます)。 このドキュメントでは、MUTT ハードウェアの種類の概要について簡単に説明します。 実行する必要があるさまざまなテストに関する詳細なガイダンスを提供し、コントローラー、ハブ、デバイス、および BIOS/UEFI テストのトポロジを提案します。
USB ハードウェア検証ツールを使用してイベントをキャプチャする方法
ハードウェア検証ツールを使用してイベントをキャプチャするには、次の手順を実行します。
管理者特権のコマンド プロンプトでこのコマンドを実行して、セッションを開始します。
USB3HWVerifierAnalyzer.exe
このツールでは、次のオプションがサポートされています。
選択肢 説明 -v <VendorID> 指定した VendorID のすべてのハードウェア検証ツール イベントをログに記録します。 -p <製品ID> 指定した ProductID のすべてのハードウェア検証ツール イベントをログに記録します。 -f <ETL ファイル> 指定した ETL ファイルを解析します。 リアルタイム解析はサポートされていません。 このオプションを使用すると、ツールはファイルをオフラインで解析します。 /v 出力 すべてのイベントをコンソールに表示します。 ハードウェア イベントをキャプチャするテスト シナリオを実行します。
セッション中に、USB ハードウェア検証ツールは、発生したハードウェア イベントに関する情報をキャプチャします。 特定のハードウェアのイベントをフィルター処理する場合は、ハードウェアの VendorId と ProductId を指定します。 このツールでは、デバイスが完全に列挙される前に発生するイベントに関する一部の情報 (VID/PID など) がキャプチャされない場合があります。 不足している情報は、セッションの最後に生成される詳細レポートで確認できます (次に説明します)。
注
AllEvents ETL ファイルには、すべてのデバイスのすべての ETW イベントが常に含まれます。 -v スイッチと -p スイッチの影響を受けません。
VendorId と ProductId でフィルター処理するコマンド ラインを次に示します。
USB3HWVerifierAnalyzer.exe -v 0781 -p 5595
ハードウェア検証ツールからの出力例を次に示します。
Session Name : TraceSessionFriJan271351112023 Attempting to start session TraceSessionFriJan271351112023... Trace Session created...Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 13319329877.425596: (UsbHub3/179) Event Message: Client Initiated Recovery Action VendorID/ProductID: 0x5e3/0x612 DeviceInterfacePath: \??\USB#VID_05E3&PID_0612#6&130491ac&0&4#{f18a0e88-c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x12, 0x4, 0x0, 0x0, 0x0, 0x0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Session Stopped...Status : 0
Ctrl キーを押しながら C キーを押してセッションを停止します。
セッションの最後に、AllEvents.etl という名前のファイルが現在のディレクトリに追加されます。 このファイルには、セッション中にキャプチャされたすべてのイベントに関するトレース情報が含まれています。
AllEvents.etl に加えて、コマンド ウィンドウにレポートが表示されます。 レポートには、リアルタイム出力で見逃された特定の情報が含まれています。 次の出力は、前のセッションのテスト レポートの例を示しています。 このレポートには、USB ハードウェア検証ツールで発生したすべてのイベントが表示されます。
Record #1 (Key = 0x57ff0de4858) VendorID/ProductID: 0x451/0x2077 DeviceInterfacePath: \??\USB#VID_0451&PID_2077#6&c4be011&0&2#{f18a0e88-c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic USB Hub PortPath: 0x2, 0x0, 0x0, 0x0, 0x0, 0x0 All errors encountered: #1: (UsbHub3/176): DescriptorValidationError20HubPortPwrCtrlMaskZero #2: (UsbHub3/179): Client Initiated Recovery Action #3: (UsbHub3/179): Client Initiated Recovery Action #4: (UsbHub3/179): Client Initiated Recovery Action #5: (UsbHub3/179): Client Initiated Recovery Action #6: (UsbHub3/179): Client Initiated Recovery Action #7: (UsbHub3/179): Client Initiated Recovery Action #8: (UsbHub3/179): Client Initiated Recovery Action #9: (UsbHub3/179): Client Initiated Recovery Action #10: (UsbHub3/179): Client Initiated Recovery Action #11: (UsbHub3/179): Client Initiated Recovery Action #12: (UsbHub3/179): Client Initiated Recovery Action #13: (UsbHub3/179): Client Initiated Recovery Action #14: (UsbHub3/179): Client Initiated Recovery Action Record #2 (Key = 0x57ff62a36a8) VendorID/ProductID: 0x1058/0x740 DeviceInterfacePath: \??\USB#VID_1058&PID_0740#57583931453631414E5A3331#{a5dcbf10-6530-11d2-901f-00c04fb951ed} DeviceDescription: USB Mass Storage Device PortPath: 0x2, 0x4, 0x0, 0x0, 0x0, 0x0 All errors encountered: #1: (UsbHub3/173): SuperSpeed Device is Connected on the 2.0 Bus Record #3 (Key = 0x57ff79fd4e8) VendorID/ProductID: 0x1edb/0xbd3b PortPath: 0x3, 0x0, 0x0, 0x0, 0x0, 0x0 All errors encountered: #1: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #2: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #3: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #4: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #5: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #6: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #7: (UsbHub3/176): DescriptorValidationErrorStringMismatchBetweenBlengthAndBufferLength #8: (UsbHub3/176): DescriptorValidationErrorStringMismatchBetweenBlengthAndBufferLength
前のレポート例では、各レコードの [キー ] フィールドの値を書き留めます。 レポートでは、これらの キー 値によって情報が分類され、読みやすくなっています。 AllEvents.etl でキャプチャされたイベントでは、同じ キー 値が使用されます。
次のコマンドを実行して、AllEvents.etl をテキスト形式に変換します。
USB3HWVerifierAnalyzer.exe -f AllEvents.etl /v > Output.txt
出力ファイルで、前に示した キー 値を検索します。 値は、 fid_UcxController、fid_HubDevice、 fid_UsbDeviceのいずれかのフィールドに関連付 けられます。
Netmon で AllEvents.etl を開き、[<field_name>の追加] を選択してフィルターを表示し、コントローラー、ハブ、デバイスでイベントをフィルター処理します。 詳細については、「 Netmon および USB ETW パーサーをインストールする方法」を参照してください。
USB ハードウェア検証ツール フラグ
旗 | ことを示します。... |
---|---|
DeviceHwVerifierClientInitiatedResetPipe | クライアント ドライバーは、I/O エラーに応答して特定のパイプをリセットすることによって回復アクションを開始しました。 特定のクライアント ドライバーは、他のシナリオでエラー回復を実行する場合があります。 |
デバイスハードウェア検証クライアントによって起動されたリセットポート | クライアント ドライバーは、I/O エラーに応答してデバイスをリセットすることによって回復アクションを開始しました。 特定のクライアント ドライバーは、他のシナリオでエラー回復を実行する場合があります。 |
デバイスハードウェア検証クライアント起動サイクルポート | クライアント ドライバーは、ポートを循環することによって回復アクションを開始しました。 このフラグにより、プラグ アンド プレイ マネージャーはデバイスを再列挙します。 |
デバイスハードウェア検証セットアイソクロニック遅延失敗 | USB 3.0 デバイスがSET_ISOCH_DELAY要求に失敗しました。 ドライバーが要求情報を必要としないか、一時的なエラーが発生したため、デバイスは要求に失敗する可能性があります。 ただし、ドライバーはこれらの理由を区別できません。 このエラーはレポートにキャプチャされません。 |
デバイスHW検証器セットSEL失敗 | USB 3.0 デバイスがSET_SEL要求に失敗しました。 デバイスは、リンク電源管理 (LPM) の要求情報を使用します。 ドライバーが要求情報を必要としないか、一時的なエラーが発生したため、デバイスは要求に失敗する可能性があります。 ただし、ドライバーはこれらの理由を区別できません。 このエラーはレポートにキャプチャされません。 |
デバイスハードウェア検証シリアル番号の不一致に関する再評価 | デバイスは、最初の列挙時に報告されたシリアル番号とは対照的に、再列挙中に別のシリアル番号を報告しました。 再列挙は、リセット ポートまたはシステム再開操作の結果として発生する可能性があります。 |
DeviceHwVerifierSuperSpeedDeviceWorkingAtLowerSpeed | USB 3.0 デバイスは、SuperSpeed より低いバス速度で動作しています。 |
デバイスハードウェアベリファイア制御転送失敗 | デバイスの既定のエンドポイントへの制御転送に失敗しました。 転送は、デバイスまたはコントローラーのエラーの結果として失敗する可能性があります。 ハブ ログは、転送エラーの USBD 状態コードを示します。 このフラグは、SET_SELおよびSET_ISOCH_DELAY制御転送の失敗を除外します。 これらの種類の要求は、DeviceHwVerifierSetIsochDelayFailure フラグと DeviceHwVerifierSetSelFailure フラグでカバーされます。 |
デバイスハードウェアベリファイアディスクリプタ検証失敗 | デバイスによって返される記述子が USB 仕様に準拠していません。 ハブ ログは正確なエラーを示します。 |
デバイスハードウェア検証インタフェースのウェイク機能不一致 | RemoteWake ビットがデバイスで正しく設定されていません。 リモート ウェイクをサポートする USB 3.0 デバイスでは、関数ウェイクもサポートする必要があります。 デバイスがファンクションウェイクのサポートを示す方法は 2 つあります。 最初の方法は、構成記述子の bmAttributes フィールドを介して行われ、2 番目の方法は、インターフェイスを対象とするGET_STATUS要求への応答です。 非複合デバイスの場合、RemoteWake ビット値は、インターフェイス 0 を対象とするGET_STATUS要求によって返される値と一致する必要があります。 複合デバイスの場合、RemoteWake ビットは少なくとも 1 つの関数に対して 1 である必要があります。 それ以外の場合、このフラグは、デバイスがここで矛盾した値を報告したことを示します。 |
デバイスHW検証バス再列挙 | デバイスはバスで再列挙されます。 再列挙は、リセット ポートまたはシステム再開操作の結果として発生する可能性があります。 再列挙は、デバイスが無効/有効または停止/開始されたときにも発生します。 |
ハブハードウェア検証でリセットが多すぎます | ハブのリセット操作が短時間で多すぎます。 これらのリセットが成功した場合でも、ハブは要求を処理せず、エラーが繰り返し発生します。 |
ハブハードウェア検証制御転送失敗 | ハブの既定のエンドポイントを対象とするコントロール転送に失敗しました。 転送は、デバイスまたはコントローラーのエラーの結果として失敗する可能性があります。 ハブ ログは、エラーの USBD 状態コードを示します。 |
ハブハードウェアベリファイアー割込転送失敗 | ハブの割り込みエンドポイントを対象とするデータ転送に失敗しました。 転送は、デバイスまたはコントローラーのエラーの結果として失敗する可能性があります。 ハブ ログは、エラーの USBD 状態コードを示します。 要求が取り消されたために転送に失敗した場合、失敗はキャプチャされません。 |
HubHwVerifierNoSelectiveSuspendSupport | RemoteWake ビットは、ハブの構成記述子で 1 に設定されていません。 |
HubHwVerifierPortResetTimeout | デバイスの列挙または再列挙中に、ポート リセット操作はタイムアウトになります。ポートのリセットが完了したことを示すポート変更通知が受信されません。 |
ハブハードウェア検証: 無効なポート状態 | ターゲット ポートのポートの状態は、USB 仕様に従って有効ではありません。 特定のデバイスによって、ハブから無効な状態が報告される場合があります。 |
HubHwVerifierポートリンク状態SSInactive | ターゲット ポートとダウンストリーム デバイスの間のリンクがエラー状態です。 |
HubHwVerifierPortLinkStateCompliance | ターゲット ポートとダウンストリーム デバイス間のリンクは、コンプライアンス モードです。 システムのスリープ再開に関連する一部のシナリオでは、コンプライアンス モード エラーが予想され、そのような場合はエラーがキャプチャされません。 |
HubHwVerifierPortDeviceDisconnected | ターゲット ポート上のダウンストリーム デバイスがバスに接続されなくなりました。 |
HubHwVerifierPortOverCurrent | ダウンストリーム ポートが過電流状態を報告しました。 |
HubHwVerifierControllerOperationFailure | ターゲット ポートに接続されているデバイスのコントローラー操作 (デバイスの有効化、エンドポイントの構成など) に失敗しました。 SET_ADDRESSおよびリセット エンドポイント要求からのエラーはキャプチャされません。 |