I2C-Bus

 


 

Einleitung

Beim I²C handelt es sich um einen Datenbus. Das bedeutet es handelt sich um ein Verfahren wie zwischen verschiedenen Teilnehmern kommuniziert wird.
Beispielsweise wie ein µC mit Displays und Sensoren kommuniziert.
Das Besondere beim I2C ist das mit lediglich 2 Leitungen mit normalerweise bis zu 128 Teilnehmern kommuniziert werden kann. Das Ganze funktioniert per serieller Datenübertragung, die Daten werden also hintereinander über eine Leitung geschickt und der I2C-Bus definiert den Ablauf wie das von statten geht.

 

 

Übertragungsrate

0,1Mbit/s (Standard)

Takt

Synchron

Datenübertragung

Seriell

Richtung

Bidirektional

 
 

Aufbau

Der I²C besteht aus mehreren Teilnehmern die zusammen kommunizieren.

Bei den Teilnehmern wird zwischen 2 Arten unterschieden. Die Master und die Slaves.
Beispielsweise könnte ein µC der Master sein und Sensoren, Displays usw. Slaves.
Normalerweise gibt es einen Master (wenn mehrere Mastern = „Multi-Master-Bus“) und von den Slaves darf es nicht mehr als 127 geben.
Die Kommunikation findet immer zwischen Master und Slaves statt aber zur genauen Funktion, unten mehr.
Wie bereits erklärt besteht der I2C-Bus lediglich aus 2 Leitungen. Die Teilnehmer werden an diese angeschlossen. Es handelt sich dabei einmal um SDA steht für serial data. Auf dieser Leitung werden, namensgebend, die Daten seriell übertragen.
Alle Leitungen funktionieren Bidirektional d.h. die Daten können in beide Richtungen fließen.
Die zweite Leitung ist die SCL, serial clock. Hier werden Takt impulse gesendet.
Alle Teilnehmer verwenden einen gemeinsamen Bustakt deshalb handelt es sich hierbei um einen sogenannten synchronen Bus.

 




 

Erklärung

Das Prinzip des I²C lässt sich einfach vorstellen indem man ein Beispiel betrachtet.
Der Master ist ein Mikrocontroller bzw. ein Computer.
Als Slave gibt es Temperatursensor oder beispielsweise ein.
Wie der Name schon sagt Slave und Master. Die Slaves sind quasi Arbeiter, Sklave die das ausführen was der Master ihnen sagt. Und so ist es auch beim I2C.
Der Master bestimmt wer auf der Leitung kommuniziert und das ist so wichtig da wir eben nur eine Leitung haben und dort alles ganz geordnet von statten gehen muss.
Im konkreten bedeutet das: Der Master kann entweder Daten an Slaves senden oder eben Slaves auffordern ihm Daten zu schicken. Ein Slave kann aber nie von sich aus Daten schicken oder ähnliches. Nur eben wenn er dazu aufgefordert wird.

 




 

Ablauf

Wie bereits erklärt werden bei I2C Bus Daten seriell gesendet. Des bedeutet alle Daten werden hintereinander gesendet. Deshalb gibt es das sogenannte Protokoll welches genau vorschreibt in welcher Reihenfolge welche Daten geschickt werden.
Das Protokoll ist also quasi so eine Art Anleitung oder Regelwerk damit alles geordnet von statten geht und jeder immer bescheid weiß wann was geschickt wird.
Das Protokoll ist unten gezeigt und wird im Folgenden näher erklärt.

 
Start-Condition
Als erstes sendet der Master eine sogenannte „Start-Condition“. Dadurch werden alle Slaves hellhörig und hören genau zu was auf der Datenleitung folgend gesendet wird.

 
Adresse
Nach der Start-Condition sendet der Master nämlich die Adresse des Slaves mit dem er kommunizieren will. Diese Adresse besteht beim Standard I2C aus 7 Bit.

 
Write / Read
Nach der Adresse setzt er noch ein bit , write 0 oder read 1, spricht ob Daten vom Master zum Slave gesendet werden oder ob der Master Daten vom Slave haben möchte. Beispielsweise ob er die Temperatur eines Temperatur Sensors haben will oder ob er beispielsweise Daten zu einem Display sendet um etwas anzuzeigen.

 
Acknowledge
Hat der Slave bis hier hin alles verstanden, sendet der Slave ein sogenanntes Acknowledge-Bit also eine Bestätigung das er bereit für die Kommunikation ist. 0 Bedeutet verstanden. Sobald der Master dieses Acknowledge empfängt sendet er Daten oder empfängt nach dem Acknowledge die Daten des Slaves, jenachdem wie das read/write bit gesetzt ist.

 
Datenpaket
Die Daten sind in sogenannten Datenpaketen verpackt. Jedes Datenpaket besitzt 8Bit also 1 Byte. Ist es sendendet folgt ein Acknowledge-Bit und darauf folgenden kommt das nächst Datenpaket. So können beliebig viele Datenpakete versende werden.

 
Acknowledge
Sobald alle Daten verschickt wurden, kommt das Acknowledge.

 
Stop-Condition
Danach die sogenannte Stop-Condition. Dabei geht die Datenleitung auf High während wie Clockleitung auch auf High ist.

 




 

Pull-Up Widerstände

Zunächst die Besonderheit: Wenn auf dem I²C Bus nichts kommuniziert wird, nichts stattfindet, sind die beiden Busleitungen SDA und SCL beide auf High, beispielsweise 5V. Um dieses Verhalten zu erreichen wird an beide Leitungen ein Pull-Up Widerstand verbaut. Wird kommuniziert, ist auf der Taktleitung, klar ein Takt und auf den Datenleitung passiert folgendes:

 

Start- Stop-Condition

Normalerweise darf die Datenleitung nur den Zustand ändern, wenn der Takt auf Low ist, wie hier gezeigt. Eine Ausnahme wird bei der Start und Stop Condition gemacht.

 

Zeitdiagramm

Das Zeitdiagramm soll die die I2C Kommunikation in der Praxis zeigen.

 
Start
Bei Start wird der Dateneingang auf Low gesetzt, während die Taktleitung auf High ist. Dann ist klar die Kommunikation beginnt.
Im Folgenden passiert alles wie bereits erklärt.

 
Adresse
Es kommt die 7 Bit große Adresse, wie hier gezeigt, ganz klassisch 1 ist high und 0 ist Low. Dann kommt das Read/Write Bit, 0 für Write Schreiben und 1 für Read lesen, in diesem Beispiel wird also geschrieben also vom Master zum Slave gesendet.

 
Acknowledge-Bit
Das nächste Bit ist das Acknowledge-Bit welches zur Bestätigung auf Low stehen muss.

 
Datenpaket
Danach kommt das Datenpaket in Größe von einem Byte ebenfalls ganz klassisch 1 ist high und 0 ist Low.

 
Acknowledge-Bit
Nach dem Datenpaket folgt eine Bestätigung, das Acknowledge-Bit.

 
Stop
Zum Schluss kommt die Stop-Condition hierzu geht die Datenleitung auf High während die Clockleitung auch auf High ist.