Sei sulla pagina 1di 15

Interfacce seriali: meglio SPI o I2C?

Redazione 6 novembre 2015 Embedded 3 commenti

1 Facebook LinkedIn Twitter Email WhatsApp


Dimmi che interfaccia usi e ti dirò chi sei… Esistono molti modi di interfacciarsi con un
microcontrollore, ma è difficile dire quale sia il migliore. Questa è l’occasione per fare un
po’ di luce su due tecniche di interfacciamento seriale: SPI e I2C.
INTERFACCE SERIALI SINCRONE
Le interfacce seriali sincrone sono caratterizzate dalla presenza di un segnale di sincronizzazione
(clock) che determina la cadenza con cui i dati transitano attraverso il bus. Tipicamente il segnale
di sincronizzazione viene generato da una unità Master e viene utilizzato dagli Slave per la
trasmissione e ricezione dati. Il vantaggio di un sistema di questo tipo risiede nel fatto che tutte le
unità interessate nello scambio di informazioni possono comunicare indipendentemente dal loro
oscillatore locale. Questo consente di interfacciare periferiche operanti a frequenze anche molto
differenti. Due tipici esempi di interfacce seriali sincrone sono appunto SPI
(Serial Peripheral Interface) sviluppata da Motorola e I2C (Inter Integrated Circuits) sviluppata da
Philips. Lo scopo di questa trattazione è confrontare queste due soluzioni evidenziandone pregi e
difetti.
COMUNICAZIONE SPI
La comunicazione SPI (evoluzione della meno recente Microwire) prevede una periferica Master
che comunica con diverse periferiche Slave e richiede un bus il cui numero di conduttori dipende
dal numero di periferiche connesse. In particolare il bus è composto da 3+n fili (dove n è il
numero di periferiche Slave). Il Master ha infatti una connessione dedicata per ciascuna
periferica Slave (Slave Select) come mostrato in figura 1.
Figura 1. Comunicazione SPI tra Master (microcontrollore)
e 3 periferiche Slave
I segnali tipici di una comunicazione SPI sono i seguenti: SCLK: Serial shift CLocK. È il segnale
di sincronismo generato dal Master. Tale segnale raggiunge tutte le periferiche Slave. MOSI:
Master Out Slave In. Questa è la linea dati in uscita dal Master. Raggiunge in parallelo tutti gli
salve e costituisce un ingresso per ciascuno di essi. MISO: Master In Slave Out. È la linea dati in
uscita da ciascuno Slave e raggiunge l’unità Master.
/SS: Slave Select. È la linea di selezione di ogni singola periferica Slave. Esiste una linea /SS in
uscita dal Master per ciascuna periferica Slave. Tali linee sono attive basse (quindi un livello
logico basso su /SSn attiva la periferica n).
La distinzione tra le linee dati da e verso le periferiche permette di ottenere una comunicazione
full-duplex. Un dispositivo SPI possiede due bit di configurazione detti CPOL (ClockPOLarity) e
CPHA (Clock PHAse). Il primo determina lo stato idle del segnale di sincronismo: CPOL=0
significa che il segnale di clock è considerato idle quando è a livello logico basso. CPHA
determina invece su quale fronte del segnale di clock vengono letti i dati: con CPHA=0 i dati in
uscita dal Master vengono letti in corrispondenza del fronte di discesa e i dati in uscita dagli Slave
vengono letti in corrispondenza del fronte di salita del segnale di clock. Disponendo di due bit di
configurazione sono possibili quattro diverse modalità e due periferiche SPI connesse tra loro
devono necessariamente utilizzare la stessa configurazione.
Tuttavia due delle quattro possibilità consentono a periferiche SPI di comunicare con le meno
recenti periferiche Microwire garantendone la compatibilità. Nelle figure 2 e 3 sono mostrate due
temporizzazioni tipiche di una comunicazione SPI per il trasferimento di un byte.
Figura 2. Timing di una comunicazione SPI con CPHA=0
Figura 3. Timing di una comunicazione SPI con CPHA=1
La figura 2 è riferita ad una comunicazione con CPHA=0 mentre la
figura 3 è riferita ad una comunicazione con CPHA=1. In ciascun diagramma sono riportati i
due casi CPOL=0 e CPOL=1. Le modalità di comunicazione SPI, determinate dalle impostazioni
dei due bit di configurazione, sono riassunte nella tabella di figura 4.
SPI CP CP CLK EDGE (CAMBIO
CLK EDGE (ACQUISIZIONE DATO)
MODE OL HA DATO)
0 0 0 Discesa Salita
1 0 1 Salita Discesa
2 1 0 Salita Discesa
3 1 1 Discesa Salita

Figura 4. Modalità di comunicazione SPI e relativa configurazione di CPOL e CPHA


COMUNICAZIONE I2C
Una comunicazione I2C si avvale di un bus seriale a due fili ed è sempre di tipo half-duplex. La
struttura di un bus I2C è riportata in figura 5.
Figura 5. Architettura di un sistema di comunicazione I2C
I due segnali sono SCL (SerialCLock) e SDA (SerialDAta), sono entrambi bidirezionali e
necessitano di una connessione verso il positivo di alimentazione mediante resistori di pull-up. Le
linee SCL ed SDA sono infatti di tipo open collector per consentire l’implementazione della
funzione AND cablato (wired AND) direttamente sul bus. A differenza di una comunicazione SPI,
I2C è una architettura multiMaster in cui la periferica che inizia la trasmissione e genera quindi il
segnale di sincronismo è designata come Master, mentre la periferica oggetto della transazione
indirizzata dal Master è considerata come Slave. Una periferica designata come Master per una
certa trasmissione, potrà quindi essere anche uno Slave per una trasmissione successiva. La
periferica Slave può in ogni momento rallentare o addirittura interrompere la comunicazione del
Master, mantenendo a livello basso la linea SCL (operazione nota come clock stretching e
possibile grazie al meccanismo dell’AND cablato in cui uno zero logico su una linea condivisa
prevale sempre sul livello logico alto). Questa tecnica permette la corretta comunicazione dati tra
una periferica Master veloce ed una periferica Slave relativamente lenta. Il meccanismo
dell’AND cablato consente anche di gestire l’arbitraggio: se due periferiche Master iniziano
contemporaneamente una trasmissione dati, verrà data priorità a quella che trasmette per prima
uno zero logico. I dati possono essere trasferiti a velocità massime di 100Kbps in modalità
Standard, 400Kbps in modalità Fast e 3.4Mbps in modalità High-Speed. Nella modalità Standard
gli Slave sono indirizzati con una modalità di indirizzamento a 7 bit, mentre nelle modalità Fast e
High-Speed l’indirizzamento può essere a 7 o a 10 bit. Fisicamente il carico capacitivo sul bus
non deve eccedere i 400pF per non compromettere la velocità di comunicazione. In figura 6 è
riportato il diagramma temporale di una tipica comunicazione I2C. Le periferiche sono level-
sensitive per cui il dato deve essere stabile per tutto l’intervallo di tempo in cui la linea SCL
permane a livello alto. Solo quando la linea SCL è a livello basso è possibile commutare il bit
sulla linea SDA a meno di due eccezioni:
▪ START: la periferica Master inizia una nuova comunicazione con una transizione da 1 a 0
mentre la linea SCL è a livello alto;
▪ STOP: la transizione da 0 a 1 da parte del Master mentre la linea SCL è alta segna il termine di
una comunicazione.
Nella figura 7 sono riportate le due tecniche di indirizzamento a 7bit e 10bit. Nel caso di
indirizzamento a 7 bit, a seguito della condizione di start (indicata con S in figura 7) viene
trasmesso un byte i cui primi 7 bit sono l’indirizzo dello Slave mentre l’ottavo bit indica se lo Slave
indirizzato dovrà ricevere o trasmettere dati. Dopo l’invio del byte, solo una periferica Slave
risponderà con un acknowledgment (ACK) a seguito del quale inizierà la trasmissione dati vera e
propria. Nel caso di indirizzamento a 10bit, a seguito della condizione di start viene inviato un
byte i cui i primi 7 bit sono costituiti dalla sequenza 11110xx dove xx sono i due bit più significativi
dell’indirizzo della periferica target. L’ottavo bit determina ancora la direzione del flusso dati.
L’invio di tale sequenza comporterà l’acknowledgement da parte di più periferiche (ACK1 in figura
7). Una volta ricevuti gli ACK si inviano i restanti 8 bit dell’indirizzo in modo che solo una
periferica risponda con l’ACK (l’ACK2 in figura 7).

Figura 6. Temporizzazione di una comunicazione I2C


Figura 7. Modalità di indirizzamento a 7 bit e a 10 bit
MEGLIO SPI O I2C?
Riassumendo quanto già visto in precedenza, SPI non necessita di un meccanismo di
indirizzamento e lo scenario tipico vede un dispositivo Master (tipicamente un microcontrollore)
ed uno o più dispositivi Slave periferici. I2C consente invece una architettura multimaster a due
fili e ciascuna periferica (Slave) viene identificata con un indirizzo a 7 o 10 bit. Difficile dire quale
delle due è la migliore in quanto la scelta di una soluzione dipende dalla velocità di trasmissione
richiesta, dal numero di periferiche nonché dalla lunghezza del bus. Risulta pertanto più
costruttivo operare una comparazione tra i due sistemi in modo che l’utente abbia tutti gli
strumenti per valutare quale delle due soluzioni è quella ottimale per la propria applicazione. La
comparazione è riportata nella tabella a fondo pagina.
SPI I 2C
CONNESSIONE DELLE PERIFERICHE
Le periferiche vengono connesse usando un
minimo di tre fili e per questo motivo
Le periferiche vengono connesse tra loro
l’interfaccia SPI viene anche indicata come 3-
mediante due fili. Il protocollo prevede
wire interface. Le periferiche interconnesse
l’indirizzamento delle periferiche
condividono anche le stesse linee di
mediante un identificativo a 7bit o
alimentazione e, nel caso di più slave, è
10bit (nel primo caso sono indirizzabili
necessario disporre anche di un segnale /SS di
27=128 periferiche mentre nel secondo
abilitazione della singola periferica. Per la
caso 210=1024 periferiche). In nessuno
connessione di un master ed N slave sono
dei due casi è richiesto un chip select.
quindi necessari 3+N fili oltre alle due linee di
alimentazione.
VELOCITÀ DI COMUNICAZIONE
La comunicazione è half-duplex e può
La raggiungere velocità massime diverse in
comunicazione dati in SPI può raggiungere base alla modalità di trasmissione. In
anche i 10Mbps. Il grande vantaggio della particolare:
comunicazione SPI in termini di velocità è la
modalità full-duplex che consente lo scambio Standard mode: max 100Kbps
dati nelle due direzioni simultaneamente. Fast mode: max 400Kbps
High-Speed mode: max 3.4Mbps
ARCHITETTURA DI CONNESSIONE
Architettura master-slave. In una Architettura multimaster. Il protocollo
comunicazione SPI è consentita la presenza di prevede un sistema di arbitraggio basato
un solo master ed uno o più slave. Tuttavia è su AND cablato che consente la
possibile implementare una architettura gestione di conflitti generati dalla
multimaster gestendo opportunamente via trasmissione dati contemporanea da
software le periferiche utilizzando il segnale parte di più periferiche. Per le
/SS (Slave Select). caratteristiche dell’AND cablato, viene
data priorità alla periferica che trasmette
per prima uno zero logico.
IMMUNITÀ AL RUMORE
La comunicazione è level sensitive il che
significa che il dato deve essere stabile
La lettura/scrittura dati viene effettuata sul per il tempo in cui il segnale di clock è
fronte di salita o di discesa del segnale di clock attivo (livello alto). Minore è la velocità di
a seconda della modalità di comunicazione comunicazione maggiore è tale intervallo
scelta. Questo aumenta fortemente l’immunità di tempo tanto che un livello di rumore
al rumore in quanto il dato viene campionato particolarmente elevato può
solamente per un breve periodo di tempo. compromettere il singolo bit provocando
la transazione di una informazione
errata.
CONCLUSIONI
Se l’applicazione prevede l’interconnessione di molti dispositivi tra cui possono esservi più
microcontrollori funzionanti come Master, I2C diviene in questo caso una scelta obbligata. Lo
stesso vale se si intende minimizzare le interconnessioni per semplificare lo sbroglio o per
risparmiare porte di I/O sul microcontrollore. Se l’obiettivo è alta velocità di trasmissione, basso
costo ed alta immunità al rumore, allora la scelta non può che ricadere su una interfaccia SPI,
rinunciando però ad una architettura multimaster e sacrificando qualche I/O in più sul vostro
microcontrollore.
LEGGI ANCHE:
I2C: risoluzione delle problematiche comuni
L’SPI come canale di comunicazione: mettiamolo alla prova su Archiduino
I2C: un viaggio alla (ri)scoperta del protocollo, tra basi e funzioni avanzate
Cosa rende felice un ingegnere?

ARTICOLI CORRELATI

CONTROLLO DI DUE DC/DC BOOST CON TINY 13 AVR

I VANTAGGI DELLA CODIFICA INDIPENDENTE


ALGORITMI DI FILTRAGGIO DIGITALE
1 Facebook LinkedIn Twitter Email WhatsApp
Tags:comunicazione seriale, firmware0, i2c, interfacce, spi

Autore:

Redazione
Redazione di Elettronica Open Source. Gli articoli della nostra redazione sono di varia natura. Ad
esempio gli articoli con la TAG "firmware0" sono articoli passati della rivista Firmware che trattano
argomenti ritenuti ancora interessanti. Ci saranno anche news ed analisi di mercato dei
semiconduttori ed altro ancora.

Potrebbero piacerti anche