I2C

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 28. August 2016 um 18:35 Uhr durch Marco.Bakera (Diskussion | Beiträge) (Weblinks: Formulierung). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen
Eine gesichtete Version dieser Seite, die am 28. August 2016 freigegeben wurde, basiert auf dieser Version.
Datei:I2c logo.svg
Logo des I2C-Bus

I2C, 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 1982 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 I2C auch von einigen Wettbewerbern zur Bezeichnung von Philips-kompatiblen I2C-Systemen verwendet, darunter Siemens AG (später Infineon Technologies AG), NEC, STMicroelectronics, Motorola (später Freescale), Intersil etc. Es gibt insgesamt über 1000 verschiedene ICs von über 50 Herstellern (Stand 2014).[1]

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 I2C identisch.[2] Allerdings ist das ursprüngliche Patent am 1. Oktober 2006 ausgelaufen, so dass keine Lizenzgebühren für die Benutzung von I2C mehr anfallen. I2C ist auch kein eingetragenes Markenzeichen von NXP Semiconductors, Markenschutz besteht lediglich für das Logo.

Geschichte

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 I2C-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- 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. Im April 2014 erschien V.6, die erneut Fehler korrigierte.[1]

Bussystem

I2C 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

I2C-Bus mit einem Master und drei Slaves

Im Diagramm rechts sind drei Geräte eingezeichnet. I2C 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 ×ばつVDD betragen und der Low-Pegel soll höchstens bei ×ばつ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 I2C-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

Zeitverhalten am I2C-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. Einige ICs (z.B. Analog-Digital-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) 0,1 Mbit/s bidirektional
Fast Mode (Fm) 0,4 Mbit/s bidirektional
Fast Mode Plus (Fm+) 1,0 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 die Taktleitung 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 lesen weitere eventuelle Teilnehmer ein Start-Signal.

Adressierung

Eine Standard-I2C-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). I2C 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 I2C-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 I2C-Bus betrieben werden. Wenn nicht, müssen mehrere gleiche ICs mit getrennten I2C-Bussen angesteuert oder abgetrennt 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 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

Eine Eigenschaft von I2C 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 I2C wegen des geringen Aufwands vorteilhaft für Peripheriegeräte, die nicht schnell zu sein brauchen. 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 I2C-Schnittstelle integriert.

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

I2C 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 I2C-Bus sehr ähnlich, die meisten ICs erlauben einen Betrieb an beiden Bussen.

Große Bedeutung hatte das I2C-Protokoll in der Vergangenheit im Chipkartenbereich. Die in Deutschland bis Ende 2014 verwendete Krankenversichertenkarte war eine I2C-Karte, d. h. unter den goldenen Kontaktflächen der Chipkarte befanden sich ein einfaches I2C-EEPROM, das vom Kartenleser über das I2C-Protokoll ausgelesen und beschrieben werden konnte.

Stabilität

Das Protokoll des I2C-Bus ist von der Definition her recht einfach, aber auch recht störanfällig. Diese Tatsache schränkt die Verwendung auf störarme Umgebungen 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 einen höheren Strom- oder Spannungspegel 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 oft nicht erkannt werden können. Lediglich bei geringen, zeitlich begrenzten Störungen, z.B. weit oberhalb der Signalfrequenz, kann das System mittels Signalverarbeitung stabiler gemacht werden.

Ein großes Problem innerhalb der I2C-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 I2C-Bus mit allen angeschlossenen Chips blockiert. Sofern der Slave-Chip keinen eigenen Reset hat, lässt sich die Blockade nur durch "manuelles" Generieren von Taktimpulsen bzw. Aus- und Wiedereinschalten der Stromversorgung lösen.[3]

Siehe auch

  • SMBus: Technisch sehr ähnlicher Bus, die Bauteile sind oft kompatibel zum I2C-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.
  • I2S (Inter-IC Sound): Eine Schnittstelle speziell zur Übertragung von digitalen Audiodaten.
  • 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 I2C-Bus.

Einzelnachweise

  1. a b The I2C-Bus Specification and User Manual, Rev. 6 — 4 April 2014 Original-Spezifikation von NXP Semiconductors (PDF, engl.; 1,4 MB)
  2. I2C bei mikrocontroller.net
  3. Analog Devices AN-686 Implementing an I2C Reset (PDF, engl.)
Abgerufen von „https://de.wikipedia.org/w/index.php?title=I2C&oldid=157452486"