Arbitrato del bus I3C
All'inizio di un frame, più dispositivi possono competere per l'utilizzo del bus e il processo di arbitraggio del bus viene utilizzato per selezionare quale dispositivo ottiene il controllo della linea SDA. Sia nell'I²C che nell'I3C, l'arbitrato del bus viene eseguito con la linea SDA in modalità open-drain, consentendo ai dispositivi che trasmettono uno 0 binario (basso) di prevalere sui dispositivi che trasmettono un 1 binario. I dispositivi concorrenti controllano la linea SDA mentre operano in modalità aperta. Modalità drain. Ogni volta che un dispositivo rileva uno stato basso (0 bit) sulla SDA mentre trasmette uno stato alto (1 bit), ha perso l'arbitrato e deve interrompere la competizione fino all'inizio della transazione successiva.
Ogni transazione inizia con l'indirizzo di destinazione e l'implementazione dà priorità agli indirizzi di destinazione con numeri inferiori. La differenza è che I²C non ha limiti sulla durata dell'arbitrato (nella rara ma legale situazione di più dispositivi che cercano di inviare un messaggio allo stesso dispositivo, il conflitto viene rilevato solo dopo il byte dell'indirizzo). Tuttavia, l'I3C garantisce che l'arbitrato sia completato non oltre la fine del primo byte. Questo permette di utilizzare driver push-pull e velocità di clock più elevate per la maggior parte del tempo. Questo avviene in diversi modi: I3C supporta più master, ma non sono simmetrici. Uno è il master corrente ed è responsabile della generazione del clock.
Gli altri dispositivi che inviano un messaggio sul bus (interrupt in-band o master secondari che vogliono utilizzare il bus) devono decidere prima di inviare altri dati utilizzando il proprio indirizzo. Pertanto, non esistono due messaggi legali sul bus che condividano lo stesso primo byte, a meno che il master e un altro dispositivo non stiano comunicando nello stesso momento. L'I3C, come l'I²C, consente l'invio di più messaggi per transazione, separati da simboli "START ripetuti". L'arbitrato è per transazione, quindi i messaggi successivi non sono mai soggetti ad arbitrato. La maggior parte delle transazioni del master I3C inizia con l'indirizzo riservato 0x7E (1111110 2 ).
Poiché questo indirizzo ha una priorità più bassa rispetto a qualsiasi dispositivo I3C, una volta superato l'arbitrato, il master sa che nessun altro dispositivo sta lottando per il bus. Se ai dispositivi I3C vengono assegnati indirizzi bassi come caso speciale (I3C supporta l'assegnazione dinamica degli indirizzi controllata dal master), 0x7E il master sa che l'arbitrato, una volta che l'indirizzo ha vinto l'arbitrato per un numero di bit iniziali sufficiente a distinguerlo da un indirizzo assegnato, è completo e può passare al funzionamento push-pull su SDA. Se tutti gli indirizzi assegnati sono inferiori a 0x40, questo avviene dopo il primo bit. Se tutti gli indirizzi sono inferiori a 0x60, questo avviene dopo il secondo bit e così via.
Nel caso descritto sopra, in cui il master corrente inizia una transazione con l'indirizzo di un dispositivo che sta lottando per l'utilizzo del bus, entrambi trasmettono i loro byte di indirizzo con successo. Tuttavia, ognuno si aspetta che l'altro confermi l'indirizzo (abbassando SDA) per il successivo bit di conferma. Di conseguenza, nessuno dei due si accorgerà della mancanza di conferma. In questo caso, il messaggio non verrà inviato, ma il master vincerà l'arbitrato: eventualmente verrà inviato un inizio ripetuto, seguito da un tentativo, che avrà successo.