Der I2C-Bus ist von Philips entwickelt worden und wurde in der ersten Zeit speziell für die Steuerung von Video-und Audio-IC’s verwendet. Seitdem wurde aber auch der
I2C-Bus für Module in der Industrie
entdeckt, da er nur 2 IO-Pins am µC benötigt. Der I2C-Bus arbeitet
mit den Leitungen SCL (Clock) und SDA (Daten). Beide Leitungen werden über je
eine Stromquelle mit Ii2cmax=3mA – die in der Regel aus einem Widerstand
besteht – auf den 1 Pegel gesetzt, wenn
weder Master noch Slave aktiv sind. Daher arbeitet weder der Master, noch der
Slave im Push-Pull-Betrieb, sondern setzt den Ausgang auf den 0-Pegel oder wird
hochohmig. Da der 1-Pegel daher rezessiv ist, ist ein Multimasterbetrieb einfach
zu realisieren, indem im Adressenfeld des Telegramms die niederwertigste Adresse
bei gleichzeitigem Senden die 1-Pegel überlagert und so eine einfache Arbitrierung
ermöglicht.
Abb. 9‑1 : I2C Aufbau
Gestartet wird eine Übertragung mit einer
Startbedingung in dem bei SCL=1, die Leitung SDA auf 0 gesetzt wird. Beendet
wird die Übertragung indem bei gesetztem SCL die SDA-Leitung wieder auf 1 gesetzt
wird. Die Übertragung eines Bits erfolgt, indem zuerst das Datenbit gesetzt
wird, um anschließend nach einer Setupzeit die SCL-Leitung auf 1 und dann wieder
zurückzusetzen. Erst nach einer weiteren Setupzeit darf dann die Datenleitung
wieder zurückgesetzt werden.
Abb. 9‑2 : I2C Übertragungsformat
Ein komplettes Telegramm zum Senden von
Daten an einen Slave besteht aus der Startbedingung, der Adresse, dem RW-Bit,
einem Acknowlegde-Bit und weiteren Datenbytes mit je einem Acknowledge-Bit im
Anschluss. Ein Acknowledge-Bit bestätigt den Empfang von Daten, indem der Empfänger
gültige Daten durch das Setzen der SDA-Leitung auf 0 bestätigt. Wenn der Master
Daten anfordert, so sendet er eine gültige Adresse mit dem RW-Bit
auf 1-Pegel gesetzt und erwartet ein Ack-Bit vom Slave. Anschließend
sendet der Slave mit jedem SCL-Takt seinen Daten auf die SDA-Leitung und der
Master muss jedes Byte mit einem Ack-Bit bestätigen. Das letzte Ack-Bit kann
vom Empfänger nicht bestätigt werden, um anzuzeigen, dass keine weiteren Daten
empfangen werden sollen.
Abb. 9‑3 : I2C Übertragungsformat
Der I2C-Bus ist billig als
Master in einem Mikrocontroller zu implementieren. Zudem benötigt er nur 2 IO-Pins
an einem Mikrocontroller. Die Flankensteilheit lässt sich zumindest bei den
positiven Flanken gut kontrollieren.
Der I2C-Bus ist nicht gegen Fehler gesichert ist und ist relativ langsam. Die Implementation eines Slaves per Software erfordert erhöhte Fähigkeiten, was die Start- und Stopbedingung betrifft, da diese Zeitkritisch sind. Allerdings besteht immer noch die Freiheit die Vorgaben von Philips in eigenen Implementationen einzuschränken.
Tabelle der wichtigsten Merkmale (pdf)