Rob's priveweb

I2C - Ein Bussystem zum anfassen

Home - Techniek - Electronica - Radiotechniek - Radio amateur bladen - CQ-DL - I2C - Ein Bussystem zum anfassen


Datenbus für integrierte Schaltkreise (1)

I2C- eine Abkürzung, die häufiger zu lesen und zu hören ist. Was verbirgt sich dahinter? Lesen Sie hierzu etwas Theorie; im zweiten Teil wird eine Ubungsplatine zum I2C-Bus vorgestellt.

Der I2C-Bus wurde von der Firma Philips für Geräte der Unterhaltungselektronik entwickelt. Ein Bus ist in der Elektronik ein System, das zur Übertragung von Daten benutzt wird. Meist sind das mehrere Leitungen, manchmal aber auch nur eine. I2C steht dabei für "Inter-IC - zwischen integrierten Schaltkreisen". Das Ganze dient also der Kommunikation zwischen integrierten Schaltkreisen (kurz ICs). Ein Beispiel für diese Technik ist ein Fernseher. In ihm befinden sich verschiedene kleine Baugruppen, die über den I2C-Bus zusammen funktionieren (Bild 1). Da wäre der Empfänger für die Fernbedienung, das digitale Poti für die Lautstärkeregelung, das EEPROM fär die Speicherplätze, das PLL-IC des Tuners, diverse Leuchtdioden für die Programmplatzanzeige oder der A/D-Wandler der "Feldstärkeanzeige", für die automatische Sendersuche oder die Frequenzfeineinstellung.


Bild 1 - Datenkommunakation zwischen Baugruppen uber I2C-Bus

Alles mit PC zu haben

Heute gibt es eine große Auswahl verschiedener Schaltkreise mit einem I2C-Interface. Die gebräuchlichsten sind Analog-Digital-Wandler (A/D-Wandler), Digital-Analog-Wandler (D/A-Wandler), EEPROMs (elektrisch löschbare programmierbare Speicher), Uhren-ICs, Ein/Ausgabe-Bausteine (zum Beispiel acht einzeln schaltbare digitale Leitungen), aber auch Klimasensoren (z.B. Temperatur, jedes neuere PC-Mainboard enthält Temperatursensoren, diese werden auch über I2C angesteuert) oder für Empfänger- und Sendersysteme PLL-ICs (Synthesizer).

Der I2C-Bus ist auch bei der Wetterstation AS53 des Arbeitskreises Amateurfunk und Telekommunikation in der Schule (AA-TiS e.V) in Verwendung, dort werden u.a. Temperatursensoren oder A/D-Wandler benutzt.

Die einzelnen Baugruppen werden von Master-Bausteinen - der "Herr", der befiehlt - kontrolliert, die übrigen Bausteine ordnen sich dabei als Slave - ein "Arbeitssklave", der die Befehle ausführt - unter. Die Funktion des Masters übernimmt häufig ein Mikrocontroller mit "intelligenter" Software. Die Slaves dagegen sind meist nur passive Empfänger, die von Zeit zu Zeit aktiviert werden, um dem Master einige Daten zu übermittehi oder welche von ihm zu bekommen, in der übrigen Zeit aber sozusagen "schlafen" oder andere Aufgaben erfüllen.


Bild 2 - Die Anschlussleitungen SDA und SDL übertragen die Bitfolge zwischen den Baugruppen.

Wie funktioniert I2C?

Der I2C-Bus benötigt nur zwei Leitungen für die Kommunikation, nämlich eine Datenleitung und eine Taktleitung (Bild 2). Genau genommen benötigt man noch eine dritte Leitung, das Bezugspotential, also Masse. Dabei gibt es für jede der beiden Leitungen jeweils einen Pull-Up-Widerstand im Bereich von einigen kΩ, der die Leitung nach +5 V zieht.

Die einzelnen Bausteine haben für die Leitungen nur einen "Open-Collector"-Anschluss, das heißt im Baustein selber sitzt ein Transistor, dessen Kollektor an die Leitung angeschlossen ist, der Emitter sitzt auf Masse, und die Basis wird vom Baustein geschaltet.

Man kann sich das wie viele verschiedene Transistoren vorstellen, deren Kollektor und Emitter miteinander verbunden sind, und die Kollektoren über einen Widerstand an Plus angeschlossen sind. Solange kein Transistor durchgeschaltet ist, liegt am Kollektor die volle Betriebssparmung (also 5 V) an. Leitet jedoch einer der Transistoren, dann wird diese Spannung nach Masse gezogen, leiten sogar mehrere Transistoren, macht das auch nichts aus, außer einer gestörten Kommunikation. Dies hat den Vorteil, dass es bei eventuellen Konflikten zu keinen Schäden an den Bausteinen kommen kann, denn würde ein Baustein aktiv +5 V auf die Leitung geben, ein anderer die Leitung abergegen Masse schalten, käme es zu einem Kurzschluss, und wahrscheinlich würde mindestens ein Baustein "durchbrennen".

Beim I2C-Bus aber fließt höchstens der durch den Pull-Up-Widerstand vorgegebene, harmlos geringe Strom. Deshalb können viele I2C-Bausteine parallel geschaltet werden, jedoch muss die maximale kapazitive Belastung von 400 pF beachtet werden! Eine Spannung von 1,5 V oder weniger auf der Leitung bedeutet eine logische Null, eine Spannung über 3 V steht für eine logische Eins. Dazwischen gilt wegen der Schmitt-Trigger-Eingänge das jeweils vorherige Ergebnis.


Bild 3: Die Daten werden durch Start- und Stopbedingungen "eingerahmt"

Herr und Sklave

Wie oben schon erwähnt, gibt es bei I2C (vereinfacht) einen Master und einen Slave. Eine typische Kommunikationssituation (Bild 3) sieht dabei so aus: Der Master prüft, ob der Bus verfügbar ist und wenn ja, schickt er ein "Start-Signal" ("START condition"). Danach folgen die Datenbytes, der Takt wird dabei vom Master vorgegeben und beträgt maximal 100 kHz.

Als erstes Datenbyte wird die Adresse gesendet, diese ist 7 Bit lang und bestimmt, welcher Baustein am Bus angesprochen werden soll. Jeder Baustein hat seine eigene Adresse, die man (je nach Baustein) manchmal über ein paar Eingänge des ICs beeinflussen kann. Jede Adresse darf auf dem Bus nur einmal vorkommen!

Das achte Bit des ersten Bytes - das niedrigst-wertigste Bit, LSB - bestimmt die Art des Zugriffes auf den Baustein, also ob gelesen (logisch 1) oder geschrieben (logisch 0) werden soll. Als neuntes Bit folgt die Bestätigung (Acknowledge) des Slaves, dabei wird für einen Taktzyklus lang die Datenleitung vom angesprochenen Baustein auf logisch 0 gehalten.

Folgt auf die Adresse keine Bestätigung, dann war entweder die Adresse falsch, oder der Baustein ist noch z.B. mit dem vorherigen Befehl beschäftigt und momentan nicht ansprechbar oder vielleicht auch überhaupt nicht vorhanden oder defekt. Auf diese Weise könnte also die Konfiguration der Platine festgestellt werden.

Nach der erfolgreichen Adressierung kommt der eigentliche Datentransfer, jeweils ein Byte (höherwertiges Bit voran) mit einem Bit zur Bestätigung. Wird ein Byte nicht bestätigt, wird die Kommunikation abgebrochen und der Master sendet ein "Stop-Signal" ("STOP condition") und der Bus befindet sich wieder im Ausgangszustand (beide Leitungen HIGH).

Wenn der Master die Kommunikation beenden möchte, sendet er nach dem letzten Byte auch einfach ein Stop-Signal. Bestätigen muss immer der Baustein, an den die Daten gingen. Hat also der Master ein Byte an den Slave geschrieben, dann muss der Slave bestätigen, hat der Slave an den Master geschrieben, dann bestätigt der Master. In letzterem Fall darf der Master das letzte Byte nicht bestät igen, wenn er die Kommunikation beenden möchte.

Ausnahme bei Lesen/Schreiben

Für Bausteine, die sowohl Lese- als auch Schreibzugriff ermöglichen, gibt es noch eine spezielle Situation. Dabei wird wie gewöhnlich angefangen, zum Beispiel werden Daten in den Baustbin geschrieben, um in einem EEPROM die aktuelle Adresse zu setzen, Möchte der Master jedoch einfach den Modus ändern (von Lesen auf Schreiben), dann sendet er nicht wie üblich ein Stop-Signal, sondern erneut ein Start-Signal; eine so genannte "repeated start condition", gefolgt von der Adresse des Bausteins (diesmal mit einem anderem Bit für den Modus) und danach geht es ganz normal weiter.

Wer sich für die genauen Spezifikationen des I2C-Busses (Bild 4) interessiert, findet in (1) sicher Antworten auf mögliche Fragen.

Im zweiten Teil wird eine Ubungsplatine beschrieben, die beim Experimentieren mit I2C-Bus-Abläufen behilflich ist.


Bild 4: PDF-Datei von Philips mit den I2C-Spezifikationen

(wird fortgesetzt)

Literatur und Links im Web

  1. I2C-Spezifikation von Philips: I2C bus specification 1995.pdf

DJ2TK, dj2tk@amsat.org