Jede Aktion auf dem I²C-Bus geht vom Master aus. Als Master dient hier ein PIC (z.B. PIC16F887).
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 (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.
Achtung:
Das hier beschriebene Protokoll zum I2C-Bus - also das Setzen und das Löschen der Leitungen SDA und SCL muss in der Software nicht nachgebildet werden. Diese Aufgabe übernimmt das Hardwaremodul MSSP des PIC16Fxx-Mikrocontroller. In der Software müssen nur die Steuerbits gesetzt (oder gelöscht) werden und die zu übermittelten Daten bereitgestellt oder abgeholt werden. Mehr dazu in den folgenden Abschnitten. |