- I²C-Bus
-
I²C (für Inter-Integrated Circuit, meistens gesprochen als I-Quadrat-C oder englisch I-squared-C) ist ein von Philips Semiconductors entwickelter serieller Datenbus.
Er wird hauptsächlich geräteintern für die Kommunikation zwischen verschiedenen Schaltungsteilen mit geringer Übertragungsgeschwindigkeit benutzt, z. B. zwischen einem Controller und Peripherie-ICs. Das ursprüngliche System wurde von Philips (jetzt NXP Semiconductors) in den frühen 1980er Jahren entwickelt, um verschiedene Chips 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
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 um einen 10 Bit-Modus, sodass statt der ursprünglichen 112 Knoten seitdem bis zu 1136 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 3.0 von 2007, die einen „extra schnellen“ Modus (Fast-mode Plus) mit bis zu 1 Mbit/s einführt, der im Gegensatz zum „Hochgeschwindigkeits-Modus“ dasselbe Protokoll verwendet wie die 100 kbit/s- und 400 kbit/s-Modi.
Definition
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.
Elektrische Definition
Zwei Geräte sind im Diagramm rechts eingezeichnet. I²C benötigt zwei Signalleitungen: Takt (engl. serial clock line, SCL) und Datenleitung (engl. serial data line, SDA). Die Leitungen für Versorgungsspannung U0 und Masse liegen im Diagramm oben und unten. Geräte werden mittels einer 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.
Takt und Zustände des Busses
Der Bustakt wird immer vom Master ausgegeben. Für die verschiedenen Modi 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 NAK (für engl. Not Acknowledge) durch einen High-Pegel.
Adressierung
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) 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).
Jedes I²C-fähige IC hat eine festgelegte Adresse, von der in der Regel die untersten drei Bits (Subadresse genannt) über drei Steuerpins festgelegt werden. Es können also bis zu acht gleichartige ICs an einem I²C-Bus betrieben werden.
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
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 NAK 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.
Alle Bytes werden hierbei „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.
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.
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 einer integrierten Schaltung 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, 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 langsamer als die meisten anderen 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 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 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.
Ungeeignet ist der I²C-Bus zur Überbrückung größerer Entfernungen, wie es beispielsweise für Feldbusse typisch ist. Für Übertragungen zwischen verschiedenen Geräten mit getrennten Gehäusen ist der Bus nicht störsicher genug. Störungen sowohl des SDA- als auch des SCL-Signals resultieren in fehlerhaft übertragenen Daten, die vor allem bei Störungen auf SDA nicht einmal erkannt werden können.
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.
- Display Data Channel (DDC): serieller Bus zur Kommunikation zwischen PC und Bildschirm, basierend auf dem I²C-Bus.
Weblinks
- The I²C-Bus Specification, Version 03, June 2007, Original-Spezifikation von NXP Semiconductors (PDF, engl.)
- 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“ (englisch)
- Lm-sensors, Linux-Paket, das u.a. Sensoren mit dem I²C-Bus unterstützt (englisch)
- I²C Bus and Access Bus, Darstellung der Gemeinsamkeiten und Unterschiede (englisch)
- Eine einfache verständliche Erklärung des I²C-Busses
- Die Nutzung des I²C-Interfaces am Beispiel des PIC16F876
- Einführung in I²C auf Deutsch (hauptsächlich AVR-Beispiele)
Wikimedia Foundation.