Analisador lógico: Decodificando protocolos

Este post faz parte da série Analisadores lógicos

Introdução

Agora para a segunda bancada de testes, vamos verificar a incrível capacidade em decodificar protocolos presente nos analisadores lógicos. Pessoalmente, é a feature que mais utilizo no meu dia a dia com sistemas embarcados. Frequentemente preciso analisar a comunicação entre diferentes sistemas e sem um decodificador de protocolos seria muito chato e demorado.

Os protocolos de comunicação são uma parte essencial de praticamente todos os sistemas embarcados, pois incontáveis sensores e atuadores precisam se comunicar para receber ou enviar dados. Por exemplo, existem incontáveis sensores que se comunicam através de I2C, SPI, UART, CAN, Modbus e uma quase infinita lista de outros protocolos. Da mesma forma, esses protocolos também são usados para se comunicar com outros sistemas.

Inclusive, alguns outros sensores que não utilizam protocolos de comunicação, como o sensor ultrassônico HC-SR04, um analisador lógico ainda será muito útil para, por exemplo, ver o tempo de retorno do ECHO e conferir se a distância calculada pelo microcontrolador está correta.

Atenção: Caso você não consiga ler os detalhes dentro das imagens (valores, medições, tempos, etc), clique com o botão direito do mouse em cima da imagem e clique em “Abrir imagem em uma nova aba” ou “Open image on new tab”. Assim, você poderá visualizar a imagem inteira e dar zoom pelo navegador.

Bancada de teste #1

No primeiro teste, verificaremos a comunicação entre um microcontrolador e o sensor de temperatura DS18B20, que utiliza o protocolo 1-wire. A biblioteca de comunicação com o sensor foi feita manualmente via bit-bang e, por este motivo, é preciso verificar se os dados estão corretos, visto que oscilações no desempenho (interrupções, switch context, etc) podem ocasionar erros.

Figura 1 – Pacotes capturados da comunicação com o DS18B20.

Na figura 1 acima, podemos observar a captura do analisador lógico e a princípio há 2 pacotes próximos entre si com 750ms de distância um do outro. Essa é uma informação muito útil, pois é justamente o mesmo valor citado no datasheet do DS18B20 sobre o tempo de conversão da temperatura quando está configurado para leituras de 12-bit. Logo, é de se imaginar que o primeiro pacote seja a solicitação do microcontrolador para o sensor ler uma nova temperatura e depois dos 750ms, seja a leitura desse novo valor de temperatura.

Figura 2 – Sinal de um pacote entre a comunicação com o DS18B20.

Ao aproximar o sinal na figura 2 acima, vemos uma onda toda bagunçada à primeira vista, porém, temos que lembrar que aqui deveria haver um protocolo 1-wire, ou seja, vamos habilitar o decodificador de protocolos do nosso analisador lógico e ver se aparece alguma informação útil.

Figura 3 – Ativando o decodificador de protocolo 1-wire do analisador lógico.

Na tela de decodificadores de protocolo, foi selecionado o protocolo 1-wire que já existe nativamente no programa para ler o canal verde onde há o sinal (figura 3 acima).

Figura 4 – Pacote 1 do DS18B20 decodificado.

Ao ativar o decodificador de 1-wire no canal verde, os dados apareceram! O decodificador separou o sinal em pequenas partes e cada uma com seu próprio significado. Podemos observar na figura 4 acima e junto ao datasheet do sensor que esse pacote é uma solicitação do microcontrolador para que o sensor com ID terminado em 0x4D9B inicie a conversão de temperatura (função 0x44). Se houvesse algum bit errado por conta de oscilações no bit-bang do protocolo, o decodificador indicaria erros e não teria conseguido montar o pacote inteiro.

Figura 5 – Pacote 2 do DS18B20 decodificado.

Agora, avançando para o próximo pacote (figura 5), após 750ms, o microcontrolador efetuou a leitura dos endereços de memória do sensor (função 0xBE), onde foi possível observar que os dois primeiros bytes da memória (0x8E, 0x01) são os valores da temperatura. Convertendo esse valor, que de acordo com o datasheet o formato do dado que é ”16-bit sign-extended two’s complement”, temos o valor de 24°C! Bingo!

Bancada de teste #2

Este teste consiste em verificar a saída serial UART do microcontrolador (ESP32) junto do decodificador de UART (Async Serial) para visualizar os dados em forma de string que estão sendo enviados.

Figura 6 – Saída serial do ESP32 durante o boot.

Podemos ver na figura 6 que, além do decodificador mostrar o valor ASCII logo acima de cada byte do sinal, também há uma tela de terminal no canto direito que podemos ver o texto formatado, como se fosse um bloco de notas, facilitando imensamente o debug!

Conclusão

A maior parte dos analisadores lógicos atualmente conta com uma vasta lista dos principais protocolos de comunicação mais utilizados no mundo, como, por exemplo, Modbus, CAN, SPI, I2C e assim por diante. Com a ajuda desses instrumentos, você conseguirá desenvolver e debugar sua aplicação de forma muito mais fácil, já que você verá o que realmente está sendo transmitido e onde está o erro ou onde pode haver melhorias.

Analisadores lógicos

Analisador lógico: Analisando sinais digitais Analisador lógico: Lendo sinais analógicos (bônus)
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Hardware » Ferramentas de Desenvolvimento » Analisador lógico: Decodificando protocolos

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: