IIC Spezifikationen

Allgemein:
I2C (Inter IC) wurde in den 1980er von Philips (jetzt NXP) entwickelt. Es ist ein serieller Datenbus und sollte - wie im Namen bezeichnet - eine interne Kommunikation zwischen einzelnen ICs herstellen. Daher war der Bus auch nur für geringe Leitungslängen ausgelegt.
I2C ist Multi-Master/Multi-Slave fähig. Für die Kommunikation zwischen den einzelnen Devices werden lediglich zwei Signalleitungen SCL (serial clock) und SDA (serial data) benötigt (wobei der elektrische Rückpfad immer GND ist). Anfänglich lag die Datenrate bei 100kbit/s. Mit dem 7bit Adressraum konnten 128-16 = 112 Devices auf dem Bus kommunizieren (16 Adressen b'0000xxx' und b'1111xxx' sind hierbei reserviert).
In weiteren Versionen der Spezifikation wurde der Adressraum auf 10bit erweitert. Dadurch konnten nochmals 1024 zusätzliche Devices und somit insgesamt 1136 Devices angesprochen werden. Neben des Adressraums wurde auch noch die Datenrate gesteigert. Hier wurden in der Version V1.0 der "fast mode" mit 400kbit/s, in der Version V2.0 der "high speed mode" oder HS-mode mit 3,4Mbit/s und dann in der Version V4.0 auch der "ultra fast mode" mit 5Mbit/s (jedoch nur noch unidirektional) definiert.

Physikalische Anbindung:

Die Treiberbausteine der Busleitungen SCL und SDA sind in jedem Gerät laut Spezifikation als open Drain ausgeführt. Demnach muss der Bus über PullUp Widerstände Rp im Ruhezustand (Idle Mode) auf jeweils H-Potenzial liegen.
IIC Deviceaufbau
Die tatsächlich mögliche Anzahl von Devices am Bus ist jedoch von der sich damit ergebenden Buskapazität Cb in Verbindung mit den gewählten PullUp Widerständen und der gewünschten Datenrate abhängig!
Bei der Auslegung des Busses müssen die technischen Spezifikation der einzelnen Devices bekannt sein. Hier spielt vor allem die maximale Spannungsversorgung der Knoten eine wichtige Rolle. In der Vergangenheit waren VDD=5V die Regel, mittlerweile wird VDD=3V3 bevorzugt. Nun dürfen diese Devices - ohne Eingriff - nur dann am gleichen Bus hängen, wenn vor allem die VDD=3V3 Geräte auch 5V tolerant sind. Andernfalls muss der Bus in einen 5V und einen 3V3 Bereich unterteilt werden und beide Bereiche anschliessend über einen Levelshifter angekoppelt werden. Anders verhält es sich bei der Nutzung von 7bit bzw. 10bit adressierbaren Devices. Diese dürfen immer am gleichen Bus angeschlossen werden.

PullUp Widerstände:

Um einen I2C Bus zu betreiben werden auf beiden Leitungen SCL und SDA an mindestens einer Stelle im System PullUp Widerstände benötigt. Die richtige Dimensionierung hängt jedoch von mehreren Faktoren ab. Hier gibt es zunächst einen unteren Wert Rpmin, der so berechnet wird, dass sich ein maximaler Strom von 3mA nach GND ergibt. Dies wurde von Philips so festgelegt.
Der obere Wert Rpmax ist von der maximal, zulässigen Buskapazität Cb=400pF bzw. von der geforderten Flankensteilheit der Signale mit 80ns < tr <1µs bestimmt. Da sowohl jedes angeschlossene Device als auch die Leitungsführung und ebenfalls das Layout die Buskapazität ändert, ist diese im Vorfeld schwer zu berechnen (sie kann jedoch später im endgültigen System eingemessen werden. Laut eines Diagramms kann der obere Wert aus einer Grafik abgelesen werden. Er liegt dann zwischen 2kΩ (bei Cb=400pF) und 17kΩ (bei Cb<50pF). Ausgehend von der geforderten Flankensteilheit kann der Maximalwert von Rp ebenfalls exakter berechnet werden:
Rpmax = tr / (0.85 x Cb)

max. PullUp Wert

Schaltbare PullUp Widerstände:

Dieses Verfahren ist optional dafür vorgesehen die geforderte Flankensteilheit bei der gegebenen Buskapazität und dem minimalen Rp einzuhalten. Für den Fall, dass Rp bereits den minimalen Wert (sodass 3mA nach GND abgeleitet werden können) aufweist, kann z.B. mittels Analogschalter HCT4066 ein weiterer Rp' parallel zum eigentlichen PullUp Widerstand Rp geschaltet werden. Der Einsatz eines schaltbaren PullUp Widerstands ist jedoch erst bei HS-mode Bussen vorzusehen. Rp' wird nur dann aktiviert wenn es zu einem L-H Übergang kommt bzw. sobald der Schaltpegel des Analogschalters von 2.0V überschritten wird. Rp' wird so berechnet, dass dann die Flankensteilheit tr (80ns bis 1µs) eingehalten wird. Die Parallelschaltung bleibt dann solange aktiv, bis es wieder zu einem H-L Übergang kommt bzw. sobald der Schaltpegel des Analogschalters von 0.8V unterschritten wird. Während dieser kurzen Zeitspanne kann dann evtl. der Maximalstrom von 3mA überschritten werden. Der Übergangswiderstand der Analogschalter selbst kann mit ca. 70Ω vernachlässigt werden.
Rpx = Rp || Rp'
Rpx = tr / (-ln(0.7) x Cb)
=> Rp' = Rp / ((Rp/Rpx)-1)

schaltbarer PullUp Widerstand

Serienwiderstände:

Diese können optional vor jedes Device und in jede Leitung eingefügt werden. Sie sollen einerseits vor Spikes schützen und können eine gegenseitige Einkoppelung von Störsignalen reduzieren. Serienwiderstände liegen hierbei in einer Größenordnung von ca. 100Ω. Der Wert von Rs beeinflußt jedoch auch die Berechnung von Rp mit Rpx = Rp + Rs.

I2C-Bridge:

Die I2C Bridge ist immer dann notwendig, wenn Devices mit unterschiedlichen Datenraten am selben Bus betrieben werden. Gerade dann, wenn mindestens ein HS-Device und ein Standard/Fast Mode Device zum Einsatz kommt, trennt die Bridge den Bus in einen HS-Teil und einen Standard/FS-Teil auf.
IIC Bridge

Levelshifter:

Mit einem Levelshifter können Devices mit unterschiedlichen Betriebsspannungen am selben Bus betrieben werden. Der Levelshifter besteht aus einem N-Kanal MOSFET mit integrierter Body-Diode (enhancement type), der in beide Leitungen SCL und SDA integriert wird. Sollte der MOSFET keine interne Diode besitzen, so muss diese als Schottkydiode extern verdrahtet werden. Die Gates müssen an die jeweils niedrigste Versorgungsspannung angeschlossen sein. Ein geeigneter MOSFET ist z.B. der BSS138. Es ist zu beachten, dass auf beiden Seiten des MOSFETs jeweils eine PullUp Widerstandsgruppe Rp' und Rp vorhanden sein muss. Beide Widerstandsgruppen müssen für die jeweilige VDD ausgelegt sein.
IIC Levelshifter

Multiplexer:

Für den Fall, dass unterschiedliche SLAVES mit nicht veränderbaren Adressen am gleichen Bus betrieben werden sollen oder müssen, kann der Bus in zwei oder mehrere einzelne Segmente unterteilt werden. Hierzu kann z.B. der dargestellte Baustein verwendet werden. Im Bild wurde absichtlich auf die notwendigen Pull-Up Widerstände verzichtet, da diese ohnehin vorhanden sein müssen. Auch hier gilt dann wieder: Es ist zu beachten, dass auf beiden Seiten des Multiplexers jeweils eine PullUp Widerstandsgruppe Rp' und Rp vorhanden sein muss. Andernfalls kann der inaktive Zweig Fehlfunktionen aufweisen. Dies soll auch eine Fehlfunktion im Umschaltmoment verhindern. Beide Widerstandsgruppen müssen für die jeweilige VDD ausgelegt sein.
IIC Multiplexer

Kabelanordung / Layout:

Sobald die Leitungslängen von SCL bzw. SDA über 10cm hinausgehen, bedarf es einer bestimmten Anordnung bzw. Kabelführung der Signalleitungen. Bei einem dreiadrigen Kabel oder bei einem zweilagigen Layout ist die Anordnung: SCL,GND,SDA. Existiert in einem mehrlagigen Layout eine eigene GND plane, können die Signalleitungen nebeneinander geroutet werden. Bei einem vieradrigen Kabel ist die Anordnung: SCL,VDD,GND,SDA. Kommen Twisted-Pair-Kabel zum Einsatz, muss SCL und SDA jeweils mit GND als Rückpfad verdrillt sein und VDD einzeln geführt werden. Alternativ kann SCL mit VDD und SDA mit GND verdrillt werden. In diesem Fall müssen jedoch an beiden Enden der Leitung Blockkondensatoren zwischen VDD und GND angebracht sein. Bei geschirmten Kabeln muss der Schirm auf GND liegen.

Protokollaufbau:

Nur ein Master-Device kann die Kommunikation einleiten. Hierzu wird ein Takt auf SCL generiert. Die normale Datenübertragung beginnt mit einer START-Sequenz (S) und endet mit einer STOP-Sequenz (P). Dazwischen liegen 8bit lange Adress- und Datenbytes.
IIC Protokollsequenz
Nach jedem gesendeten Byte erfolgt vom angesprochenen SLAVE-Device im 9. Bit eine Quittierung ACK (⇒ SDA=L). Bleibt diese aus nACK (⇒ SDA=H), muss der MASTER die Kommunikation mit STOP abbrechen oder mit einem weiteren START neu aufsetzen. Daher ist im Allgemeinen das erste vom MASTER gesendete Byte ein Adressbyte des Empfängers. Alle weiteren Bytes im Protokoll werden dann vom jeweiligen Hersteller des SLAVE-Devices spezifiziert.
IIC Protokollaufbau
Eine leere Sequenz, nur aus START und STOP bestehend, ist nicht erlaubt.
Eine verkettete Datenübertragung endet vorerst nicht mit einem STOP, sondern setzt eine weitere Kommunikation unvermittelt mit einer wiederholten START-Sequenz (Sr) anstatt einer STOP-Sequenz fort. Dies kann beliebig lange ausgeführt werden, bis schliesslich die gesamte Übertragung mit einem STOP beendet wird.
IIC Protokoll verkettet

Adressierungsformat:

I2C kennt zwei unterschiedliche Adressierungsarten. In der ursprünglichen Version gab es zunächst nur die 7bit Adressierung. Diese wurde bereits mit der Spezifikation V1.0 auf 10bit erweitert. Seither kann man beide Arten, auch gleichzeitig am selben Bus, benutzen.
Eine weitere Spezifikation betrifft das erste Adressbyte. Dieses enthält im Bit 0 (LSB) eine Information bzgl. der nachfolgenden Daten im Protokoll. Diese Bit trägt die Bezeichnung R/W. Setzt der MASTER dieses Bit auf 1, erwartet er Daten vom SLAVE-Device. Ist dieses Bit auf 0 gesetzt, dann gibt er Daten zum SLAVE-Device weiter (z.B. bei einer Kommunikation mit einem EEPROM sollen Daten von einer Adresse gelesen oder an diese Adresse programmiert werden).

Clock-Stretching:

Jedes SLAVE-Device kann zu jedem Zeitpunkt die Übertragung vom MASTER blockieren um z.B. interne Abläufe zu synchronisieren. Hierzu hält das Device in einer SCL-L-Phase den Clock seinerseits auf L. Damit kann der MASTER keine weiteren Impulse mehr auf der SCL-Leitung ausgeben - die Übertragung stoppt (Es gibt z.B. Hersteller von Sensoren, die den Bus für ca. 1s blockieren, bis die interne Wandlung abgeschlossen ist). Um dieses Verfahren zu erkennen, muss der MASTER mit jeder Ausgabe eines H-Pegles auf der SCL Leitung diesen auch zurücklesen und prüfen. Hat der MASTER seinen eigenen H-Pegel erkannt, darf er das nächste Bit übertragen.

Datasampling:

Die SLAVE-Devices lesen im allgemeinen den Datenpegel mit einer steigenden SCL-Flanke ein. Dies gilt nicht für eine START/STOP Erkennung. Erfolgt diese Erkennung nicht automatisch innerhalb der SLAVES (z.B. bei Einsatz eines Devices ohne integrierte I2C-Peripherie bzw. bei Implementierung einer Software I2C), muss der Datenpegel zyklisch während der SCL-H-Phase ausgewertet werden. Der MASTER darf die Übertragung zu jeder Zeit, auch während einer unvollständigen Datenausgabe, mit einem STOP oder einem repeated START abbrechen. Im letzteren Fall müssen alle SLAVES ihre interne Bus-Logik zurücksetzen und im nächsten Byte eine Adresse erwarten.

Ermittlung der Buskapazität:

Die Buskapazität kann im laufenden Betrieb mit Hilfe eines Oszilloskops indirekt ausgemessen werden. Hierzu werden die SCL und SDA Leitungen hochauflösend aufgezeichnet und dann die Flankensteilheit der steigenden Flanken beurteilt. Diese Flanken bilden in Verbindung mit den bekannten PullUp Widerstandswerten Rp und der unbekannten Buskapazität Cb eine e-Funktion. Um Cb zu ermitteln, wird die Zeit t=Τ im Bereich von USCL = {0;0.63VDD} bzw. USDA = {0;0.63VDD} gemessen und daraus ergibt sich Cb = Τ / Rp.

Sie benötigen eine spezielle Applikation?

Dann nehmen Sie gleich Kontakt mit uns auf oder informieren Sie sich über unser Entwicklungsangebot