I²C (für Inter-Integrated Circuit, gesprochen I-Quadrat-C, I-square-C bzw. fälschlicherweise I-Two-C) ist ein von Philips Semiconductors entwickelter serieller Datenbus.
Er wird benutzt, um Geräte mit geringer Übertragungsgeschwindigkeit an ein eingebettetes System oder eine Hauptplatine anzuschließen. Das ursprüngliche System wurde in den frühen 1980er Jahren entwickelt, um verschiedene Chips von Philips in Fernsehgeräten einfach steuern zu können.
Einige Hersteller verwenden die Bezeichnung TWI (Two-Wire Interface), da I²C ein eingetragenes Markenzeichen von Philips Semiconductors ist. Technisch sind beide Systeme identisch.
Inhaltsverzeichnis |
1992 wurde die erste Spezifikation 1.0 veröffentlicht. Diese fügte dem ursprünglichen Standard mit 100 kbit/s einen neuen „schnellen“ Modus mit 400 kbit/s hinzu und erweiterte den Adressraum auf 10 Bit, so dass nun bis zu 1024 Knoten unterstützt werden. Version 2.0 aus dem Jahr 1998 fügte einen „Hochgeschwindigkeits-Modus“ mit max. 3,4 Mbit/s hinzu, wobei die Strom- und Spannungsanforderungen in diesem Modus gesenkt wurden. Die Version 2.1 von 2000 enthält nur kleinere Aktualisierungen gegenüber 2.0. Aktuell gültig ist die Version 03 von 2007, die einen „extra schnellen“ Modus (Fast-mode Plus) mit bis zu 1 Mbit/s einführt, der im Gegensatz zum „Hochgeschwindigkeits-Modus“ das selbe Protokoll verwendet wie die 100 kbit/s und 400 kbit/s Modi.
I²C ist als Master-Slave-Bus konzipiert. Der Master sendet und ein Slave reagiert darauf. Mehrere Master sind möglich (Multimaster-Mode). Die Buszuteilung (Arbitrierung) ist dabei per Spezifikation geregelt.
Zwei Geräte sind im Diagramm rechts eingezeichnet. I²C benötigt zwei Steuerleitungen: Takt (engl. serial clock line, SCL) und die Datenleitung (engl. serial data line, SDA). Die Leitungen für Versorgungsspannung U0 und Masse liegen im Diagramm oben und unten. Geräte werden mittels der Wired-AND-Verschaltung an SDA und SCL am Bus angeschlossen. Die Pull-Up-Widerstände RP an der Takt- und Datenleitung passen den High Pegel an die Höhe der Versorgungsspannung an. Er soll mindestens 0,7U0 betragen. Der Low Pegel soll im Bereich -0.5 V bis 0,3U0 liegen. Die Serienwiderstände RS an den Eingängen der Geräte sind optional und werden als Schutzwiderstände verwendet.
Der Bustakt wird immer vom Master ausgegeben. Für die verschiedenen Modes ist jeweils ein maximal erlaubter Bustakt vorgegeben. Es können aber auch beliebig langsamere Taktraten verwendet werden, falls diese vom Master-Interface unterstützt werden. Die folgende Tabelle listet die maximal erlaubten Taktraten auf.
Modus | maximale Taktrate |
---|---|
Standard Mode | 100 kHz |
Fast Mode | 400 kHz |
Fast Mode Plus | 1 MHz |
High Speed Mode | 3,4 MHz |
Wenn der Slave mehr Zeit benötigt als durch den Takt des Masters vorgegeben, kann er zwischen der Übertragung einzelner Bytes den Clock auf low halten (clock stretching) und so den Master bremsen.
Daten (Einzelbits) sind nur gültig, wenn sich ihr logischer Pegel während einer Clock-High-Phase nicht ändert. Ausnahmen davon sind das Start, Stop und Repeated Start Signal. Das Start Signal ist eine fallende Flanke auf SDA während SCL high ist. Und das Stop Signal ist eine steigende Flanke auf SDA während SCL high ist. Repeated Start sieht genauso aus wie das Start Signal.
Eine Dateneinheit besteht aus 8 Daten/Adress Bits (1 Byte) und einem ACK Bit. Dieses Bestätigungsbit wird als ACK definiert durch einen Low Pegel während der neunten Takt-High-Phase und als NACK (für engl. Not Acknowledge) durch einen High-Pegel.
Eine Standard I²C Adresse ist das erste vom Master gesendete Byte, wobei die ersten 7 Bit die eigentliche Adresse darstellen und das 8 Bit (R/W Bit) die Lese- oder Schreibrichtung festlegt. I²C nutzt daher einen Adressraum von 7 Bit, was bis zu 112 Knoten auf einem Bus erlaubt (16 der 128 möglichen Adressen sind für Sonderzwecke reserviert). Das System erlaubt allerdings auch die Verwendung von 10 Bit durch Nutzung von 4 der 16 reservierten Adressen. Beide Adressierungsarten sind gleichzeitig verwendbar, was bis zu 1136 Knoten auf einem Bus erlaubt.
Der Beginn einer Übertragung wird mit dem Start Signal vom Master angezeigt, dann folgt die Adresse. Diese wird durch das ACK Bit vom entsprechenden Slave bestätigt. Abhängig vom R/W Bit werden nun Daten Byte-weise geschrieben (Daten an Slave) oder gelesen (Daten vom Slave). Das ACK beim Schreiben wird vom Slave gesendet und beim Lesen vom Master. Das letzte Byte eines Lesezugriffs wird vom Master mit einem NACK quittiert, um das Ende der Übertragung anzuzeigen. Eine Übertragung wird durch das Stop Signal beendet. Oder es wird ein Repeated Start am Beginn einer erneuten Übertragung gesendet ohne die vorhergehende Übertragung mit einem Stop Signal zu beenden.
Für den High Speed Mode wird zuerst im Fast oder Standard Mode ein Master Code geschickt bevor auf die erhöhte Frequenz umgeschaltet wird.
Der I²C ist von der Definition her recht einfach, aber dafür auch sehr störanfällig. Diese Tatsache schränkt die Verwendung des Busses auf störungsarme Anwendungsbereiche ein, wo weder mit Übersprechen, Rauschen, EMV-Problemen, noch mit Kontaktproblemen (Stecker, Buchsen) zu rechnen ist.
Eine besondere Stärke von I²C ist die Tatsache, dass ein Mikrocontroller ein ganzes Netzwerk von Chips mit nur zwei I/O-Pins und einfacher Software kontrollieren kann.
Busse dieses Typs kamen auf, als die Ingenieure bemerkten, dass ein Großteil der Kosten eines integrierten Schaltkreises und der verwendeten Leiterplatte von der Größe des Gehäuses und der Anzahl der Pins abhingen. Ein großes Gehäuse hat mehr Pins, daher auch mehr Herstellungsschritte, braucht mehr Platz auf der Leiterplatte, wiegt mehr und hat mehr Verbindungen, die versagen können. All das steigert die Entwicklungs-, Produktions- und Testkosten und später auch die Betriebskosten, oder verringert den Komfort – Gewicht ist ein sehr wichtiger Faktor für mobile Geräte.
Obwohl viel langsamer als die meisten Bus-Systeme, ist I²C durch seine niedrigen Kosten geradezu ideal für Peripherie-Geräte, die zwar unbedingt notwendig sind, aber nicht schnell sein müssen. Er wird häufig für Lautstärkeregler, Analog-Digital- oder Digital-Analog-Wandler, Echtzeituhren, kleine nichtflüchtige Speicher oder bidirektionale Schalter und Multiplexer eingesetzt. Auch während des Betriebes können Chips zum Bus hinzugefügt oder entfernt werden (Hot-Plugging).
Eine häufige Anwendung sind elektronische Sensoren, deren Analog-Digital-Wandler bereits eine I²C-Schnittstelle integriert haben.
I²C wurde auch als Basis für ACCESS.bus und VESAs Monitordaten-Interface (Display Data Channel, kurz DDC) benutzt. Der vom Prozessorhersteller Intel für die Kommunikation von Mainboard-Komponenten definierte SMBus ist dem I²C-Bus sehr ähnlich, die meisten ICs erlauben einen Betrieb an beiden Bussen.
Große Bedeutung hatte das I²C-Protokoll in der Vergangenheit im Chipkartenbereich. Die in Deutschland verwendete Krankenversichertenkarte ist eine I²C-Karte, d.h. unter den goldenen Kontaktflächen der Chipkarte befindet sich ein einfacher I²C-EEPROM, der vom Kartenleser über das I²C-Protokoll ausgelesen und beschrieben werden kann.