ComputerClub 2
Sitemap Kontakt
  Wolfgang Back & Wolfgang Rudolph
Suche:   Wolfgang Back & Wolfgang Rudolph

I2C Bus Hintergrundwissen

Aus ComputerClub2 WIKI

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Einleitung

Der I2C Bus ist ein synchroner serieller 2-Draht Bus, der in den 80er Jahren von Philips entwickelt wurde. I2C gesprochen 'I Quadrat C' kommt von der der Abkürzung IIC und bedeutet Inter-Integrated Circuit. Er wird hauptsachlich dazu benutzt, zwischen Schaltkreisen, die sich auf einer Platine verbinden, Daten auszutauschen. Die beiden Leitungen, die den I2C Bus bilden heißen SCL und SDA. SCL steht für Signal Clock und ist die Taktleitung für den Bus. Deshalb spricht man auch von einem synchronen Bus. SDA steht für Signal Data und ist die Datenleitung. Die Datenübertragungsrate des I2C Busses beträgt 100kHz im Standard Mode, bzw. 400kHz im Fast Mode. Aus Lizenzgründen nennt man das I2C Interface bei Atmel TWI (Two Wire Interface).

Der I2C Bus ist ein Multi Master/Slave Bus. Das bedeutet, es gibt mindestens einen I2C Master und ebenso mindestens einen I2C Slave. Der Master selektiert einen Slave durch seine Slave Adresse, die innerhalb eines Busses eindeutig sein muß. Eine Datenübertragung kann nur durch einen I2C Master initiiert werden. Der Slave bleibt immer passiv und lauscht nur auf die Slave Adresse und vergleicht diese mit seiner eigenen Slave Adresse. Erst wenn er seine Slave Adresse erkennt, greift der Slave auch aktiv in das Busgeschehen ein.

Aus Sicht des I2C Masters unterscheidet man zwischen Read und Write Sequenzen. Bei einer Read Sequenz liest der I2C Master Daten vom I2C Slave. Bei einer Write Sequenz sendet der I2C Master Daten zum Slave.

Bus Zustände

Durch die Signal Pegel der beiden I2C Bus Leitungen SCL und SDA ergeben sich verschiedene Zustände, die der Bus einnehmen kann.

Bus frei

Wenn SCL und SDA dauerhaft HIGH sind, spricht man von 'Bus free'. Ein I2C Master muß diese Bedingung immer zuerst abprüfen, bevor er den Bus belegen darf.

    _________________
        
SCL 
   
    _________________
              
SDA

Start Bedingung

Die Start Bedingung kennzeichnet den Beginn einer Datenübertragung durch einen I2C Master. Der Master zieht die Datenleitung SDA von HIGH auf LOW, während die Taktleitung SCL auf HIGH bleibt.

         ____________
        /
SCL ___/
   
    __________
              \
SDA            \_____

Datenbit

Ein Datenbit kann, wie in der Digitaltechnik üblich 2 Zustände einnehmen '0' oder '1'. Die Daten sind gültig während die Taktleitung SCL auf HIGH liegt. Ein LOW Pegel auf der Datenleitung SDA bedeuted '0', ein HIGH bedeutet '1'

Logisch 0:

           ____
          /    \ 
SCL _____/      \____
   
    ___            __
       \          /
SDA     \________/


Logisch 1:

           ____
          /    \ 
SCL _____/      \____
   
         ________
        /        \
SDA ___/          \__

Acknowledge

Bei einer Schreib Sequenz quittiert der I2C Slave nach Erkennen seiner Slave Adresse bzw. nach jedem geschriebenen Daten Byte mit einem Acknowledge. Bei einer Lese Sequenz quittiert der I2C Slave nach Erkennen seiner Slave Adresse mit Acknowledge. Nach jedem gelesenen Daten Byte quittiert der I2C Master mit einem Acknowledge dem Slave, dass er bereit ist, weitere Daten zu empfangen. Dabei wird zu einem ebenfalls vom Slave generierten Takt Impuls die Daten Leitung auf LOW gehalten.

           ____
          /    \ 
SCL _____/      \____
   
    ___          
       \           
SDA     \____________


No Acknowledge

Bei einer Lese Sequenz sendet der I2C Master nach dem Lesen des letzten Daten Byte ein No Acknowledge. Das bedeutet, er möchte keine weiteren Daten mehr lesen. Dabei wird zu einem ebenfalls vom Slave generierten Takt Impuls die Daten Leitung auf HIGH gehalten.

           ____
          /    \ 
SCL _____/      \____
   
         ____________
        /      
SDA ___/       


Stopp Bedingung

Die Stop Bedingung kennzeichnet das Ende einer Datenübertragung durch einen I2C Master. Der Master zieht die Datenleitung SDA von LOW auf HIGH, während die Taktleitung SCL auf HIGH bleibt.


         ____________
        /
SCL ___/
   
               ______
              /
SDA _________/

Adressierung

I2C Slave Adressen sind 7-Bit Adresse. Damit lassen sich an einem I2C Bus bis zu 128 Geräte betrieben. Sofern jeder über eine verschiedene I2C Adresse verfügt. Beim Senden eines I2C Befehls folgt nach der 7-Bit Adresse als letztes und niederwertigstes Bit die Schreib/Lese Kennung. Damit kennzeichnet der I2C Master die Richtung des Datentransfers. Eine '1' steht für Lesen, das heißt der Master will vom Slave lesen. Eine '0' dagegen bedeutet, der Master will schreiben.

Aufbau des I2C Adress Bytes:

+-------+-----+-----+-----+-----+-----+------+---------------------+
|BIT 7  |  6  |  5  |  4  |  3  |  2  |  1   |  BIT 0              | 
+-------+-----+-----+-----+-----+-----+------+---------------------+
|               I2C - Adresse[6..0]          |  Read=1 / Write = 0 | 
+-------+-----+-----+-----+-----+-----+------+---------------------+


In Programmen wird oftmals eine 8-Bit Adresse verwendet, weil damit einfacher zu rechnen ist. Dann ist die 7-Bit Adresse um 1 nach links geschoben (bzw. <7-Bit Adresse> x 2). Da das unterste Bit (LSB) für das Schreibe/Lese Bit verwendet wird. Beim I2C Tester Programm gilt dies auch für die Befehls Syntax. Während in Datenblättern immer die 7-Bit Adresse angegeben wird.

Folgende I2C Tester Syntax setzt die Slave Adresse auf 0x52. (0x52 x 2 = 0xA4)

SA A4

Beispiel Schreiben

Hier ein komplettes Beispiel für einen Schreib Befehl. Hier sendet der Master an die Slave Adresse 0x52 die Date 0x12. Das ganze wurde mit dem Logicport Logik Analysator von Intronix aufgezechnet. Dieser Logik Analysator verfügt über einen I2C Protokoll Interpreter. In der Zeile 'I2C Example' sieht man das Ergebnis des I2C Prokoll Interpreters. 'SDA' und 'SCL' sind die reinen Logik Signale.

I2c write.jpg

Beispiel Lesen

Hier ein komplettes Beispiel für einen Lese Befehl. Hier liest der Master an die Slave Adresse 0x52 die Date 0x72.

I2c read.jpg

Links