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.