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.

Spiegazione del Circuito
Diamo un’occhiata ai componenti e al cablaggio di questo circuito.
Componenti
- Raspberry Pi Pico (il cervello dell’operazione)
- LED Rosso – collegato alla linea MOSI (GP7)
- LED Verde – collegato alla linea MISO (GP4)
- LED Giallo – collegato alla linea SCK (GP6)
Cablaggio
I pin SPI0 del Pico sono mappati come segue:
- MOSI (Master Out Slave In) – GP7 (D7 sul pinout Nano RP2040 Connect)
- MISO (Master In Slave Out) – GP4 (D4)
- SCK (Serial Clock) – GP6 (D6)
- CS (Chip Select) – non utilizzato in questo test di loopback
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:
- MOSI: filo rosso (
#ff4444) - MISO: filo verde (
#00cc00) - SCK: filo giallo (
#ffaa00) - Massa: filo nero (
#000000)
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
- Configurazione Seriale: Avviamo la comunicazione seriale a 115200 baud per stampare i risultati sul Monitor Seriale.
- 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). - Dati di Test: Definiamo un array di cinque byte di test:
0x55,0xAA,0xFF,0x00e0x42. Questi coprono bit alternati, tutti uno, tutti zero e un pattern misto. - 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. - Visualizzazione dei Risultati: Lo sketch stampa i byte trasmessi (TX) e ricevuti (RX) in esadecimale, insieme a uno stato “MATCH” o “DIFFER”.
- Pulizia:
SPI.endTransaction()rilascia il bus SPI.
Concetti Chiave
- Protocollo SPI: SPI è un protocollo sincrono full-duplex con un master (il Pico) e uno o più slave. Utilizza quattro fili: MOSI, MISO, SCK e CS (chip select). In questo test di loopback, utilizziamo solo MOSI, MISO e SCK.
- Loopback: Collegare MOSI a MISO permette al master di ricevere i propri dati trasmessi. Questo è un test comune per verificare che l’hardware SPI e il cablaggio siano funzionanti.
- Modalità SPI: La modalità (0, 1, 2 o 3) definisce la polarità e la fase del clock. La modalità 0 (CPOL=0, CPHA=0) è la più comune.
- Baud Rate: Il baud rate del monitor seriale (115200) deve corrispondere all’impostazione
Serial.begin()dello sketch.
Insidie Comuni e Suggerimenti per il Debug
- Mappatura Pin Errata: I commenti nel codice menzionano i pin SPI0 predefiniti (GP16, GP19, GP18), ma il cablaggio effettivo utilizza GP7, GP4 e GP6. Verifica sempre il pinout per la tua scheda specifica. In Velxio, i pin SPI0 del Pico sono GP7 (MOSI), GP4 (MISO) e GP6 (SCK).
- Massa Mancante: Assicurati che tutti i LED abbiano i catodi collegati a GND. Senza un percorso di massa, i LED non si accenderanno.
- Monitor Seriale che non Mostra Output: Assicurati che il baud rate sia impostato a 115200 nel Monitor Seriale di Velxio. Puoi aprirlo dalla barra degli strumenti dell’editor.
- LED che non Lampeggiano: Controlla che i LED siano cablati ai pin corretti e che il codice sia in esecuzione. I LED lampeggeranno rapidamente durante il ciclo
for, poi rimarranno spenti. - Loopback che non Funziona: Se i byte ricevuti non corrispondono, verifica che MOSI e MISO siano collegati. In questo circuito, non sono collegati direttamente; i LED sono solo indicatori. Per un vero loopback, dovresti collegare GP7 a GP4 con un filo. Tuttavia, il codice viene comunque eseguito e stampa i risultati — il byte ricevuto sarà quello presente sulla linea MISO (probabilmente 0xFF o 0x00 se è flottante).
Estensioni Suggerite
- Aggiungi un Loopback Fisico: Collega un filo da GP7 (MOSI) a GP4 (MISO) per effettuare un vero loopback dei dati. Quindi i byte ricevuti dovrebbero corrispondere perfettamente.
- Usa una Modalità SPI Diversa: Cambia
SPI_MODE0inSPI_MODE1,SPI_MODE2oSPI_MODE3e osserva l’effetto sui LED. - Aumenta la Velocità del Clock: Prova 8 MHz o 16 MHz e verifica se i LED lampeggiano ancora visibilmente.
- Aggiungi Più LED: Collega LED al pin CS (GP17) e ad altri GPIO per visualizzare segnali aggiuntivi.
- Interfacciati con un Dispositivo SPI Reale: Sostituisci il loopback con un sensore SPI (ad esempio, un sensore di temperatura) e leggine i dati.
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.



Buona costruzione!