ElectroDesignForgeElectroDesignForge
Signaux et interfacesConception de PCB

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 éditorial

Guide 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

SignalSens vu depuis le contrôleurFonctionÀ retenir
SCLK / SCKsortieHorloge sérieSon niveau au repos est fixé par CPOL.
MOSIcontrôleur → périphériqueDonnées émisesAussi nommé COPI, SDI ou DIN.
MISOpériphérique → contrôleurDonnées reçuesAussi nommé CIPO, SDO ou DOUT ; haute impédance hors sélection.
CS / SS / nCSsortie, souvent active à 0Sélection et délimitation de trameUn CS distinct est normalement requis par périphérique.
GNDcommunRéférence et retour de courantDoit 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.
ModeCPOLCPHASCLK au reposÉchantillonnageChangement de donnée
000BasFront montantFront descendant
101BasFront descendantFront montant
210HautFront descendantFront montant
311HautFront montantFront 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

  1. Relevez le niveau de SCLK avant CS : c’est CPOL.
  2. Repérez le front où la donnée stable est lue : c’est CPHA.
  3. Avec CPHA = 0, le premier bit doit être valide avant le premier front.
  4. 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ètreSignificationRisque si non respecté
fSCLKfréquence maximaleErreurs intermittentes ou échantillonnage instable
tSU(D)établissement MOSI/MISO avant le front de lectureBit lu au mauvais niveau
tH(D)maintien après ce frontBit suivant qui perturbe le bit courant
tCSSCS actif → premier front SCLKPremière commande ignorée ou décalée
tCSHdernier front → CS inactifDernier bit non validé
tCSHItemps CS inactif entre tramesÉtat interne non réinitialisé
tDOdélai d’apparition de MISOLecture 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.

SituationPratique conseillée
Une puce, pistes très courtesConnexion directe, validation du mode et des niveaux
Plusieurs puces sur une carteCS indépendants, MISO haute impédance hors sélection
Sonnerie sur SCLKRésistance série près du contrôleur, contrôle à l’oscilloscope
Câble ou interconnexionFréquence réduite, GND intercalé, longueur limitée, transceiver si nécessaire
Beaucoup de CSDé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.

  1. Commencez avec un périphérique unique à 100 kHz ou moins.
  2. Vérifiez alimentation, GND, reset et l’état de CS avant les données.
  3. Mesurez SCLK, CS, MOSI et MISO ensemble, avec un déclenchement sur CS actif.
  4. Contrôlez CPOL/CPHA, ordre des bits et nombre de fronts par trame.
  5. 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