Protocole SPI

Maîtrisez le protocole SPI (Serial Peripheral Interface) et son implémentation VHDL

Qu'est-ce que SPI ?

Le protocole SPI (Serial Peripheral Interface) est un protocole série synchrone développé par Motorola dans les années 1980. Il est très utilisé dans les systèmes embarqués pour la communication entre un microcontrôleur ou un FPGA et des périphériques comme des capteurs, des convertisseurs ADC/DAC, des mémoires Flash ou des écrans.

Ses caractéristiques principales :

  • Synchrone : une horloge commune (SCK) pilote les échanges
  • Full-duplex : émission et réception simultanées
  • Maître/Esclave : le maître génère l'horloge et sélectionne l'esclave
  • Pas d'adressage : la sélection se fait via un signal dédié SS_N

Signaux SPI

SignalDirectionDescription
SCKMaître → EsclaveHorloge série (Serial Clock)
MOSIMaître → EsclaveDonnées maître vers esclave (Master Out Slave In)
MISOEsclave → MaîtreDonnées esclave vers maître (Master In Slave Out)
SS_NMaître → EsclaveSélection esclave, actif bas (Slave Select)

Pour plusieurs esclaves, le maître dispose d'un signal SS_N par esclave. MOSI, MISO et SCK sont partagés (bus).


Modes SPI (CPOL / CPHA)

SPI définit 4 modes selon deux paramètres :

  • CPOL (Clock Polarity) : état de repos de SCK — 0 = bas, 1 = haut
  • CPHA (Clock Phase) : moment d'échantillonnage — 0 = front montant actif, 1 = front descendant actif
ModeCPOLCPHAÉchantillonnageDescription
000Front montant SCKRepos SCK bas, échantillon sur montant
101Front descendant SCKRepos SCK bas, échantillon sur descendant
210Front descendant SCKRepos SCK haut, échantillon sur descendant
311Front montant SCKRepos SCK haut, échantillon sur montant

Le mode 0 (CPOL=0, CPHA=0) est le plus courant. C'est celui utilisé dans les exercices de la plateforme.


Trame SPI

Une transaction SPI se déroule ainsi :

  1. Le maître abaisse SS_N (actif bas) pour sélectionner l'esclave
  2. Le maître génère des impulsions SCK
  3. À chaque cycle SCK, 1 bit est transféré dans chaque direction (MOSI et MISO)
  4. Les données sont transmises MSB en premier (convention la plus répandue)
  5. Le maître remonte SS_N pour terminer la transaction

Pour une trame de 8 bits :

Diagramme de timing SPI 8 bits


Implémentation VHDL

Mettez en pratique l'implémentation SPI avec les exercices suivants :

Exercices SPI disponibles :


Points d'attention

  • Synchronisation : les signaux SPI (SCK, SS_N, MOSI) viennent d'un domaine d'horloge externe → toujours les resynchroniser avec un double registre avant utilisation dans le domaine système
  • CPOL/CPHA : vérifier le datasheet du composant esclave. Une incompatibilité de mode provoque des données corrompues sans erreur visible
  • SS_N doit rester bas pendant toute la transaction. Si SS_N remonte entre deux octets, l'esclave réinitialise son compteur de bits
  • Fréquence SCK : limitée par la fréquence maximale de l'esclave et le délai de propagation MISO
  • Ordre des bits : MSB first est la convention standard, mais certains périphériques utilisent LSB first — vérifier la documentation

Avantages et inconvénients

AvantagesInconvénients
Simple à implémenterUn fil SS_N par esclave (beaucoup de pins)
Haute vitesse (dizaines de MHz)Pas d'accusé de réception (ACK)
Full-duplexDistance limitée
Protocole flexiblePas de détection d'erreurs native