O protocolo SPI 1 - Introdução O protocolo SPI ( Serial Peripheral Interface ) é um protocolo síncrono de alta velocidade utilizado na comunicação de circuitos integrados. Atualmente existem conversores A/D (analógico para digital), potenciômetros digitais, memórias, sensores de pressão, sensores de inclinação e outros componentes que utilizam este protocolo como meio de comunicação. Fig. 1 Circuitos integrados que utilizam protocolo SPI. Com relação às memórias, atualmente existem memórias SPI com compacidade de 64MB ou superiores. O protocolo SPI foi originalmente desenvolvido pela Motorola e adotado por outros fabricantes. 2 Ligação física Como é um protocolo síncrono, possui uma linha de clock utilizada no sincronismo dos dados. A comunicação é feita da seguinte forma: Fig. 2 Ligação física entre dispositivos.
Nome CS ou SS SCLK SI ou MOSI SO ou MISO Descrição Chip Select ou seleção do dispositivo: Esta linha é utilizada para ativar o componente, por exemplo, vamos supor que estamos utilizando 3 memórias SPI e dois sensores. Se desejarmos guardar uma informação na memória 1 precisamos mandar essa informação sem que os outros dispositivos recebam a mesma. Para isso, podemos ativar o pino CS da memória 1 deixando os demais desligados. Além dessa função, o pino CS permite deixar o dispositivo desligado evitando possíveis erros provocados por ruídos ou dados que trafegam no barramento. Clock, é utilizado para sincronização do dispositivo mestre (aquele que gera o sinal de clock) com o dispositivo escravo (aquele que recebe o sinal de clock). O protocolo exige um sinal de clock simétrico, ou seja, um sinal quadrado. Podemos considerar que, o sinal de clock informa ao dispositivo escravo quando deve fazer a leitura ou escrita no barramento. Serial Input, ou entrada serial. É utilizada pelo dispositivo escravo como pino de leitura dos dados. Este barramento é ligado ao pino de saída do dispositivo mestre (normalmente um microcontrolador). Serial Out, ou saída serial. É utilizada pelo dispositivo escravo como pino de envio dos dados. Este barramento é ligado ao pino de entrada do dispositivo mestre (normalmente um microcontrolador). As linhas SI e SO podem em alguns dispositivos ser ligadas juntas formando assim uma comunicação com apenas 3 fios. Como o dispositivo é selecionado por ligações físicas (o pino CS), não existe a necessidade de envio de endereço dos dispositivos o que simplifica a utilização do protocolo. 3 Taxa de transmissão Uma das propriedades mais importantes do protocolo SPI é a alta taxa de transmissão, apesar desse não definir a velocidade a ser usada. Também é importante destacar que o SPI pode trabalhar no modo full duplex, ou seja, é possível transmitir e receber ao mesmo tempo. A tabela abaixo permite visualizar a diferença entre os três protocolos mais comuns de transmissão de dados entre dispositivos utilizados atualmente: A UART (RS232), o SPI e o I2C que será estudado mais adiante: Tecnologia Barramento Velocidade Modo UART (RS232) 2 fios + terra Max: 115.200bps Assíncrono full duplex SPI 3 ou 4 fio + terra Maior que 10Mbps Síncrono full duplex I2C 2 + terra Max: 3,4Mbps Síncrono Half duplex
O protocolo SPI: não define uma velocidade máxima. não define endereços para os dispositivos. não possui confirmação de recebimento. não possui controle de fluxo. É importante destacar que, a comunicação UART permite a conexão com somente um dispositivo, enquanto que a comunicação SPI e a comunicação I2C permitem a comunicação com vários dispositivos selecionados em um único barramento. No entanto, é muito importante que o programador se lembre que: No SPI o dispositivo é selecionado pelo pino CS e somente um dispositivo pode ser selecionado por vez. 4 Circuito de saída O circuito da porta de saída de um SPI utiliza dois transistores de saída em push pull o que permite um melhor sinal quando comparado com o circuito de saída do I2C: Fig. 3 Comparação entre os sinais SPI e I2C
5 Modos de configuração do dispositivo Existem 4 modos de operação definidos pelos parâmetros CPOL e CPHA conforme esquema mostrado abaixo: Modo 0 CPOL = 0 CPHA = 0 SCK inicia em 0 e dado lido no início Modo 1 CPOL = 0 CPHA = 1 SCK inicia em 0 e dado lido no final Modo 2 CPOL = 1 CPHA = 0 SCK inicia em 1 e dado lido no início Modo 3 CPOL = 1 CPHA = 1 SCK inicia em 0 e dado lido no final Fig. 4 Os sinais em um barramento SPI.
Na maioria dos dispositivos a identificação do modo é automática. Como exemplo de componente com comunicação SPI vamos considerar a memória flash EN25F10. Fig. 5 Informações do datasheet da memória EN25F10 Essa memória pode utilizar um clock de até 1MHz e se comunica através de uma interface SPI: Fig. 6 Disposição dos pinos da memória EN25F10
Na figura 6 podemos identificar os pinos de entrada de dados ( DI ), saída de dados ( DO ), o pino de clock ( CLK ), o pino de seleção ( CS# ) e os pinos de alimentação ( VCC e VSS ). O pino #HOLD permite pausar um processo de escrita ou leitura e depois retomar o processo, e o pino WP# bloqueia a escrita na memória. O símbolo # é utilizado para informar que a pino é ativado quando está em 0 volts. A figura abaixo mostra como a comunicação é realizada: Fig. 7 Imagem mostrando um sinal SPI no modo 0 e modo 1. Quando o pino #CS é ativado ( colocado em 0V ) o circuito integrado verifica o pino de CLK, se este estiver em 0 é ativado modo 0 se estiver em 1 é ativado modo 3. Neste exemplo está selecionado o modo 0. Com CPHA = 0 o dispositivo faz a leitura dos dados que chegam no pino DI baseado no sincronismo do clock. Após 8 bits, o dispositivo muda para o modo 1 e inicia a escrita. A imagem abaixo mostra um sinal de dados e um sinal de clock analisados em um osciloscópio. Fig. 8 Imagem no osciloscópio de um sinal SPI.