USB Interface Association Descriptor (IAD) et débogage de périphérique composite

Corrigez les erreurs de descripteur IAD et de liaison de pilote de périphérique composite USB. Couvre usbccgp.sys Windows, Code 10, Code 43, descripteurs d'interface et échecs partiels d'énumération.

périphérique composite usb, mauvaise liaison pilote, usbccgp, code 10, code 43, descripteur interface, diagnostic usb

Les périphériques composites USB exposent plusieurs fonctions à travers un seul périphérique USB physique. Un même périphérique peut fournir des contrôles HID, du CDC série, du stockage de masse, du diagnostic vendor, de l'audio, de la vidéo et des interfaces de mise à jour firmware. Quand la liaison de pilote se passe mal, les utilisateurs voient « USB Composite Device driver error », « This device cannot start Code 10 », « Code 43 », « interface not working », « COM port missing » ou « one function works but another does not ».

Les recherches comme « USB composite device wrong driver », « Windows usbccgp Code 10 », « USB interface driver not binding » ou « IAD descriptor debugging » exigent généralement des preuves au niveau du bus. L'état du pilote Windows seul ne montre pas si les descripteurs décrivent les fonctions correctement.

Bus Scope aide car la liaison composite est pilotée par les descripteurs.

Comment les périphériques composites sont structurés

Un périphérique composite contient un descripteur de périphérique et une ou plusieurs configurations. À l'intérieur d'une configuration, il expose plusieurs interfaces. Chaque interface a des valeurs class/subclass/protocol et des endpoints.

Exemples de fonctions :

  • Interface 0 : HID
  • Interface 1 : contrôle CDC
  • Interface 2 : données CDC
  • Interface 3 : diagnostics vendor

Windows utilise le pilote parent générique USB, souvent usbccgp.sys, pour énumérer les fonctions enfants et lier les pilotes appropriés.

Interface Association Descriptor

L'IAD regroupe plusieurs interfaces en une fonction. CDC ACM utilise couramment une interface de contrôle et une interface de données. Sans IAD correcte, l'OS peut les lier incorrectement ou les traiter comme des interfaces non liées.

Symptômes d'IAD incorrecte :

  • port COM série CDC manquant
  • fonction audio partiellement présente
  • caméra UVC énumérée mais interface vidéo en échec
  • interface vendor vole le mauvais pilote
  • seule une sous-fonction marche

Vérifiez soigneusement les numéros d'interface et les plages d'IAD.

Codes de classe et choix du pilote

La liaison de pilote dépend des codes class/subclass/protocol au niveau du périphérique ou de l'interface. Une class au niveau périphérique de 0x00 signifie que la class est définie par interface. Une class au niveau périphérique de 0xEF est souvent utilisée pour les périphériques composites divers avec IAD.

Si le firmware déclare un mauvais code de classe, Windows peut choisir le mauvais pilote.

Pour les périphériques personnalisés, soyez délibéré :

  • les interfaces HID doivent décrire HID correctement
  • les interfaces CDC doivent correspondre aux attentes CDC
  • les interfaces vendor doivent utiliser la vendor class
  • les interfaces WinUSB peuvent nécessiter des descripteurs Microsoft OS

Code 10 et Code 43

Code 10 et Code 43 sont des symptômes OS, pas des causes racines. La trace USB peut révéler si :

  • le descripteur de périphérique a été lu
  • le descripteur de configuration est valide
  • les descripteurs d'interface sont cohérents
  • les descripteurs d'endpoint correspondent aux attentes d'interface
  • les descripteurs spécifiques à la classe sont mal formés
  • le pilote a émis une requête de classe qui a stallé
  • le périphérique a été resete pendant la liaison

Si l'énumération réussit mais qu'une requête de classe échoue, le problème est en aval de la lecture de base des descripteurs.

Défaillance partielle du périphérique

Les périphériques composites peuvent fonctionner partiellement. Par exemple, les boutons HID marchent mais pas le CDC série. Cela signifie que le périphérique n'est pas simplement « mort ». Cela signifie qu'un chemin d'interface a échoué.

Conservez :

  • tous les descripteurs d'interface
  • les descripteurs spécifiques à la classe
  • les numéros d'interface
  • les requêtes de classe du pilote
  • le trafic d'endpoint pour l'interface défaillante

Checklist de débogage

Suivez ce flux :

  1. Capturez dès le branchement.
  2. Inspectez les class/subclass/protocol au niveau périphérique.
  3. Inspectez la longueur totale de configuration et le nombre d'interfaces.
  4. Inspectez chaque descripteur d'interface.
  5. Inspectez les descripteurs IAD et plages d'interfaces.
  6. Inspectez les descripteurs spécifiques à la classe.
  7. Identifiez quelle interface échoue à se lier.
  8. Cherchez les requêtes de classe stalled.
  9. Comparez Windows, Linux et une autre machine Windows si nécessaire.
  10. Conservez les descripteurs avant d'éditer les captures.

Diagnostic final

Les échecs de liaison de pilote composite USB viennent généralement des contrats de descripteurs : codes de classe, numéros d'interface, regroupement IAD, descripteurs spécifiques à la classe, descripteurs Microsoft OS ou requêtes de classe pendant le démarrage du pilote.

Bus Scope aide à exposer ces contrats pour qu'un « USB Composite Device driver error » puisse être tracé jusqu'à l'interface exacte et la preuve de descripteur.