Débogage du remote wakeup et du suspend/resume USB
Comment déboguer le remote wakeup USB, échecs de suspend/resume, déconnexions de selective suspend, wake events manqués, bugs de gestion d'alimentation et signalisation de resume avec captures USB.
Les bugs de gestion d'alimentation USB sont durs à diagnostiquer car le périphérique peut fonctionner parfaitement quand le système est actif et échouer seulement après inactivité, veille, selective suspend, veille du dock, fermeture du capot d'un laptop ou extinction du moniteur. Les utilisateurs cherchent « USB remote wakeup not working », « USB selective suspend disconnect », « USB device does not wake computer », « USB resume failure », « USB suspend resume bug » ou « HID keyboard wake from sleep not working ».
Bus Scope est utile car suspend et resume sont des événements au niveau bus, pas seulement des erreurs applicatives. Vous devez voir si l'hôte a suspendu le périphérique, si le remote wakeup a été activé, si le périphérique a signalé le resume, si l'hôte a repris le trafic, et si le périphérique s'est ré-énuméré au lieu de resume.
Ce que signifie remote wakeup
Le remote wakeup permet à un périphérique USB suspendu de demander à l'hôte de reprendre la communication. Exemples courants :
- Un clavier réveille un desktop en veille.
- Une souris réveille un laptop depuis l'inactivité.
- Un bouton de dock réveille une station de travail.
- Un scanner de codes-barres réveille une borne.
- Un contrôleur industriel réveille un panel PC.
- Un capteur HID réveille un hôte après un événement externe.
Le remote wakeup n'est pas simplement « le périphérique a du courant ». L'hôte doit l'autoriser, le périphérique doit annoncer le support, la feature doit être activée, et la signalisation de resume doit arriver au bon moment.
Symptômes courants
Les problèmes de remote wakeup et suspend ressemblent à :
- Le périphérique marche jusqu'à ce que le PC se mette en veille.
- Le périphérique ne réveille pas l'ordinateur.
- Le périphérique réveille le système immédiatement après le suspend.
- Le périphérique disparaît après le resume.
- Le périphérique se ré-énumère avec une nouvelle adresse.
- Entrée HID manquée après inactivité.
- Périphérique série arrête d'émettre après selective suspend.
- Périphérique audio ou caméra revient de veille sans données.
- Le firmware ne récupère qu'après débranchement/rebranchement.
Ces symptômes sont souvent mis sur le compte des pilotes, mais la capture peut montrer un problème d'état d'alimentation firmware.
Preuve de descripteur et de feature
Le descripteur de configuration peut annoncer la capacité remote wakeup. L'hôte peut ensuite activer ou désactiver la feature remote wakeup. Une bonne trace diagnostique USB doit répondre à :
- Le périphérique annonce-t-il le remote wakeup ?
- L'hôte a-t-il envoyé
SET_FEATURE(DEVICE_REMOTE_WAKEUP)? - L'hôte a-t-il clear la feature ensuite ?
- Le suspend s'est-il produit après inactivité ?
- Le périphérique a-t-il tenté la signalisation de resume ?
- L'hôte a-t-il repris les transferts normaux ?
Sans ces faits, le diagnostic est du tâtonnement.
Selective suspend
La selective suspend permet au système d'exploitation de suspendre un périphérique USB inactif sans mettre tout le système en veille. Cela économise de l'énergie, mais cela expose des bugs firmware.
Motifs de défaillance :
- Le périphérique entre en low-power mais ne restaure pas l'état de l'endpoint.
- Le firmware perd l'état interrupt IN en attente.
- Le périphérique NAKe pour toujours après resume.
- L'hôte reset le périphérique après timeout.
- L'application voit un timeout ou un retrait de périphérique.
- Le périphérique composite resume une interface mais pas une autre.
Les chercheurs tapent souvent « USB selective suspend random disconnect » car le périphérique semble se déconnecter alors que l'événement réel est un échec de suspend/resume.
Resume vs ré-énumération
Après la veille, il y a deux issues très différentes :
- Resume : le même périphérique continue avec la configuration existante.
- Ré-énumération : l'hôte reset et ré-énumère le périphérique.
La ré-énumération peut être acceptable après une déconnexion physique, mais elle est suspecte après un suspend normal. Elle peut casser les applications qui détiennent des handles, des noms de ports série, des chemins HID ou des sessions de capture caméra.
Bus Scope doit aider à identifier si la trace contient un trafic de resume normal ou une nouvelle séquence d'énumération avec GET_DESCRIPTOR, SET_ADDRESS et SET_CONFIGURATION.
Wake events manqués
Parfois le périphérique voit l'événement externe mais l'hôte ne se réveille pas. Causes :
- Remote wakeup non annoncé.
- Remote wakeup non activé par l'hôte.
- Le périphérique envoie le resume trop tôt.
- Le périphérique envoie le resume trop tard.
- Le hub bloque ou mal gère la signalisation de wake.
- La politique de wake du BIOS ou de l'OS désactive le port.
- Le firmware du périphérique entre dans un sommeil plus profond qu'attendu.
- L'événement survient avant que le suspend ne soit terminé.
La preuve au niveau paquet ne remplace pas la politique d'alimentation de l'OS, mais elle cernera la question. Le périphérique avait-il la permission de réveiller l'hôte, et a-t-il essayé ?
Wake immédiat après suspend
Le problème opposé est aussi courant : le système suspend et se réveille immédiatement. Les périphériques USB peuvent causer cela quand ils signalent le wake à cause d'une entrée stale, d'un état d'interrupt bruité, de bugs de debounce, ou d'un firmware qui traite le suspend comme un nouvel événement.
Preuves à collecter :
- Dernier rapport d'interrupt avant suspend.
- Si l'hôte a activé le wake.
- Timing entre suspend et resume.
- Class et interface du périphérique.
- Si le même endpoint avait des données en attente.
- Si l'événement se répète à chaque tentative de suspend.
C'est particulièrement fréquent avec les claviers, souris, panneaux tactiles, manettes et périphériques HID personnalisés.
Checklist de débogage
Suivez ce processus :
- Capturez l'énumération depuis le branchement.
- Confirmez la capacité remote wakeup dans les descripteurs.
- Vérifiez si l'hôte active le remote wakeup.
- Enregistrez la période d'inactivité avant le suspend.
- Identifiez le timing du suspend.
- Cherchez la signalisation de resume ou le trafic de resume de l'hôte.
- Séparez le resume de la ré-énumération complète.
- Vérifiez le comportement des endpoints après resume.
- Comparez le même périphérique sur port direct et via un hub.
- Conservez les paquets pré-suspend et post-resume.
Diagnostic final
Les bugs de remote wakeup et suspend/resume USB sont des problèmes de protocole d'état d'alimentation. La preuve utile est la capacité de descripteur, la sélection de feature par l'hôte, le timing du suspend, la signalisation de resume, la récupération des endpoints, et si l'hôte a resume ou ré-énuméré le périphérique.
Bus Scope aide à rendre cette preuve visible pour que « USB wake not working » devienne un diagnostic concret au lieu d'une boucle de blâme sur les pilotes.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Test du contrat USB pour « Débogage du remote wakeup et du suspend/resume USB »
La réponse directe est qu’un STALL, timeout ou reset n’explique pas seul la cause. Prouvez d’abord que le fournisseur voit le bon périphérique, puis lisez le contrat du transfer : type, direction, recipient, wValue, wIndex, longueur annoncée et réelle, status et état avant/après. Pour « Débogage du remote wakeup et du suspend/resume USB », reliez la conclusion à la première transaction différente d’un cas nominal.
| Limite | Comparaison | Décision |
|---|---|---|
| Plateforme | fournisseur, droits, Root Hub ou usbmon/XHC20 | Les records viennent-ils de la bonne connexion ? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | L’hôte envoie-t-il la requête prévue ? |
| Data | direction, longueur et bytes conservés | Le payload respecte-t-il le contrat ? |
| Status | ACK, STALL, timeout ou cancellation | Où finit réellement la transaction ? |
| État | configuration, interface, alternate setting, endpoint halt | Le périphérique était-il prêt ? |
Commencez avant reset et énumération et gardez descriptors, SET_CONFIGURATION, SET_INTERFACE et la commande avant défaut. Un filtre endpoint étroit peut masquer le control transfer décisif. Exécutez une seule action USB documentée par essai et ne changez que firmware, driver, port, câble, commande ou timing.
Comment rédiger une réponse réutilisable ?
Nommez requête, champs setup, réponse et contexte précédent, puis un test à variable unique. Des bytes non retenus ne prouvent pas packet loss. La proximité entre command et reset établit une corrélation, pas la cause sans répétition ou transition d’état.
Quand la comparaison est-elle valide ?
Gardez VID/PID, firmware, speed, topologie, fournisseur, filtre et trigger. Comparez les phases USB sémantiques, pas les frame numbers entre usbmon et USBPcap. Notez début, fin, version, OS, connexion et checksum. Consultez le dépannage Bus Scope.
Les propriétaires Semrush restent distincts : free USB analyzer sur la page produit, best USB protocol analyzer dans la comparaison et USB descriptor viewer dans le guide descriptor. Aucun volume ou KD n’est inventé pour cette page de support.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->Réponse directe et limite d’acceptation
La réponse courte à « Débogage du remote wakeup et du suspend/resume USB » est la suivante : Comment déboguer le remote wakeup USB, échecs de suspend/resume, déconnexions de selective suspend, wake events manqués, bugs de gestion d'alimentation et signalisation de resume avec captures USB. Considérez cette phrase comme un résultat à vérifier, et non comme une promesse valable pour toute entrée, tout appareil, tout projet ou tout environnement. Un résultat complet consigne l’état initial, l’action exacte, la sortie visible et la condition qui prouve la fin de la tâche dans Bus Scope.
Procédure fondée sur les preuves
Commencez par un cas petit et répétable avant de modifier un projet complet. Notez version de l’application, système, identité de l’entrée ou de l’appareil, réglages pertinents et résultat attendu. Exécutez une action volontaire, conservez la première transition inattendue et comparez-la à un cas nominal si possible. Plusieurs changements simultanés masquent la condition qui a créé ou corrigé le problème.
Point de contrôle 1 : Débogage du remote wakeup et du suspend/resume USB
Ne fermez « Débogage du remote wakeup et du suspend/resume USB » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.
Point de contrôle 2 : Comment déboguer le remote wakeup USB, échecs de suspend/resume, déconnexions de selective
Pour « Comment déboguer le remote wakeup USB, échecs de suspend/resume, déconnexions de selective suspend, wake events manqués, bugs de gestion d'alimentatio », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.
Point de contrôle 3 : Ce que signifie remote wakeup
Ne fermez « Ce que signifie remote wakeup » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.
Point de contrôle 4 : Symptômes courants
Pour « Symptômes courants », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.
Point de contrôle 5 : Preuve de descripteur et de feature
Ne fermez « Preuve de descripteur et de feature » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.
Point de contrôle 6 : Selective suspend
Pour « Selective suspend », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.
Point de contrôle 7 : Resume vs ré-énumération
Ne fermez « Resume vs ré-énumération » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.
Point de contrôle 8 : Wake events manqués
Pour « Wake events manqués », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.
Point de contrôle 9 : Wake immédiat après suspend
Ne fermez « Wake immédiat après suspend » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.
Point de contrôle 10 : Checklist de débogage
Pour « Checklist de débogage », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.
Matrice d’acceptation
| Point | Preuve à conserver | Critère de réussite |
|---|---|---|
| Débogage du remote wakeup et du suspend/resume USB | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Comment déboguer le remote wakeup USB, échecs de suspend/resume, déconnexions de selective suspend, wake events manqués, | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Ce que signifie remote wakeup | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Symptômes courants | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Preuve de descripteur et de feature | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Selective suspend | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
Isolation, reprise et transmission
Arrêtez-vous à la première limite en échec. Conservez source, projet, session ou capture, dupliquez avant toute modification destructive et changez une variable par essai. Rejouer un flux entier après plusieurs changements peut modifier le résultat sans expliquer pourquoi.
Distinguez absence de preuve et preuve d’absence. Une vue vide peut signaler mauvaise entrée, portée, filtre, permission, appareil, période ou état du projet. Vérifiez acquisition ou import avant d’interpréter décodeur, éditeur, rapport ou export.
Avant transmission, rouvrez l’artefact durable et inspectez début, point de décision et fin. Notez version, plateforme, configuration, attente, observation et reproduction minimale. Retirez ou masquez les données sensibles et confirmez l’autorisation du destinataire.
Questions et réponses
Quelle est la manière fiable la plus rapide de commencer ?
Utilisez le plus petit cas représentatif, écrivez le résultat attendu et ne changez qu’une variable. Validez le parcours de base avant d’ajouter filtres, effets, modifications, automatisation ou grande source.
Quelles preuves faut-il conserver ?
Gardez identité de l’entrée, version, plateforme, réglages, action exacte, première transition inattendue et sortie finale. Fermez puis rouvrez projet, session, rapport ou export avant de le considérer durable.
Quand faut-il répéter la procédure ?
Répétez-la après un changement pertinent d’application, système, pilote, firmware, modèle, source ou processus. Conservez le cas accepté précédent comme référence non modifiée.
Quand le résultat est-il transmissible ?
Lorsqu’une seconde personne autorisée identifie l’entrée, répète l’action, obtient le même résultat, comprend les limites et ouvre l’artefact sans état local non documenté.
Guides associés
Ces pages dans la même langue couvrent les étapes voisines sans changer le propriétaire canonique du sujet :
- Débogage de la selective suspend USB : déconnexions aléatoires, échecs de sleep/resume et transferts manquants
- Débogage de périphérique composite USB : numéros d'interface, IAD, endpoints et liaison de pilote
- Échec de mise à jour firmware USB DFU : débogage du mode bootloader, transferts de contrôle, timeouts et reconnexions