Retour

Pico SPI Loopback : testez la communication série de votre RP2040

Introduction

Le SPI (Serial Peripheral Interface) est un protocole de communication série synchrone largement utilisé pour connecter des microcontrôleurs à des capteurs, des écrans et d’autres périphériques. Dans ce tutoriel, nous allons construire un simple test de boucle de retour SPI sur le Raspberry Pi Pico en utilisant le simulateur en ligne Velxio. Le Pico enverra des octets via SPI0 et les lira en retour, tandis que trois LED indiqueront visuellement l’activité sur les lignes MOSI, MISO et SCK. C’est un excellent moyen de vérifier que votre matériel SPI et votre câblage fonctionnent correctement avant de passer à des projets plus complexes.

Schéma du circuit pico-spi-loopback sur le canevas du simulateur Velxio

Présentation du circuit

Examinons les composants et le câblage de ce circuit.

Composants

Câblage

Les broches SPI0 du Pico sont mappées comme suit :

L’anode (A) de chaque LED se connecte à la broche SPI correspondante, et sa cathode (C) se connecte à GND (GND.1 sur le Pico). Les couleurs des fils dans le simulateur sont :

Cette configuration simple vous permet de visualiser l’activité SPI : les LED clignoteront lors de la transmission des données.

Explication du code

Voici le sketch Arduino complet pour le 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);
}

Comment ça fonctionne

  1. Configuration série : Nous démarrons la communication série à 115200 bauds pour afficher les résultats dans le moniteur série.
  2. Initialisation SPI : SPI.begin() initialise le périphérique SPI0. SPI.beginTransaction() configure le bus avec une vitesse d’horloge de 1 MHz, un ordre des données MSB en premier, et le mode SPI 0 (CPOL=0, CPHA=0).
  3. Données de test : Nous définissons un tableau de cinq octets de test : 0x55, 0xAA, 0xFF, 0x00 et 0x42. Ceux-ci couvrent des bits alternés, tous à 1, tous à 0, et un motif mixte.
  4. Transfert en boucle : Pour chaque octet, nous appelons SPI.transfer(). Cela envoie simultanément un octet et reçoit l’octet présent sur la ligne MISO. Comme nous avons une boucle de retour (MISO connectée à MOSI, en externe ou en interne), l’octet reçu devrait correspondre à l’octet envoyé.
  5. Affichage des résultats : Le sketch affiche les octets transmis (TX) et reçus (RX) en hexadécimal, ainsi qu’un statut “MATCH” ou “DIFFER”.
  6. Nettoyage : SPI.endTransaction() libère le bus SPI.

Concepts clés

Pièges courants et conseils de débogage

Extensions suggérées

Essayez par vous-même

Prêt à construire ce projet ? Ouvrez l’exemple en direct dans Velxio et commencez à expérimenter :

Ouvrir Pico SPI Loopback dans Velxio

Utilisez la barre d’outils de l’éditeur Velxio pour compiler et exécuter le code, et ouvrez le moniteur série pour voir les résultats. La barre d’outils du canevas vous permet de zoomer et de faire un panoramique sur le circuit. Si vous devez ajouter des composants, utilisez le sélecteur de composants.

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

Barre d'outils du canevas Velxio au-dessus de la fenêtre de simulation

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

Bon montage !


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
Lire des capteurs analogiques sur Raspberry Pi Pico avec Velxio
Article suivant
Lecture/Écriture EEPROM I2C sur Pico — Simulez une mémoire non volatile dans votre navigateur