Der I2C-Kommunikationsbus verwendet eine 7-Bit- oder 10-Bit-Adressierung, um Slave-Geräte zu adressieren. Unter Verwendung der allgemeineren 7-Bit-Adressen beginnt jedes vom Master auf dem Bus gesendete Paket mit einer 7-Bit-Adresse, gefolgt von einer 1-Bit-Lese- oder Schreibanzeige ().
Die meisten Datenblätter geben die I2C-Adresse für ihr Gerät entweder in binärer Notation oder als Bits in Zeitdiagrammen (mit Hinweisen für konfigurierbare Adressbits) an. Beide sind eindeutig, da sie entweder sieben oder acht Bits anzeigen, sodass Sie feststellen können, ob die Bit ist enthalten. Dies scheint der offiziellen NXP I2C-Spezifikation zu folgen .
Das Problem tritt auf, wenn versucht wird, die Adresse in hexadezimaler Form aufzuschreiben. Verschiedene Quellen konvertieren die Adresse auf unterschiedliche Weise:
- Konvertieren Sie die 7-Bit-Adresse in einen Hexadezimalwert im Bereich
0x00
von0x7F
0b101 0011
wird0x53
- Beispiele Tutorial Robot Electronics I2C , Linux i2cdetect-Tool , STM32-CPAL-Bibliothek , Arduino Wire-Bibliothek
- Umfassen die Bit wie das LSB und geben zwei Adressen an, eine zum Lesen und eine zum Schreiben im Bereich
0x00
bis0xFF
0b101 0011
wird0xA6
zum Schreiben und0xA7
zum Lesen- Manchmal wird nur die Schreibadresse (zB
0xA6
) angegeben - Beispiele: 8051-Projekt-Tutorial , STM32-HAL-Bibliothek ( Beispiel für Verwirrung ), Microchip-PIC-Codebeispiele (CE119) , Saleae Logic-Protokollanalysator
Diese beiden Optionen sind nicht immer unterscheidbar.
Die Verwendung der binären Notation ist eindeutig besser, da Sie eine eindeutige Adresse erhalten. Dies ist jedoch nicht immer möglich. Ein bemerkenswerter Fall ist C / C ++, wo es keine besonders standardmäßige Methode zum Schreiben von Binärzahlen gibt . Dies führt zu dem Problem, bei dem die Angabe von Konstanten für Geräte in der Schaltung nicht eindeutig ist.
Bei der Auswahl eines Standards für unsere Schaltpläne, Dokumentation und Code (C ++) müssen wir uns also für die eine oder andere Art entscheiden. Das führt zu meiner Frage:
Gibt es eine dominante Möglichkeit, eine I2C-Adresse in hexadezimaler Schreibweise anzuzeigen, oder werden beide häufig verwendet?