共用方式為


USB 硬體驗證器 (USB3HWVerifierAnalyzer.exe)

本文說明用於測試和偵錯特定硬體事件的 USB 硬體驗證器工具(USB3HWVerifierAnalyzer.exe)。

大部分的硬體問題都會以導致用戶體驗不佳的方式顯示,而且通常很難判斷確切的失敗。 USB 硬體驗證器旨在擷取裝置、埠、中樞、控制器或組合的硬體失敗。

USB 硬體驗證器可以執行下列工作:

  • 即時擷取硬體事件並顯示資訊。
  • 產生含有所有事件相關信息的追蹤檔案。
  • 剖析現有的追蹤檔案以取得事件資訊。

本文包含下列章節:

取得 USB 硬體驗證器分析器工具

USB 硬體驗證器工具隨附於 MUTT 軟體套件中可供下載 的 MUTT 軟體套件

工具套件包含數個執行壓力和傳輸測試(包括電源轉換)和 SuperSpeed 測試的工具。 該套件也有自述檔(可供個別下載)。 檔提供您 MUTT 硬體類型的簡短概觀。 它提供您應該執行之各種測試的逐步指引,並建議控制器、中樞、裝置和 BIOS/UEFI 測試的拓撲。

如何使用 USB 硬體驗證器擷取事件

若要使用硬體驗證器來擷取事件,請執行下列步驟:

  1. 在提升許可權的命令提示字元中執行此命令,以啟動會話。

    USB3HWVerifierAnalyzer.exe
    

    此工具支援下列選項:

    選項 描述
    -v <VendorID> 記錄指定 VendorID 的所有硬體驗證器事件。
    -p <ProductID> 記錄指定 ProductID 的所有硬體驗證器事件。
    -f <ETL 檔案> 剖析指定的 ETL 檔案。 不支援即時剖析。 使用此選項,工具會脫機剖析檔案。
    /v 輸出 顯示主控台的所有事件。
  2. 執行您想要擷取硬體事件的測試案例。

    在工作階段期間,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
    
  3. 按 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 值。

  4. 執行下列命令,將 AllEvents.etl 轉換為文字格式:

    USB3HWVerifierAnalyzer.exe -f AllEvents.etl /v > Output.txt 
    

    在輸出檔案中,搜尋先前注意到的 索引鍵 值。 這些值會與下列其中一個字段相關聯: fid_UcxControllerfid_HubDevicefid_UsbDevice

  5. 在 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和重設端點要求的失敗。