Comunicação SPI com Raspberry Pi Pico: Controle de Periféricos em Alta Velocidade

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ísticaSPII2C
VelocidadeAltaMédia
Fios4+2
EndereçamentoManualAutomático
ComplexidadeBaixaMé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.