I²C-Routinen (für PIC-Mikrocontroller, Elektronik)


zurück zu Elektronik, Homepage


2. I²C-Protokoll

Jede Aktion auf dem I²C-Bus geht vom Master aus. Als Master dient hier ein PIC (z.B. der PIC16F84 oder PIC16F62x). Die erste Aufgabe des Masters einer jeden Datenübertragung ist das erzeugen der Startbedingung. Die Startbedingung ist wie folgt definiert: Auf der Datenleitung (SDA) erfolgt eine High-Low-Flanke, während die Taktleitung (SCL) High ist. Damit wird gekennzeichnet, dass auf dem I²C-Bus ein Datenverkehr stattfindet. Würden sich auf dem Bus weitere Master befinden (Multi-Master-Mode) so dürfen diese jetzt keine Datenübertragung zu einem Slave beginnen, da der Bus jetzt belegt ist.
Nun muss der Master die Adresse des Slaves mit welchem er kommunizieren möchte bekannt geben. Zu diesem Zweck besitzt jeder Slave eine Adresse. Diese Adresse besteht in den meisten Fällen aus einem vom Hersteller festgelegtem Bauteilkode und einer Bausteinadresse, welche durch Beschaltung dafür reservierter Anschlüsse wählbar ist. So ist es möglich mehrere gleichartiger Bausteine an einem Bus anzuschließen. (Z.B. mehrere Speicherbausteine oder mehrere Porterweiterungsbausteine.)
Nach der Bauteiladresse (diese besteht in den meisten Fällen aus 7 Bit oder aus 10 Bit) erfolgt als nächstes die Bekanntgabe der Übertragungsrichtung. Möchte der Master (also der PIC) von einem Slave Daten lesen, so erfolgt als Übertragungsrichtung ein Low (0). Möchte der Master (PIC) zu einem Slave Daten (oder Befehle) übertragen, so erfolgt als Übertragungsrichtung ein High (1).
Die Adresse und das Bit welches die Übertragungsrichtung festlegt werden auch als Kontrollbyte bezeichnet.

Nach dem Kontrollbyte muss der Master auf ein Bestätigungsbit vom adressierten Slave warten.

Je nach Slave kann nun entweder ein Datenbyte oder mehrere Datenbytes vom Master zum Slave oder vom Slave zum Master übertragen werden.
Werden Daten vom Master zum Slave Übertragen (Schreibvorgang), so muss der Master nach jedem übertragenen Byte auf eine Bestätigung vom Slave warten.
Erfolgt der Datenverkehr in die andere Richtung (also vom Slave zum Master, man spricht hier auch von einem Lesevorgang) so muss der Master jedes empfange Byte bestätigen.

Sind alle Daten übertragen, muss der I²C-Bus wieder freigegeben werden. Diese Freigabe erfolgt mit einer Stoppbedingung. Die Stoppbedingung ist wie folgt definiert: Auf der Datenleitung (SDA) erfolgt eine Low-High-Flanke, während die Taktleitung (SCL) High ist. Der I²C-Bus ist nun frei und kann von einem anderen Master zur Datenübertragung benutzt werden.

Das folgende Bild zeigt zur besseren Verdeutlichung nochmals den gesamten Vorgang.

I²C-Protokoll
nach oben


zurück zu Elektronik, Homepage

Autor: Buchgeher Stefan
Erstellt: 17. Oktober 2003
Letzte Änderung: 10. Oktober 2004