sexta-feira, 2 de junho de 2017

Protocolos de Comunicação Serial dos Microcontroladores - SPI, I2C, 1Wire e RS-232

Para que os microcontroladores se comuniquem com outros dispositivos (sejam eles computadores ou outros microcontroladores) podemos usar diversas técnicas, uma das mais simples é usar algum tipo de comunicação serial. Esse nome vem do fato de que os dados são transmitidos bit a bit, por exemplo, se precisamos enviar um byte para outro dispositivo esse byte será enviado um bit por vez e do outro lado os bits recebidos vão recompor o byte transmitido. Parece simples, não é mesmo? Infelizmente o mundo real não é tão bonito assim... para que isso funcione precisamos considerar um monte de outras coisas como ruídos na transmissão, a frequência com que os dados serão enviados, o sincronismo dessa frequência dos dois lados, os limites de inicio e fim de transmissão/recepção e muitos outros.
É possível implementar tudo isso por software? Claro que sim. Mas além de dar um bocado de trabalho teríamos que implementar nossa solução nos vários tipos de hardware que vão usar. Para nossa sorte os microcontroladores mais comuns do mercado já possuem recursos implementados em hardware ou na forma de bibliotecas e a maior vantagem é que eles seguem certos padrões chamados protocolos de comunicação que permitem a comunicação com dispositivos que implementem o mesmo protocolo.
Vamos mostrar a partir daqui quais são os mais comuns no ambiente dos microcontroladores. Neste artigo eu não vou comentar sobre comunicação de rede, mesmo que existam algumas implementações de rede ethernet que, no fim das contas, é um barramento serial, mas foge completamente da simplicidade que quero demonstrar.

Protocolo 1-Wire
Como o nome sugere, esse protocolo usa apenas um fio. Mas isso não é BEM a verdade, ele usa um fio para dados, mas usa também o aterramento ou GND, ou seja, já são dois fios. Em algumas implementações vocês verão o dispositivo usando um terceiro fio para a alimentação, geralmente de 5v, apesar de ser possível utilizar com apenas dois no modo "vampiro". Nesse modo o dispositivo usa a energia que vem na linha de dados e faz uso de um capacitor para continuar alimentado nos períodos em que o sinal de dados fica baixo. O protocolo prevê a existência de um dispositivo Mestre na rede que é chamada de Microlan, os outros dispositivos funcionam no modo Escravo. O dispositivo Mestre envia um comando para que os escravos se identifiquem e inicia a comunicação com cada um deles. Cada dispositivo 1-Wire possui um número único que o identifica.
Exemplo: Termômetro DS18B20 da Dallas Semiconductor.

Protocolo I²C
O nome do protocolo vem de Inter-Integrated Circuit, é permitido o uso de vários Mestres no mesmo barramento e um limite teórico de 127 Escravos. O protocolo usa 2 sinais só para controle, além da alimentação dos circuitos, esses sinais são identificados como SDA (Serial DAta) e SCL (Serial CLock), as duas linhas devem ser ligadas ao VCC por meio de resistores pullup de 1,5KOhms.
O SCL é usado para dar o ritmo da comunicação, isso garante o sincronismo e a exatidão dos pulsos já que transmissor e receptor usam o mesmo sinal de controle. A linha SDA vai portar o dado transmitido/recebido, essa é uma linha bidirecional, ou seja, em certos momentos ela envia e em outros ela recebe dados.
Exemplo: Serial EEPROM 24LC01 e Serial EEPROM AT24C256

Protocolo SPI
O Serial Peripheral Interface ou SPI é outro protocolo serial síncrono assim como o I²C, uma grande diferença é que ele utiliza linhas específicas para transmissão e recepção de dados.
O SPI precisa de 4 sinais de controle nos dispositivos Escravos, no dispositivo Mestre será necessário 3 sinais de controle mais um para cada Escravo que ele vai controlar. Os sinais do protocolo são MISO (Master Input Slave Output) que recebe no Mestre os dados vindo de um Escravo, MOSI (Master Output Slave Input) que o Mestre usa para enviar dados a um Escravo, SCLK (Serial CLocK) que gera o sincronismo para a rede, assim como faz o SCL no I²C e por último o sinal SS (Slave Select) que nos Escravos é uma porta de entrada onde ele recebe um sinal do Mestre indicando que ele está habilitado, caso esteja desabilitado o Escravo deve ignorar o tráfego no barramento. No mestre existem tantos sinais SS quantos forem os escravos, cada um estará ligado a um Escravo e será usado para habilitar esse escravo para uso do Barramento.
Exemplo: Cartões SD

Protocolo RS-232
Esse protocolo foi padronizado em 1969 e ainda está em uso, foi muito utilizado nos ambientes dos antigos mainframes e para comunicação com dispositivos periféricos como modens e impressoras.
O problema de usar esse tipo de protocolo é que os sinais variam entre 3v a 15v positivos ou negativos de acordo com a situação e essa tensão está muito longe do que suportam os microcontroladores que, na maioria, trabalham com 5v ou até mesmo 3,3v. Para permitir que seja utilizado foi feita uma modificação nos sinais criando o que chamam de RS-232 TTL, que é o mesmo protocolo mas com tensões no mesmo nível dos circuitos TTL, ou seja, de 0v até 5v.
Para se comunicar com dispositivos RS-232 nativos os microcontroladores precisam usar um circuito integrado que faça a conversão dos sinais, este circuito se chama MAX232, ele consegue realizar a conversão dos sinais de um padrão para o outro.
Caso os dois dispositivos trabalhem em nível TTL eles podem ser ligados diretamente um ao outro. Este protocolo trabalha ponto a ponto, em outras palavras, só existem dois dispositivos envolvidos e o modo mais simplificado de uso, que é aquele usado nos microcontroladores, prevê a utilização de apenas dois sinais, TX (Transmissão) e RX (Recepção). O TX de um dispositivo é conectado ao RX do outro e vice versa, e eles se comunicam por meio desse protocolo assíncrono.
Exemplo: Modem

Nenhum comentário:

Postar um comentário