Indirizzamento slave I2C a 7 bit, 8 bit e 10 bit
Spesso c'è molta incertezza sugli indirizzi slave da utilizzare per comunicare con un dispositivo slave I2C. Purtroppo, gran parte di questa confusione è dovuta al fatto che i diversi fornitori seguono convenzioni di indirizzamento slave differenti.
Lo scopo di questo articolo è quello di chiarire lo standard di indirizzo slave utilizzato da tutti i prodotti Total Phase e di aiutare gli sviluppatori a determinare quale indirizzo slave utilizzare.
La specifica I2C di NXP (ex Philips) è specificata per vari schemi di indirizzamento slave. La modalità predefinita del bus I2C utilizza un indirizzamento a 7 bit. L'indirizzamento a 10 bit è stato aggiunto successivamente come estensione della modalità standard.
indirizzamento a 7 bit
Con l'indirizzamento a 7 bit, l'indirizzo dello slave viene trasmesso nel primo byte dopo la condizione di avvio. I primi sette bit del byte includono l'indirizzo dello slave. L'ottavo bit è il flag di lettura/scrittura, dove 0 indica una scrittura e 1 una lettura.
Indirizzi riservati
La specifica I2C ha riservato due serie di indirizzi a 8 bit, 1111XXX e 0000XXX. Questi indirizzi sono utilizzati per scopi speciali. La seguente tabella è tratta dalle specifiche I2C (2000).
Indirizzo dello slave | Bit di lettura/scrittura | Bit Descrizione |
---|---|---|
000 0000 | 0 | Indirizzo generale di interrogazione |
000 0000 | 1 | Byte di avvio (*1) |
000 0001 | X | Indirizzo CBUS (*2) |
000 0010 | X | Riservato per un diverso formato di bus(*3) |
000 0011 | X | Riservato per uso futuro |
000 01XX | X | Modalità Hs Codice master |
111 10XX | X | indirizzamento slave a 10 bit |
111 11XX | X | Riservato per uso futuro |
(*1) Nessun dispositivo può confermare quando riceve il byte START.
(*2) L'indirizzo CBUS è stato riservato per consentire la combinazione di dispositivi compatibili con il CBUS e con il bus I2C nello stesso sistema. I dispositivi compatibili con il bus I2C non possono rispondere alla ricezione di questo indirizzo.
(*3) L'indirizzo riservato a un altro formato di bus è stato incluso per mescolare I2C e altri protocolli. Solo i dispositivi compatibili con il bus I2C che possono lavorare con tali formati e protocolli possono rispondere a questo indirizzo.
indirizzi a 8 bit
Alcuni fornitori forniscono erroneamente indirizzi a 8 bit, che contengono il bit di lettura/scrittura. Puoi capire se questo è il caso se viene fornito un indirizzo per scrivere sull'unità slave e un altro per leggere dallo slave. In questo caso, utilizza solo i sette bit superiori dell'indirizzo.
Alcuni fornitori offrono due indirizzi slave a 8 bit errati per la loro unità, uno per scrivere sull'unità e uno per leggere dall'unità. Tuttavia, questo numero a 8 bit codifica l'indirizzo slave a 7 bit e il bit di lettura/scrittura. Poiché i prodotti Total Phase utilizzano un indirizzamento a 7 bit, è importante utilizzare solo i 7 bit superiori dell'indirizzo come indirizzo slave.
Un altro modo per determinare se un produttore utilizza indirizzi a 8 bit anziché a 7 bit è verificare se l'indirizzo slave rientra nell'intervallo corretto. Tutti gli indirizzi a 7 bit devono essere maggiori di 0x07 e minori di 0x78 (120). Se l'indirizzo dello slave non rientra in questo intervallo, probabilmente il produttore ha specificato un indirizzo a 8 bit.
Gamma di indirizzi slave a 7 bit validi. L'intervallo di indirizzi slave a 7 bit validi è delimitato da due blocchi di indirizzi riservati a ciascuna estremità dell'intervallo. Gli indirizzi slave validi sono maggiori di 0x07 e minori di 0x78.
indirizzamento a 10 bit
Uno dei motivi per cui Total Phase ha deciso di utilizzare l'indirizzamento a 7 bit per tutti i suoi prodotti è stato quello di garantire che l'indirizzamento a 10 bit potesse essere gestito correttamente. L'indirizzamento a 10 bit è stato progettato per essere compatibile con quello a 7 bit, consentendo agli sviluppatori di combinare due tipi di dispositivi su un unico bus. Quando si comunica con un dispositivo indirizzato a 10 bit, viene utilizzato l'indirizzo appositamente riservato per indicare che si sta utilizzando l'indirizzamento a 10 bit.
indirizzamento a 10 bit. Con l'indirizzamento a 10 bit, l'indirizzo dello slave viene inviato nei primi due byte. Il primo byte inizia con l'indirizzo speciale riservato 1111 0XX, che indica che viene utilizzato l'indirizzamento a 10 bit. I 10 bit dell'indirizzo sono codificati negli ultimi 2 bit del primo byte e negli 8 bit del secondo byte. L'ottavo bit del primo byte contiene il flag di lettura/scrittura come nel caso dell'indirizzamento a 7 bit.
Se viene specificato un indirizzo a 10 bit quando si utilizza l'adattatore host Aardvark I2C / SPI, il software garantisce l'invio dei bit corretti. Lo sviluppatore non deve adottare alcuna misura particolare per inviare i dati dell'indirizzo corretto. L'analizzatore di protocollo Beagle I2C / SPI rileva automaticamente gli indirizzi slave a 10 bit nei dati acquisiti e visualizza le informazioni in modo corretto