Depuração de DTR e RTS em USB CDC ACM: SetControlLineState, abertura de porta, bootloader e dados faltando
Como depurar DTR e RTS em USB CDC ACM, requisições SetControlLineState, comportamento de abertura de porta serial, gatilhos de reset no bootloader e dados seriais ausentes.
Dispositivos USB CDC ACM parecem portas seriais, mas muitos bugs de "porta serial" são, na verdade, bugs de controle de classe USB. Quem busca por "CDC ACM DTR RTS", "SetControlLineState USB", "USB serial no data until DTR", "Arduino resets when serial port opens", "USB CDC bootloader reset" e "COM port opens but device does not respond" geralmente vê a porta existir, mas o comportamento estar errado.
O Bus Scope ajuda porque DTR e RTS não são flags mágicas da aplicação. O host envia requisições de controle específicas de classe, e o firmware reage a essas requisições.
O que o SetControlLineState faz
CDC ACM usa uma requisição de classe comumente chamada SetControlLineState. Ela comunica o estado das linhas de controle, como:
- DTR: Data Terminal Ready.
- RTS: Request To Send.
Muitos dispositivos usam esses bits para mais do que o comportamento tradicional de modem. O firmware pode começar a transmitir só depois que DTR é ativado, entrar em bootloader quando DTR alterna, ou usar RTS para semântica de controle de fluxo.
Sintomas comuns
Problemas com linhas de controle aparecem como:
- Porta COM abre, mas nenhum dado chega.
- Dispositivo só começa a transmitir depois que o terminal conecta.
- Firmware reseta quando um monitor serial abre.
- Bootloader aparece depois de abrir e fechar a porta.
- Dados param quando DTR cai.
- Opção de controle de fluxo RTS/CTS muda o comportamento.
- Ferramenta no Linux funciona, mas no Windows não.
- Script em Python se comporta diferente de um emulador de terminal.
Essas frases batem com os sintomas que engenheiros descrevem quando tentam reproduzir a falha.
Comportamento de abertura de porta serial
Diferentes aplicações no host tratam DTR e RTS de forma distinta ao abrir a porta.
Exemplos:
- Emulador de terminal sobe DTR imediatamente.
- Script abre a porta, mas deixa DTR em falso.
- Ferramenta de update de firmware alterna DTR como sinal de reset.
- Driver seta RTS com base nas configurações de controle de fluxo.
- Aplicação fecha a porta e derruba DTR de forma inesperada.
O trace de pacotes pode mostrar a sequência real de requisições de controle em vez de depender de suposições da aplicação.
Padrões de reset via bootloader
Muitas placas de desenvolvimento usam transições de DTR ou RTS para entrar em modo bootloader. Isso é prático para upload de firmware, mas pega gente de surpresa em ferramentas de produção.
Padrões de falha:
- Dispositivo reseta toda vez que um visualizador de logs abre.
- Upload de firmware funciona, mas conexão serial normal falha.
- Dispositivo aparece como uma identidade USB, reseta, e reenumera como bootloader.
- Número de série ou product string muda depois do reset.
- Aplicação perde o handle da porta.
O Bus Scope deve preservar a requisição de controle e a sequência de reenumeração.
Sem dados até DTR
Alguns firmware esperam de propósito DTR antes de transmitir. Isso pode fazer uma ferramenta parecer quebrada enquanto outra funciona.
Evidência:
- Host abre endpoints bulk ou interrupt.
- Nenhum dado IN é enviado.
- Host envia SetControlLineState com DTR true.
- Dispositivo começa a transmitir.
Isso não é problema de cabo e não é necessariamente bug de driver. É política do firmware.
Confusão entre RTS e controle de fluxo
RTS pode ser usado para controle de fluxo por hardware, mas muitos dispositivos USB CDC não têm linhas reais de modem. O firmware ainda pode expor o estado de RTS para a lógica da aplicação.
Perguntas:
- O host seta RTS?
- O dispositivo exige RTS antes de transmitir?
- Habilitar controle de fluxo por hardware no terminal muda os bits da requisição?
- O firmware ignora RTS, mas a documentação diz o contrário?
- RTS é usado como bootloader ou sinal de seleção de modo?
Evidência de pacotes evita achismo.
Checklist de depuração
Use este processo:
- Capture a enumeração.
- Abra a porta serial com a aplicação que falha.
- Registre as requisições CDC específicas de classe.
- Encontre o SetControlLineState.
- Decodifique os bits DTR e RTS.
- Compare com um programa de terminal que funciona.
- Confira se os dados começam depois de DTR.
- Confira se há reset ou reenumeração depois de um toggle.
- Compare ferramentas no Windows e no Linux.
- Preserve as requisições de controle e os primeiros pacotes de dados juntos.
Diagnóstico final
Problemas de DTR e RTS em USB CDC ACM são problemas de sequenciamento de controle de classe. A porta pode existir e os drivers podem vincular corretamente enquanto o firmware espera um estado de linha de controle que a aplicação nunca envia.
O Bus Scope ajuda a mostrar SetControlLineState, DTR, RTS, comportamento de abertura de porta, resets de bootloader e causas de dados ausentes no nível de protocolo USB.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Teste do contrato USB para “Depuração de DTR e RTS em USB CDC ACM: SetControlLineState, abertura de porta, bootloader e dados faltando”
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 DTR e RTS em USB CDC ACM: SetControlLineState, abertura de porta, bootloader e dados faltando” é: Como depurar DTR e RTS em USB CDC ACM, requisições SetControlLineState, comportamento de abertura de porta serial, gatilhos de reset no bootloader e dados seriais ausentes. 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 DTR e RTS em USB CDC ACM: SetControlLineState, abertura de porta, bootloader
Encerre “Depuração de DTR e RTS em USB CDC ACM: SetControlLineState, abertura de porta, bootloader e dados faltando” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.
Ponto de controle 2: Como depurar DTR e RTS em USB CDC ACM, requisições SetControlLineState, comportamento de a
Para “Como depurar DTR e RTS em USB CDC ACM, requisições SetControlLineState, comportamento de abertura de porta serial, gatilhos de reset no bootloader e d”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.
Ponto de controle 3: O que o SetControlLineState faz
Encerre “O que o SetControlLineState faz” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.
Ponto de controle 4: Sintomas comuns
Para “Sintomas comuns”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.
Ponto de controle 5: Comportamento de abertura de porta serial
Encerre “Comportamento de abertura de porta serial” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.
Ponto de controle 6: Padrões de reset via bootloader
Para “Padrões de reset via bootloader”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.
Ponto de controle 7: Sem dados até DTR
Encerre “Sem dados até DTR” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.
Ponto de controle 8: Confusão entre RTS e controle de fluxo
Para “Confusão entre RTS e controle de fluxo”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.
Ponto de controle 9: Checklist de depuração
Encerre “Checklist de depuração” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.
Ponto de controle 10: Diagnóstico final
Para “Diagnóstico final”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.
Matriz de aceitação
| Ponto | Evidência a manter | Condição de aprovação |
|---|---|---|
| Depuração de DTR e RTS em USB CDC ACM: SetControlLineState, abertura de porta, bootloader e dados faltando | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Como depurar DTR e RTS em USB CDC ACM, requisições SetControlLineState, comportamento de abertura de porta serial, gatil | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| O que o SetControlLineState faz | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Sintomas comuns | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Comportamento de abertura de porta serial | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Padrões de reset via bootloader | 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:
- Depuração de serial USB CDC ACM: line coding, control line state e dados que não trafegam
- STALL em transferências de controle USB: depuração de pacotes de setup, endpoint zero e requisições com falha
- Depuração do status stage em transferências de controle USB: zero-length packets, endpoint zero e stalls