Indietro

Pico SPI Loopback: Testa la Comunicazione Seriale del Tuo RP2040

Introduzione

SPI (Serial Peripheral Interface) è un protocollo di comunicazione seriale sincrono ampiamente utilizzato per collegare microcontrollori a sensori, display e altre periferiche. In questo tutorial, costruiremo un semplice test di loopback SPI sul Raspberry Pi Pico utilizzando il simulatore in-browser Velxio. Il Pico invierà byte tramite SPI0 e li leggerà indietro, mentre tre LED indicheranno visivamente l’attività sulle linee MOSI, MISO e SCK. Questo è un ottimo modo per verificare che l’hardware SPI e il cablaggio funzionino correttamente prima di passare a progetti più complessi.

Diagramma del circuito del pico-spi-loopback sul canvas del simulatore Velxio

Spiegazione del Circuito

Diamo un’occhiata ai componenti e al cablaggio di questo circuito.

Componenti

Cablaggio

I pin SPI0 del Pico sono mappati come segue:

L’anodo (A) di ogni LED si collega al rispettivo pin SPI, e il suo catodo (C) si collega a GND (GND.1 sul Pico). I colori dei fili nel simulatore sono:

Questa semplice configurazione ti permette di vedere l’attività SPI: i LED lampeggeranno mentre i dati vengono trasmessi.

Spiegazione del Codice

Ecco lo sketch Arduino completo per il Pico:

// Raspberry Pi Pico — SPI Loopback Test
// Sends bytes over SPI0 and reads the loopback response
// Default SPI0 pins: MISO=GP16, MOSI=GP19, SCK=GP18, CS=GP17

#include <SPI.h>

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

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

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

  Serial.println("Sending bytes and reading 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] ? "MATCH" : "DIFFER");
  }

  SPI.endTransaction();
  Serial.println();
  Serial.println("SPI test complete.");
}

void loop() {
  delay(10000);
}

Come Funziona

  1. Configurazione Seriale: Avviamo la comunicazione seriale a 115200 baud per stampare i risultati sul Monitor Seriale.
  2. Inizializzazione SPI: SPI.begin() inizializza la periferica SPI0. SPI.beginTransaction() configura il bus con una velocità di clock di 1 MHz, ordine dei dati MSB-first e modalità SPI 0 (CPOL=0, CPHA=0).
  3. Dati di Test: Definiamo un array di cinque byte di test: 0x55, 0xAA, 0xFF, 0x00 e 0x42. Questi coprono bit alternati, tutti uno, tutti zero e un pattern misto.
  4. Trasferimento Loopback: Per ogni byte, chiamiamo SPI.transfer(). Questo invia simultaneamente un byte e riceve il byte attualmente presente sulla linea MISO. Poiché abbiamo un loopback (MISO collegato a MOSI esternamente o internamente), il byte ricevuto dovrebbe corrispondere al byte inviato.
  5. Visualizzazione dei Risultati: Lo sketch stampa i byte trasmessi (TX) e ricevuti (RX) in esadecimale, insieme a uno stato “MATCH” o “DIFFER”.
  6. Pulizia: SPI.endTransaction() rilascia il bus SPI.

Concetti Chiave

Insidie Comuni e Suggerimenti per il Debug

Estensioni Suggerite

Provalo Tu Stesso

Pronto a costruire questo progetto? Apri l’esempio live in Velxio e inizia a sperimentare:

Apri Pico SPI Loopback in Velxio

Usa la barra degli strumenti dell’editor Velxio per compilare ed eseguire il codice, e apri il Monitor Seriale per vedere i risultati. La barra degli strumenti del canvas ti permette di zoomare e spostare il circuito. Se hai bisogno di aggiungere componenti, usa il selettore di componenti.

Barra degli strumenti dell'editor Velxio con i controlli di compilazione ed esecuzione

Barra degli strumenti del canvas Velxio sopra il viewport di simulazione

Modale del selettore di componenti Velxio che sfoglia le parti per categoria

Buona costruzione!


Condividi su:
David Montero

Scritto da

David Montero

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

GitHub velxio.dev

Articoli correlati


Articolo precedente
Leggere Sensori Analogici su Raspberry Pi Pico con Velxio
Articolo successivo
Lettura/Scrittura EEPROM I2C su Pico: Simula Memoria Non Volatile nel Tuo Browser