I²C

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Logo des I²C-Bus

I²C, für englisch Inter-Integrated Circuit, im Deutschen gesprochen als I-Quadrat-C oder englisch I-Squared-C (ˈaɪ skwɛərd ˈsiː) oder I-2-C (ˈaɪ tuː ˈsiː), ist ein von Philips Semiconductors (heute NXP Semiconductors) entwickelter serieller Datenbus.

Er wird hauptsächlich geräteintern für die Kommunikation zwischen verschiedenen Schaltungsteilen benutzt, z. B. zwischen einem Controller und Peripherie-ICs. Das ursprüngliche System wurde von Philips in den frühen 1980er Jahren entwickelt, um verschiedene Chips in Fernsehgeräten einfach steuern zu können. Seit Mitte der 1990er Jahre wird I²C auch von einigen Wettbewerbern zur Bezeichnung von Philips-kompatiblen I²C-Systemen verwendet, darunter Siemens AG (später Infineon Technologies AG), NEC, STMicroelectronics, Motorola (später Freescale), Intersil, etc.

Atmel führte aus lizenzrechtlichen Gründen die heute auch von einigen anderen Herstellern verwendete Bezeichnung TWI (Two-Wire-Interface) ein, technisch sind TWI und I²C identisch.[1] Allerdings ist das ursprüngliche Patent am 1. Oktober 2006 ausgelaufen, so dass keine Lizenzgebühren für die Benutzung von I²C mehr anfallen. I²C ist auch kein eingetragenes Markenzeichen von NXP Semiconductors, Markenschutz besteht lediglich für das Logo.

Geschichte[Bearbeiten]

Der Bus wurde 1982 von Philips eingeführt zur geräteinternen Kommunikation zwischen ICs in z.B. CD-Spielern und Fernsehgeräten. Dazu wurde die Mikrocontroller-Familie MAB8400 entwickelt, die einen I²C-Bus- Controller enthielt. Die erste standardisierte Spezifikation 1.0 wurde 1992 veröffentlicht. Diese ergänzte den ursprünglichen Standard mit 100 kbit/s um einen neuen „schnellen“ Modus (Fast-mode) mit 400 kbit/s und erweiterte den Adressraum um einen 10-Bit-Modus, so dass statt der ursprünglichen 112 Knoten seitdem bis zu 1136 unterstützt werden.

Mit Version 2.0 aus dem Jahr 1998 kam ein „Hochgeschwindigkeitsmodus“ (Hs-mode) mit max. 3,4 Mbit/s dazu, wobei die Strom- und Spannungsanforderungen in diesem Modus gesenkt wurden. Version 3.0 von 2007 führte einen weiteren Modus „Fast-mode Plus“ (Fm+) mit bis zu 1 Mbit/s ein, der im Gegensatz zum HS-mode dasselbe Protokoll verwendet wie die 100-kbit/s- und 400-kbit/s-Modi.

Im Jahr 2012 wurde mit der Spezifikation V.4 ein noch schnellerer Modus „Ultra Fast-mode“ (Ufm) eingeführt, der unidirektionale Übertragungsraten bis zu 5 Mbit/s unterstützt. Im selben Jahr wurden mit der aktuellen V.5 einige Fehler der Vorgängerversion korrigiert.

Bussystem[Bearbeiten]

I²C ist als Master-Slave-Bus konzipiert. Ein Datentransfer wird immer durch einen Master initiiert; der über eine Adresse angesprochene Slave reagiert darauf. Mehrere Master sind möglich (Multimaster-Mode). Im Multimaster-Mode können zwei Master-Geräte direkt miteinander kommunizieren, dabei arbeitet ein Gerät als Slave. Die Arbitrierung (Zugriffsregelung auf den Bus) ist per Spezifikation geregelt.

Elektrische Definition[Bearbeiten]

I²C-Bus mit einem Master und drei Slaves

Im Diagramm rechts sind drei Geräte eingezeichnet. I²C benötigt zwei Signalleitungen: Takt- (SCL) und Datenleitung (SDA). Beide liegen mit den Pull-up-Widerständen RP an der Versorgungsspannung VDD. Sämtliche daran angeschlossenen Geräte haben Open-Collector-Ausgänge, was zusammen mit den Pull-up-Widerständen eine Wired-AND-Schaltung ergibt. Der High-Pegel soll mindestens 0,7×VDD betragen und der Low-Pegel soll höchstens bei 0,3×VDD liegen. Die im Bild nicht eingezeichneten Serienwiderstände RS an den Eingängen der Geräte sind optional und werden als Schutzwiderstände verwendet. Der I²C-Bus arbeitet mit positiver Logik, d.h. ein HIGH-Pegel auf der Datenleitung entspricht einer logischen '1', der LOW-Pegel einer '0'.

Takt und Zustände des Busses[Bearbeiten]

Zeitverhalten am I²C-Bus: Zwischen dem Start-Signal (S) und dem Stopp-Signal (P) werden die Datenbits B1 bis BN übertragen.

Der Bustakt wird immer vom Master ausgegeben. Für die verschiedenen Modi ist jeweils ein maximal erlaubter Bustakt vorgegeben. In der Regel können aber auch beliebig langsamere Taktraten verwendet werden, falls diese vom Master-Interface unterstützt werden. Bestimmte ICs (z.B. A/D-Umsetzer) benötigen jedoch eine bestimmte, minimale Taktfrequenz, um ordnungsgemäß zu funktionieren. Die folgende Tabelle listet die maximal erlaubten Taktraten auf.

Modus Maximale
Übertragungsrate
Richtung
Standard Mode (Sm) 100 kbit/s bidirektional
Fast Mode (Fm) 400 kbit/s bidirektional
Fast Mode Plus (Fm+) 1 Mbit/s bidirektional
High Speed Mode (Hs-mode) 3,4 Mbit/s bidirektional
Ultra Fast-mode (UFm) 5.0 Mbit/s unidirektional

Wenn der Slave mehr Zeit benötigt, als durch den Takt des Masters vorgegeben ist, 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 sind das Start-, Stop- und Repeated-Start-Signal. Das Start-Signal ist eine fallende Flanke auf SDA, während SCL high ist, 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 Datenbits = 1 Oktett (welche protokollbedingt entweder als Wert oder als Adresse interpretiert werden) und einem ACK-Bit. Dieses Bestätigungsbit (Acknowledge) wird vom Slave durch einen Low-Pegel auf der Datenleitung während der neunten Takt-High-Phase (welche nach wie vor vom Master generiert wird) und als NACK (für engl. not acknowledge) durch einen High-Pegel signalisiert. Der Slave muss den Low-Pegel an der Datenleitung anlegen bevor SCL auf high geht, andernfalls würden weitere eventuelle Teilnehmer ein Start-Signal lesen.

Adressierung[Bearbeiten]

Eine Standard-I²C-Adresse ist das erste vom Master gesendete Byte, wobei die ersten sieben Bit die eigentliche Adresse darstellen und das achte Bit (R/W-Bit) dem Slave mitteilt, ob er Daten vom Master empfangen soll (LOW), oder Daten an den Master zu übertragen hat (HIGH). 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).

Jedes I²C-fähige IC hat eine vom Hersteller festgelegte Adresse, von der bisweilen die untersten drei Bits (Subadresse genannt) über drei Steuerpins festgelegt werden können. In diesem Fall können bis zu acht gleichartige ICs an einem I²C-Bus betrieben werden. Wenn nicht, müssen mehrere gleiche ICs mit getrennten I²C-Bussen angesteuert oder abgetrennt werden können.

Wegen Adressknappheit wurde später eine 10-Bit-Adressierung eingeführt. Sie ist abwärtskompatibel zum 7-Bit-Standard durch Nutzung von 4 der 16 reservierten Adressen. Beide Adressierungsarten sind gleichzeitig verwendbar, was bis zu 1136 Knoten auf einem Bus erlaubt.

Übertragungsprotokoll[Bearbeiten]

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 byteweise 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. Alternativ kann auch ein Repeated-Start am Beginn einer erneuten Übertragung gesendet werden, ohne die vorhergehende Übertragung mit einem Stop-Signal zu beenden.

Alle Bytes werden dabei „Most Significant Bit First“ übertragen.

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.

Verwendung[Bearbeiten]

Eine Eigenschaft von I²C ist die Tatsache, dass ein Mikrocontroller ein ganzes Netzwerk an integrierten Schaltungen mit nur zwei I/O-Pins und einfacher Software kontrollieren kann. Busse dieses Typs wurden realisiert, da ein nicht unerheblicher Teil der Kosten einer integrierten Schaltung und der verwendeten Leiterplatte von der Größe des Gehäuses und der Anzahl der Pins abhängt. Ein großes Gehäuse hat mehr Pins, braucht mehr Platz auf der Leiterplatte und hat mehr Verbindungen, die versagen können. All das steigert die Entwicklungs-, Produktions- und Testkosten.

Obwohl langsamer als neuere Bus-Systeme, ist I²C wegen des geringen Aufwands vorteilhaft für Peripheriegeräte, die nicht schnell sein müssen. Häufig wird er für die Übertragung von Steuer- und Konfigurationsdaten verwendet. Beispiele sind Lautstärkeregler, Analog-Digital- oder Digital-Analog-Wandler mit niedriger Abtastrate, Echtzeituhren, kleine, nichtflüchtige Speicher oder bidirektionale Schalter und Multiplexer. Auch elektronische Sensoren haben oft einen Analog-Digital-Wandler mit I²C-Schnittstelle integriert.

Während des Betriebes können Chips zum Bus hinzugefügt oder entfernt werden (Hot-Plugging).

I²C wird 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 einfaches I²C-EEPROM, das vom Kartenleser über das I²C-Protokoll ausgelesen und beschrieben werden kann.

Der I²C-Bus ist von der Definition her recht einfach, aber auch störanfällig. Diese Tatsache schränkt die Verwendung auf störungsarme Anwendungsbereiche ein, wo weder mit Übersprechen, Rauschen, EMV-Problemen noch mit Kontaktproblemen (Stecker, Buchsen) zu rechnen ist. Auch ist er ungeeignet zur Überbrückung größerer Entfernungen, wie es beispielsweise für Feldbusse typisch ist. Der Bus kann jedoch mit speziellen Treibern auf ein höheres Strom- und/oder Spannungslevel umgesetzt werden, wodurch der Störabstand und die mögliche Leitungslänge steigen. Ein noch größerer Störabstand ist durch eine Umsetzung auf den physikalischen Layer des CAN-Busses möglich, der mit differentiellen Open-Collector-Signalen arbeitet. Störungen sowohl des SDA- als auch des SCL-Signals resultieren in fehlerhaft übertragenen Daten, die vor allem bei Störungen auf SDA nicht erkannt werden können.

Ein Problem innerhalb der I²C Spezifikation ist das Fehlen eines Timeouts, was gelegentlich zu blockierten Chips führen kann. Falls ein Slave-Chip gerade die Datenleitung auf "0" drückt und ein Reset den Master zurücksetzt, bleibt diese Datenleitung für unbestimmte Zeit auf "0". Somit bleibt der gesamte I²C Bus mit allen angeschlossenen Chips blockiert. Sofern der Slave-Chip keinen eigenen Reset hat lässt sich die Blockade nur durch Aus-Einschalten der Stromversorgung lösen.

Siehe auch[Bearbeiten]

  • SMBus: Technisch sehr ähnlicher Bus, die Bauteile sind oft kompatibel zum I²C-Bus.
  • Serial Peripheral Interface: Ein weiterer serieller Bus, der aber Chip Select-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.
  • Display Data Channel (DDC): Serieller Bus zur Kommunikation zwischen PC und Bildschirm, basierend auf dem I²C-Bus.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. I²C bei Microcontroller.net