SPI e I2C sono probabilmente i protocolli digitali più comunemente utilizzati per collegare circuiti integrati in una vasta gamma di prodotti. I protocolli SPI e I2C sono 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 dei protocolli 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).
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:
È evidente che queste interfacce sono molto simili. Presentano però alcune differenze importanti, come riassunto nella tabella seguente.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
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:
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.
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:
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.
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à (I2C vs. SPI speed): 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.
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.