STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées
Comment diagnostiquer les STALL de transfert de contrôle USB, les champs de setup packet, le comportement de l'endpoint zéro, les requêtes de classe, les requêtes vendor, les échecs de descripteurs et le traitement firmware des requêtes.
Les transferts de contrôle USB sont la fondation de l'énumération et de la gestion des périphériques. Ils lisent les descripteurs, définissent les adresses, sélectionnent les configurations, changent d'interface, émettent des requêtes de classe et envoient des commandes vendor. Quand un transfert de contrôle stall, les utilisateurs peuvent voir « USB device not recognized », « control transfer failed », « libusb control transfer error », « endpoint zero stalled » ou un outil de mise à jour firmware qui s'arrête à l'initialisation.
Les recherches comme « USB control transfer STALL », « USB setup packet debugging », « endpoint zero stall », « GET_DESCRIPTOR failed » ou « vendor request stalled » signifient généralement que la défaillance s'est produite avant que le trafic bulk, interrupt ou isochrone normal ait pu se dérouler.
Bus Scope est utile car le setup packet explique la requête. Sans lui, un STALL n'est qu'une erreur générique.
Ce que contient un transfert de contrôle
Un transfert de contrôle USB a des étapes :
- Setup stage
- Data stage (optionnelle)
- Status stage
Le setup packet contient :
bmRequestTypebRequestwValuewIndexwLength
Ces champs définissent la direction, le type de requête, le destinataire, le code de requête, le type de descripteur, l'interface, l'endpoint et la longueur de données attendue.
Si le périphérique stall, inspectez d'abord le setup packet.
L'endpoint zéro est particulier
L'endpoint zéro existe pour chaque périphérique USB. Il est utilisé pendant l'énumération et les opérations de contrôle. Si l'endpoint zéro se comporte incorrectement, l'hôte peut ne jamais lier le pilote normal.
Les défaillances d'endpoint zéro peuvent apparaître comme :
- requête de descripteur de périphérique échouée
- lecture de descripteur de configuration échouée
- requête de descripteur string stalled
- SET_CONFIGURATION échoué
- requête spécifique à la classe échouée
- commande vendor échouée
Pour un firmware personnalisé, la correction de l'endpoint zéro n'est pas négociable.
Le STALL peut être valide
Tout STALL n'est pas un bug. Un périphérique peut légitimement stall une requête non supportée. La question est de savoir si l'hôte attendait un support et si l'état du périphérique permet la requête.
Exemples :
- requête vendor non supportée : STALL peut être correct
- index de descripteur invalide : STALL peut être correct
- requête de classe requise pendant l'énumération : STALL peut casser la liaison de pilote
- requête DFU dans le mauvais état : STALL peut indiquer un décalage de machine à états
La signification dépend du type de requête et du timing.
Échecs de requêtes de descripteurs
Les STALL de descripteurs sont fréquents dans les piles USB personnalisées. Surveillez :
- mauvais type de descripteur dans
wValue - index de string non supporté
- décalage de longueur totale de configuration
- le périphérique renvoie moins de données que demandé incorrectement
- le périphérique ne gère pas les lectures initiales courtes de descripteurs
- le firmware suppose un seul motif de requête hôte
Différents OS demandent les descripteurs dans des ordres différents. Un périphérique qui marche sous Linux peut stall une requête que Windows envoie pendant l'énumération.
Requêtes de classe et vendor
Les requêtes de classe sont interprétées par la classe USB. HID, CDC, DFU, Audio, Video, Mass Storage et les périphériques vendor ont tous des attentes de requêtes.
Exemples courants :
- HID
GET_REPORT - HID
SET_REPORT - CDC
SET_LINE_CODING - CDC
SET_CONTROL_LINE_STATE - DFU
GETSTATUS - contrôles UVC probe/commit
- commandes de bootloader vendor
Si une requête de classe stall, vérifiez si le numéro d'interface dans wIndex correspond à l'interface visée. Les périphériques composites échouent fréquemment parce que l'hôte envoie la requête à une interface et que le firmware en traite une autre.
Checklist de débogage
Suivez ce flux :
- Capturez dès le branchement.
- Trouvez le premier STALL de transfert de contrôle.
- Décodez les champs du setup packet.
- Déterminez si la requête est standard, class ou vendor.
- Déterminez le destinataire : device, interface, endpoint ou autre.
- Vérifiez
wValue,wIndexetwLength. - Comparez aux descripteurs et à l'état courant du périphérique.
- Vérifiez si le STALL est attendu ou fatal.
- Cherchez une requête de récupération comme clear feature ou reset.
- Comparez l'ordre des requêtes de l'OS hôte si le comportement diffère entre plateformes.
Diagnostic final
Un STALL de transfert de contrôle USB n'est pas suffisant à lui seul. Le setup packet est l'ancre du diagnostic. Il indique quelle requête a échoué, quel destinataire était visé, combien de données étaient attendues et si l'état du périphérique rendait la requête valide.
Bus Scope aide à exposer l'endpoint zéro et les preuves de setup packet pour que les équipes firmware, pilote et QA puissent déboguer précisément les échecs de chemin de contrôle.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Test du contrat USB pour « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées »
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 « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées », 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 à « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées » est la suivante : Comment diagnostiquer les STALL de transfert de contrôle USB, les champs de setup packet, le comportement de l'endpoint zéro, les requêtes de classe, les requêtes vendor, les échecs de descripteurs et le traitement firmware des requêtes. 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 : STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes
Transformez « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.
Point de contrôle 2 : Comment diagnostiquer les STALL de transfert de contrôle USB, les champs de setup packet,
Traitez « Comment diagnostiquer les STALL de transfert de contrôle USB, les champs de setup packet, le comportement de l'endpoint zéro, les requêtes de classe, » comme une porte d’acceptation distincte pour « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.
Point de contrôle 3 : Ce que contient un transfert de contrôle
Transformez « Ce que contient un transfert de contrôle » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.
Point de contrôle 4 : L'endpoint zéro est particulier
Traitez « L'endpoint zéro est particulier » comme une porte d’acceptation distincte pour « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.
Point de contrôle 5 : Le STALL peut être valide
Transformez « Le STALL peut être valide » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.
Point de contrôle 6 : Échecs de requêtes de descripteurs
Traitez « Échecs de requêtes de descripteurs » comme une porte d’acceptation distincte pour « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.
Point de contrôle 7 : Requêtes de classe et vendor
Transformez « Requêtes de classe et vendor » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.
Point de contrôle 8 : Checklist de débogage
Traitez « Checklist de débogage » comme une porte d’acceptation distincte pour « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.
Point de contrôle 9 : Diagnostic final
Transformez « Diagnostic final » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.
Point de contrôle 10 : Test du contrat USB pour « STALL de transfert de contrôle USB : débogage de setup packets,
Traitez « Test du contrat USB pour « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées » » comme une porte d’acceptation distincte pour « STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.
Matrice d’acceptation
| Point | Preuve à conserver | Critère de réussite |
|---|---|---|
| STALL de transfert de contrôle USB : débogage de setup packets, endpoint zéro et requêtes échouées | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Comment diagnostiquer les STALL de transfert de contrôle USB, les champs de setup packet, le comportement de l'endpoint | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Ce que contient un transfert de contrôle | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| L'endpoint zéro est particulier | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Le STALL peut être valide | État initial, une action et état obtenu | Une seconde personne reproduit le résultat |
| Échecs de requêtes de descripteurs | É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 :
<!-- multilingual-blog-closeout:end -->