Retour

Test de boucle SPI : Maîtrisez le protocole avec Velxio

Introduction

L’interface périphérique série (SPI) est un protocole de communication série synchrone largement utilisé pour connecter des microcontrôleurs à des capteurs, des écrans et des puces mémoire. Dans ce tutoriel, nous allons construire un test de boucle SPI en utilisant le simulateur Velxio. Le test de boucle envoie des octets via SPI et lit la réponse, confirmant ainsi le bon fonctionnement du protocole. Comme il n’y a pas de périphérique esclave physique, le simulateur renvoie l’octet envoyé, ce qui en fait un moyen idéal pour apprendre le SPI sans aucun matériel.

Présentation du circuit

Commençons par configurer le circuit. Le seul composant dont nous avons besoin est un Arduino Uno, que nous placerons sur le canevas.

Schéma du circuit de boucle SPI sur le canevas du simulateur Velxio

Pour ajouter l’Arduino Uno, ouvrez le sélecteur de composants en cliquant sur l’icône ”+” dans la barre d’outils du canevas.

Fenêtre modale du sélecteur de composants Velxio parcourant les pièces par catégorie

Recherchez “Arduino Uno” et placez-le sur le canevas. L’Arduino Uno possède des broches SPI dédiées :

Dans ce test de boucle, nous n’avons besoin d’aucun câblage externe car les signaux SPI sont internes à l’Arduino. Cependant, nous devons nous assurer que la broche SS (broche 10) est configurée comme sortie et maintenue à l’état haut initialement, puis à l’état bas pendant la communication. Le code s’en charge.

Présentation du code

Examinons maintenant le code. Ouvrez l’éditeur de code en cliquant sur l’onglet “Code” dans la barre d’outils de l’éditeur.

Barre d'outils de l'éditeur Velxio avec les commandes de compilation et d'exécution

Le code est écrit en Arduino C++ et utilise la bibliothèque intégrée SPI.h. Aucune bibliothèque externe n’est nécessaire.

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

Détaillons les parties clés :

Concepts clés

Pièges courants et conseils de débogage

Extensions suggérées

Essayez par vous-même

Prêt à vous lancer ? Ouvrez l’exemple en direct dans Velxio et exécutez la simulation. Vous verrez la sortie série affichant chaque octet transmis et reçu, confirmant la boucle.

Ouvrir le test de boucle SPI dans Velxio

Bonne simulation !


Partager sur :
David Montero

Écrit par

David Montero

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

GitHub velxio.dev

Articles liés


Article précédent
Maîtrisez Serial, I2C et SPI sur Arduino avec Velxio
Article suivant
Lecture/Écriture EEPROM I2C avec Arduino — Guide Complet