Voltar

Loopback SPI no Pico: Teste a Comunicação Serial do seu RP2040

Introdução

SPI (Interface Serial Periférica) é um protocolo de comunicação serial síncrona amplamente usado para conectar microcontroladores a sensores, displays e outros periféricos. Neste tutorial, vamos construir um teste simples de loopback SPI no Raspberry Pi Pico usando o simulador no navegador da Velxio. O Pico enviará bytes via SPI0 e os lerá de volta, enquanto três LEDs indicam visualmente a atividade nas linhas MOSI, MISO e SCK. Esta é uma ótima maneira de verificar se o hardware SPI e a fiação estão funcionando corretamente antes de avançar para projetos mais complexos.

Diagrama do circuito do pico-spi-loopback no canvas do simulador Velxio

Explicação do Circuito

Vamos analisar os componentes e a fiação deste circuito.

Componentes

Fiação

Os pinos SPI0 do Pico são mapeados da seguinte forma:

O ânodo (A) de cada LED se conecta ao respectivo pino SPI, e seu cátodo (C) se conecta ao GND (GND.1 no Pico). As cores dos fios no simulador são:

Esta configuração simples permite visualizar a atividade SPI: os LEDs piscarão conforme os dados são transmitidos.

Explicação do Código

Aqui está o sketch Arduino completo para o Pico:

// Raspberry Pi Pico — Teste de Loopback SPI
// Envia bytes via SPI0 e lê a resposta do loopback
// Pinos SPI0 padrão: MISO=GP16, MOSI=GP19, SCK=GP18, CS=GP17

#include <SPI.h>

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("=== Teste de Loopback SPI no Pico ===");
  Serial.println("SPI0: MISO=GP16, MOSI=GP19, SCK=GP18");
  Serial.println();

  SPI.begin();
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));

  // Envia bytes de teste
  byte testBytes[] = {0x55, 0xAA, 0xFF, 0x00, 0x42};
  int count = sizeof(testBytes);

  Serial.println("Enviando bytes e lendo loopback:");
  for (int i = 0; i < count; i++) {
    byte rxByte = SPI.transfer(testBytes[i]);
    Serial.print("  TX: 0x");
    if (testBytes[i] < 16) Serial.print('0');
    Serial.print(testBytes[i], HEX);
    Serial.print("  RX: 0x");
    if (rxByte < 16) Serial.print('0');
    Serial.print(rxByte, HEX);
    Serial.print("  ");
    Serial.println(rxByte == testBytes[i] ? "IGUAL" : "DIFERENTE");
  }

  SPI.endTransaction();
  Serial.println();
  Serial.println("Teste SPI concluído.");
}

void loop() {
  delay(10000);
}

Como Funciona

  1. Configuração Serial: Iniciamos a comunicação serial a 115200 baud para imprimir os resultados no Monitor Serial.
  2. Inicialização SPI: SPI.begin() inicializa o periférico SPI0. SPI.beginTransaction() configura o barramento com velocidade de clock de 1 MHz, ordem de dados MSB primeiro e modo SPI 0 (CPOL=0, CPHA=0).
  3. Dados de Teste: Definimos um array de cinco bytes de teste: 0x55, 0xAA, 0xFF, 0x00 e 0x42. Eles cobrem bits alternados, todos 1, todos 0 e um padrão misto.
  4. Transferência em Loopback: Para cada byte, chamamos SPI.transfer(). Isso envia um byte e simultaneamente recebe o byte presente na linha MISO. Como temos um loopback (MISO conectado ao MOSI externa ou internamente), o byte recebido deve corresponder ao byte enviado.
  5. Exibição dos Resultados: O sketch imprime os bytes transmitidos (TX) e recebidos (RX) em hexadecimal, junto com um status “IGUAL” ou “DIFERENTE”.
  6. Limpeza: SPI.endTransaction() libera o barramento SPI.

Conceitos Principais

Problemas Comuns e Dicas de Depuração

Extensões Sugeridas

Experimente Você Mesmo

Pronto para construir este projeto? Abra o exemplo ao vivo no Velxio e comece a experimentar:

Abrir Loopback SPI no Pico no Velxio

Use a barra de ferramentas do editor Velxio para compilar e executar o código, e abra o Monitor Serial para ver os resultados. A barra de ferramentas do canvas permite ampliar e mover o circuito. Se precisar adicionar componentes, use o seletor de componentes.

Barra de ferramentas do editor Velxio com controles de compilar e executar

Barra de ferramentas do canvas Velxio acima da viewport de simulação

Modal do seletor de componentes Velxio navegando por peças por categoria

Boa construção!


Compartilhar em:
David Montero

Escrito por

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

Artigos relacionados


Artigo anterior
Leia Sensores Analógicos no Raspberry Pi Pico com Velxio
Próximo artigo
Leitura/Gravação de EEPROM I2C com Pico: Simule Memória Não Volátil no Seu Navegador