Partager via


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

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

La plupart des problèmes matériels se manifestent de manière à entraîner une mauvaise expérience utilisateur et il est souvent difficile de déterminer la défaillance exacte. Le vérificateur de matériel USB vise à capturer les défaillances matérielles qui se produisent dans un périphérique, un port, un concentrateur, un contrôleur ou une combinaison d’entre eux.

Le vérificateur de matériel USB peut effectuer les tâches suivantes :

  • Capturer des événements matériels et afficher des informations en temps réel.
  • Générer un fichier de trace avec des informations sur tous les événements.
  • Analyser un fichier de trace existant pour obtenir des informations sur les événements.

Cet article contient les sections suivantes :

Obtenir l’outil d’analyse du vérificateur de matériel USB

L’outil de vérificateur de matériel USB est inclus dans le package logiciel MUTT (Microsoft USB Test Tool) disponible en téléchargement sur Outils dans le package logiciel MUTT.

Le package d’outils contient plusieurs outils qui effectuent des tests de stress et de transfert (comme des transitions d’alimentation) et des tests SuperSpeed. Le package contient également un document LisezMoi (disponible en téléchargement séparé). Le document vous donne un bref aperçu des types de matériel MUTT. Il fournit des instructions étape par étape sur les différents tests que vous devez exécuter, et propose des topologies pour les tests de contrôleur, de concentrateur, de périphérique et de BIOS/UEFI.

Comment capturer des événements en utilisant un vérificateur de matériel USB

Pour capturer des événements à l’aide du vérificateur de matériel, suivez cette procédure :

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

    USB3HWVerifierAnalyzer.exe
    

    L’outil prend en charge les options suivantes :

    Option Description
    -v <VendorID> Enregistre tous les événements du vérificateur de matériel pour le VendorID spécifié.
    -p <ProductID> Enregistre tous les événements du vérificateur de matériel pour le ProductID spécifié.
    -f <ETL file> Analyse le fichier ETL spécifié. 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. Arrêtez la session en appuyant sur CTRL+C.
    Sortie /v Affiche tous les événements dans la console.
  2. Exécutez le scénario de test pour lequel vous souhaitez capturer les é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 de leur survenue. Si vous souhaitez filtrer les événements pour un matériel particulier, spécifiez le VendorId et le ProductId du matériel. L’outil pourrait ne pas capturer certaines informations (telles que VID/PID) sur les événements qui se produisent avant que le périphérique soit entièrement énuméré. Les informations manquantes sont disponibles dans le rapport détaillé généré à la fin de la session (discuté ci-dessous).

    Remarque

    Le fichier ETL AllEvents contiendra toujours tous les événements ETW pour tous les périphériques. Il n’est pas affecté par les commutateurs -v et -p.

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

    USB3HWVerifierAnalyzer.exe -v 0781 -p 5595
    

    Voici un exemple de sortie de l’outil de vérification du 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 actuel. Ce fichier contient des informations de trace sur tous les événements capturés pendant la session.

    En plus de 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. Le rapport suivant montre an exemple de rapport 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 le rapport d’exemple précédent, notez la valeur du champ Clé pour chaque enregistrement. Le rapport classe les informations par ces valeurs de Clé, 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 au 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 et sélectionnez Ajouter <nom_champ> pour afficher le filtre pour filtrer les événements par contrôleur, concentrateur et périphérique. Pour plus d’informations, veuillez consulter la section Comment installer Netmon et les analyseurs ETW USB.

Indicateurs de vérificateur de matériel USB

Indicateur Indique que...
DeviceHwVerifierClientInitiatedResetPipe Le pilote client a initié une action de récupération en réinitialisant un canal particulier en réponse aux échecs d’E/S. Certains pilotes clients peuvent effectuer une récupération d’erreur dans d’autres scénarios.
DeviceHwVerifierClientInitiatedResetPort Le pilote client a initié une action de récupération en réinitialisant le périphérique en réponse aux échecs d’E/S. Certains pilotes clients peuvent effectuer une récupération d’erreur dans d’autres scénarios.
DeviceHwVerifierClientInitiatedCyclePort Le pilote client a initié une action de récupération en désactivant et réactivant le port concerné. Cet indicateur cause la ré-énumération du périphérique par le Gestionnaire de périphériques Plug-and-Play.
DeviceHwVerifierSetIsochDelayFailure Un périphérique USB 3.0 a échoué à la demande SET_ISOCH_DELAY. Le périphérique peut échouer à la demande parce que le pilote ne nécessite pas les informations de la demande ou qu’une erreur temporaire s’est produite. Cependant, le pilote ne peut pas différencier ces raisons. Cette erreur n’est pas capturée dans le rapport.
DeviceHwVerifierSetSelFailure Un périphérique USB 3.0 a échoué à la demande SET_SEL. Le périphérique utilise les informations de demande pour la gestion de l’alimentation en lien (LPM). Le périphérique peut échouer à la demande parce que le pilote ne nécessite pas les informations de la demande ou qu’une erreur temporaire s’est produite. Cependant, le pilote ne peut pas différencier ces raisons. Cette erreur n’est pas capturée dans le rapport.
DeviceHwVerifierSerialNumberMismatchOnRenumeration Le périphérique a signalé un numéro de série différent lors de la ré-énumération par rapport à celui signalé lors de l’énumération initiale. Une ré-énumération peut se produire suite à une réinitialisation de port ou à une opération de reprise du système.
DeviceHwVerifierSuperSpeedDeviceWorkingAtLowerSpeed Le périphérique USB 3.0 fonctionne à une vitesse de bus inférieure à SuperSpeed.
DeviceHwVerifierControlTransferFailure Un transfert de contrôle vers le point de terminaison par défaut du périphérique a échoué. Le transfert peut échouer en raison d’une erreur du périphérique ou du contrôleur. Les journaux du concentrateur indiquent le code d’état USBD pour l’échec du transfert. Cet indicateur exclut les échecs de transferts de contrôle SET_SEL et SET_ISOCH_DELAY. Ces types de demandes sont couverts par les drapeaux DeviceHwVerifierSetIsochDelayFailure et DeviceHwVerifierSetSelFailure.
DeviceHwVerifierDescriptorValidationFailure Un descripteur retourné par le périphérique ne respecte pas la spécification USB. Le journal du concentrateur indique l’erreur exacte.
DeviceHwVerifierInterfaceWakeCapabilityMismatch Le bit RemoteWake (réveil à distance) est mal défini sur l’appareil. Les périphériques USB 3.0 qui prennent en charge le réveil à distance doivent également prendre en charge le réveil par fonction. Le périphérique indique son support du réveil par fonction de deux manières. La première est à travers le champ bmAttributes du descripteur de configuration et la seconde est dans sa réponse à la demande GET_STATUS ciblée sur l’interface. Pour un périphérique non composite, la valeur du bit de réveil à distance doit correspondre à la valeur retournée par la demande GET_STATUS ciblée sur l’interface 0. Pour les périphériques composites, le bit RemoteWake doit être à 1 pour au moins une des fonctions. Sinon, ce drapeau indique que le périphérique a rapporté des valeurs contradictoires ici.
DeviceHwVerifierBusRenumeration Le périphérique est ré-énuméré sur le bus. Une ré-énumération peut se produire suite à une réinitialisation de port ou à une opération de reprise du système. La ré-énumération se produit également lorsque le périphérique est désactivé / activé ou arrêté / démarré.
HubHwVerifierTooManyResets Un concentrateur a subi trop d’opérations de réinitialisation en peu de temps. Même si ces réinitialisations ont réussi, le concentrateur ne traite pas les demandes et des erreurs répétées se produisent.
HubHwVerifierControlTransferFailure Un transfert de contrôle vers le point de terminaison par défaut du concentrateur a échoué. Le transfert peut échouer en raison d’une erreur du périphérique ou du contrôleur. Les journaux du concentrateur indiquent le code d’état USBD pour l’échec du transfert.
HubHwVerifierInterruptTransferFailure Un transfert de données vers le point de terminaison d’interruption du concentrateur a échoué. Le transfert peut échouer en raison d’une erreur du périphérique ou du contrôleur. Les journaux du concentrateur indiquent le code d’état USBD pour l’échec du transfert. 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 paramétré sur 1 dans le descripteur de configuration du hub.
HubHwVerifierPortResetTimeout Lors de l’énumération ou de la ré-énumération d’un périphérique, l’opération de réinitialisation de port prend trop de temps et expire. Aucune notification de changement de port n’est reçue indiquant que la réinitialisation du port est terminée.
HubHwVerifierInvalidPortStatus L’état du port cible n’est pas valide selon la spécification USB. Certains périphériques peuvent amener le hub à signaler l’état invalide.
HubHwVerifierPortLinkStateSSInactive La liaison entre le port cible et le périphérique aval est dans un état d’erreur.
HubHwVerifierPortLinkStateCompliance La liaison entre le port cible et le périphérique aval est en mode de conformité. Dans certains scénarios impliquant la mise en veille et la reprise du système, l’erreur de mode de conformité est attendue et dans ces cas, l’échec n’est pas capturé.
HubHwVerifierPortDeviceDisconnected Le périphérique aval sur le port cible n’est plus connecté au bus.
HubHwVerifierPortOverCurrent Le port aval a signalé un état de surintensité.
HubHwVerifierControllerOperationFailure Une opération de contrôleur (telle que l’activation du périphérique, la configuration des points de terminaison) a échoué pour le périphérique qui est attaché au port cible. Les échecs des demandes SET_ADDRESS et Reset endpoint ne sont pas capturés.