PIC do Zero

Programação em C para Microcontroladores PIC

Aula 20 – SPI (Serial Peripheral Interface)

Nesta aula vamos estudar o barramento SPI, uma comunicação serial síncrona muito utilizada em memórias, cartões SD, displays TFT, conversores ADC externos e dispositivos que exigem maior velocidade de transferência.

1. O que é SPI?

SPI significa Serial Peripheral Interface. É um protocolo de comunicação serial síncrona utilizado para troca de dados entre um dispositivo mestre e um ou mais escravos.

SPI = Serial Peripheral Interface

2. Diferença básica entre SPI e I²C

O I²C usa apenas dois fios, enquanto o SPI normalmente usa quatro sinais principais. Em compensação, o SPI costuma ser mais rápido e simples de controlar.

ProtocoloFios principaisCaracterística
UARTTX e RXSerial assíncrona
I²CSDA e SCLDois fios e endereçamento
SPIMOSI, MISO, SCK e SSAlta velocidade

3. Sinais do SPI

SinalFunção
MOSIMaster Out Slave In – dado enviado do mestre para o escravo
MISOMaster In Slave Out – dado enviado do escravo para o mestre
SCKSerial Clock – clock gerado pelo mestre
SS / CSSlave Select / Chip Select – seleciona o dispositivo escravo

4. Mestre e Escravo

No SPI, o mestre controla o clock e seleciona qual escravo irá se comunicar. O escravo só responde quando seu pino SS ou CS é ativado.

PIC Mestre
  |
  +-- MOSI
  +-- MISO
  +-- SCK
  +-- CS1 → Memória Flash
  +-- CS2 → Display TFT
  +-- CS3 → Cartão SD

5. Como ocorre a transmissão

Enquanto o mestre envia dados pela linha MOSI, o escravo pode enviar dados de volta pela linha MISO. Isso permite comunicação em duas direções.

Mestre envia: MOSI → Escravo
Escravo responde: MISO → Mestre
Clock: SCK

6. O pino SS ou CS

O pino SS ou CS funciona como uma chave de seleção. Normalmente, o dispositivo é selecionado quando esse pino vai para nível baixo.

CS = 0 → Escravo selecionado
CS = 1 → Escravo desativado

7. SPI no PIC

Nos microcontroladores PIC, a comunicação SPI normalmente utiliza o módulo MSSP, o mesmo periférico usado para I²C em muitos modelos.

MSSP = Master Synchronous Serial Port

8. Registradores comuns

RegistradorFunção
SSPCONConfigura o módulo SPI
SSPSTATConfigura estado e amostragem dos dados
SSPBUFBuffer de transmissão e recepção

9. Configuração básica do SPI

void SPI_Init()
{
    TRISCbits.TRISC3 = 0; // SCK como saída
    TRISCbits.TRISC4 = 1; // SDI/MISO como entrada
    TRISCbits.TRISC5 = 0; // SDO/MOSI como saída

    SSPSTAT = 0x40;
    SSPCON = 0x20; // SPI Master, clock Fosc/4
}

10. Enviando e recebendo um byte

unsigned char SPI_Write(unsigned char dado)
{
    SSPBUF = dado;          // Envia dado
    while(!SSPSTATbits.BF); // Aguarda finalizar
    return SSPBUF;          // Retorna dado recebido
}

11. Exemplo com Chip Select

CS = 0;              // Seleciona escravo
resposta = SPI_Write(0x9F);
CS = 1;              // Desativa escravo

12. Memórias Flash SPI

Memórias Flash SPI são muito usadas para armazenamento de dados, logs, parâmetros e configurações de sistemas embarcados.

PIC SPI → Memória Flash SPI

13. Cartões SD

Cartões SD podem operar em modo SPI, permitindo que o PIC grave arquivos, logs e medições.

PIC → SPI → Cartão SD

14. Displays TFT

Muitos displays gráficos TFT usam SPI por permitir atualização rápida da tela com poucos fios.

PIC → SPI → Display TFT

15. Comparação SPI × I²C × UART

CaracterísticaUARTI²CSPI
ClockNão possuiPossuiPossui
VelocidadeMédiaMédiaAlta
Fios224 ou mais
EndereçoNãoSimNão, usa CS
Uso comumPC, Bluetooth, RS-485RTC, sensores, LCDSD, TFT, Flash

16. Aplicações industriais e embarcadas

  • Data logger com cartão SD.
  • Displays gráficos industriais.
  • Memórias externas para parâmetros.
  • Conversores ADC externos de alta resolução.
  • Conversores DAC externos.
  • Módulos de rádio e comunicação sem fio.

17. Cuidados importantes

  • Verifique se todos os dispositivos usam a mesma tensão lógica.
  • Use um pino CS separado para cada escravo.
  • Evite fios longos em comunicação SPI.
  • Confira o modo SPI exigido pelo dispositivo.
  • Consulte sempre o datasheet do componente.

18. Exercícios

Exercício 1: O que significa MOSI?

Master Out Slave In

Exercício 2: O que significa MISO?

Master In Slave Out

Exercício 3: Qual linha fornece o clock no SPI?

SCK

Exercício 4: Qual sinal seleciona o escravo?

SS ou CS

19. Laboratório prático

Monte um PIC com uma memória Flash SPI ou módulo de cartão SD. O objetivo é inicializar o barramento SPI e enviar um byte de teste.

PIC SCK  → SCK do módulo
PIC MOSI → MOSI do módulo
PIC MISO ← MISO do módulo
PIC CS   → CS do módulo
GND      ↔ GND

20. Resumo da Aula

  • SPI é comunicação serial síncrona.
  • MOSI envia dados do mestre para o escravo.
  • MISO envia dados do escravo para o mestre.
  • SCK é o clock gerado pelo mestre.
  • SS/CS seleciona o dispositivo escravo.
  • SPI é indicado para aplicações de alta velocidade.

Próxima Aula – Aula 21

Na próxima aula vamos estudar LCD 16x2 com PIC, aprendendo a exibir textos, valores de sensores, mensagens de status e informações de processos.