Cursos / Eletrônica / Projeto de Sistemas RF / Aula

arrow_back Aula 09 - Transmissão de dados através do protocolo SPI

O que é SPI?

Você deve estar se perguntando o quê significa SPI. Essa sigla quer dizer “Serial Peripheral Interface Bus”, e se pronuncia “esse-pi-ai” ou como a palavra “spy”, em inglês. Corresponde a um padrão de comunicação serial entre microcontroladores que se comunicam em uma rede. Nos PICs (do inglês Programmable Intelligent Computer), ele é implementado como sendo um modo de operação do módulo MSSP (Master Synchronous Serial Port). Ou seja, pra realizar uma comunicação pelo SPI, você precisa configurar corretamente esse módulo do seu microcontrolador e fazer as conexões corretas. Mas antes de passar para as configurações, vamos entender, primeiramente, como o SPI funciona. Dê uma olhada na figura abaixo:

Funcionamento do protocolo SPI

A Figura 1 mostra o funcionamento básico do protocolo SPI: a comunicação entre dois dispositivos. O SPI funciona sobre o conceito de troca de mensagens entre um dispositivo mestre e um dispositivo escravo. A troca de mensagens é síncrona, ou seja, existe um sinal de temporizador (ou clock) que sincroniza a transmissão dos dados. O mestre é o dispositivo encarregado de gerar esse sinal de clock, e por isso ele tem esse nome. Os escravos somente percebem esse sinal e transmitem seus dados em sincronia com ele. Na figura, o sinal é gerado no pino SCLK do mestre, que está conectado no SCLK do escravo.

Como já foi dito, o SPI funciona com troca de mensagens. Quando o mestre deseja enviar um dado para o escravo, o escravo também vai enviar um dado para o mestre. Esses dados são trocados pelos pinos MOSI (Master Output, Slave Input) e MISO (Master Input, Slave Output). Note o sentido de comunicação nas setas da figura. Ou seja, para o mestre transmitir um dado, é preciso colocar um valor no buffer do mestre e iniciar uma transmissão. Após ser transmitido, o dado no buffer do mestre vai ser o dado que estava no buffer do escravo, porque eles trocaram mensagens. Para receber um dado de um escravo, o mestre tem que enviar alguma coisa para o escravo, e assim receber o dado que deseja ser lido. Parece meio estranho, mas é assim mesmo que acontece. Quando se deseja só ler, é preciso “enviar” algum “lixo” para o escravo, fazendo com que o dado que interessa apareça no buffer do mestre. Se você deseja só transmitir algo, basta colocar o dado no buffer e ignorar o que vai estar lá no fim da transmissão. Parece complicado, mas, de fato, não é. Por sorte, as bibliotecas que trabalham com SPI já tratam desses detalhes para você, então, não há muito com o que se preocupar. Mas é importante saber como as coisas realmente funcionam.

E o que é o sinal “$ \overline{SS} $”? Ele é chamado de “Slave Select”. Esse sinal serve para selecionar qual o escravo que vai se comunicar com o mestre no momento. Não faz muito sentido conectar o $ \overline{SS} $ no caso de existir apenas um escravo (inclusive, o modulo MSSP prevê QUE essa configuração disponibiliza uma configuração que dispensa o uso do $ \overline{SS} $), mas mesmo assim ele pode ser utilizado. E no caso de existir mais de um escravo, ele se torna essencial. A barra em cima do $ \overline{SS} $ indica que ele é ativado em um valor lógico baixo, ou seja, aplicando 0V.

Importante: o escravo só vai estar habilitado enquanto o sinal estiver em 0V! Se você mudar o SS para 5V durante a transmissão dos dados, irá ocorrer uma falha e nenhum dado será trocado entre o mestre e o escravo.

Observe agora a figura abaixo:

SPI com 2 dispositivos escravos

Na figura 2, podemos ver como seria uma rede SPI com 1 mestre e 2 escravos. Note que todos os sinais “SCK”, “MOSI” e “MISO” estão conectados entre si. A diferença está nos “$ \overline{SS} $s”. Perceba que, agora, temos um $ \overline{SS} $ para cada escravo. O que acontece é que quando desejamos trocar mensagem com o escravo 1, colocamos o sinal $ \overline{SS1} $ em baixo. Isso habilita o escravo 1 a trocar mensagens com o mestre. Se desejamos trocar mensagens com o escravo 2, colocamos o sinal $ \overline{SS2} $ em nível baixo, mantendo o$ \overline{SS1} $ em alto. Enquanto as entradas $ \overline{SS} $ dos escravos são pinos dedicados do módulo MSSP do microcontrolador, os sinais $ \overline{SS1} $ e $ \overline{SS2} $ são saídas digitais padrões do PIC. Ou seja, podemos adicionar mais escravos, desde que existam saídas digitais disponíveis para selecionar tais escravos. É importante que seu programa trate de selecionar somente um escravo por vez para trocar mensagens com o mestre, por meio do sinal $ \overline{SS} $ equivalente.

Versão 5.3 - Todos os Direitos reservados