ElectroDesignForgeElectroDesignForge
Segnali e interfacceProgettazione PCB

Interfaccia SPI: modalità, temporizzazione e cablaggio

Comprendi CPOL, CPHA, MOSI, MISO, SCLK e CS, quindi realizza un bus SPI affidabile considerando temporizzazione, livelli logici, topologie e diagnostica.

Redazione e revisione tecnica:Team di ingegneria ElectroDesignForge

Consulta il processo editoriale

Guida di riferimento

L’interfaccia SPI (Serial Peripheral Interface) collega un controllore a circuiti integrati vicini, come memorie Flash, ADC/DAC, display, sensori e dispositivi RF. Questo collegamento seriale sincrono è rapido e full duplex, ma non costituisce uno standard completo: la struttura delle comunicazioni e i limiti elettrici dipendono dai datasheet.


Riferimenti rapidi

SegnaleDirezione rispetto al controlloreFunzionePunto chiave
SCLK / SCKuscitaClock serialeIl livello a riposo è stabilito da CPOL.
MOSIcontrollore → perifericaDati trasmessiChiamato anche COPI, SDI o DIN.
MISOperiferica → controlloreDati ricevutiChiamato anche CIPO, SDO o DOUT; ad alta impedenza quando non selezionato.
CS / SS / nCSuscita, spesso attiva a livello bassoSelezione e delimitazione del frameNormalmente serve un CS indipendente per ogni periferica.
GNDcondivisaRiferimento e percorso di ritornoAffiancala ai segnali, soprattutto fuori dalla scheda.

MOSI e MISO sono definiti dal punto di vista del controllore. COPI (Controller Out, Peripheral In) e CIPO (Controller In, Peripheral Out) chiariscono i ruoli quando si parla del collegamento senza uno schema.

SPI non definisce indirizzamento, conferma di ricezione o frequenza massima universale. Il protocollo applicativo definisce comandi, indirizzi dei registri, byte fittizi e risposte. Un analizzatore logico può quindi decodificare bit validi mentre il dispositivo rimane inattivo perché CS o la struttura del comando sono errati.

Verifica prima del cablaggio: livelli logici, frequenza SCLK ammessa, modalità SPI, ordine MSB/LSB, lunghezza delle parole, livello attivo di CS e sue temporizzazioni. I domini a 1.8 V, 2.5 V, 3.3 V e 5 V non sono automaticamente compatibili.


Le quattro modalità: CPOL e CPHA

  • CPOL (polarità del clock) determina SCLK a riposo: 0 = basso, 1 = alto.
  • CPHA (fase del clock) determina il fronte di campionamento. Con CPHA = 0, il primo fronte dopo CS campiona il primo bit; con CPHA = 1, quel fronte cambia il bit e il fronte successivo lo campiona.
ModalitàCPOLCPHASCLK a riposoFronte di campionamentoI dati cambiano sul fronte
000BassoDi salitaDi discesa
101BassoDi discesaDi salita
210AltoDi discesaDi salita
311AltoDi salitaDi discesa

Il fronte iniziale è la prima transizione dallo stato di riposo; il fronte finale è la seconda. CPHA = 0 campiona sul fronte iniziale, CPHA = 1 su quello finale. La regola vale con entrambi i valori di CPOL.

Come leggere un diagramma temporale

  1. Controlla SCLK prima di CS: il suo livello indica CPOL.
  2. Individua il fronte sul quale vengono letti i dati stabili: determina CPHA.
  3. Con CPHA = 0, il primo bit deve essere valido prima del primo fronte.
  4. Verifica i ritardi d’uscita nel datasheet: i dati non cambiano sempre esattamente sul fronte opposto.

Una CPHA errata spesso sposta i bit; una CPOL errata legge una sequenza apparentemente plausibile negli istanti sbagliati. 0x00, 0xFF o un ID non valido sono sintomi possibili, ma non diagnosi definitive.


Temporizzazioni oltre la frequenza

ParametroSignificatoRischio se non rispettato
fSCLKfrequenza massima del clockErrori intermittenti o campionamento instabile
tSU(D)tempo di setup di MOSI/MISO prima del fronte di campionamentoBit letto al livello errato
tH(D)tempo di mantenimento dei dati dopo il fronte di campionamentoIl bit successivo altera quello corrente
tCSSda CS attivo al primo fronte SCLKPrimo comando ignorato o traslato
tCSHdall’ultimo fronte a CS inattivoUltimo bit non acquisito
tCSHItempo di CS inattivo tra due frameStato interno non ripristinato
tDOritardo d’uscita di MISOCampionamento troppo anticipato ad alta velocità

Il margine temporale comprende il ritardo dei traslatori di livello, il tempo di propagazione lungo piste o cavi, la velocità reale dei fronti e il carico capacitivo. Una frequenza che funziona su una scheda compatta può fallire dopo aver aggiunto un connettore o una diramazione.

Con il consueto CS attivo a livello basso: mantieni SCLK nello stato definito da CPOL, attiva CS, attendi tCSS, presenta il primo bit con anticipo sufficiente se CPHA = 0, genera i fronti e attendi tCSH prima di rilasciare CS. Alcuni componenti richiedono CS basso durante l’intera sequenza comando–indirizzo–dati; altri eseguono l’operazione quando CS torna alto.


Cablaggio di MOSI, MISO, SCLK e CS

Controllore MOSI  ─────────►  Periferica SDI / DIN
Controllore MISO  ◄─────────  Periferica SDO / DOUT
Controllore SCLK  ─────────►  Periferica SCK
Controllore nCS   ─────────►  Periferica nCS
GND              ─────────►  GND

MISO può essere condivisa solo se ogni periferica non selezionata passa davvero ad alta impedenza. Una resistenza di pull-up o pull-down definisce lo stato a riposo, ma non risolve mai il conflitto fra due uscite attive.

SCLK è spesso il segnale più critico: commuta a ogni bit, sincronizza tutti i ricevitori e può presentare oscillazioni. Mantienilo corto, sopra un piano di massa continuo e lontano dagli ingressi analogici sensibili. Una resistenza in serie di alcune decine di ohm vicino al driver può smorzare un collegamento punto a punto; verifica il valore con un oscilloscopio.

CS consente a una sola periferica di rispondere. Una resistenza di pull-up verso lo stato inattivo è utile durante il reset del controllore, dopo aver verificato le resistenze interne, il consumo e il tempo di salita richiesto.


Topologie SPI

Stella con CS indipendenti

SCLK e MOSI raggiungono tutti i circuiti; ognuno riceve un proprio CS. Solo il componente selezionato pilota MISO.

                  ┌──────────► Periferica A
Controllore ─ SCLK├──────────► Periferica B
            ─ MOSI├──────────► Periferica C
            ─ MISO◄────────── uscite condivise, ad alta impedenza se non selezionate
            ─ CSA ───────────► A
            ─ CSB ───────────► B
            ─ CSC ───────────► C

È la topologia consigliata: semplifica la ricerca dei guasti e non fa passare i byte attraverso altri dispositivi. Se i GPIO sono pochi, un decoder o un espansore può generare i segnali CS; considera nel progetto il suo ritardo e lo stato all’accensione.

Collegamento a margherita

Alcuni registri a scorrimento e driver LED sono progettati per il collegamento a margherita. La loro uscita seriale alimenta l’ingresso del dispositivo successivo; SCLK e CS sono condivisi.

Controllore MOSI ─► Dispositivo 1 ─► Dispositivo 2 ─► Dispositivo 3
Controllore SCLK ─► tutti i dispositivi
Controllore CS   ─► tutti i dispositivi
Controllore MISO ◄─ uscita dell’ultimo dispositivo, se presente

La lunghezza del frame è la somma delle parole di tutti i dispositivi e l’ordine fisico determina l’ordine dei byte. Questa topologia non è adatta alle comuni periferiche SPI che condividono semplicemente un bus.

Bus condiviso e integrità del segnale

Ogni diramazione è uno stub che degrada i fronti quando aumenta la frequenza di SCLK. Preferisci una distribuzione compatta con diramazioni brevi. Per collegamenti via cavo o tra schede, riduci fSCLK, offri un ritorno di massa vicino e misura al ricevitore. SPI non è un’interfaccia differenziale progettata per lunghe distanze.

SituazionePratica consigliata
Un circuito, piste molto corteCollegamento diretto; verifica modalità e livelli logici
Più circuiti su una schedaCS indipendenti; MISO ad alta impedenza quando non selezionata
Oscillazioni su SCLKResistenza in serie vicino al controllore; osserva con l’oscilloscopio
Cavo o collegamento tra schedeRiduci la frequenza, alterna GND ai segnali, limita la lunghezza, usa un transceiver se necessario
Molte linee CSDecoder, registro a scorrimento o espansore con stato sicuro all’accensione

Livelli logici e ricerca dei guasti

Confronta le soglie VIH/VIL e le tensioni massime assolute in entrambe le direzioni. Una MISO a 1.8 V può essere troppo bassa per un ingresso a 3.3 V; un’uscita a 5 V può danneggiare un ingresso a 3.3 V non tollerante. I comuni traslatori MOSFET bidirezionali per I²C non sono automaticamente adatti a SCLK o MOSI veloci: scegli un buffer o un traslatore specificato per livelli, frequenza e carico previsti.

  1. Inizia con una sola periferica a 100 kHz o meno.
  2. Verifica alimentazione, GND, reset e stato di CS prima dei dati.
  3. Misura SCLK, CS, MOSI e MISO insieme, con trigger su CS attivo.
  4. Controlla CPOL/CPHA, ordine dei bit e numero esatto di fronti per frame.
  5. Leggi un registro ID o di stato documentato, poi aumenta gradualmente la frequenza.

Un analizzatore logico verifica il protocollo; per fronti, overshoot, rumore e riflessioni serve un oscilloscopio. Posiziona la sonda vicino all’ingresso della periferica: una misura solo presso il controllore può nascondere un problema sulla linea.


Lista di controllo

  • CPOL, CPHA, ordine dei bit e lunghezza delle parole documentati esplicitamente nello schema e nel firmware.
  • Un CS per periferica, salvo una catena prevista dal datasheet.
  • MISO rilasciata quando non selezionata; nessun conflitto fra uscite.
  • Soglie logiche, massimi assoluti e temporizzazioni verificati in entrambe le direzioni.
  • SCLK breve sopra una massa continua; eventuale resistenza in serie verificata.
  • Stato sicuro di CS durante reset e accensione.
  • Misura presso il ricevitore dopo l’aggiunta di cavo, connettore, traslatore o diramazione.

Riferimenti