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
- Comment capturer des événements en utilisant un vérificateur de matériel USB
- Indicateurs de vérificateur de matériel USB
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 :
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. 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
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.
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.
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. |