Indietro

Test di Loopback SPI: Padroneggia il Protocollo con Velxio

Introduzione

Il Serial Peripheral Interface (SPI) è un protocollo di comunicazione seriale sincrono ampiamente utilizzato per collegare microcontrollori a sensori, display e chip di memoria. In questo tutorial, realizzeremo un test di loopback SPI utilizzando il simulatore Velxio. Il test di loopback invia byte tramite SPI e legge la risposta, confermando che il protocollo funzioni correttamente. Poiché non è presente un dispositivo slave fisico, il simulatore restituisce il byte inviato, rendendolo un modo perfetto per imparare lo SPI senza alcun hardware.

Panoramica del Circuito

Iniziamo impostando il circuito. L’unico componente di cui abbiamo bisogno è un Arduino Uno, che posizioneremo sulla tela.

Diagramma del circuito di loopback SPI sulla tela del simulatore Velxio

Per aggiungere l’Arduino Uno, apri il selettore componenti cliccando sull’icona ”+” nella barra degli strumenti della tela.

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

Cerca “Arduino Uno” e posizionalo sulla tela. L’Arduino Uno ha pin SPI dedicati:

In questo test di loopback, non è necessario alcun cablaggio esterno poiché i segnali SPI sono interni all’Arduino. Tuttavia, dobbiamo assicurarci che il pin SS (pin 10) sia configurato come output e portato a livello alto inizialmente, poi basso durante la comunicazione. Il codice gestisce questo aspetto.

Analisi del Codice

Ora esaminiamo il codice. Apri l’editor del codice cliccando sulla scheda “Code” nella barra degli strumenti dell’editor.

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

Il codice è scritto in Arduino C++ e utilizza la libreria integrata SPI.h. Non sono necessarie librerie esterne.

// 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);
}

Analizziamo le parti chiave:

Concetti Chiave

Insidie Comuni e Suggerimenti per il Debug

Estensioni Suggerite

Provalo Tu Stesso

Pronto per iniziare? Apri l’esempio live in Velxio ed esegui la simulazione. Vedrai l’output seriale che mostra ogni byte trasmesso e ricevuto, confermando il loopback.

Apri il Test di Loopback SPI in Velxio

Buona simulazione!


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
Padroneggia Serial, I2C e SPI su Arduino con Velxio
Articolo successivo
Lettura/Scrittura EEPROM I2C con Arduino: Guida Completa