Der I2C-Bus wird im Embedded-Bereich sehr häufig verwendet. Wir erklären, wie er funktioniert und wie man ihn auf dem Raspberry Pi anhand eines Beispiels einrichtet.

I2C Eigenschaften

Der Inter-Integrated Circuit Bus ist ein synchroner serieller Kommunikationsbus. Die Erfindung geht auf Philips Semiconductors im Jahr 1982 zurück, aber die Schnittstelle wurde schnell populär.

I2C Eigenschaften

Häufig verwendete Synonyme sind I2C, I2C oder IIC. Die Schnittstelle verwendet eine Controller-Target-Architektur und ermöglicht es dem Controller, mit bis zu 112 Geräten über nur zwei Drähte zu kommunizieren.

Der Controller kann die Bitrate an die spezifischen Anforderungen des Targets anpassen. Daher ist I2C mit vielen Geräten wie Sensoren, EEPROM-Geräten, Uhren, Motortreibern und anderen kompatibel.

Verkabelung

Die Verkabelung des I2C-Busses könnte wirklich nicht einfacher sein, da Sie nur zwei Drähte benötigen. Verbinden Sie den Serial-Clock-Pin (SCL) des Controllers mit den Serial-Clock-Pins der Targets und verbinden Sie auch deren Serial-Data-Pins (SDA). Die I2C-Software erledigt den Rest.

I2C Verkabelung
Wenn Sie Ihr I2C-Gerät mit Strom versorgen müssen, können Sie die Pins 3V3, 5V und GROUND Ihres Raspberry Pi verwenden.

Einige Geräte, wie z.B. unser BME688 Breakout Board, haben sogar einen I2C-Anschluss, so dass Sie keine Kabel benötigen, um sie anzuschließen.

I2C Kommunikation

Der Inter-Intergrated Circuit Bus kann 128 Geräte mit nur zwei Drähten verbinden. Dies ist aufgrund des ausgeklügelten Kommunikationsprinzips möglich.

Die Drähte (SDA und SCL) werden nie aktiv auf High geschaltet. Wenn ein Gerät eine logische 1 senden will, lässt es die Leitung offen (floating). Um eine logische Null zu senden, zieht es die Leitung auf Masse.

Der Controller initiiert die Kommunikation. Jedes Gerät im Netzwerk kann als Controller und Target fungieren.

Die Grafik unten zeigt die einzelnen Bits.

I2C Kommunikation
Um die Kommunikation zu starten, sendet der Controller ein Start-Bit, gefolgt von der I2C-Adresse des Targets und dem gewünschten Modus (R - Read oder W - Write).

Bei der I2C-Kommunikation muss das Target alle 8 Bit (nach jedem Byte) ein ACK-Bit zurücksenden (Acknowledgement - Bestätigung). Da der Adressraum in der Regel 7 Bit groß ist, gibt es 128 (0 bis 127) Adressen. 16 davon sind reserviert. Damit bleiben 112 mögliche Adressen für die Geräte übrig.

Die Target-Adresse zusammen mit dem Modus ergibt ein Byte, so dass das Target ein ACK-Bit zurücksenden muss. Daraufhin sendet der Controller die (8-Bit-)Registeradresse, deren Erhalt das Target wiederum bestätigt. Von da an unterscheidet sich die Kommunikation zwischen Lesen und Schreiben.

Beim Schreiben sendet der Controller die Daten einfach in 8-Bit-Blöcken. Das Target bestätigt jeden Block. Sobald der Controller mit dem Schreiben fertig ist, sendet er das Stop-Bit.

Zum Lesen sendet der Controller wieder das Start-Bit, gefolgt von der Zieladresse. Das Ziel bestätigt und beginnt, die Daten in 8-Bit-Blöcken zu senden. Dieses Mal muss der Controller jedes Byte bestätigen. Um das Lesen zu beenden, sendet der Controller das NACK-Bit und schließlich das Stop-Bit.

Vorteile, Nachteile und Anwendungen

Vorteile


Die Vorteile des I2C-Busses liegen auf der Hand. Man kann 128 Geräte mit nur zwei Drähten und jeweils zwei Pins verbinden. Das ist wirklich leistungsstark. Außerdem hat man flexible Geschwindigkeiten. Die Hardware-Einrichtung könnte kaum einfacher sein. Im Gegensatz zu SPI weiß der Controller, ob das Zielgerät die Daten korrekt empfangen hat.
I2C Vorteile

Nachteile


Der Inter-Integrate Circuit Bus benötigt mehr Platz und Strom, da er Pull-up-Widerstände verwendet. Er ist im Vergleich zu SPI langsamer. Es kann zu Problemen kommen, wenn zwei Geräte die gleiche I2C-Adresse verwenden. Die Adresse wird direkt auf dem Gerät gespeichert. Bei einigen Geräten können Sie zwischen zwei möglichen Adressen wählen, indem Sie einen Jumper an eine bestimmte Stelle des Geräts löten.

Nachteile

I2C-Anwendungen

Wenn Sie in unserem Shop nach Sensoren suchen, werden Sie feststellen, dass fast alle Sensoren, die nicht analog sind, die I2C-Schnittstelle verwenden. Sie ist im Embedded-Bereich sehr verbreitet. Es gibt Dinge wie I2C-Speicher. Oftmals nutzen Mikrocontroller den Bus zur Kommunikation. Außerdem sind viele DACs (Digital Analog Converter) und ADCs (Analog Digital Converter) mit der Schnittstelle kompatibel.

I2C am Raspberry Pi

Unser Video zeigt, wie Sie den Inter-Integrated Circuit Bus auf Ihrem Raspberry Pi einrichten.

BusI2cIicInter-integrated circuitInterfaceKnowledgePiRaspberryRaspberry pi

Hinterlasse einen Kommentar

Alle Kommentare werden vor der Veröffentlichung moderiert