TotalPhase-Blog-Erlebniswelten

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.

slave-address-with-totalphase-figure1

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 Analyzer, werden 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 AddressLese-/Schreib-BitBit Beschreibung
000 00000Allgemeine Abfrageadresse
000 00001START byte (*1)
000 0001XCBUS Addresse (*2) 
000 0010XReserviert für unterschiedliches Busformat(*3)
000 0011XReserviert für zukünftige Zwecke
000 01XXXHs-Modus Master code
111 10XXX10-bit slave Adressierung
111 11XXXReserviert 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.

Totalphase-slave-address-fig2

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. 

totalphase-slave-address-fig3

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.

Totalphase-slave-address-10-bit

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

I2C Development Tools

Aardvark I2C/SPI Host AdapterAardvark I2C/SPI Host Adapter
Aardvark I2C/SPI Host Adapter
TP240141
Der Aardvark I2C/SPI Host Adapter ist ein innovatives Werkzeug für die Verwendung mit I2C & SPI Bussystemen.

309,00 €*
Beagle I2C/SPI Protokoll Analyzer - Total Phase
Beagle I2C/SPI Protokoll Analyzer
TP320121
Der Beagle I2C/SPI Protokoll Analyzer ist ein schneller und leistungsstarker I2C- und SPI-Bus-Host-Adapter über USB

369,00 €*
Promira universelle I2C/ SPI/ eSPI Plattform
TP500110-S
Die Promira universelle I2C/SPI/eSPI Plattform kann für eine Vielzahl von Applikationen eingesetzt werden

Varianten ab 900,00 €*
1.060,00 €*