I²C
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.
Geschichte
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 aktuell gültige Version 2.1 von 2000 enthält nur kleinere Aktualisierungen gegenüber 2.0.
Definition

I²C nutzt einen Adressraum von 7 Bit, was bis zu 120 Knoten auf einem Bus erlaubt (8 der 128 möglichen Adressen sind für Sonderzwecke reserviert), bzw. 10 Bit (max. 1017 Knoten). Zwei Geräte sind im Diagramm rechts eingezeichnet. I²C benötigt zwei Steuerleitungen: Takt (engl. serial clock line, SCL) und die bidirektionale Datenleitung (engl. serial data line, SDA). Die Leitungen für Versorgungsspannung U0 und Masse liegen im Diagramm oben und unten. Die Pull-Up-Widerstände RP an der Takt- und Datenleitung passen die Pegel an die Höhe der Versorgungsspannung an. Die Schutzwiderstände RS an den Eingängen der Geräte sind optional.
Der Bus arbeitet meist mit 100 kbit/s im Standard-Modus (oder 400kbit/s im schnellen Modus), lässt sich jedoch auch in einen langsamen Modus schalten, bei dem dann 10 kbit/s übertragen werden können. Auch beliebige andere Taktraten sind möglich, falls diese vom Master-Interface unterstützt werden.
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. Prinzipiell können verschieden schnelle Geräte parallel an einem Bus betrieben werden. Ist ein Slave-Gerät langsamer als der immer durch den Master vorgegebene Bustakt SCL, kann es durch clock stretching den Master während des Bit-Transfers definiert bremsen. Dabei wird die SCL-Leitung vom Slave solange auf logisch Null gehalten, bis der Master senden kann. Das ist wegen der Wired-AND-Verschaltung von SDA und SCL von jedem Gerät am Bus möglich. Voraussetzung ist dabei jedoch, dass die Start- und Stopp-Bedingungen (d. h. eine Pegeländerung an SDA, während SCL logisch 1 führt) vom langsamen Gerät auch dekodiert werden können.
Slaves können vom Master Byte-weise adressiert, geschrieben (Daten an Slave) oder gelesen (Daten vom Slave) werden, im Page-Modus sind Blöcke aus mehreren Bytes übertragbar. Daten (Einzelbits) sind nur gültig, wenn sich ihr logischer Pegel während einer Clock-Phase nicht ändert.
Das Übertragungsprotokoll nutzt ein Bestätigungsbit (ACK) für Datenpakete (die bei Beginn des Transfers auf den Bus gelegte Adresse bzw. die jeweiligen Datenbytes), eine Prüfsumme wird aber nicht verwendet. 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.
Verwendung
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.
Siehe auch
- SMBus: Technisch sehr ähnlicher Bus, die Bauteile sind oftmals auch kompatibel zum I²C-Bus.
- Serial Peripheral Interface: Ein weiterer serieller Bus, der aber CS-Leitungen für den Zugriff auf individuelle ICs benutzt, Totem-Pole-Ausgänge und getrennte Sende- und Empfangsleitungen aufweist.
- 1-Wire: Eine serielle Schnittstelle, die mit einer Datenader auskommt, die sowohl als Stromversorgung als auch als Sende- und Empfangsleitung genutzt wird.
Weblinks
- The I²C-Bus Specification, Version 2.1, January 2000, Original-Spezifikation von NXP Semiconductors (PDF, engl.)
- http://www.i2c-bus.org/, „Detailed information on Philips' I²C bus“ (engl.)
- I²C Bus and Access Bus, Darstellung der Gemeinsamkeiten und Unterschiede (engl.)
- Die Nutzung des I²C-Interfaces am Beispiel des PIC16F876
- Einführung in I²C auf Deutsch (hauptsächlich AVR-Beispiele)