Da I2C a I3C
Da I2C a I3C
Gli artefatti tecnologici come i vecchi computer stanno trovando la loro strada verso i musei, ma alcune tecnologie continuano a soddisfare requisiti importanti per l’informatica.
All’interno di dispositivi indossabili, dispositivi intelligenti, robot e computer ci sono bus di comunicazione chiamati I2C (Inter Integrated Circuits), che risalgono al 1982, e SPI (Serial Peripheral Interface), nato nel 1979.
Questi autobus hanno guidato la comunicazione a corto raggio tra circuiti e microcontrollori per decenni. Ora fungono da interfacce chiave per la comunicazione relativa ai sensori su dispositivi intelligenti, indossabili e computer.
Ma poiché i dispositivi sono equipaggiati con sensori più potenti e più affamati della larghezza di banda, come le telecamere a 360 gradi, questi bus obsoleti non saranno in grado di tenere il passo nel lungo periodo. L’organizzazione per la definizione degli standard MIPI Alliance vuole quindi seppellire I2C e sostituirlo con il più veloce e moderno bus I3C e anche unire SPI nella nuova interfaccia.
L’aggiornamento è analogo al passaggio da USB 2.0 a USB 3.0 molto più veloce, anche se ci sono voluti 35 anni per passare da I2C a I3C.
Più sensori vengono integrati in dispositivi intelligenti, robot, droni e dispositivi industriali, e MIPI Alliance afferma che I3C fungerà da canale di comunicazione a breve distanza che assorbe energia.
L’I3C verrà utilizzato principalmente per i trasferimenti di dati all’interno di un circuito stampato. Ma man mano che il mercato dell’IoT si espande, servirà una crescente necessità di trasferire i dati raccolti da una vasta gamma di sensori meccanici, ambientali, biometrici e di salute.
L’utilizzo di I3C potrebbe espandersi a una nuova gamma di sensori in PC, droni e cuffie per realtà virtuale. Potrebbe essere utilizzato per telecamere 3D su droni che catturano immagini ad alta risoluzione o per accelerare le comunicazioni all’interno di auto autonome.
Il nuovo bus di comunicazione potrebbe anche ridurre le dimensioni di dispositivi indossabili, dispositivi intelligenti e schede come Raspberry Pi. Un sacco di spazio è occupato dai bus I2C, UART e SPI su Raspberry Pi, e l’I3C li unirà tutti in uno, il che dovrebbe ridurre il numero dei pin. Oltre a risparmiare spazio, ridurrà anche i costi di realizzazione dei dispositivi.
Le specifiche supportano numerose classificazioni e funzioni dei sensori, inclusi accelerometri, touch screen, telecamere di volo, sensori a ultrasuoni, trasduttori e attuatori, feedback tattili e sensori a infrarossi o ultravioletti.
MIPI Alliance vanta membri come Google, Intel, AMD, Qualcomm e Sony.
Rispetto a una tipica implementazione I2C, il nuovo protocollo I3C offre più larghezza di banda mentre consuma fino a 10 volte meno energia. L’interfaccia digitale a due fili supporta trasferimenti di dati da 10 Mbps a 39,5 Mbps in base alla modalità, alla frequenza di clock e ai livelli di consumo energetico.
Il problema è illustrato nella Figura 1, un esempio della varietà di interfacce di sensori utilizzate nei tipici sistemi multi-sensore.
FIGURA 1 Un sistema di sensori basato su più interfacce (Fonte: MIPI Alliance)
La MIPI Alliance ha rilasciato per I3C, una specifica che incorpora gli attributi di I2C e SPI, come un’interfaccia alternativa che comprende i vantaggi di queste interfacce in un’unica interfaccia. Utilizzando I3C, i progettisti di sistemi possono facilmente collegare più sensori, riducendo al contempo il consumo di energia, i costi di componenti e di implementazione. La Figura 2 mostra un sistema di sensori basato su I3C di esempio.
FIGURA 2 Un sistema di sensori basato su I3C che utilizza un bus I3C (fonte: MIPI Alliance)
Un bus I3C puro supporta modalità HDR e velocità doppia, supporto multi-master, indirizzamento dinamico, compatibilità con codice comando e un approccio uniforme per funzionalità avanzate di gestione dell’alimentazione, come la modalità sleep.
Configurazione del bus I3C e ruoli del dispositivo
Lo standard I3C definisce cinque ruoli per i dispositivi:
-
Main master, che controlla il bus I3C e la funzione, e include il controllo della proprietà del bus e il trasferimento ai master secondari.
-
Il master secondario, che prende il controllo temporaneo del bus I3C, richiede l’autorizzazione dal master principale e passa il controllo al master principale una volta esercitate le attività di controllo.
-
Slave, che risponde ai comandi comuni o individuali dal master I3C.
-
Slave peer-to-peer, che può scrivere o leggere da un altro slave senza l’interazione del master.
-
I2C slave, per dispositivi I2C preesistenti presenti in un bus I3C, a cui i dispositivi master I3C possono comunicare ma con velocità e capacità limitate.
Le specifiche MIPI I3C definiscono responsabilità diverse per ogni tipo di dispositivo, come la gestione dell’arbitrato SDA, l’assegnazione dinamica degli indirizzi, le funzioni hot-join, la capacità HDR master e slave.
-
L’arbitrato SDA risolve la proprietà del bus quando più dispositivi trasmettono contemporaneamente. I3C utilizza la linea SDA durante il processo di arbitrato e segue l’approccio open-drain comune. Il master gestisce in genere l’arbitrato SDA.
-
Assegnazione dinamica degli indirizzi: il master principale I3C assegna a ciascun dispositivo un indirizzo univoco, quando il bus viene inizializzato o quando un nuovo dispositivo è collegato a un bus I3C configurato.
-
Funzione di unione rapida: gli slave non devono essere attivati quando il bus I3C è acceso e potrebbero essere collegati ma non attivati o aggiunti in seguito. L’attivazione di tali slave è conosciuta come hot-join e consente al master di assegnare un indirizzo dinamico allo slave quando ne richiede uno.
-
Capacità master e slave HDR: master e slave in grado di supportare frequenze di dati elevate di 16,84 bit / s e oltre sono definiti come master / slave HDR.
Offre agli sviluppatori un’opportunità senza precedenti di creare progetti innovativi per qualsiasi prodotto mobile, dagli smartphone, ai dispositivi indossabili, ai sistemi di sicurezza nelle automobili.
La tecnologia è implementata su un I / O CMOS standard.
La specifica I3C è assai recente è stata rilasciata all’inizio del 2017 e promette un modo coerente di interfacciarsi con i sensori che ridurranno le difficoltà nell’utilizzo, oggi essi potrebbero utilizzare UART, SPI o I2C. Nel 2013, l’Alleanza MIPI ha avviato il lavoro su uno standard comune di sensori che avrebbe mantenuto le migliori caratteristiche di I2C e SPI, ma aggiungeva funzionalità che migliorerebbero l’integrazione del sensore. Oltre a fornire uno standard comune da cui attingere, i benefici complessivi di I3C rispetto a I2C e SPI includono minori costi di implementazione; I3C richiede pochissimo spazio all’interno dei sensori stessi. I3C offre anche maggiori velocità di comunicazione e un minore consumo energetico; il tutto
mantenendo la retrocompatibilità con I2C. Secondo l’Alleanza MIPI, “L’interfaccia del sensore standard MIPI I3C è un punto di svolta per i sistemi di sensori integrati. Ha costruito un superset di funzioni in aggiunta all’interfaccia I2C (a due fili) esistente con ulteriori modalità di velocità dati elevate in grado di soddisfare i casi di utilizzo dei sensori che attualmente richiedono un bus SPI (a quattro fili). “
I2C è stato creato per la prima volta da Philips (ora NXP) nel 1982. Per i microcontrollori (MCU), I2C è stato spesso utilizzato per gestire i General Purpose I / O (GPIO) quando tutti i pin sono stati utilizzati su altre cose. Tuttavia, I2C non ha avuto aggiornamenti significativi per oltre due decenni e, con così tanti sensori in uso oggi per le applicazioni Internet of Things (IoT), è comprensibile che I3C era atteso.
FIGURA 3 Confronto tra I3C e I2C: consumo di energia e bit rate. (Fonte: MIPI Alliance).
I3C funziona bene per tutto ciò che storicamente ha usato UART, SPI o I2C e sarà utilizzato per collegare molti componenti come sensori, display, fotocamere sempre attive (bassa risoluzione), controller, sensori capacitivi, applicazioni mobili, trasduttori, acustica, e altre periferiche. I3C manterrà l’interfaccia a 2 fili presente in I2C. I3C si occupa di alcuni punti critici storici con I2C che hanno a che fare con interrupt in-band, indirizzamento dinamico, gestione di multi-master e standardizzazione di comandi con codici di comando comuni. I problemi con hot-join, rilevamento degli errori e recupero degli errori con I2C sono stati risolti anche in I3C. I3C ha inoltre ridotto il consumo di energia fornendo al contempo velocità di trasmissione dati superiori a 12,5 MHz rispetto ai 400 kHz di I2C.
TABELLA 1: L’interfaccia del sensore I3C MIPI supporta diverse nuove funzionalità che migliorano l’integrazione del sensore. (Fonte: Alleanza MIPI).
Bus di dati semplificati con la nuova specifica I3C
I3C è sviluppato dall’alleanza MIPI (Mobile Industry Processor Interface) ed è specificamente rivolto a soddisfare esigenze di interconnessione a prova di futuro in dispositivi mobili, Internet of Things e dispositivi di computing indossabili che incorporano un numero sempre maggiore di sensori avanzati e periferiche.
La specifica MIPI I3C combina le funzionalità di I2C e SPI in un nuovo standard unificato e interfaccia scalabile per connettere insieme più dispositivi in sistemi embedded, con un utilizzo minimo di pin, nuove funzionalità e miglioramenti nella gestione dell’alimentazione e nella velocità dei dati.
Il gruppo di lavoro del sensore MIPI, composto da molti dei principali produttori di sistemi e fornitori ASIC, ha definito congiuntamente le specifiche I3C, con l’obiettivo di riutilizzare le interfacce esistenti il più possibile riducendo il numero di pin, fornendo interrupt in banda, riducendo la potenza uso e costi di progettazione, nonché aumento della larghezza di banda.
I3C sviluppa nuove funzionalità sullo standard I2C maturo, come una nuova modalità ad alta velocità di trasmissione dati in grado di supportare molti dati da sensori o altri dispositivi periferici, oltre a un migliore supporto per reti relativamente grandi di molti dispositivi connessi a un microcontrollore host.
Inoltre, I3C può competere con interfacce seriali embedded a banda larga come SPI, ma usa ancora solo due fili come fa I2C. Lo standard I3C è retrocompatibile con I2C, quindi i dispositivi legacy con interfacce I2C possono connettersi al bus I3C, tuttavia è necessario un nuovo hardware (sia sulla periferica che sul lato del controller host) per sfruttare appieno la larghezza di banda e altri vantaggi che Fornisce I3C.
I3C offre velocità più elevate, maggiore efficienza energetica, un numero di pin ridotto rispetto alle reti SPI multi-dispositivo e supporto per suite di sensori relativamente grandi collegate a un microcontrollore host utilizzando solo due fili ma trasportando quantità sempre maggiori di dati di sensori ricchi nella rete di sensori wireless e applicazioni IoT.
I3C è stato sviluppato dal Sensor Working Group di MIPI come un modo potenziale per unificare il panorama del bus seriale con un’unica interfaccia coerente in grado di gestire qualsiasi tipo di dispositivo, consentendo a tutti i tipi di sensori di essere facilmente integrati nei sistemi embedded.
Ha lo scopo di combinare la semplicità e il basso numero di fili di I2C con l’alta velocità e l’efficienza energetica di SPI, per unire entrambi questi popolari standard insieme e aggiungere nuove potenti funzionalità come il supporto di interrupt in-band senza la necessità di cavi di interrupt aggiuntivi, gestione avanzata dell’alimentazione e indirizzamento dinamico dei diversi circuiti integrati sul bus. E I3C fa tutto questo mantenendo in gran parte la compatibilità all’indietro con i dispositivi I2C esistenti.
Un tipico smartphone oggi può contenere fino a una dozzina di sensori, e l’adozione diffusa e la riduzione dei costi di tecnologie come MEMS significa che questi sensori stanno producendo dati molto più complessi e ricchi.
Spostare tutti questi dati sul controller centrale sta estendendo le capacità delle interfacce familiari di oggi come SPI o I2C, e questo è il problema che I3C è progettato principalmente per risolvere. I3C mira a incorporare e unificare gli attributi chiave di I2C e SPI migliorando al tempo stesso le capacità e le prestazioni di ciascun approccio con un’interfaccia e un’architettura complete e scalabili.
Un tipico sistema in uso oggi può utilizzare una combinazione di dispositivi I2C e SPI, con tre fili per SPI, due fili per I2C, un altro filo per ogni linea di selezione del dispositivo SPI, più una linea di interruzione per ciascun dispositivo periferico.
Questa complessità si aggiunge rapidamente alle moderne suite di sensori e I3C punta a sostituire una dozzina o più fili con solo due fili, fornendo funzionalità di interrupt in banda senza alcuna necessità di linee di interrupt dedicate collegate al dispositivo host, riducendo la frammentazione tra questi diversi standard nel mercato dei dispositivi, liberando pin sul dispositivo host, semplificando l’ingegneria dei PCB e rendendo i dispositivi più piccoli, oltre a offrire velocità fino a 27 megabit al secondo.
I3C include anche il supporto multi-master: ciò significa che consente ai dispositivi sul bus di richiedere il ruolo di master, pertanto l’architettura del bus non è limitata a un singolo dispositivo master fisso e a un numero di dispositivi slave.
I dispositivi possono essere sia master che slave e la comunicazione diretta “peer-to-peer” tra i dispositivi I3C sul bus è possibile senza che il dispositivo master debba essere coinvolto in questo scambio. I3C introduce anche indirizzamento dinamico, hot-join e un approccio uniforme per funzioni avanzate di gestione dell’alimentazione, come le modalità sleep.
I dispositivi sul bus possono essere accesi e spenti e non devono essere attivati quando il bus I3C è acceso. Possono essere aggiunti sul bus in un secondo momento o collegati inizialmente ma non accesi, senza problemi di caricamento del bus.
Questa funzionalità di hot-join, come con i dispositivi USB, consente al dispositivo master di assegnare un indirizzo dinamico al dispositivo slave quando arriva sul bus, e presenta vantaggi per l’efficienza energetica quando il sensore e le periferiche vengono spenti e accesi per risparmiare potenza, oltre a consentire moduli rimovibili e sostituibili a caldo.
La configurazione dell’indirizzo dinamico significa che il dispositivo master sul bus assegna a ciascun dispositivo un indirizzo univoco, quando il bus viene inizializzato o quando un nuovo dispositivo è collegato a un bus I3C già configurato. Come la configurazione host dinamica ormai onnipresente nelle reti IP, questa configurazione automatica degli indirizzi rende potenzialmente molto più semplice la configurazione dell’hardware I3C, eliminando i conflitti tra i dispositivi hardware con indirizzi fissi.
Questo sistema nasce per la comunicazione tra gli ic presenti nella stessa scheda.
Per quanto ne so io se presenti nella stessa stanza non hai problemi.
Andare oltre in teoria è possibile ma devi sacrificare la velocità ed aumentare i consumi.
Infatti devi ridurre le resistenze di pull-up in maniera che eventuali disturbi siano poco influenti.
Di contro una diminuzione di tali resistenze comporta una fatica maggiore dei vari IC a portare le linee di comunicazione a livello basso e di conseguenza una minore velocità, pertanto minore frequenza di comunicazione tra i vari IC o periferiche.
ciò che influisce parecchio anche sulla comunicazione, oltre alle caratteristiche fisiche della linea e alle condizioni ambientali di installazione ( eventuali campi elettromagnetici che possano causare effetti di mutua induzione, capacità parassite con superfici a potenziali e frequenze differenti ecc) è il filtraggio dell’alimentazione dei vari dispositivi, non so ne come ne perchè ma è un dato di fatto che se si usa un’alimentatore switching che non abbia un’uscita ben filtrata per alimentare dei dispositivi , i disturbi interferiscono negativamente anche sul protocollo di comunicazione rendendo illeggibili i dati trasportati, talvolta basta che si accenda un’apparecchiatura elettronica nella stessa stanza per corrompere i dati, ( basta una lampadina a risparmio energetico cinese )
da quello che ho potuto constatare con una prova pratica, non si può andare oltre i 5 m usando tutte le dovute cautele e con le dovute schermature, riducendo la frequenza al minimo ecc , il che mi ha fatto capire che il protocollo i2c può essere usato tranquillamente tra dispositivi all’interno della stessa macchina o entro i 5m nella stessa struttura,tuttavia si potrebbe ovviare al problema della distanza massima usando la fibra ottica, rendendo la linea di comunicazione immune agli agenti esterni… il problema comincia però a spostarsi sul lato economico…. ne vale la pena?
salve, ho cercato un pò in giro ma non sono ancora riuscito a reperire una risposta…
utilizzanto I2C per collegare dei sensori (temperatura/umidità/pressione) su un sistema basato su arduino, qual’è la lunghezza massima del “loop” dei cavi che “girano” per i vari sensori?
grazie!
Il fattore limitante è la capacità massima. Le specifiche indicano un massimo di 400pF.
Usando la velocità più lenta (100kHz) ed assumendo 50pFdi capacità parassite varie, ti rimangono circa 350pF.
Assumendo per un filo 20pF/30cm si arriva ad un max. di 525cm. Io mi terrei non oltre dei 2/3 metri, sempre alla velocità minima (100kHz). Al solito un oscilloscopio è d’obbligo per delle verifiche in un caso specifico.
Per maggiori info vedere questo documento con e specifiche e le raccomandazioni per bus I2C:
https://www.nxp.com/docs/en/user-guide/UM10204.pdf
Ciao.