Volver

Prueba de bucle SPI: Domina el protocolo con Velxio

Introducción

El interfaz periférico serie (SPI) es un protocolo de comunicación serie síncrono ampliamente utilizado para conectar microcontroladores a sensores, pantallas y chips de memoria. En este tutorial, construiremos una prueba de bucle SPI usando el simulador Velxio. La prueba de bucle envía bytes a través de SPI y lee la respuesta, confirmando que el protocolo funciona correctamente. Como no hay un dispositivo esclavo físico, el simulador devuelve el byte enviado, lo que lo convierte en una forma perfecta de aprender SPI sin ningún hardware.

Recorrido del circuito

Empecemos configurando el circuito. El único componente que necesitamos es un Arduino Uno, que colocaremos en el lienzo.

Diagrama del circuito de bucle SPI en el lienzo del simulador Velxio

Para añadir el Arduino Uno, abre el selector de componentes haciendo clic en el icono ”+” de la barra de herramientas del lienzo.

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

Busca “Arduino Uno” y colócalo en el lienzo. El Arduino Uno tiene pines SPI dedicados:

En esta prueba de bucle, no necesitamos ningún cableado externo porque las señales SPI son internas al Arduino. Sin embargo, debemos asegurarnos de que el pin SS (pin 10) esté configurado como salida y se ponga en alto inicialmente, y luego en bajo durante la comunicación. El código se encarga de esto.

Recorrido del código

Ahora examinemos el código. Abre el editor de código haciendo clic en la pestaña “Código” de la barra de herramientas del editor.

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

El código está escrito en Arduino C++ y utiliza la librería integrada SPI.h. No se necesitan librerías externas.

// SPI Loopback Test
// Sends bytes via SPI and logs the exchange.
// Without a physical slave, the emulator returns the sent byte.

#include <SPI.h>

#define SS_PIN 10

void setup() {
  Serial.begin(9600);
  Serial.println("========================");
  Serial.println("  SPI Protocol Test");
  Serial.println("========================");
  Serial.println();

  pinMode(SS_PIN, OUTPUT);
  digitalWrite(SS_PIN, HIGH);
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV16);

  Serial.println("SPI initialized.");
  Serial.print("Clock divider: 16 (");
  Serial.print(F_CPU / 16);
  Serial.println(" Hz)");
  Serial.println();

  // Send test pattern
  Serial.println("Sending test pattern via SPI:");
  byte testData[] = {0xAA, 0x55, 0xFF, 0x00, 0x42, 0xDE, 0xAD, 0xBE};

  digitalWrite(SS_PIN, LOW);  // Select slave

  for (int i = 0; i < sizeof(testData); i++) {
    byte sent = testData[i];
    byte received = SPI.transfer(sent);

    Serial.print("  TX: 0x");
    if (sent < 16) Serial.print("0");
    Serial.print(sent, HEX);
    Serial.print("  RX: 0x");
    if (received < 16) Serial.print("0");
    Serial.print(received, HEX);

    if (sent == received) {
      Serial.println("  (loopback OK)");
    } else {
      Serial.println();
    }
  }

  digitalWrite(SS_PIN, HIGH);  // Deselect slave

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

void loop() {
  delay(1000);
}

Desglosemos las partes clave:

Conceptos clave

Errores comunes y consejos de depuración

Extensiones sugeridas

Pruébalo tú mismo

¿Listo para sumergirte? Abre el ejemplo en vivo en Velxio y ejecuta la simulación. Verás la salida serie mostrando cada byte transmitido y recibido, confirmando el bucle.

Abre la prueba de bucle SPI en Velxio

¡Feliz simulació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
Domina Serial, I2C y SPI en Arduino con Velxio
Artículo siguiente
Lectura/Escritura de EEPROM I2C con Arduino: Guía Completa