I²C
I2C (für Inter-Integrated Circuit, gesprochen I-Quadrat-C bzw. I-squared-C) ist ein von Philips Semiconductors entwickelter serieller Bus für Computersysteme. Er wird benutzt, um Geräte mit geringer Übertragungsgeschwindigkeit an ein Embedded System oder eine Hauptplatine anzuschließen.
Das ursprüngliche System wurde in den frühen 1980er Jahren als Kontrollinterface entwickelt, um mit verschiedenen Chips von Philips Steuerungselektroniken bauen zu können.
I2C benutzt lediglich zwei bidirektionale Leitungen (Takt=SCL und Daten=SDA) sowie die Gerätemasseleitung. Takt- und Datenleitung sind meist mit Pull-Up-Widerständen an die positive Versorgungsspannung angeschlossen (Wired-AND). Der Bus arbeitet meist mit 100 kbit/s im Standard-Modus, lässt sich jedoch auch in einen langsamen Modus schalten, bei dem dann 10 kbit/s übertragen werden können. Modernere Implementierungen und entsprechende Chips lassen Datenraten von 400 kbit/s bis über 3,4 Mbit/s zu.
Der Bus 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 Slave senden kann. Dies ist wegen der Wired-AND-Verschaltung von SDA und SCL 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 ist) vom langsamen Gerät auch dekodiert werden können.
Slaves besitzen Adressen. Der Adressraum beträgt 7 bzw. erweitert 10 Bit. Slaves können vom Master Byte-weise adressiert, geschrieben (Daten an Slave) oder gelesen (Daten vom Slave) werden. Im Page-Modus können Blöcke aus mehreren Bytes übertragen werden. 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. 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 noch mit Kontaktproblemen (Stecker, Buchsen) zu rechnen ist.
Busse dieses Typs kamen in Mode, als die Ingenieure bemerkten, dass ein Großteil der Kosten eines integrierten Schaltkreises 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 dies steigert die Entwicklungs-, Produktions-, Testkosten und später auch die Betriebskosten, oder verringert den Komfort (Gewicht ist z. B. ein kritischer Faktor für Mobiltelefone).
Eine besondere Stärke von I2C ist die Tatsache, dass ein Mikrocontroller ein ganzes Netzwerk von Chips mit nur zwei I/O-Pins und einfacher Software kontrollieren kann.
Obwohl er viel langsamer als die meisten Bus-Systeme ist, ist I2C 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 Selbsttests, Lautstärkeregler, langsame Analog-Digital- oder Digital-Analog-Wandler, Echtzeituhren, kleine nichtflüchtige Speicher, Kontrolle von Taktgeneratoren, zur Kommunikation von ICs innerhalb von Videorekordern oder Fernsehgeräten etc. eingesetzt. Auch während des Betriebes können Chips zum Bus hinzugefügt oder entfernt werden, was I2C auch für im Betrieb tauschbare Geräte nützlich macht.
Der grundlegende Bus hat 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). 1992 wurde die erste standardisierte Version v1.0 veröffentlicht. Diese fügte einen neuen "schnellen" Modus mit 400 kbit/s hinzu und erweiterte den Adressraum auf 10 Bit, so dass nun bis zu 1.024 Knoten unterstützt werden. Version 2.0 aus dem Jahr 1998 fügte einen "Hochgeschwindigkeits-Modus" mit 3,4 Mbit/s hinzu, wobei die Strom- und Spannungsanforderungen in diesem Modus gesenkt wurden (dadurch spart der Bus ganz nebenbei auch noch Energie). Die neueste Version v2.1 von 2001 ist eine kleine Aktualisierung gegenüber 2.0.
I2C wurde auch als Basis für ACCESS.bus und VESAs Monitordaten-Interface (Display Data Channel, kurz DDC) benutzt.
Siehe auch
- SMBus: Technisch sehr ähnlicher Bus, die Bauteile sind oftmals auch kompatibel zum I2C Bus.