Inter-Integrated Circuit Bus (I2C)
Autor: Prof. Dr.-Ing. Schneider
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. Eine Spannung < 0; 3 � VDD entspricht dem Low-Pegel, > 0; 7 � VDD dem High-Pegel.
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.
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.
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 [NXP14].
Für den I2C-Bus ist ein umfassendes Sortiment an Komponenten verfügbar. Viele Mikrocontroller
besitzen ein I2C-Interface und Hardwareunterstützung zur Busansteuerung. AFE und
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
- Rost, M; Wefel, S.: Sensorik für Informatiker. Berlin: de Gruyter, 1. Auflage 2016