
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) ist spezifiziert für 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.
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.
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.
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.
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