SPI vs. I2C: come scegliere il miglior protocollo per i tuoi chip di memoria

Creato: February 9, 2018
Aggiornato: November 30, 2020
SPI vs. I2C

SPI e I2C sono probabilmente i protocolli digitali più comunemente utilizzati per collegare circuiti integrati in una vasta gamma di prodotti. SPI e I2C sono protocolli digitali seriali facili da usare (e difficili da violare) e sono abbastanza semplici da instradare dal punto di vista dell'integrità del segnale. A differenza dei protocolli seriali differenziali ad alta velocità controllati dall'impedenza, questi due protocolli non hanno una specifica di impedenza e spesso sono considerati elettricamente corti. Ciò significa che, sul PCB, i requisiti di progettazione sono relativamente semplici e che c'è ancora una certa libertà all'interno dello standard per ottimizzare le prestazioni come desideri.

Una delle implementazioni più comuni di SPI e I2C in un layout di PCB è il protocollo per la lettura e la scrittura di una memoria flash esterna. I chip flash sono un componente molto comune nei sistemi embedded e possono offrire elevate capacità di memoria non volatile fino a valori Gb. Quando si sceglie un chip di memoria, è consigliabile abbinare i requisiti e le funzionalità dell'applicazione alla velocità del bus necessaria per le operazioni di lettura e scrittura nel chip di memoria. C'è anche la questione del tipo di memoria flash a cui dovrai accedere (NOR vs. NAND).

SPI e I2C a confronto

I protocolli Serial Peripheral Interface (SPI) e Inter-Integrated Circuit (I2C) sono protocolli digitali seriali semplici che funzionano a velocità da bassa a moderata. Queste due interfacce hanno alcune caratteristiche comuni:

  • Utilizzano più di un cavo per l'invio e la ricezione dei dati
  • il clock è sincrono alla sorgente, e ciò significa che c'è una singola traccia che ne trasporta la linea
  • Gli altri chip presenti sul bus sono indirizzabili o commutabili
  • La maggior parte dei microcontrollori avrà una o entrambe queste interfacce integrate
  • Il livello del segnale può essere impostato dalla tensione del nucleo fornita al chip
  • Nessuna di queste interfacce ha un requisito di impedenza

È evidente che queste interfacce sono molto simili. Presentano però alcune differenze importanti, come riassunto nella tabella seguente.

 

I2C

SPI

Nomi della rete

- Dati seriali (SDA)

- Orologio seriale (SCL)

- Master-in, slave out (MISO)

- Master-out, slave in (MOSI)

- Orologio seriale (SCK o SCLK)

- Chip select (CS, opzionale)

Topologia

- Topologia del bus di trasmissione

- MISO/MOSI/SCK condivisi

- Stella per pin CS

Velocità dei dati

- Modalità standard: fino a 100 kbps

- Modalità rapida: fino a 400 kbps

- Modalità ultra rapida: fino a 1 Mbps

- Modalità ad alta velocità: fino a 3,4 Mpbs

- Risolto in base all'ora della finestra dell'orologio, raggiunge fino a 60 Mbps

Tempi di risalita/discesa

- Dipende dalla capacità del bus e dai valori del resistore di pull-up (utilizza la costante di tempo RC)

- Specificato per una determinata impedenza di carico

Indirizzamento

- Perni di indirizzo fissati su ogni componente

- Pin CS utilizzati nel controller principale per attivare o disattivare i chip (possono essere attivati o disattivati con GPIO o pin CS dedicati)

Direzione - Half duplex - Full duplex
Conduzione del segnale - Open-drain - Push-pull (con buffer CMOS)

 

Lo standard SPI offre velocità di trasmissione dati più elevate e può funzionare con edge rate molto più veloci rispetto a I2C. A causa dell'uso di pullup su I2C, della capacità tipicamente elevata del bus e del fatto che il metodo di driving è a scarico aperto, i bus I2C possono avere tempi di risalita che raggiungono i 100 nanosecondi. I bus SPI possono avere tempi di risalita fino a 1 ns per componenti avanzati con capacità a basso carico, e ciò significa che possono presentare un'oscillazione transitoria durante la commutazione. Le linee SPI hanno anche molte più probabilità di produrre diafonia perché la loro velocità di commutazione è molto veloce. Per ulteriori informazioni su questi due protocolli e sull'integrità del segnale nei bus SPI, leggi le risorse seguenti.

Considerazioni importanti nella scelta tra SPI e I2C per i chip di memoria

Accesso alle memorie flash NAND e NOR

In questa sezione non voglio entrare nei dettagli delle memorie flash NAND o NOR, ma voglio concentrarmi su come si accede a ciascuna di esse con un protocollo seriale. È possibile accedere a entrambi i tipi di chip Flash con un bus SPI o I2C se riesci a procurarti il componente di memoria adatto:

  • Flash NOR: accessibile principalmente tramite SPI, anche su chip flash più piccoli e lenti. Sono disponibili chip più lenti a cui è possibile accedere con I2C.
  • Flash NAND: accessibile principalmente tramite un bus parallelo, tuttavia i chip con bus I2C e SPI sono disponibili in numero approssimativamente uguale.

Se cerchi su Octopart e usi le funzionalità di filtro, sarai in grado di individuare alcune memorie a elevata capacità che utilizzano entrambe le interfacce.

Bridge di interfaccia da I2C a SPI per le memorie

Se è necessario effettuare la conversione tra un'interfaccia I2C e SPI, è possibile utilizzare un bridge di interfaccia. Questi componenti convertono il formato dei dati tra le interfacce, quindi un componente che potrebbe avere solo un bus SPI può accedere ai componenti periferici che dispongono solo di un bus I2C. Ciò include i chip di memoria, e sebbene il controller utilizzi solo l'I2C e la memoria utilizzi SPI, la velocità potrebbe essere limitata e il componente ricevente potrebbe non funzionare a causa dei lunghi tempi di risalita.

Per superare questa limitazione con I2C, è consigliabile utilizzare un controller con SPI, quindi utilizzare il bridge dell'interfaccia per accedere a una periferica dotata solo di I2C. Si noti che il lato SPI avrà un clock inferiore per garantirne l'utilizzo a velocità I2C. Questa operazione verrà eseguita nella seguente topologia:

Ponte di interfaccia SPI vs I2C
Configurazione preferenziale in cui è necessario un bridge di interfaccia da SPI a I2C.

Spostamento di livello

Un altro requisito comune nei protocolli seriali open-drain e push-pull (in cui il livello del segnale è impostato dalla tensione del core) è lo spostamento di livello. Il modo più semplice per costruire un PCB è quello di utilizzare un'unica fonte di alimentazione regolata fino alla tensione del nucleo desiderata, come ad esempio un LDO. In realtà, potresti avere alcune periferiche che funzionano a una tensione più alta (diciamo, 3,3 V) mentre il controller principale funziona a una tensione più bassa con più binari (2,5 V, 1,8 V, ecc.). Se la MCU funziona a 3V3 ma la memoria viene eseguita a 1V8 (questa è una situazione comune), sarà necessario instradare i segnali SPI o I2C attraverso uno traslatore di livello. Considera che alcuni ponti di interfaccia includeranno un traslatore di livello che si collega a due piste di alimentazione; la topologia è mostrata di seguito.

Spostamento di livello SPI vs I2C
Topologia utilizzata nello spostamento di livello.

Una volta individuati i componenti per il progetto, come si decide tra un'interfaccia SPI e I2C? Ecco alcuni punti che ti aiuteranno nella decisione:

Velocità: quando si trasferiscono i dati in blocco o si ha una finestra stretta per verificare l'input dell'utente rispetto ai dati archiviati in un chip di memoria, ogni singolo microsecondo conta. Se sono necessarie funzionalità di lettura e scrittura ripetute in tempo reale con il resto del sistema, utilizza SPI. Se il controller deve solo leggere o scrivere occasionalmente dalla memoria, utilizza I2C.

Controller: se utilizzi un MCU o una periferica molto piccoli e hai pochissimi pin a disposizione, allora dovresti scegliere I2C. In effetti, con alcuni microcontrollori probabilmente non avrai scelta. Ad esempio, le MCU ATTiny classiche dispongono solo di I2C, quindi se hanno bisogno di dati da una memoria esterna è necessario trovare un chip di memoria che supporti I2C.

Alimentazione: se stai progettando un dispositivo a batteria che deve accedere ripetutamente ai dati, potresti optare per SPI poiché l'interfaccia utilizzerà meno potenza media di un'interfaccia I2C.

 Auto che sfreccia con luci intorno
Se la velocità conta, scegli SPI.

Il routing di SPI e I2C è molto più semplice se si utilizza la serie completa di funzioni di progettazione e instradamento di PCB di Altium Designer®. Quando avrai completato il progetto e vorrai inviare i file al tuo produttore, la piattaforma Altium 365 ti permetterà di semplificare la collaborazione e la condivisione dei tuoi lavori.

Questo è solo un assaggio di tutto ciò che è possibile fare con Altium Designer su Altium 365. Inizia la tua prova gratuita di Altium Designer + Altium 365 oggi stesso.

Risorse correlate

Tornare alla Pagina Iniziale