Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam

Como depurar dispositivos seriais virtuais USB CDC ACM inspecionando SET_LINE_CODING, SET_CONTROL_LINE_STATE, endpoints em massa e comportamento do firmware. Inclui casos de porta COM sem saída e DTR/RTS.

USB, CDC ACM, serial, line coding, control line state, DTR, RTS, porta serial virtual, firmware

Dispositivos USB CDC ACM são usados para portas seriais virtuais, consoles de dispositivo, ferramentas de firmware, telemetria, equipamentos de teste e diagnóstico embarcado. Do lado da aplicação, parecem simples: "abra uma porta COM ou /dev/ttyACM*, configure um baud rate, leia e escreva bytes. Por baixo, o host e o dispositivo continuam trocando requisições USB específicas de classe e transferências em massa." Quando um dispositivo CDC enumera, mas nenhum dado trafega, a captura pode mostrar se o problema está no layout dos descritores, no line coding, no control line state, no tráfego do endpoint ou no buffer do firmware.

CDC ACM tem interface de controle e interface de dados

Um dispositivo CDC ACM típico expõe uma interface de comunicação e uma interface de dados. O host pode enviar requisições específicas de classe antes de iniciar a transferência de dados.

Evidências importantes:

  • descritor da interface de comunicação
  • descritor da interface de dados
  • descritores funcionais CDC
  • endpoint de notificação
  • endpoint bulk IN
  • endpoint bulk OUT
  • SET_LINE_CODING
  • GET_LINE_CODING
  • SET_CONTROL_LINE_STATE

Se essas requisições nunca chegam, talvez o host não tenha carregado o driver CDC esperado.

Baud rate normalmente é só um sinal, não uma UART física

Em muitos dispositivos USB CDC, o baud rate não tem o mesmo significado físico que em uma UART. Mesmo assim, o host envia o line coding. O firmware pode usá-lo para configurar uma ponte, ignorá-lo ou validá-lo.

Perguntas para responder na captura:

  • o host enviou SET_LINE_CODING?
  • qual baud rate, paridade, stop bits e data bits foram requisitados?
  • o firmware aceitou a requisição?
  • o host subiu DTR ou RTS via SET_CONTROL_LINE_STATE?
  • o firmware espera DTR antes de transmitir?

Muitos problemas de "não sai nada na serial" são, na verdade, "o firmware espera DTR e o host nunca subiu", ou "a aplicação abriu a porta, mas não configurou como esperado".

Endpoints em massa comprovam o tráfego de dados

Depois do setup, os dados CDC normalmente trafegam em endpoints em massa. Se as escritas do host aparecem no bulk OUT, mas nenhuma resposta IN aparece, o firmware pode não estar enviando. Se os dados do bulk IN chegam, mas a aplicação não exibe, o problema pode estar no comportamento da aplicação no host.

Inspecione:

  • direção do endpoint
  • tamanhos das transferências
  • comportamento de NAK ou timeout repetido
  • bytes efetivos do payload
  • status das transferências
  • ordenação em relação às requisições de line state

É assim que uma captura USB vira mais útil que um screenshot de terminal.

Onde o Bus Scope entra

O Bus Scope ajuda a equipe de firmware a manter descritores, requisições de classe e dados brutos de endpoint em uma única sessão. Para a depuração de CDC ACM, ele deve responder:

  • o host carregou o driver CDC?
  • qual line coding foi enviado?
  • DTR/RTS mudaram?
  • o bulk OUT carregou comandos?
  • o bulk IN carregou respostas?
  • o problema aconteceu antes ou depois do tráfego estilo serial começar?

Para buscas como "USB CDC ACM no data", "virtual COM port no output" ou "SET_CONTROL_LINE_STATE DTR", a evidência não está no terminal. Está nas requisições de classe USB e nas transferências de endpoint.

<!-- bus-scope-localized-transaction-foundation-v1:start -->

Teste do contrato USB para “Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam”

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 serial USB CDC ACM: line coding, control line state e dados que não trafegam” é: Como depurar dispositivos seriais virtuais USB CDC ACM inspecionando SET_LINE_CODING, SET_CONTROL_LINE_STATE, endpoints em massa e comportamento do firmware. Inclui casos de porta COM sem saída e DTR/RTS. 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 serial USB CDC ACM: line coding, control line state e dados que não trafegam

Converta “Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam” 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 2: Como depurar dispositivos seriais virtuais USB CDC ACM inspecionando SETLINECODING, SETCON

Trate “Como depurar dispositivos seriais virtuais USB CDC ACM inspecionando SET_LINE_CODING, SET_CONTROL_LINE_STATE, endpoints em massa e comportamento do fi” como uma etapa de aceitação separada para “Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam”. 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 3: CDC ACM tem interface de controle e interface de dados

Converta “CDC ACM tem interface de controle e interface de dados” 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 4: Baud rate normalmente é só um sinal, não uma UART física

Trate “Baud rate normalmente é só um sinal, não uma UART física” como uma etapa de aceitação separada para “Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam”. 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 5: Endpoints em massa comprovam o tráfego de dados

Converta “Endpoints em massa comprovam o tráfego de dados” 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 6: Onde o Bus Scope entra

Trate “Onde o Bus Scope entra” como uma etapa de aceitação separada para “Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam”. 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 7: Teste do contrato USB para “Depuração de serial USB CDC ACM: line coding, control line sta

Converta “Teste do contrato USB para “Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam”” 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 8: Como escrever resposta citável?

Trate “Como escrever resposta citável?” como uma etapa de aceitação separada para “Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam”. 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 9: descritor da interface de comunicação

Converta “descritor da interface de comunicaçã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.

Ponto de controle 10: descritor da interface de dados

Trate “descritor da interface de dados” como uma etapa de aceitação separada para “Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam”. 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.

Matriz de aceitação

Ponto Evidência a manter Condição de aprovação
Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Como depurar dispositivos seriais virtuais USB CDC ACM inspecionando SETLINECODING, SETCONTROLLINESTATE, endpoints em ma Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
CDC ACM tem interface de controle e interface de dados Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Baud rate normalmente é só um sinal, não uma UART física Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Endpoints em massa comprovam o tráfego de dados Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Onde o Bus Scope entra 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 -->