domingo, 4 de outubro de 2015

Introdução a Comunicação SPI

Olá a todos. Estava em dúvida se postava sobre comunicação SPI ou sobre o experimento das bobinas de Helmholtz. Por fim escolhi SPI por ser um tópico mais ligado com eletrônica.

Hoje vamos abordar o que é a comunicação SPI em termos gerais, falarei um pouco da sua história, depois vou falar qual é a estrutura necessária para a comunicação SPI e por fim vou falar as vantagens e desvantagens da mesma.

O termo SPI é uma sigla inglesa que significa Interface Periférica Serial (do inglês, Serial Peripheral Interface). Como o próprio nome indica, sua finalidade é interligar periféricos a um dispositivo mestre utilizando comunicação serial. Um exemplo é o Play Station 2, que se comunica por SPI com seus controles.

O protocolo de comunicação foi desenvolvido pela Motorola e com o tempo se tornou um padrão até para outros fabricantes. Ele ganhou esse espaço pela sua simplicidade, já que são necessários apenas 3 fios + 1 para cada dispositivo interligado. Representando em uma equação, a quantidade de fios necessárias para se comunicar com N dispositivos é: 3 + N.

Mas qual a função desses fios? O protocolo SPI admite que existe apenas um dispositivo que é o mestre, e que o restante dos periféricos são escravos, ou seja, são dispositivos que só enviam dados quando solicitados pelo dispositivo mestre. Assim sendo, um dos fios é denominado MOSI. A sigla MOSI significa Saída do Mestre e Entrada do Escravo (em inglês, Master Output, Slave Input).Como o próprio nome diz, a função dessa ligação é trafegar os dados que saíram do mestre e que devem chegar aos escravos.

Outra conexão é denominada de MISO, e é oposta ao MOSI. MISO significa Entrada do Mestre e Saída do Escravo (em inglês, Master Input Slave Output). A função dessa ligação é trafegar os dados que saíram do escravo e devem entrar no mestre.

O terceiro fio que existe independente do número de escravos é o CLK (Clock). O Clock é um sinal que temporiza a comunicação e é controlado pelo dispositivo mestre. Esse sinal é responsável por fazer que mestre e escravo se comuniquem de forma sincronizada.

Abaixo uma figura que exemplifica a interligação desse barramento de comunicação:


Perceba que todos os MOSI e MISO dos escravos estão ligados no mesmo mestre. Assim, quando o mestre fala todos os escravos escutam, mesmo que o comando tenha sido direcionado a um escravo específico. Como evitar que todos os escravos respondam ao mesmo tempo gerando conflitos no barramento?

Para isso utiliza-se o pino SS, que significa Seleção de Escravo (do inglês, Slave Select). Esse é um pino que controla com qual dispositivo escravo o mestre quer se comunicar. Cada escravo tem a sua entrada SS e só irá responder aos comandos se o nível lógico dessa entrada for 0 no momento da comunicação. Os MISO dos escravos que não foram selecionados via SS ficam em alta impedância, impedindo que a tensão que o escravo selecionado coloque em sua saída não danifique a saída dos outros escravos.

Quanto ao Clock há quatro configurações possíveis, já que existem duas configurações de polaridade (CPOL) e duas configurações de fase (CPHA).

A polaridade determina em que nível lógico o Clock fica quando ocioso. A configuração CPOL = 1 informa que o Clock, quando não utilizado, fica em nível lógico 1. Em contrapartida, a configuração CPOL = 0 determina um nível lógico 0 para o Clock quando ocioso.

A fase do Clock (CPHA) determina em que momento de Clock será feita de fato a leitura do dado.  Se CPHA = 1 a leitura é feita na borda de subida do Clock. Se CPHA = 0 a leitura é feita na borda descida do Clock.

Essas configurações por vezes são descritas como Modo do SPI. Cada Modo, que vai de 0 a 3, corresponde a uma configuração possível de CPOL e CPHA. Os Modos estão descritos na figura abaixo:


Particularmente, se eu posso escolher, eu não opto pelos Modos 0 e 2. Não gosto do fato do dado ser lido logo na primeira transição do Clock, quando o mesmo está a sair do estado ocioso. Claro que se o pino SS for habilitado com antecedência, o escravo pode já estar preparado para essa primeira transição, mas, como disse, é apenas preferência.

A comunicação SPI é dita full-duplex. Isso significa que ao mesmo tempo que o mestre envia 1 bit ele já recebe 1 bit do escravo, pois a implementação de um SPI é baseada em um registrador de deslocamento. Mas se é assim, como poderia o escravo responder uma pergunta do mestre se enquanto um pergunta o outro já deve responder? Simples. Na primeira vez o mestre manda a pergunta enquanto o escravo responde 0, por exemplo. Depois o mestre manda 0 (pois já fez a pergunta) enquanto e escravo responde a pergunta feita anteriormente.

Outras características da comunicação SPI é o tamanho da palavra e o primeiro bit transmitido. O tamanho da palavra em geral é 8 bits, ou seja, toda vez que o mestre inicia uma transmissão ele envia pelo menos 8 bits. Valores comuns são 8 bits e 16 bits. Quanto ao primeiro bit transmitido, a configuração pode ser LSB ou MSB. LSB significa que o bit menos significativo do byte (ou da palavra) é transmitido primeiro, enquanto MSB significa que o bit mais significativo é enviado primeiro.

As vantagens do SPI são:
* Simplicidade: Poucos fios/traços são necessários, e a comunicação em si é simples;
* Drivers push-pull: Os dispositivos utilizam drivers push-pull em oposição a coletores abertos. Isso significa uma melhor estabilidade de sinal e torna desnecessário resistores de pull-up/down na maioria das aplicações;
* Altas velocidades em potencial: O protocolo não estabelece limite de velocidade. Assim é possível projetar SPIs de alta velocidade, embora em geral a mesma se limite a alguns MHz.

As desvantagens do SPI são:
* Pinos requeridos: Mesmo sendo simples, ainda requer mais pinos/traços que alguns outros protocolos de comunicação, tal como o I2C;
* Quantidade de mestres: O SPI suporta apenas 1 mestre, em oposição a alguns protocolos multi-mestre (e.g. I2C);
* Protocolo de checagem de erro: Nenhum protocolo de checagem de erro está definido, embora possa ser implementado por conta pelo usuário;
* Distância: Em geral essa comunicação não suporta altas distâncias, como protocolos RS-485 ou CAN-bus.

Esse é o post de hoje. Achei que não ia sair, mas apurei para postar hoje. Abraço a todos. Até mais que agora vou almoçar.

Referências:

SPI vs. I2C, Disponível em: <www.ee-techs.com/circuit/spi.doc>. Acessado em: 04/10/15.

Serial Peripheral Interface (SPI).
Disponível em: <http://web.engr.oregonstate.edu/~traylor/ece473/lectures/spi.pdf>.
Acessado em: 04/10/15.

Serial Peripheral Interface Bus.
Disponível em: <https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus>.
Acessado em: 04/10/15.

SPI Background.
Disponível em: <http://www.totalphase.com/support/articles/200349236-SPI-Background>.
Acessado em: 04/10/15.

Interfacing a PS2 Controller.
Disponível em:  <http://store.curiousinventor.com/guides/PS2/>.
Acessado em: 04/10/15.

4 comentários:

  1. Vc considera possível comunicar microcontroladores diferentes como entre PIC e atmega do Arduíno?

    ResponderExcluir
    Respostas
    1. Bom dia, Wenderson

      É totalmente possível. A maioria dos dispositivos que se comunicam diariamente são construídos com processadores e controladores bem diferentes.

      E justamente o que torna isso possível é o fato de existirem protocolos bem definidos para essa comunicação. O SPI é um deles, mas temos também I2C, protocolo CAN, outro que se chama MODBUS, se não me engano. Enfim, cada um tem seus prós e contras e são utilizados mais em um tipo específico de aplicação.

      Então comunicar um PIC com um Arduíno é absolutamente possível!

      Abraço.

      Excluir