Serial Peripheral Interface: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
Luckas-bot (discussione | contributi)
m r2.7.1) (Bot: Aggiungo: tr:Serial Peripheral Interface
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti.
 
(44 versioni intermedie di 36 utenti non mostrate)
Riga 1: Riga 1:
[[File:SPI single slave.svg|upright=1.4|thumb|Bus SPI: connessioni tra un master e un singolo slave]]
{{Avvisounicode}}
[[File:SPI single slave.svg|300px|right|thumb|Bus SPI: connessioni tra un master e un singolo slave]]


[[File:SPI 8-bit circular transfer.svg|300px|thumb|Dettaglio dell'[[hardware]] nella comunicazione tra master e un singolo slave in cui si vede la presenza di un buffer circolare a 8 bit]]
[[File:SPI 8-bit circular transfer.svg|upright=1.4|thumb|Dettaglio dell'[[hardware]] nella comunicazione tra master e un singolo slave in cui si vede la presenza di un buffer circolare a 8 bit]]


Il '''Serial Peripheral Interface''' o '''SPI''' (pronuncia: {{IPA|ɛs pi }} o {{IPA|spaɪ}}) è un sistema di comunicazione tra un [[microcontrollore]] e altri [[Circuito integrato|circuiti integrati]] o tra più microcontrollori.
Il '''Serial Peripheral Interface''' o '''SPI''' (pronuncia: {{IPA|esse pi i}} o {{IPA|spi}}), in [[informatica]], indica un sistema di [[comunicazione seriale]] tra un [[microcontrollore]] e altri [[Circuito integrato|circuiti integrati]] o tra più microcontrollori.


== Descrizione ==
È un [[Bus (informatica)|bus]] standard di comunicazione ideato dalla [[Motorola]] e sviluppato, in una sua variante, anche dalla [[National Semiconductor]] con il nome di bus ''Microwire<sup><small>TM</small></sup>''.
È un [[Bus (informatica)|bus]] standard di comunicazione ideato dalla [[Motorola]] e sviluppato, in una sua variante, anche dalla [[National Semiconductor]] con il nome di bus ''Microwire<sup>TM</sup>''. La trasmissione avviene tra un dispositivo detto ''master'' e uno o più ''slave'' (letteralmente dall'inglese ''padrone'' e ''schiavo''). Il master controlla il bus, emette il segnale di [[clock]], decide quando iniziare e terminare la comunicazione<ref>Il master deve essere unico ma la qualifica di master può essere scambiata tra diversi dispositivi connessi al bus (purché siano in grado di farlo e cioè non siano nati come semplici slaves)</ref>.


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 dai [[datasheet]] dei 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 stessa [[scheda elettronica]]", o comunque tra schede elettroniche vicine tra di loro, in quanto non prevede particolari accorgimenti [[hardware]] per trasferire informazioni tra dispositivi lontani connessi con cavi soggetti a [[Margine di immunità ai disturbi|disturbi]]. 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 Vdc'' comunemente e impropriamente indicata con ''GND'') 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.
La trasmissione avviene tra un dispositivo detto ''master'' e uno o più ''slave'' (letteralmente dall'inglese ''padrone'' e ''schiavo'').
Il master controlla il bus, emette il segnale di [[clock]], decide quando iniziare e terminare la comunicazione<ref>Il master deve essere unico ma la qualifica di master può essere scambiata tra diversi dispositivi connessi al bus (purché siano in grado di farlo e cioè non siano nati come semplici slaves)</ref>.


== Tipi ==
Il bus SPI si definisce:
Il bus SPI si definisce:

* di tipo [[Trasmissione seriale|seriale]]
* di tipo [[Trasmissione seriale|seriale]];
* sincrono per la presenza di un clock che coordina la trasmissione e ricezione dei singoli [[Bit (informatica)|bit]] e determina la velocità di trasmissione
* sincrono per la presenza di un clock che coordina la trasmissione e ricezione dei singoli [[Bit (informatica)|bit]] e determina la [[velocità di trasmissione]];
* ''[[full-duplex]]'' in quanto il "colloquio" può avvenire contemporaneamente in trasmissione e ricezione.
* ''[[full-duplex]]'' in quanto il "colloquio" può avvenire contemporaneamente in trasmissione e ricezione.


== I segnali ==
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: possono mantenere se alimentati uno stato logico per un tempo indefinito) ma vi è un limite massimo che va determinato dai [[datasheet]] dei singoli dispositivi connessi e dal loro numero in quanto ogni dispositivo collegato al bus introduce sulle linee di comunicazione una capacità parassita).
Esso si basa su 4 segnali. Si riportano i nomi dei segnali che possono variare a seconda del costruttore. Consultare il [[datasheet]] del componente che si intende utilizzare in caso di dubbi:


* SCLK - SCK: '''S'''erial '''Cl'''oc'''k''' (emesso dal master)
Il sistema di comunicazione di solito serve per lo scambio di dati tra dispositivi montati "sulla stessa scheda elettronica" (o comunque tra schede elettroniche vicine tra di loro) in quanto non prevede particolari accorgimenti [[hardware]] per trasferire informazioni tra dispositivi lontani connessi con cavi soggetti a [[Margine di immunità ai disturbi|disturbi]].
* SDI – MISO – SOMI – DI - SO: '''S'''erial '''D'''ata '''I'''nput, '''M'''aster '''I'''nput '''S'''lave '''O'''utput (ingresso per il master e uscita per lo slave)
* SDO – MOSI – SIMO – DO – SI: '''S'''erial '''D'''ata '''O'''utput, '''M'''aster '''O'''utput '''S'''lave '''I'''nput (uscita dal master)
* CS – SS – nCS – nSS – STE: '''C'''hip '''S'''elect, '''S'''lave '''S'''elect, emesso dal master per scegliere con quale dispositivo slave vuole comunicare (dalla figura, il segnale SS negato, si comprende che per comunicare con il dispositivo slave deve venire messo a livello logico basso)


Di questi il Chip Select (CS o SS) non è indispensabile in tutte le applicazioni.
Il sistema è comunemente definito a quattro fili. Con questo si intende che le linee di connessione che portano i segnali sono in genere quattro. Va però tenuto conto che vi deve comunque essere una connessione di riferimento (''0 Vdc'' comunemente indicata con ''GND'', nome che a rigore è improprio) e che fisicamente quindi i fili sarebbero cinque. Discorso analogo si può fare su altri bus seriali definiti a due fili ([[I²C]]) o ad un filo in quanto si considerano solo le linee di segnale e si sottintende la connessione di riferimento.


È 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 dei [[bit]] sulle linee di dati. È un segnale emesso dal master ed è quindi quest'ultimo a richiedere di volta in volta la trasmissione di una "parola"<ref>Può essere selezionabile per comunicare con un [[byte]] (8 bit) o più (16 bit). Di solito il primo bit trasmesso è il [[Ordine dei bit|più significativo]].</ref>. 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).
== I segnali ==
Esso si basa su 4 segnali (si riportano i nomi dei segnali che possono variare a seconda del costruttore. Consultare il [[datasheet]] del componente che si intende utilizzare in caso di dubbi):


=== Nei dispositivi ''slave'' controllati singolarmente ===
* SCLK - SCK: '''S'''erial '''Cl'''oc'''k''' (emesso dal master)
[[File:SPI three slaves.svg|left|upright=1.4|thumb|Esempio di connessione diretta tra un master e tre slave controllati singolarmente]]
* SDI – MISO – SIMO – DI - SI: '''S'''erial '''D'''ata '''I'''nput, '''M'''aster '''I'''nput '''S'''lave '''O'''utput (ingresso per il master ed uscita per lo slave)
Vantaggi: comunicazione più rapida tra master e singoli slave.<br />Svantaggi: necessità di avere un pin SS per ogni dispositivo slave.<br />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 in [[Three state|alta impedenza]] e 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 di [[Hertz|MHz]] e anche oltre.
* SDO – MOSI – SOMI – DO – SO: '''S'''erial '''D'''ata '''O'''utput, '''M'''aster '''O'''utput '''S'''lave '''I'''nput (uscita dal master)
* CS – SS – nCS – nSS – STE: '''C'''hip '''S'''elect, '''S'''lave '''S'''elect, emesso dal master per scegliere con quale dispositivo slave vuole comunicare (dalla figura, il segnale con la sbarretta sui caratteri SS, si comprende che per comunicare con il dispositivo slave deve venire messo a livello logico basso)


=== Nei dispositivi ''slave'' connessi a catena (''daisy chain'') ===
Di questi il Chip Select (CS o SS) non è indispensabile in tutte le applicazioni.
[[File:SPI three slaves daisy chained.svg|upright=1.4|thumb|Master connesso a tre slave connessi secondo una terminologia comune in ''[[Daisy chain (informatica)|Daisy chain]]'' (uscita di un dispositivo collegata all'ingresso del dispositivo successivo nella catena)]]
Vantaggi: uso di un unico pin per selezionare i dispositivi.<br /> Svantaggi: minore velocità di aggiornamento dei singoli slave, il guasto di un elemento può causare un'interruzione del segnale negli altri dispositivi.<br />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 dal [[bit più significativo]] da 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 comunicazione ==
È 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.
La trasmissione dei dati sul bus SPI si basa sul funzionamento dei registri a scorrimento ([[Registro 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 di [[8 bit]]. Il registro a scorrimento è un'interfaccia completa mediante cui vengono impartiti comandi e trasmessi dati che arrivano in [[Trasmissione seriale|modo seriale]] e che internamente sono prelevati, a fine trasmissione, in modo parallelo.
Il segnale SCLK è il clock seriale che scandisce gli istanti di emissione e di lettura dei [[bit]] sulle linee di dati. È un segnale emesso dal master ed è quindi quest'ultimo a richiedere di volta in volta la trasmissione di una "parola"<ref>Può essere selezionabile per comunicare con un [[byte]] (8 bit) o più (16 bit). Di solito il primo bit trasmesso è il [[Ordine dei bit|più significativo]].</ref>.
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).


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.
=== Dispositivi slaves controllati singolarmente ===
[[File:SPI three slaves.svg|left|300px|thumb|Esempio di connessione diretta tra un master e tre slaves controllati singolarmente]]
Vantaggi: comunicazione più rapida tra master e singoli slaves.<br />
Svantaggi: necessità di avere un pin SS per ogni dispositivo slave.<br />
La linea CS è dedicata all'abilitazione del dispositivo slave da parte del master che così facendo abilita l'uno o l'altro dispositivo slave che si affaccia al bus ad intrattenere una trasmissione. La linea CS, normalmente attiva bassa, in caso di disabilitazione (livello logico alto) lascia il dispositivo slave con uscita in [[Three state|alta impedenza]] e quindi isolato completamente dal bus indifferentemente dall'esistenza del segnale di clock.
Il numero di dispositivi slaves che si possono connettere al bus è limitato esclusivamente da 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 di [[Hertz|MHz]] ed anche oltre.


[[File:SPI timing diagram.svg|upright=1.4|thumb|Diagramma temporale dei segnali che illustra le possibili polarità di clock e fase dei dati seriali. La comunicazione illustrata è a 8 bit ("Z" indica lo stato di [[Three state|alta impedenza]])]]
=== Dispositivi slaves connessi in catena (''daisy chain'') ===
[[File:SPI three slaves daisy chained.svg|300px|thumb|Master connesso a tre slaves connessi secondo una terminologia comune in ''[[Daisy chain]]'' (uscita di un dispositivo collegata all'ingresso del dispositivo successivo nella catena)]]
Vantaggi: uso di un unico pin per selezionare i dispositivi.<br />
Svantaggi: minore velocità di aggiornamento dei singoli slaves.<br />
In questo caso la linea CS potrebbe essere abolita (ogni linea SS degli slaves potrebbe essere collegata a livello logico basso lasciandoli sempre abilitati) in quanto non vi sarebbe mai conflitto (cosa che invece accadrebbe nella connessione di dispositivi slaves controllati singolarmente dove una eventuale abilitazione di più slaves creerebbe un conflitto sulla linea MISO creando problemi nella comunicazione (oltre ad un uso dei dispositivi con uscite in conflitto che non giova alla loro affidabilità nel tempo).


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.
== Come avviene la comunicazione ==
La trasmissione dei dati sul bus SPI si basa sul funzionamento dei registri a scorrimento ([[Registro a scorrimento|shift register]]). Ogni dispositivo sia master che 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 slaves) anche se usualmente ha la dimensione di [[8 bit]].
Il registro a scorrimento è un'interfaccia completa mediante la quale vengono impartiti comandi e trasmessi dati che arrivano in [[Trasmissione seriale|modo seriale]] ma che internamente sono prelevati, a fine trasmissione, in modo parallelo.
Ad 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 si porta a livello logico alto, durante il tempo di inattività, se CPOL è impostato ad 1.
CPHA regola 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 discesa del segnale di clock, impostando CPHA=0, oppure sul fronte di salita, impostando CPHA ad 1. L'inverso accade se CPOL è settato ad 1.
[[File:SPI timing diagram.svg|300px|right|thumb|Diagramma temporale dei segnali che illustra le possibili polarità di clock e fase dei dati seriali. La comunicazione illustrata è a 8 bit ("Z" indica lo stato di [[Three state|alta impedenza]])]]
Queste opzioni, in genere, sono impostabili sul dispositivo master e permettono di adattarlo a tutte le possibili varianti di dispositivi slaves che normalmente, invece, 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.


Molti [[Microcontrollore|microcontrollori]] dispongono 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 memoria [[EEPROM|eeprom]]): in ogni caso si potrà implementare nel firmware delle funzioni dedicate al colloquio (che forse risulteranno più lente e occuperanno più spazio nel [[firmware]] di quelle disponibili con un blocco hardware dedicato) ma che comunque permetteranno di comunicare in modo efficiente con la periferica SPI, in quanto non vi è, nella temporizzazione dei dati, un limite di tempo massimo da rispettare (si tratta infatti di dispositivi statici, che possono cioè sospendere a tempo indeterminato la comunicazione senza per questo avere perdita di dati; in altre parole hanno dei limiti per quanto riguarda la velocità massima di trasmissione ma che possono funzionare anche in modo lento quanto si vuole).
Molti [[Microcontrollore|microcontrollori]] dispongono 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 memoria [[EEPROM]]: in ogni caso si potrà implementare nel firmware delle funzioni dedicate al colloquio, che forse risulteranno più lente e occuperanno più spazio nel [[firmware]] di 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.


== Note ==
== Note ==
Riga 67: Riga 52:


== Voci correlate ==
== Voci correlate ==
* [[Architettura master-slave]]
* [[Trasmissione seriale]] - Vari tipi di comunicazione seriale
* [[Bus (informatica)]]
* [[Circuito integrato]]
* [[Microcontrollore]]
* [[Trasmissione seriale]]


=== Altri bus seriali ===
=== Altri bus seriali ===
* [[I²C]] - Bus con tre fili: due di segnale (linea di Clock e linea Dati bidirezionale) ed un comune di riferimento. Comunemente chiamato seriale a due fili.
* [[I²C]] - Bus con tre fili: due di segnale (linea di Clock e linea Dati bidirezionale) ed un comune di riferimento. Comunemente chiamato seriale a due fili.
* [[S/PDIF]], [[AES/EBU]] - Standard usato in ambito audio.
* [[S/PDIF]], [[AES/EBU]] - Standard usato in ambito audio.
* [[EIA RS-485]] - Standard industriale seriale a due [[Conduttore|fili]] di tipo [[half-duplex]].
* [[EIA RS-485]] - Standard industriale seriale a due [[Conduttore elettrico|fili]] di tipo [[half-duplex]].
* [[EIA RS-422]] - Standard industriale seriale a quattro fili, full-duplex.
* [[EIA RS-422]] - Standard industriale seriale a quattro fili, full-duplex.
* [[Controller Area Network]] - Standard chiamato ''CAN bus''. Nato per l'ambiente ''automotive'' (mezzi mobili) è usato anche in ambiente industriale per la sua immunità ai disturbi.
* [[Controller Area Network]] - Standard chiamato ''CAN bus''. Nato per l'ambiente ''automotive'' (mezzi mobili) è usato anche in ambiente industriale per la sua immunità ai disturbi.
* [[USB]] - Standard per l'interfacciamento di periferiche ai computer.
* [[USB]] - Standard per l'interfacciamento di periferiche ai computer.
* [[EIA RS-232]] - Standard in passato usato sui computer. Spesso realizzato in maniera semplificata usando solo a tre fili: con due linee di segnale (Trasmissione e Ricezione) e un comune di riferimento.
* [[EIA RS-232]] - Standard in passato di abituale uso sui computer e dall'inizio del [[XXI secolo]] relegato ad ambiti specifici. Spesso realizzato in maniera semplificata usando solo tre fili: due linee di segnale (Trasmissione e Ricezione) e un comune di riferimento.
* [[Musical Instrument Digital Interface|MIDI]] - Standard in uso nel campo degli strumenti musicali elettronici.
* [[MIDI]] - Standard in uso nel campo degli strumenti musicali elettronici.


== Altri progetti ==
== Altri progetti ==
{{interprogetto|commons=Category:Serial Peripheral Interface}}
{{interprogetto}}


== Collegamenti esterni ==
== Collegamenti esterni ==
* [http://www.national.com/an/AN/AN-452.pdf#page=1 Il Microwire<sup>TM</sup>, bus seriale della National Semiconductor analogo al Serial Peripheral Interface]
* {{cita web|url=http://www.national.com/an/AN/AN-452.pdf#page=1|titolo=Il Microwire<sup>TM</sup>, bus seriale della National Semiconductor analogo al Serial Peripheral Interface|urlmorto=sì|urlarchivio=https://web.archive.org/web/20081010114441/http://www.national.com/an/AN/AN-452.pdf#page=1|dataarchivio=10 ottobre 2008}}
* {{cita web|url=http://www.freescale.com/files/microcontrollers/doc/app_note/AN991.pdf?fsrch=1|titolo=SPI sul sito Freescale (Motorola). Uso nella comunicazione SPI tra microprocessori e cenni sulla versione multimaster)}}
* [http://www.atmel.com/dyn/resources/prod_documents/6088S.pdf SPI in un documento Atmel]
* [http://www.freescale.com/files/microcontrollers/doc/app_note/AN991.pdf?fsrch=1 SPI sul sito Freescale (Motorola). Uso nella comunicazione SPI tra microprocessori e cenni sulla versione multimaster)]


{{Bus computer}}
{{Bus computer}}
{{Portale|informatica}}
{{Portale|informatica|scienza e tecnica}}


[[Categoria:Bus seriali]]
[[Categoria:Bus seriali]]

[[ca:Serial Peripheral Interface]]
[[cs:Serial Peripheral Interface]]
[[de:Serial Peripheral Interface]]
[[en:Serial Peripheral Interface Bus]]
[[es:Serial Peripheral Interface]]
[[fr:Serial Peripheral Interface]]
[[ja:シリアル・ペリフェラル・インタフェース]]
[[no:SPI]]
[[pl:Serial Peripheral Interface]]
[[pt:Serial Peripheral Interface]]
[[ro:Interfața serială SPI]]
[[ru:Serial Peripheral Interface]]
[[sv:Serial Peripheral Interface]]
[[tr:Serial Peripheral Interface]]
[[uk:Serial Peripheral Interface]]
[[vi:Serial Peripheral Interface]]
[[zh:序列周邊介面]]

Versione attuale delle 07:18, 31 lug 2024

Bus SPI: connessioni tra un master e un singolo slave
Dettaglio dell'hardware nella comunicazione tra master e un singolo slave in cui si vede la presenza di un buffer circolare a 8 bit

Il Serial Peripheral Interface o SPI (pronuncia: esse pi i o spi), in informatica, indica un sistema di comunicazione seriale tra un microcontrollore e altri circuiti integrati o tra più microcontrollori.

È un bus standard di comunicazione ideato dalla Motorola e sviluppato, in una sua variante, anche dalla National Semiconductor con il nome di bus MicrowireTM. La trasmissione avviene tra un dispositivo detto master e uno o più slave (letteralmente dall'inglese padrone e schiavo). Il master controlla il bus, emette il segnale di clock, decide quando iniziare e terminare la comunicazione[1].

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 dai datasheet dei 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 stessa scheda elettronica", o comunque tra schede elettroniche vicine tra di loro, in quanto non prevede particolari accorgimenti hardware per trasferire informazioni tra dispositivi lontani connessi con cavi soggetti a disturbi. 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 Vdc comunemente e impropriamente indicata con GND) 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:

  • di tipo seriale;
  • sincrono per la presenza di un clock che coordina la trasmissione e ricezione dei singoli bit e determina la velocità di trasmissione;
  • full-duplex in quanto il "colloquio" può avvenire contemporaneamente in trasmissione e ricezione.

Esso si basa su 4 segnali. Si riportano i nomi dei segnali che possono variare a seconda del costruttore. Consultare il datasheet del componente che si intende utilizzare in caso di dubbi:

  • SCLK - SCK: Serial Clock (emesso dal master)
  • SDI – MISO – SOMI – DI - SO: Serial Data Input, Master Input Slave Output (ingresso per il master e uscita per lo slave)
  • SDO – MOSI – SIMO – DO – SI: Serial Data Output, Master Output Slave Input (uscita dal master)
  • CS – SS – nCS – nSS – STE: Chip Select, Slave Select, emesso dal master per scegliere con quale dispositivo slave vuole comunicare (dalla figura, il segnale SS negato, si comprende che per comunicare con il dispositivo slave deve venire messo a livello logico basso)

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 dei bit sulle linee di dati. È un segnale emesso dal master ed è quindi quest'ultimo a richiedere di volta in volta la trasmissione di una "parola"[2]. 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).

Nei dispositivi slave controllati singolarmente

[modifica | modifica wikitesto]
Esempio di connessione diretta tra un master e tre slave controllati singolarmente

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 in alta impedenza e 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 di MHz e anche oltre.

Nei dispositivi slave connessi a catena (daisy chain)

[modifica | modifica wikitesto]
Master connesso a tre slave connessi secondo una terminologia comune in Daisy chain (uscita di un dispositivo collegata all'ingresso del dispositivo successivo nella catena)

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 dal bit più significativo da 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 comunicazione

[modifica | modifica wikitesto]

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 di 8 bit. Il registro a scorrimento è un'interfaccia completa mediante cui vengono impartiti comandi e trasmessi dati che arrivano in modo seriale e 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.

Diagramma temporale dei segnali che illustra le possibili polarità di clock e fase dei dati seriali. La comunicazione illustrata è a 8 bit ("Z" indica lo stato di alta impedenza)

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.

Molti microcontrollori dispongono 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 memoria EEPROM: in ogni caso si potrà implementare nel firmware delle funzioni dedicate al colloquio, che forse risulteranno più lente e occuperanno più spazio nel firmware di 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.

  1. ^ Il master deve essere unico ma la qualifica di master può essere scambiata tra diversi dispositivi connessi al bus (purché siano in grado di farlo e cioè non siano nati come semplici slaves)
  2. ^ Può essere selezionabile per comunicare con un byte (8 bit) o più (16 bit). Di solito il primo bit trasmesso è il più significativo.

Voci correlate

[modifica | modifica wikitesto]

Altri bus seriali

[modifica | modifica wikitesto]
  • I²C - Bus con tre fili: due di segnale (linea di Clock e linea Dati bidirezionale) ed un comune di riferimento. Comunemente chiamato seriale a due fili.
  • S/PDIF, AES/EBU - Standard usato in ambito audio.
  • EIA RS-485 - Standard industriale seriale a due fili di tipo half-duplex.
  • EIA RS-422 - Standard industriale seriale a quattro fili, full-duplex.
  • Controller Area Network - Standard chiamato CAN bus. Nato per l'ambiente automotive (mezzi mobili) è usato anche in ambiente industriale per la sua immunità ai disturbi.
  • USB - Standard per l'interfacciamento di periferiche ai computer.
  • EIA RS-232 - Standard in passato di abituale uso sui computer e dall'inizio del XXI secolo relegato ad ambiti specifici. Spesso realizzato in maniera semplificata usando solo tre fili: due linee di segnale (Trasmissione e Ricezione) e un comune di riferimento.
  • MIDI - Standard in uso nel campo degli strumenti musicali elettronici.

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]