MCU & FPGA UART (Serial) UART não é Porta Serial: Como Projetar Protocolos Robustos em Sistemas Embarcados

UART não é Porta Serial: Como Projetar Protocolos Robustos em Sistemas Embarcados


Checklist de Boas Práticas — UART como Camada de Transporte

Este checklist pode (e deve) ser usado como ferramenta de revisão antes de considerar uma interface UART “pronta para produção”.


1. Modelo Mental e Arquitetura

  • UART é tratada como stream de bytes, não como comandos ou texto
  • Transporte, protocolo e aplicação estão claramente separados
  • Não existe lógica de negócio dentro da ISR
  • O sistema funciona mesmo sem terminal humano conectado

2. Interrupções (ISR)

  • ISR é mínima e determinística
  • ISR apenas captura bytes e os armazena
  • Nenhum parsing, printf, strcmp ou decisão ocorre na ISR
  • Overrun é detectado ou tratado explicitamente
  • Latência máxima da ISR é conhecida

3. Bufferização

  • Existe buffer explícito (ring buffer ou DMA)
  • Tamanho do buffer foi calculado com base em pior caso
  • Política clara quando o buffer enche (descartar, sobrescrever, sinalizar erro)
  • Leitura e escrita no buffer são thread-safe
  • Buffer é desacoplado do parser

4. Framing

  • Existe definição clara de início de frame (SOF)
  • Existe definição clara de fim de frame ou tamanho explícito
  • Framing permite re-sincronização após erro
  • Bytes de controle são escapados ou protegidos
  • Parser nunca fica “preso” esperando dados indefinidamente

5. Integridade

  • Todo frame possui checksum ou CRC
  • CRC é verificado antes de qualquer ação
  • Frames inválidos são descartados silenciosamente
  • Um único bit errado não causa efeito colateral
  • Integridade é validada antes do parsing semântico

6. Parsing Defensivo

  • Todo comando valida tamanho esperado
  • Todo campo é validado antes de uso
  • Valores fora de faixa são rejeitados
  • Comandos desconhecidos são ignorados
  • Nenhum acesso fora de limites é possível

7. Recuperação e Robustez

  • Existem timeouts de recepção
  • Parser pode ser resetado sem reset do MCU
  • Sistema se recupera após bytes aleatórios no stream
  • Erros não exigem power-cycle
  • Comunicação pode retomar após falha parcial

8. Perda, Repetição e Ordem

  • O sistema tolera perda de pacotes
  • Comandos críticos são idempotentes ou numerados
  • Duplicatas são detectadas
  • Ordem de execução é controlada quando necessário
  • ACK/NACK existe quando aplicável

9. Tempo e Determinismo

  • Parsing ocorre fora de contexto crítico
  • UART não bloqueia tarefas de maior prioridade
  • Uso de DMA é considerado quando necessário
  • Tempo máximo de processamento por byte é conhecido
  • Comunicação não quebra deadlines do sistema

10. Segurança e Confiabilidade

  • UART é tratada como interface externa (potencialmente hostil)
  • Dados inválidos não causam ações físicas perigosas
  • Estados críticos exigem confirmação explícita
  • Reset não é estratégia de recuperação
  • Logs e diagnósticos existem para falhas de comunicação

11. Testabilidade

  • Parser pode ser testado com stream artificial
  • Casos de erro são testados (bytes perdidos, invertidos, truncados)
  • Frames inválidos fazem parte dos testes
  • Comunicação funciona sem terminal humano
  • Protocolo é documentado de forma clara

12. Maturidade do Sistema

  • O sistema continua funcional sob ruído
  • Funciona após horas ou dias de operação contínua
  • Atualizações não exigem intervenção manual
  • Comunicação é previsível e rastreável
  • UART poderia ser substituída por outro meio físico sem mudar o protocolo

Regra Final

Se você remover o terminal serial e o sistema parar de fazer sentido,
então UART ainda está sendo usada como printf() e não como transporte.

Esse checklist não é burocracia — é engenharia de sobrevivência.

0 0 votos
Classificação do artigo
Inscrever-se
Notificar de
guest
0 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários

Related Post

0
Adoraria saber sua opinião, comente.x