Introducción
SPI (Interfaz Periférica Serie) es un protocolo de comunicación serie síncrono ampliamente utilizado para conectar microcontroladores a sensores, pantallas y otros periféricos. En este tutorial, construiremos una prueba simple de bucle de retorno SPI en la Raspberry Pi Pico usando el simulador en navegador de Velxio. La Pico enviará bytes a través de SPI0 y los leerá de vuelta, mientras tres LEDs indican visualmente la actividad en las líneas MOSI, MISO y SCK. Esta es una excelente manera de verificar que el hardware SPI y el cableado funcionan correctamente antes de pasar a proyectos más complejos.

Explicación del Circuito
Veamos los componentes y el cableado de este circuito.
Componentes
- Raspberry Pi Pico (el cerebro de la operación)
- LED rojo – conectado a la línea MOSI (GP7)
- LED verde – conectado a la línea MISO (GP4)
- LED amarillo – conectado a la línea SCK (GP6)
Cableado
Los pines SPI0 de la Pico se asignan de la siguiente manera:
- MOSI (Salida Maestro Entrada Esclavo) – GP7 (D7 en la distribución de pines Nano RP2040 Connect)
- MISO (Entrada Maestro Salida Esclavo) – GP4 (D4)
- SCK (Reloj Serie) – GP6 (D6)
- CS (Selección de Chip) – no se usa en esta prueba de bucle de retorno
El ánodo (A) de cada LED se conecta al pin SPI correspondiente, y su cátodo (C) se conecta a GND (GND.1 en la Pico). Los colores de los cables en el simulador son:
- MOSI: cable rojo (
#ff4444) - MISO: cable verde (
#00cc00) - SCK: cable amarillo (
#ffaa00) - Tierra: cable negro (
#000000)
Esta configuración simple permite ver la actividad SPI: los LEDs parpadearán mientras se transmiten datos.
Explicación del Código
Este es el sketch completo de Arduino para la 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);
}
Cómo Funciona
- Configuración Serie: Iniciamos la comunicación serie a 115200 baudios para imprimir los resultados en el Monitor Serie.
- Inicialización SPI:
SPI.begin()inicializa el periférico SPI0.SPI.beginTransaction()configura el bus con una velocidad de reloj de 1 MHz, orden de datos MSB primero y modo SPI 0 (CPOL=0, CPHA=0). - Datos de Prueba: Definimos un array de cinco bytes de prueba:
0x55,0xAA,0xFF,0x00y0x42. Estos cubren bits alternados, todos unos, todos ceros y un patrón mixto. - Transferencia en Bucle de Retorno: Para cada byte, llamamos a
SPI.transfer(). Esto envía un byte y recibe simultáneamente el byte que está actualmente en la línea MISO. Como tenemos un bucle de retorno (MISO conectado a MOSI externa o internamente), el byte recibido debería coincidir con el byte enviado. - Visualización de Resultados: El sketch imprime los bytes transmitidos (TX) y recibidos (RX) en hexadecimal, junto con un estado de “MATCH” (COINCIDENCIA) o “DIFFER” (DIFERENCIA).
- Limpieza:
SPI.endTransaction()libera el bus SPI.
Conceptos Clave
- Protocolo SPI: SPI es un protocolo síncrono full-duplex con un maestro (la Pico) y uno o más esclavos. Utiliza cuatro cables: MOSI, MISO, SCK y CS (selección de chip). En esta prueba de bucle de retorno, solo usamos MOSI, MISO y SCK.
- Bucle de Retorno: Conectar MOSI a MISO permite que el maestro reciba sus propios datos transmitidos. Esta es una prueba común para verificar que el hardware y el cableado SPI funcionan correctamente.
- Modos SPI: El modo (0, 1, 2 o 3) define la polaridad y fase del reloj. El modo 0 (CPOL=0, CPHA=0) es el más común.
- Velocidad de Baudios: La velocidad de baudios del monitor serie (115200) debe coincidir con la configuración de
Serial.begin()en el sketch.
Errores Comunes y Consejos de Depuración
- Asignación Incorrecta de Pines: Los comentarios del código mencionan los pines SPI0 predeterminados (GP16, GP19, GP18), pero el cableado real usa GP7, GP4 y GP6. Verifica siempre la distribución de pines para tu placa específica. En Velxio, los pines SPI0 de la Pico son GP7 (MOSI), GP4 (MISO) y GP6 (SCK).
- Falta de Conexión a Tierra: Asegúrate de que todos los LEDs tengan sus cátodos conectados a GND. Sin una ruta a tierra, los LEDs no se encenderán.
- El Monitor Serie No Muestra Salida: Asegúrate de que la velocidad de baudios esté configurada a 115200 en el Monitor Serie de Velxio. Puedes abrirlo desde la barra de herramientas del editor.
- Los LEDs No Parpadean: Verifica que los LEDs estén conectados a los pines correctos y que el código se esté ejecutando. Los LEDs parpadearán rápidamente durante el bucle
fory luego permanecerán apagados. - El Bucle de Retorno No Funciona: Si los bytes recibidos no coinciden, verifica que MOSI y MISO estén conectados. En este circuito, no están conectados directamente; los LEDs son solo indicadores. Para un bucle de retorno real, necesitarías conectar GP7 a GP4 con un cable. Sin embargo, el código aún se ejecuta e imprime resultados: el byte recibido será el que esté en la línea MISO (probablemente 0xFF o 0x00 si está flotando).
Extensiones Sugeridas
- Añadir un Bucle de Retorno Físico: Conecta un cable de GP7 (MOSI) a GP4 (MISO) para realmente hacer un bucle de retorno de los datos. Entonces los bytes recibidos deberían coincidir perfectamente.
- Usar un Modo SPI Diferente: Cambia
SPI_MODE0aSPI_MODE1,SPI_MODE2oSPI_MODE3y observa el efecto en los LEDs. - Aumentar la Velocidad del Reloj: Prueba con 8 MHz o 16 MHz y observa si los LEDs aún parpadean de forma visible.
- Añadir Más LEDs: Conecta LEDs al pin CS (GP17) y a otros GPIOs para visualizar señales adicionales.
- Interactuar con un Dispositivo SPI Real: Reemplaza el bucle de retorno con un sensor SPI (por ejemplo, un sensor de temperatura) y lee sus datos.
Pruébalo Tú Mismo
¿Listo para construir este proyecto? Abre el ejemplo en vivo en Velxio y comienza a experimentar:
Abrir Pico SPI Loopback en Velxio
Usa la barra de herramientas del editor de Velxio para compilar y ejecutar el código, y abre el Monitor Serie para ver los resultados. La barra de herramientas del lienzo te permite hacer zoom y desplazar el circuito. Si necesitas añadir componentes, usa el selector de componentes.



¡Feliz construcción!