
Interface SPI : modes, timing et câblage
Comprendre CPOL, CPHA, MOSI, MISO, SCLK et CS, puis concevoir un bus SPI fiable : chronogrammes, niveaux logiques, topologies et mise au point.
Rédaction et revue techniqueElectroDesignForge Engineering Team
Voir le processus éditorialGuide de référence
SPI (Serial Peripheral Interface) relie un contrôleur à des circuits proches : mémoire Flash, ADC/DAC, écran, capteur ou circuit RF. Cette liaison série synchrone est rapide et full-duplex, mais elle n’est pas une norme complète : le format de trame et les limites électriques viennent de chaque fiche technique.
Référence rapide
| Signal | Sens vu depuis le contrôleur | Fonction | À retenir |
|---|---|---|---|
| SCLK / SCK | sortie | Horloge série | Son niveau au repos est fixé par CPOL. |
| MOSI | contrôleur → périphérique | Données émises | Aussi nommé COPI, SDI ou DIN. |
| MISO | périphérique → contrôleur | Données reçues | Aussi nommé CIPO, SDO ou DOUT ; haute impédance hors sélection. |
| CS / SS / nCS | sortie, souvent active à 0 | Sélection et délimitation de trame | Un CS distinct est normalement requis par périphérique. |
| GND | commun | Référence et retour de courant | Doit accompagner les signaux, surtout hors carte. |
MOSI et MISO supposent le point de vue du contrôleur. Les termes COPI (Controller Out, Peripheral In) et CIPO (Controller In, Peripheral Out) évitent l’ambiguïté lorsque les rôles sont discutés sans schéma.
SPI n’impose ni adresse, ni acquittement, ni débit maximal universel. Le protocole applicatif définit la commande, l’adresse de registre, les octets factices et la réponse. Un analyseur logique peut donc décoder des bits corrects alors que le circuit reste silencieux si CS ou le format de commande est incorrect.
À vérifier avant le câblage : niveaux logiques, fréquence SCLK admissible, mode SPI, ordre MSB/LSB, taille de mot, état actif de CS et temps minimaux autour de CS. Les domaines 1,8 V, 2,5 V, 3,3 V et 5 V ne sont pas automatiquement compatibles.
Les quatre modes : CPOL et CPHA
- CPOL (clock polarity) fixe SCLK au repos : 0 = bas, 1 = haut.
- CPHA (clock phase) fixe le front d’échantillonnage. Avec CPHA = 0, le premier front après CS lit le premier bit ; avec CPHA = 1, il sert à changer le bit et le front suivant le lit.
| Mode | CPOL | CPHA | SCLK au repos | Échantillonnage | Changement de donnée |
|---|---|---|---|---|---|
| 0 | 0 | 0 | Bas | Front montant | Front descendant |
| 1 | 0 | 1 | Bas | Front descendant | Front montant |
| 2 | 1 | 0 | Haut | Front descendant | Front montant |
| 3 | 1 | 1 | Haut | Front montant | Front descendant |
Le front de tête est la première transition depuis l’état de repos, le front de queue la seconde. CPHA = 0 échantillonne sur le front de tête ; CPHA = 1 sur le front de queue. Cette lecture est valable pour CPOL = 0 et CPOL = 1.
Lire un chronogramme
- Relevez le niveau de SCLK avant CS : c’est CPOL.
- Repérez le front où la donnée stable est lue : c’est CPHA.
- Avec CPHA = 0, le premier bit doit être valide avant le premier front.
- Confirmez dans la fiche technique les délais de sortie : la donnée ne change pas toujours exactement sur le front opposé.
Un CPHA incorrect décale souvent les bits ; un CPOL incorrect lit une suite plausible aux mauvais instants. Une réponse 0x00, 0xFF ou un identifiant faux est un symptôme possible, pas un diagnostic définitif.
Timing : au-delà de la fréquence
| Paramètre | Signification | Risque si non respecté |
|---|---|---|
fSCLK | fréquence maximale | Erreurs intermittentes ou échantillonnage instable |
tSU(D) | établissement MOSI/MISO avant le front de lecture | Bit lu au mauvais niveau |
tH(D) | maintien après ce front | Bit suivant qui perturbe le bit courant |
tCSS | CS actif → premier front SCLK | Première commande ignorée ou décalée |
tCSH | dernier front → CS inactif | Dernier bit non validé |
tCSHI | temps CS inactif entre trames | État interne non réinitialisé |
tDO | délai d’apparition de MISO | Lecture trop tôt à haute fréquence |
Le budget de timing inclut les délais de traducteur de niveau, le temps de vol des pistes ou du câble, le temps de montée réel et la charge capacitive. Une vitesse valide sur une carte courte peut échouer après l’ajout d’un connecteur ou d’une branche.
Dans le cas courant de CS actif bas : laissez SCLK à l’état CPOL, activez CS, attendez tCSS, présentez le premier bit à temps si CPHA = 0, générez les fronts, puis attendez tCSH avant de relâcher CS. Certains circuits exigent que CS reste actif durant l’ensemble commande-adresse-données ; d’autres exécutent l’opération au relâchement de CS.
Câblage de MOSI, MISO, SCLK et CS
Contrôleur MOSI ─────────► Périphérique SDI / DIN
Contrôleur MISO ◄───────── Périphérique SDO / DOUT
Contrôleur SCLK ─────────► Périphérique SCK
Contrôleur nCS ─────────► Périphérique nCS
GND ─────────► GND
MISO est partagé seulement si les périphériques non sélectionnés le mettent réellement en haute impédance. Une résistance de rappel rend le repos défini mais ne résout jamais deux sorties actives en conflit.
SCLK est souvent le signal le plus critique : il commute à chaque bit, synchronise tous les récepteurs et peut sonner. Gardez-le court, continu au-dessus d’un plan de masse et éloigné des entrées analogiques. Une résistance série de quelques dizaines d’ohms, placée près du pilote, peut amortir une liaison point-à-point ; validez sa valeur à l’oscilloscope.
CS autorise un unique périphérique à répondre. Un pull-up vers l’état inactif est utile pendant le reset du microcontrôleur, à condition de vérifier les pulls internes, la consommation et le temps de montée.
Topologies SPI
Étoile avec CS indépendant
SCLK et MOSI sont distribués à tous les circuits ; chaque circuit reçoit son propre CS. Seul le composant sélectionné pilote MISO.
┌──────────► Périphérique A
Contrôleur ─ SCLK ├──────────► Périphérique B
─ MOSI ├──────────► Périphérique C
─ MISO ◄────────── sorties partagées, haute impédance hors sélection
─ CSA ───────────► A
─ CSB ───────────► B
─ CSC ───────────► C
C’est la topologie recommandée : elle est simple à mettre au point et n’impose pas de faire traverser les octets par plusieurs circuits. Si les GPIO sont rares, un décodeur ou un expandeur peut générer les CS ; tenez compte de son délai et de son état à la mise sous tension.
Chaînage (daisy chain)
Certains registres à décalage et drivers LED sont conçus pour être chaînés. Leur sortie série alimente l’entrée du suivant ; tous partagent SCLK et CS.
Contrôleur MOSI ─► Circuit 1 ─► Circuit 2 ─► Circuit 3
Contrôleur SCLK ─► tous les circuits
Contrôleur CS ─► tous les circuits
Contrôleur MISO ◄─ sortie du dernier circuit, si disponible
La longueur de trame est alors la somme des mots de tous les circuits et l’ordre physique impose l’ordre des octets. Cette topologie ne s’applique pas aux périphériques SPI ordinaires partageant simplement le bus.
Bus partagé et intégrité du signal
Chaque branche est un stub qui dégrade les fronts lorsque SCLK augmente. Préférez une distribution compacte et des dérivations courtes. Pour un câble ou une liaison carte-à-carte, réduisez fSCLK, placez une masse de retour proche et mesurez le signal au récepteur. SPI n’est pas une liaison différentielle conçue pour de longues distances.
| Situation | Pratique conseillée |
|---|---|
| Une puce, pistes très courtes | Connexion directe, validation du mode et des niveaux |
| Plusieurs puces sur une carte | CS indépendants, MISO haute impédance hors sélection |
| Sonnerie sur SCLK | Résistance série près du contrôleur, contrôle à l’oscilloscope |
| Câble ou interconnexion | Fréquence réduite, GND intercalé, longueur limitée, transceiver si nécessaire |
| Beaucoup de CS | Décodeur, registre ou expandeur avec état sûr au démarrage |
Niveaux logiques et mise au point
Comparez les seuils VIH/VIL et les maximums absolus dans les deux sens. Un MISO 1,8 V peut être trop faible pour une entrée 3,3 V ; une sortie 5 V peut endommager une entrée 3,3 V non tolérante. Les translateurs MOSFET bidirectionnels courants en I²C ne sont pas automatiquement adaptés à SCLK ou MOSI rapides : utilisez un buffer ou traducteur explicitement qualifié pour les niveaux, la fréquence et la capacité de charge visés.
- Commencez avec un périphérique unique à 100 kHz ou moins.
- Vérifiez alimentation, GND, reset et l’état de CS avant les données.
- Mesurez SCLK, CS, MOSI et MISO ensemble, avec un déclenchement sur CS actif.
- Contrôlez CPOL/CPHA, ordre des bits et nombre de fronts par trame.
- Lisez un identifiant ou registre de statut documenté, puis augmentez la fréquence progressivement.
Un analyseur logique valide le protocole ; un oscilloscope est nécessaire pour diagnostiquer fronts, dépassements, bruit ou réflexions. Sondez près de l’entrée du périphérique : une mesure uniquement à la sortie du contrôleur peut masquer un problème de ligne.
Checklist
- CPOL, CPHA, ordre de bits et taille de mot explicitement notés dans schéma et firmware.
- Un CS par périphérique, sauf chaîne prévue par les fiches techniques.
- MISO libéré hors sélection et aucune contention de sortie.
- Niveaux logiques, maximums absolus et timing vérifiés dans les deux sens.
- SCLK court au-dessus d’un plan de masse continu ; résistance série validée si utilisée.
- État sûr de CS pendant reset et mise sous tension.
- Mesure au récepteur après ajout d’un câble, connecteur, traducteur ou branche.
Bibliographie
- NXP — SPI Block Guide, rev. 3.0
- Microchip — SPI Serial Interface
- Fiches techniques du contrôleur et du périphérique : leurs modes, timings, niveaux et séquences de trame priment sur ces conventions générales.