Débogage USB Device Qualifier et Other Speed Configuration

Comment déboguer les descripteurs USB Device Qualifier, Other Speed Configuration, les différences d'énumération high-speed vs full-speed et les échecs de décalage de descripteurs.

device qualifier usb, other speed configuration, usb high speed, usb full speed, décalage descripteur, énumération usb, diagnostic usb

Les périphériques USB qui supportent à la fois le full-speed et le high-speed doivent décrire comment ils se comportent à l'autre vitesse. Les utilisateurs cherchent « USB Device Qualifier descriptor », « Other Speed Configuration descriptor », « high speed device enumerates as full speed », « USB descriptor mismatch » ou « device works on USB 2.0 but fails on hub » quand le même produit se comporte différemment selon le port, câble, hub ou contrôleur hôte.

Bus Scope est utile car le diagnostic exige de comparer requêtes de descripteurs, vitesse réelle, tailles de paquet d'endpoint, descripteurs de configuration et décisions de l'hôte pendant l'énumération.

Ce qu'est le descripteur Device Qualifier

Le descripteur Device Qualifier décrit comment un périphérique capable high-speed fonctionnerait à l'autre vitesse. Si le périphérique est actuellement en high-speed, le qualifier renseigne l'hôte sur le comportement full-speed. S'il est actuellement en full-speed, il peut décrire la capacité high-speed.

Champs importants :

  • version USB
  • device class
  • subclass
  • protocol
  • taille de paquet max de l'endpoint zéro
  • nombre de configurations

Si ce descripteur est manquant, mal formé ou incohérent, l'énumération peut quand même réussir sur un hôte et échouer sur un autre.

Other Speed Configuration

Le descripteur Other Speed Configuration décrit les détails de configuration à la vitesse opposée. Les tailles de paquet d'endpoint, intervalles de polling et hypothèses de bande passante peuvent différer.

Motifs de défaillance fréquents :

  • la configuration full-speed annonce des tailles d'endpoint qui n'ont de sens qu'en high-speed
  • la configuration high-speed oublie une interface
  • le nombre de descripteurs other-speed ne correspond pas à la configuration réelle
  • le firmware renvoie un STALL quand l'hôte attend un descripteur
  • l'hôte accepte le périphérique mais lie le mauvais pilote
  • le périphérique marche via un hub et échoue via un autre

Ces problèmes sont difficiles à voir dans les logs applicatifs.

Périphérique high-speed énuméré comme full-speed

Un cas de support fréquent est « USB high-speed device detected as full-speed ». Cela peut venir de la qualité du câble, de la topologie du hub, de l'intégrité du signal, du comportement de chirp firmware, du design électrique ou de problèmes de descripteurs.

La preuve au niveau paquet aide à séparer les couches :

  • La négociation high-speed a-t-elle eu lieu ?
  • L'hôte a-t-il demandé le Device Qualifier ?
  • Le périphérique a-t-il renvoyé des octets de descripteur valides ?
  • Les descripteurs d'endpoint correspondaient-ils à la vitesse sélectionnée ?
  • L'hôte a-t-il resete et retenté ?
  • Le périphérique s'est-il ré-énuméré plus tard à une autre vitesse ?

Si la trace montre que le périphérique n'a jamais atteint le high-speed, des correctifs de descripteurs ne suffiront pas. Si la trace montre une énumération high-speed mais des descripteurs other-speed invalides, le firmware est un suspect plus sérieux.

Décalage de taille de paquet d'endpoint entre vitesses

Les descripteurs d'endpoint peuvent différer entre les configurations full-speed et high-speed. Un endpoint bulk peut faire 64 octets en full-speed et 512 en high-speed.

Symptômes de défaillance :

  • les transferts échouent seulement sur les ports high-speed
  • les transferts échouent seulement via un vieux hub full-speed
  • la taille de buffer firmware correspond à une vitesse mais le descripteur en annonce une autre
  • le pilote hôte envoie des transferts plus gros que ce que le firmware attendait
  • le périphérique renvoie des paquets courts à des frontières inattendues

Cela se rattache directement au débogage de wMaxPacketSize.

Périphériques composites

Les périphériques composites rendent les descripteurs other-speed plus fragiles. Un périphérique peut exposer HID, CDC, vendor, stockage de masse et interfaces de mise à jour firmware. L'arbre other-speed doit rester cohérent.

Bugs :

  • descripteur Interface Association manquant à une vitesse
  • numéros d'interface différents entre vitesses
  • adresses d'endpoint qui changent de façon inattendue
  • une interface a un descripteur other-speed valide et une autre non
  • Windows lie un pilote différent après ré-énumération

Pour les produits à firmware personnalisé, c'est une erreur de copier-coller fréquente.

STALL peut être valide ou suspect

Certaines requêtes de descripteurs peuvent légitimement STALL pour des périphériques qui ne supportent pas la capacité demandée. Mais pour les périphériques capables high-speed, des défaillances répétées autour du Device Qualifier ou de Other Speed Configuration méritent attention.

Le rapport doit conserver :

  • type de requête
  • type de descripteur
  • wValue
  • wIndex
  • wLength
  • données renvoyées
  • statut STALL ou timeout

Bus Scope doit rendre ces transferts de contrôle lisibles au lieu de forcer les ingénieurs à décoder manuellement les octets bruts.

Checklist de débogage

Suivez ce flux :

  1. Capturez depuis le branchement physique.
  2. Enregistrez la vitesse réellement négociée.
  3. Inspectez le Device Descriptor.
  4. Inspectez le descripteur Device Qualifier.
  5. Inspectez le descripteur Other Speed Configuration.
  6. Comparez les tailles de paquet d'endpoint entre vitesses.
  7. Vérifiez les numéros d'interface et adresses d'endpoint.
  8. Testez port direct, hub et dock USB-C.
  9. Comparez le comportement d'énumération Windows et Linux.
  10. Conservez les échecs et retries de requêtes de descripteurs.

Diagnostic final

Les bugs USB Device Qualifier et Other Speed Configuration sont des problèmes de cohérence de descripteurs. Ils expliquent pourquoi un périphérique peut marcher à une vitesse, échouer à une autre, ou se comporter différemment derrière des hubs et docks.

Bus Scope aide à capturer la preuve d'énumération exacte : requêtes de descripteurs, octets other-speed, tailles d'endpoint, STALLs, resets et conséquences de liaison de pilote.