I fondamenti della comunicazione I3C

Microchip I3C

I3C è un nuovo protocollo di comunicazione seriale per sistemi embedded che offre un throughput di dati significativamente più elevato e funzionalità più avanzate rispetto a I2C

Con I3C, ingegneri e progettisti possono migliorare le prestazioni dei loro progetti aggiungendo anche nuove funzionalità come le modalità Hot-Join, In-Band Interrupts (IBI) e High Data Rate (HDR). Inoltre, I3C è retrocompatibile e può comunicare con i target I2C preesistenti. La tabella 1 riassume le differenze con I2C.

Tabella 1 – Riepilogo delle differenze rispetto a I2C
Tabella 1 – Riepilogo delle differenze rispetto a I2C

Velocità del Bus

Il cambiamento più evidente tra I2C e I3C è la velocità di clock. I2C è di solito 100 kHz, 400 kHz o 1 MHz, mentre I3C può raggiungere velocità fino a 12,5 MHz. Uno dei fattori principali per questo incremento è l'uso di uscite push-pull in I3C. I3C commuta tra i driver open-drain e push-pull a seconda dello stato del bus. Open Drain viene utilizzato durante l'indirizzamento iniziale o l'arbitrato in cui più bersagli possono controllare la linea contemporaneamente. Al contrario, il push-pull viene utilizzato quando la comunicazione è unidirezionale e non vi è alcuna possibilità che un altro dispositivo comunichi contemporaneamente.

 

Caratteristiche Elettriche

A differenza di I2C, I3C non richiede resistenze esterne di pull-up, dato che è il controller principale sul bus a fornirle. I2C ha un vasto range di funzionamento, dove 3,3 V e 5 V sono i più comuni. I3C ha tre livelli nominali: 1,2 V, 1,8 V e 3,3 V. Tuttavia, sono consentiti altri intervalli operativi.

Device Addressing

I2C supporta l'indirizzamento a 7-bit e 10-bit dei dispositivi di destinazione. Con I3C, è supportato solo l'indirizzamento a 7 bit. Tuttavia, I3C utilizza l'indirizzamento dinamico, in cui il controller attivo assegna a ogni destinazione un indirizzo univoco per evitare la collisione degli indirizzi. Ciò contrasta con I2C, in cui gli sviluppatori devono tenere traccia degli indirizzi attualmente utilizzati per impedire a due dispositivi di condividere lo stesso indirizzo. L'indirizzamento dinamico delle destinazioni avviene durante l'inizializzazione del bus.

 

In-Band Interrupts (IBI) e Hot-Join

In I2C, non vi è alcun meccanismo per un target per indicare al controller che i dati sono pronti senza utilizzare una linea di I/O aggiuntiva. Ma in I3C, i dispositivi di destinazione possono segnalare un interrupt utilizzando le linee SDA e SCL, rendendolo così un vero protocollo a due fili. Allo stesso modo, questo tipo di in-band signaling viene anche utilizzato per implementare la funzionalità hot-join in I3C in modo che i dispositivi possano unirsi dopo l'assegnazione iniziale dell'indirizzo. Le sezioni In Band Interrupts (ibi) e Address Arbitration ne discuteranno in modo più dettagliato.

Controller attivi e controller secondari

I2C supporta i bus multi-controller, in cui più dispositivi funzionano come controller, ma solo uno alla volta sta comunicando attivamente. Tuttavia, in I3C, solo un dispositivo può essere il controller attivo; altri dispositivi in grado possono richiedere di diventare il controller attivo sul bus. Tale dispositivo è noto come controller secondario. Quando un controller secondario non agisce come controller attivo, funziona come target I3C.

Supporto I2C

I3C supporta la comunicazione con dispositivi target I2C. Perché la comunicazione sia possibile, il target I2C deve:

  • Avere un indirizzo a 7-bit
  • Non deve produrre clock stretching

Si raccomanda inoltre vivamente che il target I2C contenga filtri 50 ns sui suoi ingressi. Se questi requisiti sono soddisfatti, l'obiettivo I2C è compatibile con il bus I3C. Inoltre, alcuni dispositivi I3C possono operare come target I2C fino a quando non viene assegnato un indirizzo dinamico. Mentre è in modalità I2C, il dispositivo I3C ha un indirizzo statico per la comunicazione. Questo indirizzo statico non è necessariamente lo stesso dell'indirizzo dinamico, ma può essere assegnato ugualmente, se lo si desidera. Di seguito è riportato un esempio di bus I3C (Figura 1).

Figura 1 – Valori nominali. Altri valori non sono esclusi
Figura 1 – Esempio di possibile bus I3C

Le Basi della comunicazione I3C

Prima che qualsiasi comunicazione possa iniziare su un bus I3C, il bus deve essere configurato e gli indirizzi dinamici assegnati ai target.

Quindi, la comunicazione inizia come I2C. Viene generata una condizione di START, quindi viene inviato un indirizzo dinamico a 7-bit, con un bit R/nW seguito da un ACK o NACK dal target. Successivamente, I3C utilizza trasferimenti seriali a 9-bit come I2C, ma la funzione del 9° bit è stata modificata da ACK / NACK a un bit di transizione, o bit T.  Il bit T ha due funzioni: quando il controller sta scrivendo su un target, il bit T è un odd-parity bit del byte di dati inviato. Quando un controller sta leggendo da un target, il bit T viene utilizzato come flag di fine dati. Questo indicatore può essere fatto valere sia dal controller, per segnalare che è stata fatta la lettura dei dati, o dal target, per segnalare che non ha più dati da restituire.   Per completare il trasferimento dei dati, il controller genera la condizione di STOP o RESTART sul bus. Nota: se viene utilizzato un RESTART, l'header viene trasmesso in Push-Pull poiché non vi è alcun arbitrato. (Figura 2)

2 – Clock stretching può essere eseguito dal controller attivo (non dal target) con restrizioni sulla temporizzazione e sullo stato del bus.
Figura 2 – Schema semplificato del trasferimento dei dati in I3C (mostrato con 1 byte di dati)

Un cambiamento cruciale rispetto a I3C è la mancanza di clock stretching. I2C utilizza il clock stretching per dare ai dispositivi di destinazione più tempo per elaborare prima di restituire i dati. Con I3C, il clock è guidato solo dal controller attivo (in modalità Single Data Rate - SDR). Pertanto, il clock stretching può essere eseguito dal controller solo in circostanze limitate.

Tuttavia, il dispositivo di destinazione può indicare limiti di velocità durante il processo di inizializzazione del bus per indicare una frequenza operativa massima, tempi di consegna in lettura e scrittura e altri parametri di temporizzazione.

 

Common Command Codes (CCC)

I Common Command Codes (CCC) sono un nuovo concetto in I3C. I CCC vengono utilizzati dal controller attivo per inizializzare e/o configurare il bus I3C. I CCC possono essere trasmessi a tutti i target o possono essere indirizzati a un target specifico privatamente. Per inviare un CCC, si deve prima inviare l'indirizzo 7’h7E/W. Tutti i dispositivi I3C devono riconoscere e ascoltare questo indirizzo. I dispositivi I2C non possono corrispondere a questo indirizzo, poiché 7’ h7E è riservato per la specifica I2C. Successivamente, inviare il codice CCC.  Per i CCC che scrivono i dati nei target, continuare a inviare i dati fino al completamento. Per i CCC che leggono i valori, inviare qualsiasi parametro (se necessario), riavviare il bus e iniziare a leggere i dati. Sono troppi i CCC per poterli discutere solo in questo articolo, ma questa è una selezione di quelli importanti:

 

Enter Dynamic Address Assignment (ENTDAA)

Enter Dynamic Address Assignment notifica a tutti i target che il controller attivo sta assegnando indirizzi dinamici. Se a un target è già stato assegnato un indirizzo, verrà eseguito il NACK di questo comando.

Set New Dynamic Address Assignment (SETNEWDA)

Set New Dynamic Address Assignment viene utilizzato per modificare l'indirizzo dinamico di un dispositivo.

Enable Events (ENEC) / Disable Events (DISEC)

Enable o Disable Event indicano se eventi come gli Interrupt In-Band o Hot-Join sono attualmente consentiti sul bus.

Reset Dynamic Address Assignment (RSTDAA)

Reset Dynamic Address cancella l'indirizzo attualmente assegnato ma non ne riassegna uno. Nella v1.1 della specifica I3C, la forma diretta del Reset Dynamic Address Assignment è stata superata.

Set Max Read Length (SETMRL) / Get Max Read Length (GETMRL)

Set o Get Max Read Length specifica il numero massimo di byte che è possibile leggere contemporaneamente.

Set Max Write Length (SETMWL) / Get Max Write Length (GETMWL)

Set o Get Max Write Length imposta il numero massimo di byte che possono essere letti o scritti alla volta.

Get Device Characteristics Register (GETDCR)

Il Device Characteristics Register, o DCR, è un registro che specifica quale tipo di dispositivo sia il target.   La specifica I3C definisce i valori DCR. Un elenco di questi codici  è ottenibile dalla MIPI Alliance.

Get Bus Characteristics Register (GETBCR)

Il Bus Characteristics Register, o BCR, è un registro che definisce quali funzionalità I3C sono presenti sul target. Questo registro viene anche utilizzato per determinare se è necessaria una limitazione di velocità per l'obiettivo.

Target Reset Action (RSTACT)

Il Target Reset Action CCC definisce cosa succede ai target quando viene rilevato il modello di ripristino in-banda. Per generare un reset, SDA è tenuto basso mentre SCL è cronometrato 14 volte, seguito da un riavvio e poi uno STOP. I target rilevano il modello di ripristino in-banda e agiscono in base a ciò che è stato loro assegnato.  Questo CCC NON attiva un reset ma assegna il comportamento di destinazione. Se non si reimposta seguendo questo comando, la condizione di AVVIO successiva cancellerà l'azione assegnata.

Enter High Data Rate Mode (ENTHDRx)

Infine, c'è l'High Data Rate, o HDR, Entry CCC. Questo CCC indica che il controller attivo sta entrando in una delle quattro modalità HDR (0, 1, 2 o 3).

3 – HDR non è richiesto per la comunicazione I3C di base. I bus I3C supportano la comunicazione HDR anche quando sono collegati dispositivi non compatibili. Per ulteriori informazioni, ved.  High Data Rate (HDR) Modes.
Figure 3 – esempio di un bus I3C misto con supporto HDR-BT

Modalità High Data Rate (HDR)

Ci sono quattro modalità HDR attualmente definite dalla specifica I3C.

  • HDR Double Data Rate (HDR-DDR) [Mode 0]
  • HDR Ternary Symbol Pure-bus (HDR-TSP) [Mode 1]
  • HDR Ternary Symbol Legacy-inclusive-bus (HDR-TSL) [Mode 2]
  • HDR Bulk Transport (HDR-BT) [Mode 3]

Anche se in HDR la frequenza di clock non cambia, il modo in cui i dati vengono codificati cambia. L'HDR non è richiesto per la comunicazione di base I3C. I dispositivi che non supportano HDR ignorano la comunicazione fino a quando non rilevano il modello di uscita HDR.

HDR-DDR

HDR-DDR è una modalità che utilizza entrambi i clock edge per trasmettere dati. Ciò aumenta significativamente la velocità di trasmissione dati del bus (ma non la raddoppia a causa del sovraccarico aggiuntivo nel protocollo).

HDR-TSP e HDR-TSL

In HDR-TSP and HDR-TSL, i dati vengono trasmessi in ternario, con tre simboli definiti creati dalle linee SDA e SCL. Dalla specifica, i simboli sono definiti elettricamente da:

  • Solo modifiche SCL
  • Solo modifiche SDA
  • Sia modifiche SCL che SDA

La scelta tra TSP-HDR e TDR-TSL si basa sulla presenza o meno di un target I2C. HDR-TSP può essere utilizzato solo quando sono presenti target I3C, mentre HDR-TSL viene utilizzato quando è presente un target I2C precedente.

HDR-BT

HDR-BT consente di utilizzare più linee dati contemporaneamente per un maggiore parallelismo.
Per compatibilità, solo il Least Significant Bit, o LSB, della linea SDA viene utilizzato per la comunicazione. HDR-BT supporta le configurazioni a doppia e quadrupla linea. La Figura 3 mostra una configurazione esemplificativa.

 

In-Band Interrupts (IBI) e Address Arbitration

A differenza di I2C, i target possono generare la condizione di avvio per IBI quando il bus è inattivo (o libero). Ciò si verifica in assenza di transazioni per un certo periodo di tempo. Quando il controller attivo rileva la condizione di avvio dal target, fornisce il segnale di clock per completare la transazione. Se due target tentano di comunicare contemporaneamente, si verificherà l'arbitrato.

L'arbitrato è il processo di determinazione di quale dispositivo è autorizzato a comunicare con il controller. Ad esempio, si supponga che due dispositivi, A e B, vogliano comunicare contemporaneamente con il controller attivo. Il dispositivo A ha un indirizzo di 7’h10, mentre il dispositivo B ha un indirizzo di 7’h14. Quando viene generato un in-band interrupt, entrambi i dispositivi tenteranno di trasmettere il proprio indirizzo al controller attivo. In questo stato del bus, la linea dati è open-drain.  Durante la comunicazione open-drain, la linea ritorna passivamente a "1" attraverso una resistenza di pull-up e può essere attivamente asserita a "0". Ciò impedisce un cortocircuito da due dispositivi che trasmettono 1 e 0 allo stesso tempo. (Figura 4)

Figura 4 – Vista semplificata della linea SDA (il resistore pull up è integrato nel controller principale)
Figura 4 – Vista semplificata della linea SDA (il resistore pull up è integrato nel controller principale)

L'indirizzo vincente nell'arbitrato è quello che riceve il controllore. Seguendo la figura 5, in primo luogo, i due zeri vengono trasmessi da ciascun indirizzo del dispositivo. Successivamente, entrambi rilasceranno la linea dati per gli "1" nel loro indirizzo. Quindi, un altro 0 verrà trasmesso da entrambi. A questo punto, nessuno dei due dispositivi ha vinto l'arbitrato, poiché a questo punto l'indirizzo ricevuto corrisponde a entrambi. Ma, con il bit successivo, uno dei target rilascerà la linea dati per inviare un "1" mentre l'altro tenta di inviare uno "0". Chi ha trasmesso "1" perderà l'arbitrato perché “1" è guidato passivamente dalla configurazione open-drain, mentre l'altro target afferma attivamente lo "0". Completando il resto della sequenza di trasmissione, è possibile vedere che il controller ha ricevuto l'indirizzo 7’h10, non 7’h14. Pertanto, il dispositivo B ha perso l'arbitrato e ha interrotto la comunicazione.  Nell'arbitrato I3C, il dispositivo con indirizzo superiore perderà sempre e cederà al dispositivo con indirizzo inferiore.

Figura 5 – Esempio di arbitrato I3C con indirizzi 7’h10 e 7’h14
Figura 5 – Esempio di arbitrato I3C con indirizzi 7’h10 e 7’h14

Conclusioni

Conclusione I3C porta un significativo aumento della larghezza di banda del bus seriale, così come una serie di nuove funzionalità. Questo articolo ha toccato le caratteristiche e le funzioni di livello superiore del bus, ma non è un elenco esaustivo delle caratteristiche e dei comandi possibili. La specifica I3C è disponibile presso MIPI Alliance .

 

* Robert Perkel* è Application Engineer for Microchip’s 8-bit MCU business unit

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome