Verifica hardware USB (USB3HWVerifierAnalyzer.exe)

Questo articolo descrive lo strumento di verifica hardware USB (USB3HWVerifierAnalyzer.exe) usato per il test e il debug di eventi hardware specifici.

La maggior parte dei problemi hardware si manifesta in modi che portano a un'esperienza utente finale scarsa ed è spesso difficile determinare l'errore esatto. Il verificatore hardware USB mira a acquisire errori hardware che si verificano in un dispositivo, una porta, un hub, un controller o una combinazione di essi.

Il verificatore hardware USB può eseguire queste attività:

  • Acquisire eventi hardware e visualizzare informazioni in tempo reale.
  • Generare un file di traccia con informazioni su tutti gli eventi.
  • Analizzare un file di traccia esistente per ottenere informazioni sugli eventi.

In questo articolo sono contenute le sezioni seguenti:

Recupero dello strumento analizzatore di verifica hardware USB

Lo strumento di verifica hardware USB è incluso nel pacchetto software MUTT disponibile per il download in Strumenti nel pacchetto software MUTT.

Il pacchetto degli strumenti contiene diversi strumenti che eseguono test di stress e trasferimento (incluse transizioni di potenza) e test SuperSpeed. Il pacchetto include anche un documento Leggimi (disponibile come download separato). Il documento offre una breve panoramica dei tipi di hardware MUTT. Fornisce indicazioni dettagliate sui vari test da eseguire e suggerisce topologie per controller, hub, dispositivo e test BIOS/UEFI.

Come acquisire eventi usando un verificatore hardware USB

Per acquisire eventi usando il verificatore hardware, seguire questa procedura:

  1. Avviare una sessione eseguendo questo comando al prompt dei comandi con privilegi elevati.

    USB3HWVerifierAnalyzer.exe
    

    Lo strumento supporta queste opzioni:

    Opzione Descrizione
    -v <VendorID> Registra tutti gli eventi di verifica hardware per l'ID fornitore specificato.
    -p <ProductID> Registra tutti gli eventi di verifica hardware per l'ID Prodotto specificato.
    -f <File ETL> Analizza il file ETL specificato. L'analisi in tempo reale non è supportata. Con questa opzione, lo strumento analizza il file offline.
    /v output Visualizza tutti gli eventi nella console.
  2. Eseguire lo scenario di test per il quale si vogliono acquisire eventi hardware.

    Durante una sessione, il verificatore hardware USB acquisisce informazioni sugli eventi hardware man mano che si verificano. Se si desidera filtrare gli eventi per un hardware specifico, specificare VendorId e ProductId dell'hardware. Lo strumento potrebbe non acquisire alcune informazioni (ad esempio VID/PID) sugli eventi che si verificano prima che il dispositivo venga completamente enumerato. Le informazioni mancanti sono disponibili nel report dettagliato generato alla fine della sessione (illustrato di seguito).

    Nota

    Il file ETL AllEvents conterrà sempre tutti gli eventi ETW per tutti i dispositivi. Non è interessato dai commutatori -v e -p .

    Ecco la riga di comando per filtrare in base a VendorId e ProductId:

    USB3HWVerifierAnalyzer.exe -v 0781 -p 5595
    

    Di seguito è riportato un esempio di output dello strumento di verifica hardware:

    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. Arrestare la sessione premendo CTRL+C.

    Alla fine della sessione, nella directory corrente viene aggiunto un file denominato AllEvents.etl. Questo file contiene informazioni di traccia su tutti gli eventi acquisiti durante la sessione.

    Oltre a AllEvents.etl, la finestra di comando mostra un report. Il report include alcune informazioni mancanti nell'output in tempo reale. L'output seguente mostra un report di test di esempio per la sessione precedente. Il report mostra tutti gli eventi rilevati dal verificatore hardware 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
    
    

    Nel report di esempio precedente prendere nota del valore del campo Chiave per ogni record. Il report classifica le informazioni in base a tali valori chiave , semplificando la lettura. Gli stessi valori key vengono usati negli eventi acquisiti in AllEvents.etl.

  4. Convertire AllEvents.etl in formato testo eseguendo il comando seguente:

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

    Nel file di output cercare i valori chiave annotati in precedenza. I valori sono associati a uno di questi campi: fid_UcxController, fid_HubDevice e fid_UsbDevice.

  5. Aprire AllEvents.etl in Netmon e selezionare Aggiungi <field_name> per visualizzare il filtro per filtrare gli eventi in base a controller, hub e dispositivo. Per altre informazioni, vedere Come installare i parser Netmon e USB ETW.

Flag di verifica hardware USB

Flag Indica che...
DeviceHwVerifierClientInitiatedResetPipe Il driver client ha avviato un'azione di ripristino reimpostando una particolare pipe in risposta a errori di I/O. Alcuni driver client potrebbero eseguire il ripristino degli errori in altri scenari.
DeviceHwVerifierClientInitiatedResetPort Il driver client ha avviato un'azione di ripristino reimpostando il dispositivo in risposta a errori di I/O. Alcuni driver client potrebbero eseguire il ripristino degli errori in altri scenari.
DeviceHwVerifierClientInitiatedCyclePort Il driver client ha avviato un'azione di ripristino eseguendo il ciclo della porta. Questo flag fa sì che Plug and Play Manager enumeri nuovamente il dispositivo.
DeviceHwVerifierSetIsochDelayFailure Un dispositivo USB 3.0 non ha superato la richiesta di edizione Standard T_ISOCH_DELAY. Il dispositivo può non riuscire la richiesta perché il driver non richiede le informazioni sulla richiesta o si è verificato un errore temporaneo. Tuttavia, il driver non può distinguere tra questi motivi. Questo errore non viene acquisito nel report.
DeviceHwVerifierSetSelFailure Un dispositivo USB 3.0 non è riuscito a eseguire la richiesta edizione Standard T_edizione Standard L. Il dispositivo usa le informazioni sulla richiesta per Collegare Power Management (LPM). Il dispositivo può non riuscire la richiesta perché il driver non richiede le informazioni sulla richiesta o si è verificato un errore temporaneo. Tuttavia, il driver non può distinguere tra questi motivi. Questo errore non viene acquisito nel report.
DeviceHwVerifierSerialNumberMismatchOnRenumeration Il dispositivo ha segnalato un numero di serie diverso durante la rienumerazione anziché quello segnalato durante l'enumerazione iniziale. Un'enumerazione può verificarsi in seguito a un'operazione di reimpostazione della porta o ripresa del sistema.
DeviceHwVerifierSuperSpeedDeviceWorkingAtLowerSpeed Il dispositivo USB 3.0 sta operando una velocità del bus inferiore a SuperSpeed.
DeviceHwVerifierControlTransferFailure Il trasferimento del controllo non è riuscito all'endpoint predefinito del dispositivo. Il trasferimento può non riuscire a causa di un errore del dispositivo o del controller. I log dell'hub indicano il codice di stato USBD per l'errore di trasferimento. Questo flag esclude gli errori di trasferimento del controllo edizione Standard T_edizione Standard L e edizione Standard T_ISOCH_DELAY. Questi tipi di richieste sono coperti dai flag DeviceHwVerifierSetIsochDelayFailure e DeviceHwVerifierSetSelFailure.
DeviceHwVerifierDescriptorValidationFailure Un descrittore restituito dal dispositivo non è conforme alla specifica USB. Il log dell'hub indica l'errore esatto.
DeviceHwVerifierInterfaceWakeCapabilityMismatch Il bit RemoteWake non è impostato correttamente nel dispositivo. Anche i dispositivi USB 3.0 che supportano la riattivazione remota devono supportare la riattivazione della funzione. Esistono due modi in cui il dispositivo indica il supporto per la riattivazione della funzione. Il primo modo consiste nel campo bmAttributes del descrittore di configurazione e il secondo consiste nella risposta alla richiesta di GET_STATUS destinata all'interfaccia. Per un dispositivo non composito, il valore di bit RemoteWake deve corrispondere al valore restituito dalla richiesta GET_STATUS destinata all'interfaccia 0. Per i dispositivi compositi, il bit RemoteWake deve essere 1 per almeno una delle funzioni. In caso contrario, questo flag indica che il dispositivo ha segnalato valori contraddittori in qui.
DeviceHwVerifierBusRenumeration Il dispositivo viene nuovamente enumerato sul bus. Un'enumerazione può verificarsi in seguito a un'operazione di reimpostazione della porta o ripresa del sistema. Anche l'enumerazione si verifica quando il dispositivo è disabilitato/abilitato o arrestato/avviato.
HubHwVerifierTooManyResets Un hub ha eseguito troppe operazioni di reimpostazione entro un breve periodo. Anche se tali reimpostazioni hanno avuto esito positivo, l'hub non elabora le richieste e si verificano errori ripetuti.
HubHwVerifierControlTransferFailure Un trasferimento di controllo destinato all'endpoint predefinito dell'hub non è riuscito. Il trasferimento può non riuscire a causa di un errore del dispositivo o del controller. I log dell'hub indicano il codice di stato USBD per l'errore.
HubHwVerifierInterruptTransferFailure Il trasferimento dei dati destinato all'endpoint di interrupt dell'hub non è riuscito. Il trasferimento può non riuscire a causa di un errore del dispositivo o del controller. I log dell'hub indicano il codice di stato USBD per l'errore. Se il trasferimento non è riuscito a causa della richiesta è stato annullato, l'errore non viene acquisito.
HubHwVerifierNoSelectiveSuspendSupport Il bit RemoteWake non è impostato su 1 nel descrittore di configurazione dell'hub.
HubHwVerifierPortResetTimeout Durante l'enumerazione o l'enumerazione di un dispositivo, l'operazione di reimpostazione della porta sta per scadere. Non viene ricevuta una notifica di modifica della porta che indica che la reimpostazione della porta è stata completata.
HubHwVerifierInvalidPortStatus Lo stato della porta di destinazione non è valido in base alla specifica USB. Alcuni dispositivi possono causare la segnalazione dello stato non valido da parte dell'hub.
HubHwVerifierPortLinkStateSSInactive Il collegamento tra la porta di destinazione e il dispositivo downstream è in uno stato di errore.
HubHwVerifierPortLinkStateCompliance Il collegamento tra la porta di destinazione e il dispositivo downstream è in modalità di conformità. In alcuni scenari che coinvolgono la ripresa della sospensione del sistema, è previsto l'errore della modalità di conformità e in questi casi l'errore non viene acquisito.
HubHwVerifierPortDeviceDisconnected Il dispositivo downstream sulla porta di destinazione non è più connesso al bus.
HubHwVerifierPortOverCurrent La porta downstream ha segnalato lo stato overcurrent.
HubHwVerifierControllerOperationFailure Un'operazione del controller (ad esempio l'abilitazione del dispositivo, la configurazione degli endpoint) non è riuscita per il dispositivo collegato alla porta di destinazione. Gli errori di edizione Standard T_ADDRESS e le richieste di reimpostazione dell'endpoint non vengono acquisiti.