Após consolidar GPIO, ADC, PWM, UART e I2C, o último pilar de comunicação embarcada é o SPI (Serial Peripheral Interface).
Este protocolo é utilizado quando desempenho e controle direto são prioridade — comum em memória flash, displays e expansores de alta velocidade.
O que é SPI
SPI é um protocolo de comunicação serial síncrono baseado em arquitetura:
- Master (controlador)
- Slave (periférico)
Linhas do Barramento
SCK → Clock
MOSI → Master Out Slave In
MISO → Master In Slave Out
CS → Chip Select
Funcionamento
- O master gera o clock
- Cada pulso transfere 1 bit
- Comunicação full-duplex (envio e recepção simultânea)
- Apenas um slave ativo por vez (via CS)
Modos SPI (CPOL / CPHA)
Modo 0 → CPOL=0, CPHA=0
Modo 1 → CPOL=0, CPHA=1
Modo 2 → CPOL=1, CPHA=0
Modo 3 → CPOL=1, CPHA=1
Requisito:
- Master e slave devem operar no mesmo modo
SPI no Raspberry Pi Pico
- 2 interfaces disponíveis (SPI0 e SPI1)
- Configuração completa via software
Inicialização
from machine import Pin, SPI
spi = SPI(0,
baudrate=100000,
polarity=0,
phase=0)
Operações Básicas
spi.write(data)
spi.read(n)
spi.write_readinto(tx, rx)
Projeto 1: Expansor SPI (MCP23S17)
Controle de GPIO externo via SPI.
Configuração
from machine import Pin, SPI
spi = SPI(0,
sck=Pin(2),
mosi=Pin(3),
miso=Pin(0),
baudrate=100000)
CS = Pin(16, Pin.OUT)
CS.value(1)
Inicialização do Dispositivo
def configure():
CS.value(0)
spi.write(bytearray([0x40, 0x00, 0x00]))
CS.value(1)
Escrita em Registrador
def send(reg, value):
CS.value(0)
spi.write(bytearray([0x40, reg, value]))
CS.value(1)
Loop de Controle
import utime
configure()
while True:
send(0x12, 1)
utime.sleep(1)
send(0x12, 0)
utime.sleep(1)
Estrutura de Comunicação
[ENDEREÇO, REGISTRADOR, DADO]
Exemplo real:
spi.write(bytearray([0x40, 0x12, 0x01]))
Controle de Chip Select (CS)
CS.value(0)
spi.write(data)
CS.value(1)
Ponto crítico:
- Sem controle correto de CS, não há comunicação válida
Vantagens do SPI
- Alta velocidade
- Comunicação direta (sem overhead de endereçamento)
- Full-duplex
Desvantagens
- Maior número de fios
- Necessidade de controle manual de CS
- Escalabilidade limitada por pinos disponíveis
Comparação SPI vs I2C
| Característica | SPI | I2C |
|---|---|---|
| Velocidade | Alta | Média |
| Fios | 4+ | 2 |
| Endereçamento | Manual | Automático |
| Complexidade | Baixa | Média |
Boas Práticas
Controle de CS
CS.value(0)
spi.write(data)
CS.value(1)
Ajuste de Frequência
baudrate=1000000
Configuração de Modo
polarity=0
phase=0
Arquitetura de Sistema Real
Com SPI, o sistema pode incluir:
- Memórias externas (flash, EEPROM)
- Displays gráficos
- Conversores de alta velocidade
- Expansores de IO
Integração com o Ecossistema
SPI complementa os demais blocos:
- ADC → aquisição
- PWM → atuação
- UART → comunicação externa
- I2C → expansão modular
- SPI → alta performance
Insight Técnico Final
SPI é o protocolo escolhido quando:
- Velocidade é crítica
- Controle direto é necessário
- Overhead mínimo é desejado
Encerramento Geral do Guia
Com este capítulo, o ciclo completo está estabelecido:
- Entrada (ADC, sensores)
- Processamento (lógica)
- Saída (GPIO, PWM)
- Comunicação (UART, I2C, SPI)
- Persistência (arquivos, EEPROM)
Esse conjunto define a base operacional de sistemas embarcados modernos.
