Condividi tramite


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.

Questo articolo contiene 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 Readme (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 utilizzando un verificatore hardware USB

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

  1. Avvia 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).

    Annotazioni

    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

Bandiera Indica che...
ResetTubeAvviataDaClienteVerificatoreHwDispositivo Il driver client ha avviato un'azione di ripristino reimpostando un particolare canale 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.
PortaCicloIniziataDaClientDeviceHwVerifier 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 è riuscito a eseguire la richiesta di SET_ISOCH_DELAY. Il dispositivo può non elaborare la richiesta in quanto il driver non richiede le informazioni necessarie oppure 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 di SET_SEL. Il dispositivo utilizza le informazioni sulla richiesta per il Link 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.
DispositivoHwVerifierNumeroSerialeNonCorrispondeAllaRinumazione 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 SET_SEL e SET_ISOCH_DELAY gli errori di trasferimento dei controlli. 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.
Incompatibilità della capacità di risveglio dell'interfaccia del verificatore hardware del dispositivo 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 funzione wake. 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.
VerificatoreHwDispositivoRinumerazioneBus Il dispositivo viene nuovamente enumerato sul bus. Una ri-enumerazione può verificarsi in seguito a un'operazione di reimpostazione della porta o ripresa del sistema. La nuova enumerazione si verifica anche 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.
Errore di trasferimento di controllo del verificatore hardware Hub 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.
HubHwVerifierNessunSupportoPerLaSospensioneSelettiva 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 alle specifiche 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 riattivazione dalla sospensione del sistema, è previsto l'errore in modalità di conformità e in questi casi il fallimento non viene registrato.
HubHwVerifierPortDispositivoDisconnesso Il dispositivo downstream sulla porta di destinazione non è più connesso al bus.
HubHwVerifierPortOverCurrent La porta downstream ha segnalato lo stato di sovracorrente.
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 SET_ADDRESS e reimpostazione delle richieste dell'endpoint non vengono acquisiti.