Partager via


Vérificateur matériel USB (USB3HWVerifierAnalyzer.exe)

Cet article décrit l’outil de vérificateur matériel USB (USB3HWVerifierAnalyzer.exe) utilisé pour tester et déboguer des événements matériels spécifiques.

La plupart des problèmes matériels manifestent de manière à entraîner une expérience médiocre de l’utilisateur final et il est souvent difficile de déterminer l’échec exact. Le vérificateur de matériel USB vise à capturer les défaillances matérielles qui se produisent dans un appareil, un port, un hub, un contrôleur ou une combinaison d’entre eux.

Le vérificateur matériel USB peut effectuer ces tâches :

  • Capturez les événements matériels et affichez des informations en temps réel.
  • Générez un fichier de trace avec des informations sur tous les événements.
  • Analysez un fichier de trace existant pour les informations d’événement.

Cet article contient les sections suivantes :

Obtention de l’outil d’analyse de vérification matérielle USB

L’outil de vérificateur de matériel USB est inclus dans le package logiciel MUTT disponible en téléchargement sur Tools dans le package logiciel MUTT.

Le package d’outils contient plusieurs outils qui effectuent des tests de contrainte et de transfert (y compris des transitions d’alimentation) et des tests SuperSpeed. Le paquet comprend également un fichier Lisez-moi (disponible en téléchargement séparé). Le document vous donne une brève vue d’ensemble des types de matériel MUTT. Il fournit des instructions pas à pas sur les différents tests que vous devez exécuter et suggère des topologies pour les tests contrôleur, hub, appareil et BIOS/UEFI.

Comment capturer des événements à l’aide d’un vérificateur matériel USB

Pour capturer des événements à l’aide du vérificateur matériel, procédez comme suit :

  1. Démarrez une session en exécutant cette commande à une invite de commandes avec élévation de privilèges.

    USB3HWVerifierAnalyzer.exe
    

    L’outil prend en charge ces options :

    Choix Description
    -v <VendorID> Enregistre tous les événements de vérificateur matériel pour l’ID de fournisseur spécifié.
    -p <IDProduit> Enregistre tous les événements de vérificateur matériel pour le ProductID spécifié.
    -f <fichier ETL> Analyse le fichier ETL spécifié. L’analyse en temps réel n’est pas prise en charge. Avec cette option, l’outil analyse le fichier hors connexion.
    Sortie /v Affiche tous les événements dans la console.
  2. Exécutez le scénario de test pour lequel vous souhaitez capturer des événements matériels.

    Pendant une session, le vérificateur de matériel USB capture des informations sur les événements matériels au fur et à mesure qu’ils se produisent. Si vous souhaitez filtrer des événements pour un matériel particulier, spécifiez vendorId et ProductId du matériel. L’outil peut ne pas capturer certaines informations (telles que VID/PID) sur les événements qui se produisent avant que l’appareil ne soit entièrement énuméré. Les informations manquantes sont disponibles dans le rapport détaillé généré à la fin de la session (abordé ensuite).

    Remarque

    Le fichier ALLEvents ETL contient toujours tous les événements ETW pour tous les appareils. Elle n’est pas affectée par les commutateurs -v et -p .

    Voici la ligne de commande à filtrer par VendorId et ProductId :

    USB3HWVerifierAnalyzer.exe -v 0781 -p 5595
    

    Voici un exemple de sortie de l’outil de vérificateur matériel :

    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. Arrêtez la session en appuyant sur Ctrl+C.

    À la fin de la session, un fichier nommé AllEvents.etl est ajouté dans le répertoire actif. Ce fichier contient des informations de trace sur tous les événements capturés pendant la session.

    Outre AllEvents.etl, la fenêtre de commande affiche un rapport. Le rapport inclut certaines informations qui ont été manquées dans la sortie en temps réel. La sortie suivante montre un exemple de rapport de test pour la session précédente. Le rapport affiche tous les événements rencontrés par le vérificateur matériel 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
    
    

    Dans l’exemple de rapport précédent, notez la valeur du champ Clé pour chaque enregistrement. Le rapport catégorise les informations par ces valeurs clés , ce qui facilite la lecture. Les mêmes valeurs de clé sont utilisées dans les événements capturés dans AllEvents.etl.

  4. Convertissez AllEvents.etl en format texte en exécutant la commande suivante :

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

    Dans le fichier de sortie, recherchez les valeurs de clé précédemment notées. Les valeurs sont associées à l’un de ces champs : fid_UcxController, fid_HubDevice et fid_UsbDevice.

  5. Ouvrez AllEvents.etl dans Netmon, puis sélectionnez Ajouter <field_name> pour afficher le filtre pour filtrer les événements par contrôleur, hub et appareil. Pour plus d’informations, consultez Comment installer les analyseurs Netmon et USB ETW.

Indicateurs de vérificateur de matériel USB

Drapeau Indique que...
Tuyau de Réinitialisation Initiée par le Client du Vérificateur Matériel du Dispositif Le pilote client a lancé une action de récupération en réinitialisant un canal particulier en réponse aux défaillances d’E/S. Certains pilotes clients peuvent effectuer une récupération des erreurs dans d’autres scénarios.
PériphériqueVérificateurHwClientRéinitialisationPort Le pilote client a lancé une action de récupération en réinitialisant l’appareil en réponse aux défaillances d’E/S. Certains pilotes clients peuvent effectuer une récupération d’erreur dans d’autres scénarios.
DeviceHwVerifierClientInitiatedCyclePort Le pilote client a lancé une action de récupération en réinitialisant le port. Cet indicateur amène le Gestionnaire Plug-and-Play à réévaluer l’appareil.
Défaillance de l'isochrone de vérification de périphérique matériel Un appareil USB 3.0 a échoué à la demande de SET_ISOCH_DELAY. L’appareil peut échouer la requête, car le pilote ne nécessite pas les informations de la demande ou une erreur temporaire s’est produite. Toutefois, le pilote ne peut pas faire la différence entre ces raisons. Cette erreur n’est pas capturée dans le rapport.
DeviceHwVerifierSetSelFailure Un appareil USB 3.0 a échoué à la demande de SET_SEL. L’appareil utilise les informations de demande pour Link Power Management (LPM). L’appareil peut échouer la requête, car le pilote ne nécessite pas les informations de la demande ou une erreur temporaire s’est produite. Toutefois, le pilote ne peut pas faire la différence entre ces raisons. Cette erreur n’est pas capturée dans le rapport.
DeviceHwVerifierSerialNumberMismatchOnRenumeration L’appareil a signalé un numéro de série différent pendant la réécriture, par opposition à celui qu’il a signalé lors de l’énumération initiale. Une nouvelle énumération peut se produire à la suite d’une opération de réinitialisation de port ou de reprise du système.
DeviceHwVerifierSuperSpeedDeviceWorkingAtLowerSpeed L’appareil USB 3.0 exploite une vitesse de bus inférieure à SuperSpeed.
DeviceHwVerifierControlTransferFailure Échec du transfert de contrôle sur le point de terminaison par défaut de l’appareil. Le transfert peut échouer en raison d’une erreur d’appareil ou de contrôleur. Les journaux du hub indiquent le code d’état USBD pour l’échec de transfert. Cet indicateur exclut les échecs des transferts de contrôle SET_SEL et SET_ISOCH_DELAY. Ces types de requêtes sont couverts par les indicateurs DeviceHwVerifierSetIsochDelayFailure et DeviceHwVerifierSetSelFailure.
Échec de validation du descripteur du vérificateur matériel de l'appareil Un descripteur retourné par l’appareil n’est pas conforme à la spécification USB. Le journal hub indique l’erreur exacte.
Incompatibilité de la capacité de réveil par l'interface du vérificateur matériel du périphérique Le bit RemoteWake est mal défini sur l’appareil. Les périphériques USB 3.0 qui prennent en charge la mise en éveil à distance doivent également prendre en charge le réveil de fonction. Il existe deux façons pour l’appareil d’indiquer sa prise en charge du réveil de fonction. La première façon consiste à parcourir le champ bmAttributes du descripteur de configuration et la deuxième est en réponse à la requête GET_STATUS ciblée sur l’interface. Pour un appareil non composite, la valeur du bit RemoteWake doit correspondre à la valeur retournée par la requête GET_STATUS qui est ciblée sur l’interface 0. Pour les appareils composites, le bit RemoteWake doit être égal à 1 pour au moins une des fonctions. Dans le cas contraire, cet indicateur indique que l’appareil a signalé des valeurs contradictoires ici.
DeviceHwVerifierBusRenumeration L’appareil est réenumeré sur le bus. Une nouvelle énumération peut se produire à la suite d’une opération de réinitialisation de port ou de reprise du système. Une nouvelle énumération se produit également lorsque l’appareil est désactivé/activé ou arrêté/démarré.
HubHwVerifierTooManyResets Un hub a subi trop d’opérations de réinitialisation dans un court délai. Même si ces réinitialisations ont réussi, le hub ne traite pas les demandes et les erreurs répétées se produisent.
HubHwVerifierControlTransferFailure Échec d’un transfert de contrôle ciblé vers le point de terminaison par défaut du hub. Le transfert peut échouer en raison d’une erreur d’appareil ou de contrôleur. Les journaux du hub indiquent le code d'état USBD pour l'échec.
HubHwVerifierInterruptTransferFailure Échec d’un transfert de données ciblé vers le point de terminaison d’interruption du hub. Le transfert peut échouer en raison d’une erreur d’appareil ou de contrôleur. Les journaux du hub indiquent le code d’état USBD pour l’échec. Si le transfert a échoué en raison de l’annulation de la demande, l’échec n’est pas capturé.
HubHwVerifierNoSelectiveSuspendSupport Le bit RemoteWake n’est pas défini sur 1 dans le descripteur de configuration du hub.
HubHwVerifierPortResetTimeout Lors de l’énumération ou de la réénumération d’un appareil, l’opération de réinitialisation de port arrive à expiration. Une notification de changement de port n’est pas reçue indiquant que la réinitialisation du port est terminée.
HubHwVerifierInvalidPortStatus L’état du port cible n’est pas valide conformément à la spécification USB. Certains appareils peuvent entraîner le signalement de l’état non valide par le hub.
HubHwVerifierPortLinkStateSSInactive Le lien entre le port cible et l’appareil en aval est dans un état d’erreur.
HubHwVerifierPortLinkStateCompliance Le lien entre le port cible et l’appareil en aval est en mode de conformité. Dans certains scénarios impliquant la reprise du mode veille du système, l'erreur de conformité du mode est attendue et dans ces cas l’échec n’est pas capturé.
Appareil du port du vérificateur de matériel du concentrateur déconnecté L’appareil en aval sur le port cible n’est plus connecté au bus.
HubHwVerifierPortOverCurrent Le port en aval a signalé l’état de surcurrentité.
Échec de l'opération du contrôleur HubHwVerifier Une opération de contrôleur (telle que l’activation de l’appareil, la configuration des points de terminaison) a échoué pour l’appareil attaché au port cible. Les échecs des requêtes SET_ADDRESS et Reset endpoint ne sont pas capturés.