Serial Peripheral Interface

IlSerial Peripheral InterfaceoSPI(pronuncia:esse pi iospi), ininformatica, indica un sistema dicomunicazione serialetra unmicrocontrolloree altricircuiti integratio tra più microcontrollori.
È unbusstandard di comunicazione ideato dallaMotorolae sviluppato, in una sua variante, anche dallaNational Semiconductorcon il nome di busMicrowire. La trasmissione avviene tra un dispositivo dettomastere uno o piùslave(letteralmente dall'inglesepadroneeschiavo). Il master controlla il bus, emette il segnale diclock, decide quando iniziare e terminare la comunicazione.
Per quanto riguarda la velocità di scambio dei dati, in pratica la frequenza del clock, non vi è un limite minimo in quanto i dispositivi sono statici e possono mantenere se alimentati uno stato logico per un tempo indefinito. Comunque c'è un limite massimo che va determinato daidatasheetdei singoli dispositivi connessi e dal loro numero in quanto ogni dispositivo collegato al bus introduce sulle linee di comunicazione una capacità parassita. Il sistema di comunicazione di solito serve per lo scambio di dati tra dispositivi montati "sulla stessascheda elettronica", o comunque tra schede elettroniche vicine tra di loro, in quanto non prevede particolari accorgimentihardwareper trasferire informazioni tra dispositivi lontani connessi con cavi soggetti adisturbi. Il sistema è comunemente definito a quattro fili, con questo si intende che le linee di connessione che portano i segnali sono in genere quattro. In ogni caso c'è una connessione di riferimento (0 Vdccomunemente e impropriamente indicata conGND) e quindi i fili fisicamente sono cinque.  Discorso analogo si può fare su altri bus seriali definiti a due fili (I²C)  o a un filo in quanto si considerano solo le linee di segnale e si sottintende la connessione di riferimento.
Il bus SPI si definisce:
Esso si basa su 4 segnali. Si riportano i nomi dei segnali che possono variare a seconda del costruttore. Consultare ildatasheetdel componente che si intende utilizzare in caso di dubbi:
Di questi il Chip Select (CS o SS) non è indispensabile in tutte le applicazioni.
È facile confondersi nei nomi, spesso ambigui, sui segnali di trasferimento dei dati (ingressi e uscite). In ogni caso la consultazione dei datasheet dei dispositivi scelti dovrebbe chiarire ogni dubbio. Le denominazioni MOSI (Master Output Slave Input), MISO (Master Input Slave Output) sembrano essere quelle che comportano meno equivoci. Il segnale SCLK è il clock seriale che scandisce gli istanti di emissione e di lettura deibitsulle linee di dati. È un segnale emesso dal master ed è quindi quest'ultimo a richiedere di volta in volta la trasmissione di una "parola". Il segnale SDI/MISO è la linea attraverso cui il dispositivo (master o slave) riceve il dato seriale emesso dalla controparte. Sullo stesso fronte di commutazione del clock, il dispositivo emette, con la stessa cadenza, il suo output ponendo il dato sulla linea SDO/MOSI (linea di output di dato).
Vantaggi: comunicazione più rapida tra master e singoli slave.Svantaggi: necessità di avere un pin SS per ogni dispositivo slave.La linea CS è dedicata all'abilitazione del dispositivo slave da parte del master che può abilitare un qualsiasi dispositivo slave connesso a trasmettere. La linea CS, normalmente attiva bassa, in caso di disabilitazione (livello logico alto) lascia il dispositivo slave con uscita inalta impedenzae quindi isolato completamente dal bus indifferentemente dall'esistenza del segnale di clock. Il numero di dispositivi slave che si possono connettere al bus è limitato esclusivamente dal numero di possibili linee di chip select gestibili dal dispositivo master. La frequenza di clock, e di conseguenza la velocità del bus, può raggiungere, con questo standard, livelli anche elevati nell'ordine delle decine diMHze anche oltre.
Vantaggi: uso di un unico pin per selezionare i dispositivi.Svantaggi: minore velocità di aggiornamento dei singoli slave, il guasto di un elemento può causare un'interruzione del segnale negli altri dispositivi.In questo caso la linea SS serve per indicare agli slave quando campionare il dato presente nel registro: il master inietta i bit sulla linea MOSI, partendo dalbit più significativoda inviare all'ultimo slave. Così facendo, una volta trasmessi tutti i bit destinati a tutti gli slave in questa sequenza, può segnalare agli slave che i dati in loro possesso nel registro di comunicazione sono effettivamente quelli destinati a loro. Se lo Slave Select fosse collegato, per esempio, fisso a massa, gli slave non potrebbero sapere se il dato presente nel loro registro di comunicazione è completo e da campionare, o magari destinato a uno slave successivo, oppure non allineato alla dimensione del registro stesso. In questa configurazione è impossibile avere conflitto sulla linea MOSI del master, al contrario di ciò che accadrebbe nella connessione di dispositivi slave controllati singolarmente dove l'eventuale abilitazione di più slave creerebbe un conflitto sulla linea MISO creando problemi nella comunicazione. Inoltre l'uso dei dispositivi con uscite in conflitto non giova alla loro affidabilità nel tempo.
La trasmissione dei dati sul bus SPI si basa sul funzionamento dei registri a scorrimento (shift register). Ogni dispositivo, master o slave, è dotato di un registro a scorrimento interno i cui bit vengono emessi e contemporaneamente immessi, rispettivamente tramite l'uscita SDO/MOSI e l'ingresso SDI/MISO. Il registro può avere dimensione arbitraria, ma uguale per i dispositivi master e slave, e usualmente ha la dimensione di8 bit. Il registro a scorrimento è un'interfaccia completa mediante cui vengono impartiti comandi e trasmessi dati che arrivano inmodo serialee che internamente sono prelevati, a fine trasmissione, in modo parallelo.
A ogni impulso di clock i dispositivi che stanno comunicando sulle linee del bus emettono un bit dal loro registro interno rimpiazzandolo con un bit emesso dall'altro interlocutore. La sincronizzazione è fatta sui fronti di clock di salita o di discesa regolata da 2 parametri impostabili: CPOL e CPHA. CPOL regola la polarità del clock ovvero discrimina lo stato normale di riposo cui si porta la linea di clock quando non è attiva. Quando CPOL è impostato a 0, il clock, nel suo stato di riposo, si porta a livello logico basso; viceversa il clock si porta a livello logico alto durante il tempo di inattività se CPOL è impostato a 1. CPHA regola la fase del clock, ovvero il fronte di clock in cui il ricevente campiona il segnale in ingresso. Se CPOL=0 allora con CPHA possiamo scegliere di campionare il dato sul fronte di salita del segnale di clock, impostando CPHA=0, oppure sul fronte di discesa, impostando CPHA a 1. L'inverso accade se CPOL è settato a 1.
Generalmente queste opzioni sono impostabili sul dispositivo master e permettono di adattarlo a tutte le possibili varianti di dispositivi slave che normalmente vengono progettati per avere uno dei 4 modi di comunicazione possibili (tutte le combinazioni di CPOL e CPHA). Le modalità di funzionamento più spesso utilizzate dai dispositivi in commercio sono quelle con CPHA=CPOL=0 e con CPHA=CPOL=1. Il dato di output è emesso sempre in corrispondenza della prima transizione del clock. La comunicazione viene intrapresa sempre su iniziativa del dispositivo master che abilita lo slave tramite CS e successivamente impone il clock sulla linea dedicata. Con questa procedura ha inizio lo scambio dei bit tra i due registri. Alla fine di ogni parola trasmessa il contenuto del registro dello slave sarà passato al master e viceversa. Con opportune parole identificative si possono inviare comandi al dispositivo ricevente che potrà effettuare l'elaborazione assegnata ponendo quindi nel suo shift-register il dato richiesto che al prossimo ciclo di trasmissione verrà trasmesso al richiedente.
Moltimicrocontrolloridispongono di un hardware dedicato per la gestione dell'SPI programmabile nei dettagli. Questo non è strettamente necessario per poter comunicare con un dispositivo slave SPI, come ad esempio una memoriaEEPROM: in ogni caso si potrà implementare nel firmware delle funzioni dedicate al colloquio, che forse risulteranno più lente e occuperanno più spazio nelfirmwaredi quelle disponibili con un blocco hardware dedicato, ma che comunque permetteranno di comunicare in modo efficiente con la periferica SPI poiché nella temporizzazione dei dati non c'è un limite di tempo massimo da rispettare. Infatti si tratta di dispositivi statici, che possono cioè sospendere a tempo indeterminato la comunicazione senza per questo avere perdita di dati: solo la loro velocità massima di trasmissione è limitata e possono funzionare anche a velocità molto bassa rispetto alla massima.