Signaux SPI, modes de transfert, trames et points d'implémentation VHDL.
SPI échange des bits sous le contrôle d'une horloge fournie par le maître. Celui-ci sélectionne le périphérique avec SS_N. MOSI et MISO permettent d'émettre et de recevoir pendant le même échange.
Ce chapitre s'adresse à ceux qui veulent relier un FPGA à un capteur ou à un autre périphérique série. Avant de commencer, revois les processus VHDL et les machines à états. Tu dois pouvoir suivre un front d'horloge, un registre à décalage et un reset sur un chronogramme.
Câbler et choisir le mode
Signal
Direction
Description
SCK
Maître → Esclave
Horloge série (Serial Clock)
MOSI
Maître → Esclave
Données maître vers esclave (Master Out Slave In)
MISO
Esclave → Maître
Données esclave vers maître (Master In Slave Out)
SS_N
Maître → Esclave
Sélection esclave, actif bas (Slave Select)
Dans une organisation courante avec plusieurs esclaves, SCK, MOSI et MISO sont partagés, et chaque esclave a sa sélection SS_N. La sélection remplace l'adressage sur ce bus.
CPOL fixe le repos de SCK : bas pour 0, haut pour 1. CPHA choisit le front d'échantillonnage : premier front pour 0, second pour 1. Ces paramètres donnent quatre modes :
Mode
CPOL
CPHA
Échantillonnage
Description
0
0
0
Front montant SCK
Repos SCK bas, échantillon sur montant
1
0
1
Front descendant SCK
Repos SCK bas, échantillon sur descendant
2
1
0
Front descendant SCK
Repos SCK haut, échantillon sur descendant
3
1
1
Front montant SCK
Repos SCK haut, échantillon sur montant
Les exercices de maître SPI débutants utilisent le mode 0 ; l'exercice d'esclave utilise le mode 1. Pour un périphérique réel, prends le mode indiqué dans sa datasheet.
Suivre une transaction
Le maître abaisse SS_N, fournit les impulsions SCK, puis relève SS_N à la fin. Chaque cycle SCK transporte un bit dans chaque direction. L'ordre MSB d'abord est courant, mais certains composants attendent le LSB d'abord.
Garde la sélection active pendant la transaction demandée par le périphérique. Sa désactivation peut réinitialiser le compteur de bits ou terminer une commande ; le comportement exact vient de sa documentation.
Prenons un échange de huit bits en mode 0, MSB d'abord, avec 0xA5 à transmettre. Les bits présentés sur MOSI sont 1 0 1 0 0 1 0 1. Le premier bit doit être prêt avant le premier front montant de SCK ; les suivants changent sur les fronts descendants et sont échantillonnés sur les fronts montants. Compte huit fronts montants pendant que SS_N=0, puis vérifie que SCK revient au repos bas et que la sélection est relâchée à la fin de l'échange prévu.
La fréquence doit respecter les limites de l'esclave et les délais de la liaison, notamment le retour MISO. Un mauvais choix CPOL/CPHA peut produire des données corrompues sans signal d'erreur.
Pour un esclave échantillonné par l'horloge système, traite le passage des signaux externes dans ce domaine. Un double registre réduit le risque de métastabilité d'un signal, mais ne garantit pas à lui seul la capture des fronts ni la cohérence entre SCK et MOSI. Vérifie les rapports de fréquence et les délais de l'architecture retenue ; le chapitre timing et traversées de domaines d'horloge explique cette distinction.
Passer au RTL
Esclave SPI mode 1 : réception, synchronisation et détection des fronts.
Commence par le maître mode 0 et compare ses chronogrammes à l'échange 0xA5 ci-dessus. Vérifie aussi la réception MISO, le retour au repos et un second transfert : un premier octet correct ne suffit pas à confirmer la machine à états.
Pour écrire tes propres contrôles, passe au testbench du maître SPI. Suis sa spécification pour les fronts, la fréquence et le reset ; la validation doit accepter le DUT correct et détecter les variantes défectueuses. Une simple inspection visuelle ne remplace pas ces comparaisons automatiques.