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.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Teste do contrato USB para “Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver”
A resposta direta é que STALL, timeout ou reset não explica sozinho a causa. Primeiro prove que o provider vê o device correto; depois leia o contrato do transfer: tipo, direção, recipient, wValue, wIndex, comprimento declarado e real, status e estado anterior e posterior. Ligue a conclusão à primeira transação diferente do caso bom.
| Limite | Comparação | Decisão |
|---|---|---|
| Plataforma | provider, permissão, Root Hub ou usbmon/XHC20 | Os records são da conexão correta? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | O host enviou o pedido esperado? |
| Data | direção, comprimento e bytes retidos | O payload cumpre o contrato? |
| Status | ACK, STALL, timeout ou cancellation | Onde a transação termina? |
| Estado | configuration, interface, alternate setting, halt | O device estava pronto? |
Comece antes de reset e enumeration e preserve descriptors, SET_CONFIGURATION, SET_INTERFACE e o command anterior à falha. Filtro estreito pode esconder o control transfer decisivo. Execute uma ação USB por teste e altere apenas firmware, driver, porta, cabo, comando ou timing.
Como escrever resposta citável?
Informe request, campos setup, resposta e contexto anterior; depois proponha teste com uma variável. Bytes não retidos não provam packet loss. Proximidade entre command e reset mostra correlação, não causa sem repetição ou mudança de estado.
Mantenha VID/PID, firmware, speed, topologia, provider, filtro e trigger. Compare fases USB semânticas, não frame numbers entre usbmon e USBPcap. Registre início, fim, versão, OS, conexão e checksum. Consulte o troubleshooting Bus Scope.
Os owners Semrush continuam separados: free USB analyzer na página do produto, best USB protocol analyzer na comparação e USB descriptor viewer no guia descriptor. Não invente volume ou KD.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->Resposta direta e limite de aceitação
A resposta curta para “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. Trate essa frase como um resultado a verificar, não como promessa para qualquer entrada, dispositivo, projeto ou ambiente. Um resultado completo registra estado inicial, ação exata, saída visível e condição que comprova a conclusão da tarefa no Bus Scope.
Procedimento orientado por evidências
Comece com um caso pequeno e repetível antes de alterar um projeto completo. Registre versão do aplicativo, sistema operacional, identidade da entrada ou dispositivo, configurações relevantes e resultado esperado. Execute uma ação deliberada, preserve a primeira transição inesperada e compare com um caso conhecido quando possível. Alterar vários controles ao mesmo tempo esconde qual condição criou ou corrigiu o problema.
Ponto de controle 1: Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de dr
Trate “Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver” como uma etapa de aceitação separada para “Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.
Ponto de controle 2: Como depurar descritores de string USB, falhas em LANGID, bugs no descritor de serial, nom
Converta “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 pr” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.
Ponto de controle 3: Descritor LANGID
Trate “Descritor LANGID” como uma etapa de aceitação separada para “Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.
Ponto de controle 4: Strings de fabricante, produto e serial
Converta “Strings de fabricante, produto e serial” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.
Ponto de controle 5: Números de série duplicados
Trate “Números de série duplicados” como uma etapa de aceitação separada para “Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.
Ponto de controle 6: Falta de número de série
Converta “Falta de número de série” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.
Ponto de controle 7: Strings UTF-16LE malformadas
Trate “Strings UTF-16LE malformadas” como uma etapa de aceitação separada para “Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.
Ponto de controle 8: Timing e retries de requisição de string
Converta “Timing e retries de requisição de string” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.
Ponto de controle 9: Impacto no vínculo de driver
Trate “Impacto no vínculo de driver” como uma etapa de aceitação separada para “Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.
Ponto de controle 10: Checklist de depuração
Converta “Checklist de depuração” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.
Matriz de aceitação
| Ponto | Evidência a manter | Condição de aprovação |
|---|---|---|
| Depuração de descritor de string USB e LANGID: serial, fabricante, produto e vínculo de driver | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Como depurar descritores de string USB, falhas em LANGID, bugs no descritor de serial, nomes de fabricante e produto, nú | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Descritor LANGID | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Strings de fabricante, produto e serial | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Números de série duplicados | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Falta de número de série | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
Isolamento, recuperação e entrega
Pare no primeiro limite que falhar. Preserve fonte, projeto, sessão ou captura, duplique antes de edição destrutiva e altere uma variável por experimento. Repetir um fluxo amplo depois de várias mudanças pode gerar outro resultado sem explicar o motivo.
Separe ausência de evidência de evidência de ausência. Uma tela vazia pode indicar entrada, escopo, filtro, permissão, dispositivo, intervalo ou estado incorreto. Verifique aquisição ou importação antes de interpretar decoder, editor, relatório ou exportação.
Antes da entrega, reabra o artefato e examine início, ponto de decisão e final. Registre versão, plataforma, configuração, expectativa, observação e reprodução mínima. Remova ou oculte dados sensíveis e confirme a autorização do destinatário.
Perguntas e respostas
Qual é a maneira confiável mais rápida de começar?
Use o menor caso representativo, escreva o resultado esperado e altere uma variável. Confirme o caminho básico antes de adicionar filtros, efeitos, edições, automação ou uma fonte maior.
Quais evidências devem ser salvas?
Mantenha identidade da entrada, versão, plataforma, configurações, ação exata, primeira transição inesperada e saída final. Feche e reabra projeto, sessão, relatório ou exportação antes de tratá-lo como durável.
Quando o procedimento deve ser repetido?
Repita após mudanças relevantes no aplicativo, sistema, driver, firmware, modelo, fonte ou fluxo. Preserve o caso aceito anterior como referência sem alterações.
Quando a tarefa está pronta para entrega?
Quando outra pessoa autorizada identifica a entrada, repete a ação, vê o mesmo resultado, entende os limites restantes e abre o artefato sem depender de estado local não documentado.
Guias relacionados
Estas páginas no mesmo idioma cobrem etapas próximas sem alterar o proprietário canônico deste assunto:
<!-- multilingual-blog-closeout:end -->