I2C Slave Adressierung mit 7-Bit-, 8-Bit- und 1...

I2C Slave Adressierung mit 7-Bit-, 8-Bit- und 10-Bit

 

Oft herrscht eine große Ungewissheit welche Slave-Adressen verwendet werden sollen um mit einem I2C-Slave-Gerät zu kommunizieren. Leider beruht ein Großteil dieser Verwirrung auf der Tatsache, dass verschiedene Anbieter unterschiedlichen Slave-Adressenkonventionen folgen. 

Ziel dieses Artikels ist es, den von allen Total Phase-Produkten verwendeten Slave-Adressstandard zu verdeutlichen und Entwicklern zu helfen, die Slave-Adresse zu ermitteln, die sie verwenden sollten.

Die I2C-Spezifikation von NXP (früher Philips) spezifiziert zwei verschiedene Slave-Adressierungsschemen. Der Standardmodus des I2C-Bus verwendet 7-Bit-Adressierung. Die 10-Bit-Adressierung wurde später als Erweiterung des Standardmodus hinzugefügt.

 

 

7-bit Adressierung

Bei der 7-Bit-Adressierung wird die Slave-Adresse im ersten Byte nach der Startbedingung übertragen. Die ersten sieben Bits des Bytes umfassen die Slave-Adresse. Das achte Bit ist das Lese / Schreib-Flag, wobei 0 ein Schreiben und 1 ein Lesen angibt.

7-Bit-Adressierung: Die I2C-Busspezifikation spezifiziert, dass in dem Standardmodus-I2C die Slave-Adresse 7 Bit lang ist, gefolgt von dem Lese-/Schreib-Bit.

7-Bit-Adressierung: Die I2C-Busspezifikation spezifiziert, dass in dem Standardmodus-I2C
die Slave-Adresse 7 Bit lang ist, gefolgt von dem Lese-/Schreib-Bit.

Alle I2C-Produkte von Total Phase folgen dieser Standardkonvention. Die verwendete Slave-Adresse sollte nur die oberen sieben Bits lang sein. Die Software des Aardvark I2C/SPI Host Adapters hängt automatisch das korrekte Lese- / Schreibbit abhängig von der auszuführenden Transaktion an. Beim Beagle I2C/SPI Protocol Analyzerwerden die Slave-Adresse und die Art der Transaktion in zwei verschiedenen Spalten angezeigt.

 

Reservierte Adressen

Die I2C-Spezifikation hat zwei Sätze von 8-Bit Adressen, 1111XXX und 0000XXX, reserviert. Diese Adressen werden für spezielle Zwecke verwendet. Die folgende Tabelle wurde den I2C Specifications (2000) entnommen.

Slave Address Lese-/Schreib-Bit Bit Beschreibung
000 0000 0 Allgemeine Abfrageadresse
000 0000 1 START byte (*1)
000 0001 X CBUS Addresse (*2) 
000 0010 X Reserviert für unterschiedliches Busformat(*3)
000 0011 X Reserviert für zukünftige Zwecke
000 01XX X Hs-Modus Master code
111 10XX X 10-bit slave Adressierung
111 11XX X Reserviert für zukünftige Zwecke

(*1) Kein Gerät darf beim Empfang des START-Bytes quittieren.

(*2) Die CBUS-Adresse wurde reserviert, um das Mischen von CBUS-kompatiblen und I2C-Bus-kompatiblen Geräten im selben System zu ermöglichen. I2C-Bus-kompatible Geräte dürfen beim Empfang dieser Adresse nicht antworten.

(*3) Die für ein anderes Busformat reservierte Adresse ist enthalten, um I2C und andere Protokolle zu mischen. Nur I2C-Bus-kompatible Geräte, die mit solchen Formaten und Protokollen arbeiten können, dürfen auf diese Adresse antworten.

 

8-bit Addressen

Einige Anbieter stellen 8-Bit-Adressen falsch bereit, welche die das Lese- / Schreib-Bit enthalten. Ob dies der Fall ist erkennen Sie, wenn eine Adresse zum Schreiben an das Slave-Gerät und eine weitere zum Lesen vom Slave bereitgestellt wird. In diesem Fall verwenden Sie bitte nur die oberen sieben Bits der Adresse.

Einige Anbieter bieten zwei falsche 8-Bit-Slave-Adressen für ihr Gerät an, eines zum Schreiben auf dem Gerät und eines zum Lesen vom Gerät. Diese 8-Bit-Zahl codiert jedoch die 7-Bit-Slave-Adresse und das Lese / Schreib-Bit. Da Total Phase-Produkte 7-Bit-Adressierung verwenden, ist es wichtig, nur die oberen 7 Bits der Adresse als Slave-Adresse zu verwenden.

 

Einige Anbieter bieten zwei falsche 8-Bit-Slave-Adressen für ihr Gerät an, eines zum Schreiben auf dem Gerät und eines zum Lesen vom Gerät. Diese 8-Bit-Zahl codiert jedoch die 7-Bit-Slave-Adresse und das Lese / Schreib-Bit. Da Total Phase-Produkte 7-Bit-Adressierung verwenden, ist es wichtig, nur die oberen 7 Bits der Adresse als Slave-Adresse zu verwenden.

Eine andere Möglichkeit, festzustellen, ob ein Hersteller 8-Bit-Adressen anstelle von 7-Bit-Adressen verwendet, besteht darin, festzustellen, ob die Slave-Adresse in den richtigen Bereich fällt. Alle 7-Bit-Adressen sollten größer als 0x07 und kleiner als 0x78 (120) sein. Wenn Ihre Slave-Adresse außerhalb dieses Bereichs liegt, hat der Anbieter wahrscheinlich eine 8-Bit-Adresse angegeben. 

Gültiger 7-Bit-Slave-Adressbereich. Der Bereich gültiger 7-Bit-Slave-Adressen ist durch zwei Blöcke von reservierten Adressen an jedem Ende des Bereichs gebunden. Gültige Slave-Adressen sind größer als 0x07 und kleiner als 0x78.

 

Gültiger 7-Bit-Slave-Adressbereich. Der Bereich gültiger 7-Bit-Slave-Adressen ist durch zwei Blöcke von reservierten Adressen an jedem Ende des Bereichs gebunden. Gültige Slave-Adressen sind größer als 0x07 und kleiner als 0x78.

 

10-bit Addressierung

Einer der Gründe, warum Total Phase entschieden hat, die 7-Bit-Adressierung für alle seine Produkte zu verwenden, war, sicherzustellen, dass die 10-Bit-Adressierung richtig gehandhabt werden kann. Die 10-Bit-Adressierung wurde entwickelt, um mit der 7-Bit-Adressierung kompatibel zu sein, sodass Entwickler zwei Arten von Geräten auf einem einzigen Bus kombinieren können. Bei der Kommunikation mit einem adressierten 10-Bit-Gerät wird die speziell reservierte Adresse verwendet, um anzuzeigen, ob die 10-Bit-Adressierung verwendet wird.

 

10-Bit-Adressierung. Bei der 10-Bit-Adressierung wird die Slave-Adresse in den ersten beiden Bytes gesendet. Das erste Byte beginnt mit der speziellen reservierten Adresse 1111 0XX, die angibt, dass die 10-Bit-Adressierung verwendet wird. Die 10 Bits der Adresse sind in den letzten 2 Bits des ersten Bytes und den gesamten 8 Bits des zweiten Bytes codiert. Das 8. Bit des ersten Bytes enthält wie bei der 7-Bit-Adressierung das Lese/Schreib-Flag.

10-Bit-Adressierung. Bei der 10-Bit-Adressierung wird die Slave-Adresse in den ersten beiden Bytes gesendet. Das erste Byte beginnt mit der speziellen reservierten Adresse 1111 0XX, die angibt, dass die 10-Bit-Adressierung verwendet wird. Die 10 Bits der Adresse sind in den letzten 2 Bits des ersten Bytes und den gesamten 8 Bits des zweiten Bytes codiert. Das 8. Bit des ersten Bytes enthält wie bei der 7-Bit-Adressierung das Lese/Schreib-Flag.

 

Wenn bei Verwendung des Aardvark I2C / SPI Host-Adapters eine 10-Bit-Adresse angegeben wird, sorgt die Software dafür, dass die korrekten Bits gesendet werden. Der Entwickler muss keine speziellen Schritte ausführen, um die korrekten Adressdaten zu senden. Der Beagle I2C / SPI-Protokollanalysator erkennt automatisch 10-Bit-Slave-Adressen in den erfassten Daten und zeigt die Informationen korrekt an