Der IIC bzw. I2C Bus

Software und Quellcodes für Microcontroller

Software und Quellcodes für Microcontroller

Moderator: Moderatorengruppe

Der IIC bzw. I2C Bus

Neuer Beitragvon Thomas am Montag 12. September 2005, 11:07

Der I2C - Bus

Da es bei der C-Control Unit auch die möglichkeit gibt auf den I2C Bus zu zugreifen, möchte ich hier im kurzen erklären was das überhaupt ist.

In vielen modernen elektronischen Systemen wird häufig eine Kommunikation der einzelnen Bausteine untereinander benötigt. Man will aber auch nicht zig Leitungen durch das ganze System legen, also war ein Ziel, so wenig wie möglich Leitungen zu verbrauchen.

I2C-Bus heisst ausgeschrieben Inter IC-Bus, zu Deutsch: Interner Integrierter-Schaltungs-Bus.

Philips ist die Mutter dieses Buses, der sich zum quasi-Standard entwickelt hat. Manchmal wird er auch 2-Draht-Bus genannt, was auch nicht abwegig ist, da der Bus tatsächlich nur mit 2 bidirektionalen Leitungen auskommt (Masse und Versorgungsspannung nicht mitgerechnet).

    - Die erste Leitung wird mit SDA (= serial data) bezeichnet. Über diese Leitungen werden die eigentlichen Daten seriell übertragen.
    - Die zweite Leitung wird mit SCL (= serial clock) bezeichnet. Hier werden die Takt-Impulse gesendet.

Die Ursprünglichen Spezifikationen sahen eine maximale Bus-Geschwindigkeit von 100kHz vor. Für heutige Anwendungen ist dies aber manchmal nicht mehr ausreichend, also wurden die Spezifikationen überarbeitet. Dazu aber später mehr.

Jeder I2C-Basutein lässt sich über ein 7-bit breites Adress-"Byte" selektieren (auch dies wurde überarbeitet, siehe 10-bit-Adressen). Das 8. Bit des Adressbytes gibt an, ob auf den Baustein lesend oder schreibend zugegriffen werden möchte. Die folgenden Bytes sind dann vom jeweiligen Baustein abhängig.

Eine Kommunikation findet immer zwischen einem sog. Master und einem sog. Slave statt. Es gibt auch Multi-Master-Modi, auf diese gehe ich aber in diesem Artikel nicht weiter ein. Der Master sendet nun eine sog. Start-Condition. Dadurch werden nun alle Slaves am Bus hellhörig und vergleichen ihre Adresse mit der Adresse, die der Master anfordert.

Nun können diese beiden Bausteine Daten austauschen. Ist dies erledigt, sendet der Master eine Stop-Condition. Dadurch wird der Bus wieder freigegeben und das Spiel kann von vorne beginnen.

Die ersten vier Bit sind vom jeweiligen Baustein abhängig und können nicht geändert werden. Die drei darauf folgenden Bit sind vom Baustein selbst abhängig, d.h. man kann diese Adresse nach belieben ändern (Pins am Baustein sind hierfür herausgeführt). Dadurch lassen sich insgesamt 8 gleiche Bausteine an einem Bus betrieben. Das achte Adressbit gibt nun noch an, ob gelesen oder geschrieben werden will.

Nun muss der Slave ein Acknowledge an den Master senden, um zu bestätigen, dass er anwesend und bereit ist. Der Master kann nun die eigentlichen Daten auslesen. Möchte der Master weitere Daten lesen, muss er eine Acknowledge an den Slave senden. Benötigt er keine weiteren Daten, so bleibt dies aus und die Stop-Condition wird gesendet.

Näheres dazu (Timing, etc.) steht in jedem Datenblatt, egal zu welchem I2C-Basutein, drin.

Ein wichtiges Merkmal sei noch erwähnt:
Es ist egal (nach oben hin, sprich langsamer) in welchem Zeitabstand diese Übertragungen statt finden. D.h. ein Mikrocontroller muss keine genauen Timings einhalten, um mit seinem Slave zu sprechen!


Fast-Mode
Mittlerweile ist der I2C-Bus zu einem quasi-Standard geworden und immer mehr Bausteine wurden entwickelt. Ursprünglich war er nur zum austausch von Status-Informationen gedacht, aber heute werden Text und Daten übertragen. dazu reichten bald die 100kbit/s nicht mehr aus. Tim Taylor würde sagen: "Der Bus braucht mehr Power, HOR HOR HOR!".
Und so war's auch. Philips erweiterte seine Spezifikationen und nun durften 400kbit/s übertragen werden. Alle heutigen Bausteine sollten dies unterstützen.

High-Speed-Mode
Der High-Speed-Mode wurde für spezielle RAM Bausteine eingeführt, die noch höhere Übertragungsraten erforderten. Geräte des Fast oder Normal-Mode kann man NICHT an die selben Leitungen hängen (wenn denn der High-Speed-Mode verwendet werden soll). Für diesen Fall sind an einem Master mit High-Speed-Mode-Unterstüzung zwei zusätzliche Pins für die normalen Geschwindigkeiten herausgeführt. Der Master übernimmt dann die Konvertierung.

10-bit-Adressen
Mit der Zeit wurden es immer mehr Geräte und es gab schon vorher Überschneidungen von Adressen. Glücklicherweise hat Philips die Slave-Adressen 11111xxx als "reserved" markiert, also konnte man jetzt eine Erweiterung der Adressierung einführen, ohne dabei die 7-bit-Geräte zu stören. Im Gegenteil, man kann 7-bit Geräte und 10-bit Geräte an einen Bus hängen!

Die ersten 5 Bit sind die reservierte Adresse "11110" (die Adresse "11111" behält sich Philips weiterhin vor, für weitere Erweiterungen). Dann kommen die letzten 2 Bit (also das MSB) der 10-Bit-Adresse und das Read/Write-Bit. Nun senden mehrere Slaves ihr Acknowledge. Nun überträgt der Master die letzten 8 Bit der Adresse (also LSB). Jetzt meldet sich nur noch ein Slave mit einem Acknowledge und die restliche Übertragung kann wie bei der 7-Bit-Adressierung vorgenommen werden.

Weitere Informationen zum I2C Bus könnt Ihr aus den Spezifikationen von Philipps in der Anlage als PDF Datei finden.



Gruß
Thomas
Benutzeravatar
Thomas
Threadstarter
14140
Forengründer
 
Beiträge: 854
Registriert: Mittwoch 26. Juni 2002, 17:24
Postleitzahl: 00000
Land: Germany / Deutschland

Neuer Beitragvon paula am Dienstag 4. Juli 2006, 07:51

Ich habe eine C-Control Main Unit (Version 1.1) PLUS.
Ist es da denn auch möglich einen I²C-Bus zu verwenden?
paula
20914
 
Beiträge: 5
Registriert: Dienstag 4. Juli 2006, 07:48

Neuer Beitragvon tappi84 am Sonntag 30. Juli 2006, 13:04

paula hat geschrieben:Ich habe eine C-Control Main Unit (Version 1.1) PLUS.
Ist es da denn auch möglich einen I²C-Bus zu verwenden?


Mit CCBASIC geht das auf jedenfall. Theoretisch müsste es auch mit CCPLUS gehen, frag mich aber nicht wie.
http://www.fdos.de
BASIC++ Programmiersprache und CCASM
tappi84
21310
 
Beiträge: 5
Registriert: Sonntag 11. September 2005, 14:54
Wohnort: Aachen


Zurück zu Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste