I²C

Serieller Datenbus
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 11. Juni 2006 um 08:46 Uhr durch Stern (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

I²C (für Inter-Integrated Circuit, gesprochen I-Quadrat-C bzw. I-square-C) ist ein von Philips Semiconductors entwickelter serieller Bus. 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.

1992 wurde die erste Spezifikation 1.0 veröffentlicht. Diese fügte den ursprünglichen 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 2001 enthält nur kleinere Aktualisierungen gegenüber 2.0.

I²C-Bus

I²C nutzt 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), bzw. 10 Bit (max. 1008 Knoten). Zwei Geräte sind im Diagramm rechts eingezeichnet. I²C benötigt zwei bidirektionale Steuerleitungen: Takt (engl. serial clock line, SCL) und Daten (engl. serial data line, SDA). Die Leitungen für die Versorgungsspannung U0 und Gerätemasseleitung 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, lässt sich jedoch auch in einen langsamen Modus schalten, bei dem dann 10 kbit/s übertragen werden können.

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 Master 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 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, 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.

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 dies 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, nicht aber schnell sein müssen. Er wird häufig für Lautstärkeregler, Analog-Digital- oder Digital-Analog-Wandler, Echtzeituhren, kleine nichtflüchtige Speicher oder aber bidirektionale Schalter und Multiplexer eingesetzt. Auch während des Betriebes können Chips zum Bus hinzugefügt oder entfernt werden, was I²C auch für im Betrieb tauschbare Geräte nützlich macht.

I²C 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 I²C Bus.