
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 editorialeGuida 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
| Segnale | Direzione rispetto al controllore | Funzione | Punto chiave |
|---|---|---|---|
| SCLK / SCK | uscita | Clock seriale | Il livello a riposo è stabilito da CPOL. |
| MOSI | controllore → periferica | Dati trasmessi | Chiamato anche COPI, SDI o DIN. |
| MISO | periferica → controllore | Dati ricevuti | Chiamato anche CIPO, SDO o DOUT; ad alta impedenza quando non selezionato. |
| CS / SS / nCS | uscita, spesso attiva a livello basso | Selezione e delimitazione del frame | Normalmente serve un CS indipendente per ogni periferica. |
| GND | condivisa | Riferimento e percorso di ritorno | Affiancala 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à | CPOL | CPHA | SCLK a riposo | Fronte di campionamento | I dati cambiano sul fronte |
|---|---|---|---|---|---|
| 0 | 0 | 0 | Basso | Di salita | Di discesa |
| 1 | 0 | 1 | Basso | Di discesa | Di salita |
| 2 | 1 | 0 | Alto | Di discesa | Di salita |
| 3 | 1 | 1 | Alto | Di salita | Di 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
- Controlla SCLK prima di CS: il suo livello indica CPOL.
- Individua il fronte sul quale vengono letti i dati stabili: determina CPHA.
- Con CPHA = 0, il primo bit deve essere valido prima del primo fronte.
- 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
| Parametro | Significato | Rischio se non rispettato |
|---|---|---|
fSCLK | frequenza massima del clock | Errori intermittenti o campionamento instabile |
tSU(D) | tempo di setup di MOSI/MISO prima del fronte di campionamento | Bit letto al livello errato |
tH(D) | tempo di mantenimento dei dati dopo il fronte di campionamento | Il bit successivo altera quello corrente |
tCSS | da CS attivo al primo fronte SCLK | Primo comando ignorato o traslato |
tCSH | dall’ultimo fronte a CS inattivo | Ultimo bit non acquisito |
tCSHI | tempo di CS inattivo tra due frame | Stato interno non ripristinato |
tDO | ritardo d’uscita di MISO | Campionamento 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.
| Situazione | Pratica consigliata |
|---|---|
| Un circuito, piste molto corte | Collegamento diretto; verifica modalità e livelli logici |
| Più circuiti su una scheda | CS indipendenti; MISO ad alta impedenza quando non selezionata |
| Oscillazioni su SCLK | Resistenza in serie vicino al controllore; osserva con l’oscilloscopio |
| Cavo o collegamento tra schede | Riduci la frequenza, alterna GND ai segnali, limita la lunghezza, usa un transceiver se necessario |
| Molte linee CS | Decoder, 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.
- Inizia con una sola periferica a 100 kHz o meno.
- Verifica alimentazione, GND, reset e stato di CS prima dei dati.
- Misura SCLK, CS, MOSI e MISO insieme, con trigger su CS attivo.
- Controlla CPOL/CPHA, ordine dei bit e numero esatto di fronti per frame.
- 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
- NXP — SPI Block Guide, rev. 3.0
- Microchip — Interfaccia seriale SPI
- Datasheet del controllore e delle periferiche scelti: modalità, temporizzazioni, livelli e sequenze dei frame prevalgono su queste indicazioni generali.