Volver

Bucle de retorno SPI en Pico: Prueba la comunicación serie de tu RP2040

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.

Diagrama del circuito pico-spi-loopback en el lienzo del simulador Velxio

Explicación del Circuito

Veamos los componentes y el cableado de este circuito.

Componentes

Cableado

Los pines SPI0 de la Pico se asignan de la siguiente manera:

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:

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

  1. Configuración Serie: Iniciamos la comunicación serie a 115200 baudios para imprimir los resultados en el Monitor Serie.
  2. 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).
  3. Datos de Prueba: Definimos un array de cinco bytes de prueba: 0x55, 0xAA, 0xFF, 0x00 y 0x42. Estos cubren bits alternados, todos unos, todos ceros y un patrón mixto.
  4. 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.
  5. 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).
  6. Limpieza: SPI.endTransaction() libera el bus SPI.

Conceptos Clave

Errores Comunes y Consejos de Depuración

Extensiones Sugeridas

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.

Barra de herramientas del editor de Velxio con controles de compilación y ejecución

Barra de herramientas del lienzo de Velxio sobre la ventana de simulación

Modal del selector de componentes de Velxio navegando piezas por categoría

¡Feliz construcción!


Compartir en:
David Montero

Escrito por

David Montero

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

GitHub velxio.dev

Artículos relacionados


Artículo anterior
Lectura de sensores analógicos en Raspberry Pi Pico con Velxio
Artículo siguiente
Lectura/Escritura de EEPROM I2C con Pico: Simula Memoria No Volátil en tu Navegador