USB 硬體驗證器 (USB3HWVerifierAnalyzer.exe)
本文說明用於測試和偵錯特定硬體事件的 USB 硬體驗證器工具(USB3HWVerifierAnalyzer.exe)。
大部分的硬體問題都會以導致用戶體驗不佳的方式顯示,而且通常很難判斷確切的失敗。 USB 硬體驗證器旨在擷取裝置、埠、中樞、控制器或組合的硬體失敗。
USB 硬體驗證器可以執行下列工作:
- 即時擷取硬體事件並顯示資訊。
- 產生含有所有事件相關信息的追蹤檔案。
- 剖析現有的追蹤檔案以取得事件資訊。
本文包含下列章節:
取得 USB 硬體驗證器分析器工具
USB 硬體驗證器工具隨附於 MUTT 軟體套件中可供下載 的 MUTT 軟體套件。
工具套件包含數個執行壓力和傳輸測試(包括電源轉換)和 SuperSpeed 測試的工具。 該套件也有自述檔(可供個別下載)。 檔提供您 MUTT 硬體類型的簡短概觀。 它提供您應該執行之各種測試的逐步指引,並建議控制器、中樞、裝置和 BIOS/UEFI 測試的拓撲。
如何使用 USB 硬體驗證器擷取事件
若要使用硬體驗證器來擷取事件,請執行下列步驟:
在提升許可權的命令提示字元中執行此命令,以啟動會話。
USB3HWVerifierAnalyzer.exe
此工具支援下列選項:
選項 描述 -v <VendorID> 記錄指定 VendorID 的所有硬體驗證器事件。 -p <ProductID> 記錄指定 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 中擷取的事件中會使用相同的 Key 值。
執行下列命令,將 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 失敗。 某些客戶端驅動程式可能會在其他案例中執行錯誤復原。 |
DeviceHwVerifierClientInitiatedResetPort | 用戶端驅動程式藉由重設裝置來起始復原動作,以回應 I/O 失敗。 某些客戶端驅動程式可能會在其他案例中執行錯誤復原。 |
DeviceHwVerifierClientInitiatedCyclePort | 用戶端驅動程式會迴圈埠來起始復原動作。 此旗標會導致 隨插即用 管理員重新列舉裝置。 |
DeviceHwVerifierSetIsochDelayFailure | USB 3.0 裝置無法SET_ISOCH_DELAY要求。 裝置可能會失敗要求,因為驅動程式不需要要求資訊或發生暫時性錯誤。 不過,驅動程式無法區分這些原因。 報表中不會擷取此錯誤。 |
DeviceHwVerifierSetSelFailure | USB 3.0 裝置無法SET_SEL要求。 裝置會使用連結電源管理 (LPM) 的要求資訊。 裝置可能會失敗要求,因為驅動程式不需要要求資訊或發生暫時性錯誤。 不過,驅動程式無法區分這些原因。 報表中不會擷取此錯誤。 |
DeviceHwVerifierSerialNumberMismatchOnRenumeration | 裝置在重新列舉期間報告了不同的序號,而不是在初始列舉期間所報告的序號。 重設埠或系統繼續作業的結果可能會發生重新列舉。 |
DeviceHwVerifierSuperSpeedDeviceWorkingAtLowerSpeed | USB 3.0 裝置的運作速度低於 SuperSpeed。 |
DeviceHwVerifierControlTransferFailure | 控制傳輸無法傳送到裝置的預設端點失敗。 傳輸可能會因為裝置或控制器錯誤而失敗。 中樞記錄指出傳輸失敗的USBD狀態代碼。 此旗標會排除SET_SEL,並SET_ISOCH_DELAY控制傳輸失敗。 這些類型的要求會由 DeviceHwVerifierSetIsochDelayFailure 和 DeviceHwVerifierSetSelFailure 旗標所涵蓋。 |
DeviceHwVerifierDescriptorValidationFailure | 裝置傳回的描述元不符合USB規格。 中樞記錄指出確切的錯誤。 |
DeviceHwVerifierInterfaceWakeCapabilityMismatch | RemoteWake 位在裝置中設定不正確。 支援遠端喚醒的 USB 3.0 裝置也必須支援功能喚醒。 裝置有兩種方式指出其對函式喚醒的支援。 第一種方式是透過 組態描述元的 bmAttributes 字段,第二種方式是回應以介面為目標的GET_STATUS要求。 對於非複合裝置,RemoteWake 位值必須符合以介面 0 為目標之GET_STATUS要求所傳回的值。 針對複合裝置,RemoteWake 位必須至少有一個函式為 1。 否則,此旗標表示裝置在此回報了相互矛盾的值。 |
DeviceHwVerifierBusRenumeration | 裝置會在總線上重新列舉。 重設埠或系統繼續作業的結果可能會發生重新列舉。 當裝置停用/啟用或停止/啟動時,也會發生重新列舉。 |
HubHwVerifierTooManyResets | 中樞在短時間內經歷了太多重設作業。 即使這些重設成功,中樞也不會處理要求,而且會發生重複的錯誤。 |
HubHwVerifierControlTransferFailure | 以中樞預設端點為目標的控制傳輸失敗。 傳輸可能會因為裝置或控制器錯誤而失敗。 中樞記錄指出失敗的USBD狀態代碼。 |
HubHwVerifierInterruptTransferFailure | 以中樞中斷端點為目標的數據傳輸失敗。 傳輸可能會因為裝置或控制器錯誤而失敗。 中樞記錄指出失敗的USBD狀態代碼。 如果因為要求取消而失敗,則不會擷取失敗。 |
HubHwVerifierNoSelectiveSuspendSupport | RemoteWake 位不會在中樞的組態描述元中設定為 1。 |
HubHwVerifierPortResetTimeout | 列舉或重新列舉裝置時,埠重設作業會逾時。未收到埠變更通知,表示埠重設已完成。 |
HubHwVerifierInvalidPortStatus | 目標埠的埠狀態根據USB規格無效。 某些裝置可能會導致中樞回報無效的狀態。 |
HubHwVerifierPortLinkStateSSInactive | 目標埠與下游裝置之間的連結處於錯誤狀態。 |
HubHwVerifierPortLinkStateCompliance | 目標埠與下游裝置之間的連結處於合規性模式。 在某些涉及系統睡眠恢復的案例中,合規性模式錯誤是預期且在這些情況下不會擷取失敗。 |
HubHwVerifierPortDeviceDisconnected | 目標埠上的下游裝置已不再連線到總線。 |
HubHwVerifierPortOverCurrent | 下游埠報告過流狀態。 |
HubHwVerifierControllerOperationFailure | 連接到目標埠的裝置,控制器作業(例如啟用裝置、設定端點)失敗。 不會擷取來自SET_ADDRESS和重設端點要求的失敗。 |