Inter-Integrated Circuit Bus (I2C)

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autor: Prof. Dr.-Ing. Schneider

Abb. 1: Bussystem I2C

Einleitung

Zu den seriellen Bussen zählt der Inter-Integrated Circuit Bus, kurz I2C-Bus (gesprochen „IQuadrat-C“). Ursprünglich wurde der Bus in den 80er Jahren von Philips Semiconductors für die Verbindung von Komponenten der Unterhaltungselektronik entwickelt. Heute kommt er in vielen Computerkomponenten zum Einsatz, vom PC bis zu eingebetteten Systemen. Für die kollisionsfreie Kommunikation mit anderen I2C Komponenten werden eindeutige Adressen benötigt, welche von NXP-Semiconductor2 bezogen werden können. Die Kommunikation auf dem bidirektionalen Bus erfolgt über eine Takt- (SCL: serial clock) und eine Datenleitung (SDA: serial data), deren Pegel sich auf eine gemeinsame Masse beziehen. Die Busteilnehmer besitzen Open-Drain- bzw. Open-Kollektor-Ausgänge, die auf dem Bus mit Pull-Up-Widerständen gegen die Betriebsspannung VDD geschaltet werden (vgl. Abb. 1).

Pegel

Low-Pegel
High-Pegel

Geschwindigkeit

Auf dem Bus ist die bidirektionale Kommunikation mit Busgeschwindigkeiten von

  • 100 kbit/s im Standard-Mode,
  • über 400 kbit/s im Fast-Mode,
  • bis zu 1 Mbit/s im Fast-Mode Plus (FM+)
  • und 3,4 Mbit/s im High-Speed Mode

möglich. Darüber hinaus existiert ein unidirektionaler Ultra Fast-Mode mit einer Datenrate von bis zu 5 Mbit/s.

Multi-Master-Architektur

Der Bus ist Multi-Master fähig. Üblicherweise handelt es sich bei einem Master um einen Mikrocontroller, welcher mit der angeschlossenen Peripherie über den Bus kommuniziert. Wenn mehrere Controller den gleichen Bus bedienen oder über den Bus miteinander kommunizieren, arbeitet ein Controller als Master und der andere als Slave. Vom jeweils aktuellen Master wird das Taktsignal generiert. Eine Bus-Arbitration Prozedur sorgt bei gleichzeitigem Aktivieren von zwei Master-Geräten für das Erkennen und Behandeln der Kollision. Damit eignet sich der Bus auch für die Zusammenschaltung mehrerer aktiver Baugruppen, wie z. B. den Aufbau eines Controllernetzwerkes mit mehreren Controllern. Die Datenübertragung, Handshake und Bus Arbitration werden von NXP auf den Ebenen 1 und 2 des OSI-Modells spezifiziert

Kommunikation

Die Kommunikation basiert auf einem einfachen Schema. Abgesehen von Steuersignalen werden die Informationen in Form von 8-Bit-Blöcken (Oktetts) übertragen. Ein Oktett beinhaltet Adressen oder Daten. Dazu erhält jedes Gerät vom Hersteller eine eindeutige Adresse der Länge 7 Bit bzw. bei neueren Geräten 10 Bit. Meist umfasst die Adresse nur das Präfix, die letzten drei Bits können vom Anwender durch Steuerleitungen am I2C-Controller konfiguriert werden, was die Nutzung von mehreren gleichartigen Geräten am Bus erlaubt. Gibt es nur einen Controller als Master, werden heute auch Chip Select (CS) bzw. Chip Enable (CE) Leitungen genutzt, über die der Controller gezielt einen I2C-Slave aktiviert.

Zu Beginn der Übertragung erzeugt der Master ein Startsignal mit SCL=1 und fallender Flanke auf SDA. Anschließend legt er die Adresse auf den Bus. Zu jedem Bit wird vom Master ein Taktimpuls erzeugt. Das Bit auf SDA ist gültig, wenn SCL=1 ist. In dieser Phase darf sich SDA nicht ändern, abgesehen von den Steuersignalen. Nach der 7-Bit-Adresse wird im ersten Block das R/W-Bit übertragen, welches die anschließende Kommunikationsrichtung, Lesen oder Schreiben zum Slave festlegt. Nach jedem Oktett wird als 9. Bit ein Bestätigungssignal vom jeweiligen Empfänger gesendet. Wenn der Master etwas an einen Slave sendet, werden die ersten 8 Bit vom Master auf SDA gelegt, das 9. Bit vom Slave. Der Empfang war erfolgreich, wenn SDA=0 ist. Dies wird als ACK für acknowledge bezeichnet, SDA=1 als NACK für not acknowledged. Bei NACK wird die Übertragung vom Master beendet.

Abb. 2: Bussystem I2C

Nach der Adresse folgt üblicherweise die Nummer des internen Registers, welches gelesen oder beschrieben werden soll, gefolgt von den Daten in einem oder mehreren Blöcken. Den Abschluss bildet das vom Master generierte Stop-Signal (SCL=1 mit steigender Flanke auf SDA). Es gibt einige Ausnahmen und Verfahren zur Beschleunigung für fortlaufendes Senden sowie zur Taktverlängerung, welche hier nicht erläutert werden.

Für den I2C-Bus ist ein umfassendes Sortiment an Komponenten verfügbar. Viele Mikrocontroller besitzen ein I2C-Interface und Hardwareunterstützung zur Busansteuerung. Integrierte Sensoren besitzen häufig ein I2C-Interface. Zusätzlich gibt es Bus- und Protokollumsetzer, die eine Kommunikation zwischen I2C-Komponenten und Komponenten an anderen Bussen, z. B. dem SPI-Bus ermöglichen.

Der I2C-Bus wird nicht für die Datenübertragung über größere Entfernungen genutzt. Übliche Verbindungen liegen im Bereich von unter einem Meter. Ein Grund dafür ist die Störanfälligkeit des Busses bei längeren Leitungen, weshalb man ihn meist nur innerhalb eines geschirmten Gerätes verwendet.

Literatur

  1. Rost, M; Wefel, S.: Sensorik für Informatiker. Berlin: de Gruyter, 1. Auflage 2016

Video

EdisTechlab: I2C in 8 Minuten verstehen!