Vínculo errado de driver em dispositivo composto USB: depuração de interfaces, IAD, Code 10, Code 43 e usbccgp do Windows
Como corrigir erros de vínculo de driver em dispositivo composto USB e Interface Association Descriptor (IAD). Cobre usbccgp.sys do Windows, Code 10, Code 43, descritores de interface e falhas parciais de enumeração.
Dispositivos compostos USB expõem várias funções através de um único dispositivo USB físico. Um único dispositivo pode fornecer controles HID, serial CDC, armazenamento em massa, diagnóstico vendor, áudio, vídeo e interfaces de update de firmware. Quando o vínculo de driver dá errado, o usuário vê "USB Composite Device driver error", "This device cannot start Code 10", "Code 43", "interface not working", "COM port missing" ou "uma função funciona e outra não".
Buscas como "USB composite device wrong driver", "Windows usbccgp Code 10", "USB interface driver not binding" e "IAD descriptor debugging" geralmente exigem evidência em nível de barramento. Só o estado de driver do Windows não mostra se os descritores descrevem as funções corretamente.
O Bus Scope ajuda porque o vínculo em composto é dirigido pelos descritores.
Como dispositivos compostos são estruturados
Um dispositivo composto contém um device descriptor e uma ou mais configurações. Dentro de uma configuração, ele expõe várias interfaces. Cada interface tem valores de class, subclass e protocol, além de endpoints.
Exemplo de funções:
- Interface 0: HID
- Interface 1: controle CDC
- Interface 2: dados CDC
- Interface 3: diagnóstico vendor-specific
O Windows usa o driver genérico pai de USB, geralmente usbccgp.sys, para enumerar funções filhas e vincular os drivers apropriados.
Interface Association Descriptor
O IAD agrupa várias interfaces em uma função. CDC ACM costuma usar uma interface de controle e uma interface de dados. Sem um IAD correto, o SO pode vinculá-las errado ou tratá-las como interfaces sem relação.
Sintomas de IAD errado:
- Porta COM serial CDC faltando.
- Função de áudio aparece parcialmente.
- Câmera UVC enumera, mas a interface de vídeo falha.
- Interface vendor rouba o driver errado.
- Só uma subfunção funciona.
Confira com cuidado os números de interface e os ranges do IAD.
Class codes e escolha de driver
O vínculo de driver depende dos class/subclass/protocol codes no nível de device ou interface. Um class code de device 0x00 significa que a classe é definida por interface. Um class code de device 0xEF é usado com frequência em dispositivos compostos com IAD.
Se o firmware declara o class code errado, o Windows pode escolher o driver errado.
Para dispositivos custom, seja deliberado:
- Interfaces HID devem descrever HID corretamente.
- Interfaces CDC devem casar com a expectativa CDC.
- Interfaces vendor-specific devem usar vendor class.
- Interfaces WinUSB podem precisar de descritores Microsoft OS.
Code 10 e Code 43
Code 10 e Code 43 são sintomas do SO, não causa raiz. O trace USB pode revelar se:
- O device descriptor foi lido.
- O configuration descriptor é válido.
- Os interface descriptors são consistentes.
- Os endpoint descriptors casam com a expectativa da interface.
- Descritores específicos de classe estão malformados.
- O driver emitiu uma class request que travou.
- O dispositivo resetou durante o vínculo.
Se a enumeração passa, mas uma class request falha, o problema é mais adiante do que a leitura básica do descritor.
Falha parcial do dispositivo
Dispositivos compostos podem funcionar parcialmente. Por exemplo, botões HID funcionam, mas o serial CDC não. Isso significa que o dispositivo não está simplesmente "morto". Significa que um caminho de interface falhou.
Preserve:
- Todos os interface descriptors.
- Descritores específicos de classe.
- Números de interface.
- Class requests do driver.
- Tráfego de endpoint da interface que falhou.
Checklist de depuração
Use este fluxo:
- Capture desde a conexão.
- Inspecione class, subclass e protocol no nível de device.
- Inspecione o comprimento total da configuração e a quantidade de interfaces.
- Inspecione cada interface descriptor.
- Inspecione os descritores de IAD e os ranges de interface.
- Inspecione descritores específicos de classe.
- Identifique qual interface falha ao vincular.
- Procure class requests travadas.
- Compare Windows, Linux e outra máquina Windows se necessário.
- Preserve os descritores antes de editar as capturas.
Diagnóstico final
Falhas de vínculo de driver em composto USB geralmente vêm de contratos de descritor: class codes, números de interface, agrupamento por IAD, descritores específicos de classe, descritores Microsoft OS ou class requests durante a inicialização do driver.
O Bus Scope ajuda a expor esses contratos para que um "USB Composite Device driver error" seja rastreado até a interface e a evidência de descritor exatas.