👉 SCARICA LA TERZA EDIZIONE DEL CATALOGO EMI/EMC 👈

SPI vs I2C Differenze tra i protocolli e cose da considerare

Posted by Batter Fly 16/10/2023 0 Comment(s) 10794 Strumenti di Misura,

Quando si tratta di comunicare tra chip su una scheda a circuito stampato, due protocolli sono estremamente popolari: Serial Peripheral Interface (SPI) e Inter-Integrated Circuit (IIC o I2C). Questi protocolli cablati sono considerati "minori" o "di basso livello", in quanto non hanno la velocità, la robustezza e le distanze vantate da altri protocolli, come USB, Ethernet, SATA, ecc.

Tuttavia, SPI e I2C sono estremamente popolari, poiché sono facili da implementare, richiedono pochi componenti e poco codice, rispetto ai loro cugini più complessi. Entrambi si basano sulla comunicazione seriale per trasmettere dati e supportano più dispositivi su un unico bus. Molti microcontrollori, sensori e periferiche (come i display LCD) si affidano a SPI e I2C per comunicare tra loro.

Se stai progettando un prodotto e devi scegliere tra SPI e I2C, quale dovresti scegliere?

SPI
SPI è stato sviluppato negli anni '80 da Motorola come un modo per comunicare tra i loro primi microcontrollori e le periferiche a bordo, come l'EEPROM. Motorola, né qualsiasi altra organizzazione, mantiene alcuna standardizzazione del protocollo SPI. A causa di questo standard "de facto", le implementazioni possono variare da produttore a produttore. Assicurati di leggere attentamente il datasheet per ciascuna parte abilitata per SPI!

SPI utilizza quattro linee di segnale attive (che non includono linee di alimentazione e terra) per comunicare tra le parti. Queste linee includono:

  • SCLK: Clock seriale (controllato dal master)
  • MOSI: Master Out Slave In (controllato dal master)
  • MISO: Master In Slave Out (controllato dal dispositivo slave)
  • SS: Selezione slave (controllata dal master)


Con queste quattro linee, un dispositivo di controllo (master) può comunicare con un altro dispositivo periferico (slave).
 

Connessioni punto a punto SPI

Connessioni punto a punto SPI



Anche se puoi avere un solo master sul bus SPI, puoi aggiungere qualsiasi numero di periferiche. Tuttavia, per ciascuna periferica che aggiungi, devi aggiungere una linea SS (Slave Select) aggiuntiva. Nell'esempio del diagramma, dobbiamo utilizzare tre linee SS separate, ciascuna controllando una periferica separata.
 

Connessioni SPI per 3 dispositivi slave

Connessioni SPI per 3 dispositivi slave



Quando il dispositivo principale desidera inviare o ricevere dati da un dispositivo periferico, inizia la comunicazione abbassando il relativo segnale SS. Allo stesso tempo, attiva il segnale di clock (alterna SCLK tra alto e basso a una frequenza specifica). Il dispositivo principale invia i dati sulla linea MOSI, campionando contemporaneamente la linea MISO. Di conseguenza, i dati possono essere inviati tra un dispositivo principale e un dispositivo periferico contemporaneamente (in modalità full-duplex).

Si noti che solo un dispositivo periferico può comunicare alla volta con il dispositivo principale.
 

Diagramma temporale di esempio per SPI in modalità 0: le linee MOSI e MISO sono campionate sul fronte di salita di SCLK

Diagramma temporale di esempio per SPI in modalità 0: le linee MOSI e MISO sono campionate sul fronte di salita di SCLK



SPI ha quattro diverse modalità che possono essere impostate e che determinano il funzionamento del clock. Il dispositivo master e i dispositivi periferici devono utilizzare la stessa modalità. La Modalità 0 è di gran lunga la modalità più comune tra i dispositivi.

  • Modalità 0: dati campionati sul fronte di salita del clock, il clock si trova in stato basso
  • Modalità 1: dati campionati sul fronte di discesa del clock, il clock si trova in stato basso
  • Modalità 2: dati campionati sul fronte di discesa del clock, il clock si trova in stato alto
  • Modalità 3: dati campionati sul fronte di salita del clock, il clock si trova in stato alto



SPI non specifica particolari livelli di tensione, velocità massime o schemi di indirizzamento. Di conseguenza, spetta a te decidere questi fattori. Le velocità SPI possono superare facilmente i 10 Mbps, quindi assicurati di leggere le schede tecniche di tutte le tue parti, poiché queste determineranno le tensioni accettabili, i limiti di velocità e le modalità supportate.

A causa di queste velocità, SPI è utile per il trasferimento di grandi quantità di dati. SPI si trova spesso su sensori che richiedono elevati tassi di aggiornamento, come accelerometri, dispositivi di visualizzazione, schermi LCD e dispositivi di memoria flash.

I2C
Philips Semiconductors (ora nota come NXP Semiconductors) ha creato la specifica I2C nel 1982 per standardizzare la comunicazione tra chip sulla stessa scheda. NXP non addebita alcun costo per l'uso o l'implementazione di I2C, ma addebita una tariffa se desideri registrare un indirizzo del dispositivo.
I2C utilizza 2 linee (senza contare l'alimentazione e la massa) per la comunicazione:

  • SDA: Dati seriali
  • SCL: Clock seriale


In teoria, è possibile collegare qualsiasi numero di dispositivi master e qualsiasi numero di dispositivi slave allo stesso bus. Sia le linee SDA che SCL devono essere linee open-drain. Di conseguenza, i dispositivi possono solo tirare ciascuna linea al livello basso. È richiesta una resistenza di pull-up su ciascuna linea per riportare la linea a livello alto.
 

Connessioni I2C per dispositivi master e slave multipli

Connessioni I2C per dispositivi master e slave multipli



Grazie al design open-drain, l'I2C supporta più master sullo stesso bus. Se due dispositivi iniziano a trasmettere contemporaneamente, uno di essi si ritirerà alla fine in un processo noto come "arbitraggio". I dispositivi monitorano la linea SDA durante la comunicazione. Se un dispositivo nota che la linea SDA è bassa quando sta cercando di trasmettere un livello alto logico, sa che un altro dispositivo sta cercando di comunicare e interromperà la trasmissione.

Per iniziare la comunicazione, un dispositivo master emetterà una condizione di START, in cui la linea SDA viene tirata verso il basso mentre la linea SCL è ancora alta. Il master invia quindi l'indirizzo a 7 bit del destinatario previsto sul bus, seguito da un bit di scrittura (0) o di lettura (1). Se un dispositivo sul bus ha quell'indirizzo specifico, risponderà tirando la linea SDA verso il basso (bit ACK).

I dati possono quindi essere inviati dal master o dal dispositivo periferico in pacchetti da 1 byte alla volta; ogni byte deve essere confermato dal destinatario con un bit ACK. Una volta completata la comunicazione, il master emetterà una condizione di STOP rilasciando la linea SDA (che verrà tirata verso l'alto) mentre SCL è alto.
 

Address 7 bits Data 8 bits



La velocità dei dati era inizialmente limitata a 100 kbps (modalità standard). Nel 1992, Philips ha aumentato il limite di velocità a 400 kbps (modalità veloce). Sei anni dopo è stata aggiunta una modalità a 3,4 Mbps (modalità ad alta velocità). A velocità più basse, tra master e dispositivo periferico, devono essere dati comandi speciali per stabilire una connessione ad alta velocità.

Sebbene possa essere fisicamente collegato qualsiasi numero di dispositivi a un bus I2C, l'indirizzo a 7 bit limita il numero effettivo di dispositivi. Alcuni degli indirizzi sono riservati e quindi possono essere presenti solo 112 dispositivi diversi sullo stesso bus. È possibile abilitare una modalità di indirizzamento a 10 bit per consentire un numero maggiore di dispositivi, se necessario.

L'I2C dispone di una forma di controllo del flusso nota come "clock stretching". Un dispositivo periferico può mantenere la linea SCL bassa, il che indica al dispositivo master di rallentare la velocità di trasmissione. Questa tecnica consente al dispositivo periferico di avere del tempo per elaborare i dati prima di rispondere.

A causa del basso numero di pin richiesto dall'I2C, molti produttori di sensori utilizzano questo protocollo nei loro chip. Ad esempio, sensori di temperatura, accelerometri, convertitori analogico-digitali, ecc. possono essere trovati con I2C.
 

Confronto SPI I2C
Guida del pin tiro e spinta collettore aperto
Linee di segnale 4 (più 1 per ciascun dispositivo aggiuntivo) 2
Velocità massima Nessun limite (10-100 Mbps è comune) 400 kbps in modalità rapida (3,4 Mbps è possibile con la modalità ad alta velocità)
Numero di periferiche Limitato solo dal numero di pin disponibili per le linee SS sul master 112 con indirizzamento a 7 bit
Multi-master No
Controllo del flusso No



Conclusione
Entrambi i protocolli sono adatti per molte applicazioni diverse. Spesso sei limitato al protocollo implementato dal produttore di una particolare componente. Alcune, come l'accelerometro Analog Devices ADXL345, offrono entrambe le interfacce I2C e SPI sullo stesso chip.

Se devi scegliere tra i due, SPI è generalmente la scelta migliore se hai bisogno di velocità di trasferimento più rapide. Al contrario, I2C è la migliore se hai a disposizione pochi pin sul tuo microcontrollore o microprocessore.

Leave a Comment