USB-Hardwareüberprüfung (USB3HWVerifierAnalyzer.exe)

Dieser Artikel beschreibt das Tool zur USB-Hardwareüberprüfung (USB3HWVerifierAnalyzer.exe), das zum Testen und Debuggen bestimmter Hardware-Ereignisse verwendet wird.

Die meisten Hardware-Probleme äußern sich in einer Art und Weise, die zu einer schlechten Endbenutzererfahrung führt, und es ist oft schwierig, den genauen Fehler zu bestimmen. Die USB-Hardwareüberprüfung zielt auf die Erfassung von Hardwarefehlern ab, die in einem Gerät, einem Port, einem Hub, einem Controller oder einer Kombination davon auftreten.

Die USB-Hardwareüberprüfung kann folgende Aufgaben übernehmen:

  • Erfassen von Hardware-Ereignissen und Anzeigen von Informationen in Echtzeit.
  • Erzeugen einer Trace-Datei mit Informationen über alle Ereignisse.
  • Analysieren einer vorhandenen Trace-Datei nach Ereignisinformationen.

Dieser Artikel enthält folgende Abschnitte:

Das USB-Hardwareüberprüfungs-Analysetool herunterladen

Das USB-Hardwareüberprüfungs-Tool ist im MUTT-Softwarepaket enthalten, das unter Tools im MUTT-Softwarepaket zum Download bereitsteht.

Das Toolpaket enthält mehrere Tools, die Belastungs- und Übertragungstests (einschließlich Leistungsübergänge) sowie SuperSpeed-Tests durchführen. Das Paket enthält auch ein Readme-Dokument (als separater Download erhältlich). Das Dokument gibt Ihnen einen kurzen Überblick über die Arten von MUTT-Hardware. Es bietet eine schrittweise Anleitung für verschiedene Tests, die Sie durchführen sollten, und schlägt Topologien für Controller-, Hub-, Geräte- und BIOS/UEFI-Tests vor.

Erfassen von Ereignissen mit Hilfe der USB-Hardwareüberprüfung

Führen Sie die folgenden Schritte aus, um Ereignisse mit Hilfe der Hardwareüberprüfung zu erfassen:

  1. Starten Sie eine Sitzung, indem Sie diesen Befehl an einer erweiterten Eingabeaufforderung ausführen.

    USB3HWVerifierAnalyzer.exe
    

    Das Tool unterstützt folgende Optionen:

    Option Beschreibung
    -v <VendorID> Protokolliert alle Hardwareprüfungsereignisse für die angegebene VendorID.
    -p <ProductID> Protokolliert alle Hardwareprüfungsereignisse für die angegebene ProductID.
    -f <ETL-Datei> Analysiert die angegebene ETL-Datei. Parsing in Echtzeit wird nicht unterstützt. Mit dieser Option analysiert das Tool die Datei offline.
    /v output Zeigt alle Ereignisse auf der Konsole an.
  2. Führen Sie das Testszenario aus, für das Sie Hardware-Ereignisse erfassen möchten.

    Während einer Sitzung erfasst die USB-Hardwareüberprüfung Informationen über Hardware-Ereignisse, sobald sie auftreten. Wenn Sie Ereignisse für eine bestimmte Hardware filtern möchten, geben Sie die VendorId und ProductId der Hardware an. Das Tool erfasst möglicherweise einige Informationen (z. B. VID/PID) zu Ereignissen nicht, die auftreten, bevor das Gerät vollständig aufgezählt wurde. Die fehlenden Informationen sind in dem detaillierten Bericht enthalten, der am Ende der Sitzung erstellt wird (siehe unten).

    Hinweis

    Die ETL-Datei AllEvents enthält immer alle ETW-Ereignisse für alle Geräte. Sie wird von den Schaltern -v und -p nicht beeinflusst.

    Hier ist die Befehlszeile zum Filtern nach VendorId und ProductId:

    USB3HWVerifierAnalyzer.exe -v 0781 -p 5595
    

    Hier ein Beispiel für die Ausgabe des Hardwareüberprüfungsprogramms:

    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. Beenden Sie die Sitzung durch Drücken der Tastenkombination STRG+C.

    Am Ende der Sitzung wird eine Datei namens AllEvents.etl im aktuellen Verzeichnis hinzugefügt. Diese Datei enthält Trace-Informationen über alle Ereignisse, die während der Sitzung aufgezeichnet wurden.

    Zusätzlich zu AllEvents.etl wird im Befehlsfenster ein Bericht angezeigt. Der Bericht enthält bestimmte Informationen, die in der Echtzeitausgabe fehlen. Die folgende Ausgabe zeigt einen Beispiel-Testbericht für die vorangegangene Sitzung. Der Bericht zeigt alle Ereignisse, die die USB-Hardwareüberprüfung festgestellt hat.

    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
    
    

    Beachten Sie im vorangegangenen Beispielbericht den Wert des Feldes Key für jeden Datensatz. Der Bericht gliedert die Informationen nach den Werten von Key und macht sie so leichter lesbar. Die gleichen Werte Key werden in den in AllEvents.etl erfassten Ereignissen verwendet.

  4. Konvertieren Sie AllEvents.etl in das Textformat, indem Sie den folgenden Befehl ausführen:

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

    Suchen Sie in der Ausgabedatei nach den zuvor notierten Werten Key. Die Werte sind mit einem dieser Felder verbunden: fid_UcxController, fid_HubDevice und fid_UsbDevice.

  5. Öffnen Sie die Datei AllEvents.etl in Netmon und wählen Sie Add <field_name>, um den Filter anzuzeigen und die Ereignisse nach Controller, Hub und Gerät zu filtern. Weitere Informationen finden Sie unter Installation von Netmon und USB ETW Parsern.

USB-Hardwareüberprüfungs-Flags

Flag Zeigt an, dass ...
DeviceHwVerifierClientInitiatedResetPipe Der Client-Treiber leitete eine Wiederherstellungsaktion ein, indem er eine bestimmte Pipe als Reaktion auf E/A-Fehler zurücksetzte. Bestimmte Client-Treiber können in anderen Szenarien eine Fehlerbehebung durchführen.
DeviceHwVerifierClientInitiatedResetPort Der Client-Treiber leitete eine Wiederherstellungsaktion ein, indem er das Gerät als Reaktion auf E/A-Fehler zurücksetzte. Bestimmte Client-Treiber können in anderen Szenarien eine Fehlerbehebung durchführen.
DeviceHwVerifierClientInitiatedCyclePort Der Client-Treiber leitete eine Wiederherstellungsaktion ein, indem er den Port ausschaltete. Dieses Flag veranlasst den Plug-and-Play-Manager, das Gerät erneut aufzulisten.
DeviceHwVerifierSetIsochDelayFailure Ein USB 3.0-Gerät hat die Anforderung SET_ISOCH_DELAY nicht erfüllt. Das Gerät kann die Anforderung ablehnen, weil entweder der Treiber die Anforderungsinformationen nicht benötigt oder ein vorübergehender Fehler aufgetreten ist. Der Treiber kann jedoch nicht zwischen diesen Gründen unterscheiden. Dieser Fehler wird in dem Bericht nicht erfasst.
DeviceHwVerifierSetSelFailure Ein USB 3.0-Gerät hat die SET_SEL-Abfrage nicht bestanden. Das Gerät verwendet die Abfrageinformationen für das Link Power Management (LPM). Das Gerät kann die Anforderung ablehnen, weil entweder der Treiber die Anforderungsinformationen nicht benötigt oder ein vorübergehender Fehler aufgetreten ist. Der Treiber kann jedoch nicht zwischen diesen Gründen unterscheiden. Dieser Fehler wird in dem Bericht nicht erfasst.
DeviceHwVerifierSerialNumberMismatchOnRenumeration Das Gerät meldete bei der erneuten Aufzählung eine andere Seriennummer als bei der ersten Aufzählung. Eine erneute Aufzählung kann als Ergebnis eines Reset-Ports oder der Wiederaufnahme des Systembetriebs erfolgen.
DeviceHwVerifierSuperSpeedDeviceWorkingAtLowerSpeed Das USB 3.0-Gerät arbeitet mit einer niedrigeren Busgeschwindigkeit als SuperSpeed.
DeviceHwVerifierControlTransferFailure Eine Kontrollübertragung an den Standardendpunkt des Geräts ist fehlgeschlagen. Die Übertragung kann aufgrund eines Geräte- oder Steuerungsfehlers fehlschlagen. In den Hub-Protokollen wird der USBD-Statuscode für den Übertragungsfehler angegeben. Dieses Flag schließt SET_SEL- und SET_ISOCH_DELAY-Steuerungsübertragungsfehler aus. Diese Arten von Anfragen werden durch die Flags DeviceHwVerifierSetIsochDelayFailure und DeviceHwVerifierSetSelFailure abgedeckt.
DeviceHwVerifierDescriptorValidationFailure Ein vom Gerät zurückgegebener Deskriptor entspricht nicht der USB-Spezifikation. Das Hub-Protokoll zeigt den genauen Fehler an.
DeviceHwVerifierInterfaceWakeCapabilityMismatch Das RemoteWake-Bit ist im Gerät falsch gesetzt. USB 3.0-Geräte, die Remote Wake unterstützen, müssen auch die Funktion Wake unterstützen. Es gibt zwei Möglichkeiten, wie das Gerät die Unterstützung der Weckfunktion anzeigt. Zum einen über das Feld bmAttributes des Konfigurationsdeskriptors und zum anderen in der Antwort auf die an die Schnittstelle gerichtete GET_STATUS-Anfrage. Bei einem nicht zusammengesetzten Gerät muss der Wert des RemoteWake-Bits mit dem Wert übereinstimmen, der von der GET_STATUS-Anfrage zurückgegeben wird, die auf die Schnittstelle 0 abzielt. Bei zusammengesetzten Geräten muss das RemoteWake-Bit für mindestens eine der Funktionen 1 sein. Andernfalls zeigt dieses Kennzeichen an, dass das Gerät hier widersprüchliche Werte gemeldet hat.
DeviceHwVerifierBusRenumeration Das Gerät wird neu auf dem Bus aufgezählt. Eine erneute Aufzählung kann als Ergebnis eines Reset-Ports oder der Wiederaufnahme des Systembetriebs erfolgen. Eine erneute Aufzählung erfolgt auch, wenn das Gerät deaktiviert/aktiviert oder gestoppt/gestartet wird.
HubHwVerifierTooManyResets Ein Hub hat innerhalb kurzer Zeit zu viele Rücksetzvorgänge durchlaufen. Auch wenn diese Rücksetzungen erfolgreich waren, verarbeitet der Hub keine Anfragen und es treten wiederholt Fehler auf.
HubHwVerifierControlTransferFailure Eine Kontrollübertragung an den Standard-Endpunkt des Hubs ist fehlgeschlagen. Die Übertragung kann aufgrund eines Geräte- oder Steuerungsfehlers fehlschlagen. In den Hub-Protokollen wird der USBD-Statuscode für den Fehler angegeben.
HubHwVerifierInterruptTransferFailure Eine auf den Interrupt-Endpunkt des Hubs gerichtete Datenübertragung ist fehlgeschlagen. Die Übertragung kann aufgrund eines Geräte- oder Steuerungsfehlers fehlschlagen. In den Hub-Protokollen wird der USBD-Statuscode für den Fehler angegeben. Wenn die Übertragung fehlgeschlagen ist, weil die Anfrage abgebrochen wurde, wird der Fehler nicht erfasst.
HubHwVerifierNoSelectiveSuspendSupport Das RemoteWake-Bit ist im Konfigurationsdeskriptor des Hubs nicht auf 1 gesetzt.
HubHwVerifierPortResetTimeout Während der Aufzählung oder Neuaufzählung eines Geräts läuft der Port-Reset-Vorgang aus. Es wurde keine Portänderungsmeldung empfangen, die anzeigt, dass der Port-Reset abgeschlossen ist.
HubHwVerifierInvalidPortStatus Der Port-Status des Ziel-Ports ist gemäß der USB-Spezifikation nicht gültig. Bestimmte Geräte können dazu führen, dass der Hub den ungültigen Status meldet.
HubHwVerifierPortLinkStateSSInactive Die Verbindung zwischen dem Zielport und dem nachgeschalteten Gerät befindet sich in einem Fehlerzustand.
HubHwVerifierPortLinkStateCompliance Die Verbindung zwischen dem Zielport und dem nachgeschalteten Gerät befindet sich im Konformitätsmodus. In einigen Szenarien, in denen das System in den Ruhezustand versetzt wird, wird der Fehler im Übereinstimmungsmodus erwartet, und in diesen Fällen wird der Fehler nicht erfasst.
HubHwVerifierPortDeviceDisconnected Das nachgeschaltete Gerät am Zielport ist nicht mehr mit dem Bus verbunden.
HubHwVerifierPortOverCurrent Der nachgelagerte Port meldete einen Überstromzustand.
HubHwVerifierControllerOperationFailure Ein Controller-Vorgang (z. B. Geräteaktivierung, Konfiguration von Endpunkten) ist für das an den Zielport angeschlossene Gerät fehlgeschlagen. Fehlschläge von SET_ADDRESS- und Reset-Endpunktanforderungen werden nicht erfasst.