Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver
Como depurar descritores de string USB, falhas em LANGID, bugs no descritor de serial, nomes de fabricante e produto, números de série duplicados e problemas de vínculo de driver.
Descritores de string em USB parecem inofensivos, mas strings ruins podem quebrar vínculo de driver, identidade do dispositivo, persistência de porta serial, automação de laboratório, ferramentas de update de firmware e fluxos de suporte. Quem busca por "USB string descriptor failed", "LANGID descriptor", "USB serial number descriptor missing", "duplicate USB serial number", "USB product string wrong" e "Windows shows unknown USB device name" geralmente está vendo o dispositivo enumerar, mas com identidade instável.
O Bus Scope ajuda porque falhas em string descriptor acontecem durante a enumeração, como transferências de controle. O host pede os language IDs suportados, depois pede as strings de fabricante, produto e serial number. Se qualquer etapa devolve dado malformado, o sistema pode continuar, mas grava uma identidade ruim.
Descritor LANGID
Antes de pedir strings específicas, o host pode pedir o descritor de string zero. Esse devolve os language IDs suportados.
Evidência típica:
GET_DESCRIPTOR String index 0
LANGID list returned
GET_DESCRIPTOR String index 1
GET_DESCRIPTOR String index 2
GET_DESCRIPTOR String index 3
Se o descritor de string zero falha, as requisições de string seguintes podem se comportar de forma inconsistente entre hosts.
Strings de fabricante, produto e serial
Índices de string comuns:
iManufactureriProductiSerialNumber
Esses campos são referenciados a partir do Device Descriptor. Se o dispositivo anuncia um índice de string diferente de zero, mas não devolve a string, o comportamento do host pode variar.
Sintomas:
- O dispositivo aparece como "Unknown Device".
- Nome do produto fica ilegível.
- Número de série vazio.
- Windows cria uma nova porta COM a cada conexão.
- Regras de udev no Linux não batem de forma confiável.
- Ferramenta de update de firmware não identifica o alvo.
- Várias unidades colapsam em uma única identidade.
Números de série duplicados
Números de série USB duplicados são um problema sério de produção. Dois dispositivos físicos com o mesmo VID, PID e serial number podem ser tratados como a mesma instância de dispositivo.
Consequências:
- Dados de calibração errados carregados.
- Estação de teste grava logs na unidade errada.
- Atribuição de porta COM muda de forma imprevisível.
- Licenciamento ou provisionamento vincula ao hardware errado.
- Suporte em campo não consegue distinguir dispositivos.
Uma captura de pacotes pode provar se os bytes do descritor de serial estão realmente duplicados ou se a camada de exibição do SO está escondendo um problema mais profundo.
Falta de número de série
Alguns dispositivos omitem intencionalmente o número de série. Isso pode ser aceitável para periféricos simples, mas atrapalha quando identidade estável importa.
Termos comuns de busca:
- "USB device new COM port every time"
- "USB serial number missing"
- "Windows USB device instance path changes"
- "Linux udev match USB serial"
Se o número de série estiver faltando, o SO pode identificar o dispositivo pela topologia da porta em vez da identidade do hardware.
Strings UTF-16LE malformadas
Strings USB são codificadas como Unicode. Bugs comuns de firmware incluem:
- Tamanho errado do descritor.
- Contagem ímpar de bytes.
- Tipo de descritor faltando.
- Bytes UTF-16LE inválidos.
- Expectativa de terminação nula incorreta.
- Devolução de bytes ASCII em vez do formato de string USB.
- Truncamento de números de série longos.
Alguns hosts toleram. Outros rejeitam o descritor ou exibem texto corrompido.
Timing e retries de requisição de string
Hosts podem pedir a mesma string várias vezes com tamanhos diferentes. Um dispositivo precisa lidar tanto com requisições curtas de probe quanto com requisições de tamanho completo.
Padrões de falha:
- O dispositivo devolve os 2 primeiros bytes corretos, mas falha na requisição completa.
- O firmware assume que
wLengthé sempre igual ao tamanho do descritor. - O endpoint de controle trava em requisições de string repetidas.
- O dispositivo devolve um número de série diferente depois de reset.
- Bootloader e firmware de aplicação reportam identidades diferentes.
Isso é comum em fluxos de update de firmware.
Impacto no vínculo de driver
A escolha de driver costuma depender de VID, PID e classe, mas os descritores de string afetam a identidade visível para o usuário e, às vezes, ferramentas do fabricante. Dispositivos compostos, dispositivos CDC serial, ferramentas HID e bootloaders DFU geralmente dependem das strings para suporte e automação.
Se um ticket diz "nome de dispositivo USB errado", não descarte como cosmético. Pode indicar corrupção de descritor ou confusão de estado no firmware.
Checklist de depuração
Use este processo:
- Capture a enumeração desde a conexão.
- Inspecione os índices de string no Device Descriptor.
- Confira o descritor de string zero para LANGID.
- Decodifique a string de fabricante.
- Decodifique a string de produto.
- Decodifique o número de série.
- Compare duas unidades físicas.
- Compare bootloader e firmware de aplicação.
- Confira o comportamento depois de reset e reconexão.
- Preserve os bytes brutos do descritor para correções de firmware.
Diagnóstico final
Problemas de descritor de string USB e LANGID afetam identidade do dispositivo, persistência de serial, testes de fabricação, suporte em campo e fluxos de driver. A evidência-chave não é o rótulo do sistema operacional, mas as transferências de controle reais dos descritores.
O Bus Scope ajuda a mostrar LANGID, fabricante, produto, serial number, strings malformadas, seriais duplicados e retries de enumeração em uma única visão de diagnóstico.