I²C-Protokoll I²C-Datenverkehr mit dem Oszilloskop analysieren

Redakteur: Dipl.-Ing. (FH) Hendrik Härter

Das I²C-Protokoll kommt mit zwei I/O-Verbindungen aus, weshalb es bei Entwicklern von Embedded-Systemen sehr beliebt ist. Kommen mehrere Geräte auf Basis des I²C-Protokolls zum Einsatz, können die Analyse des Datenverkehrs und die Signalauswertung mit einem digitalen Speicheroszilloskop erfolgen.

Anbieter zum Thema

Bild 2a: Die Write-Adressierung des 10-Bit-I²C-Modus
Bild 2a: Die Write-Adressierung des 10-Bit-I²C-Modus

In Embedded-Systemen wird häufig das von Philips Semiconductors entwickelte I²C-(Inter-Integrated-Circuit-)Protokoll verwendet. Im Gegensatz zu anderen Protokollen wie SPI und UART, die meistens mehrere fest zugeordnete I/O-Verbindung benötigen, kommt eine I²C-Kommunikation mit zwei I/O-Verbindungen aus.

Da I/O-Verbindungen in Embedded-Systemen immer knapp bemessen sind und die Entwickler angehalten sind so wenige Anschlüsse wie möglich pro Gerät zu verwenden, wird für die Kommunikation oft das I²C-Protokoll bevorzugt.

Bild 1: Der Screenshot zeigt eine I²C-Adresse und wie SDA und SCL Signale interpretiert werden, um einzelne Protokollbestandteile zu bestimmen
Bild 1: Der Screenshot zeigt eine I²C-Adresse und wie SDA und SCL Signale interpretiert werden, um einzelne Protokollbestandteile zu bestimmen
Wenn ein Embedded-System verwendet wird das über mehrere I²C-Geräte verfügt, kann die Fehlersuche auf dem I²C-Bus jedoch sehr langwierig sein. Wird für die Fehlersuche ein modernes Digitalspeicher-Oszilloskop verwendet, kann man als Entwickler den I²C-Datenverkehr und die zugehörigen Signale analysieren ohne das System trennen zu müssen.

Das I²C-Protokoll verstehen

Bild 2a: Die Write-Adressierung des 10-Bit-I²C-Modus
Bild 2a: Die Write-Adressierung des 10-Bit-I²C-Modus
Für Entwickler ist es wichtig das Protokoll durch und durch zu verstehen, damit die richtigen Werkzeuge für die Fehlersuche ausgewählt werden können. Der I²C-Bus ist ein serielles Multi-Master-, Single-Ended-Protokoll, das mehrere Slaves und mehrere Master auf dem gleichen Bus zulässt.

Ergänzendes zum Thema
Der I²C-Bus in Kürze

I²C, Inter-Integrated Circuit, ist ein serieller Datenbus, der von Philips entwickelt wurde. Hauptsächlich sollen geräteintern Daten mit niedrigen Übertragungsgeschwindigkeiten ausgetauscht werden. Der Bustakt erfolgt immer vom Master zum Slave. Die Taktraten reichen mit 100 kHz im Standard Mode bis 3,4 MHz im High Speed Mode. Ein Mikrocontroller kann ein ganzes Netzwerk an integrierten Schaltungen mit nur zwei I/O-Pins und einer einfachen Software kontrollieren.

Bild 2b: Die Read-Adressierung des 10-Bit-I²C-Modus
Bild 2b: Die Read-Adressierung des 10-Bit-I²C-Modus
Es besteht aus zwei bidirektionalen Leitungen, “Serial Clock Line“ (SCL) und “Serial Data Line“ (SDA) die mit Pull-up-Widerständen auf High gelegt werden. Diese beiden Leitungen zusammen werden allgemein als I²C-Bus bezeichnet, über den die Kommunikation zwischen allen I²C-Geräten (mehrere Master und mehrere Slaves) stattfindet. Das I²C-Protokoll kennt vier Modi:

  • Standard Modus 100 kHz
  • Fast Modus 400 kHz
  • Fast Modus-Plus 1 MHz und
  • High Speed Modus 3,4 MHz

Das Protokoll besteht aus einem Start-Bit, Adress-Bits, Read/Write-Bit (R/W), Datenbyte, Acknowledge-Bit (ACK), No-Acknowledge-Bit (NACK), Stopp-Bit und Restart-Bit, welches gleich dem Start-Bit ist, dem aber kein Stop-Bit voraus geht.

  • Datenbyte: Wird von dem sendenden Gerät übertragen (Master oder Slave)
  • Acknowledge-Bit (ACK):Befindet sich bei dem neunten SCL Taktpuls. Das empfangende Gerät sendet das Bit, während es die SDA-Leitung auf Low zieht.
  • No-Acknowledge-Bit: Wird gesendet, wenn das empfangende Gerät die SDA Leitung nicht auf Low ziehen kann. Die Übertragung wird beendet wenn ein NACK empfangen wird.
  • Stopp-Bit: Wird immer vom Master zur Beendigung der Kommunikation gesendet. Es ist definiert als ein Wechsel der SDA-Leitung von Low nach High während die SCL-Leitung auf High ist.

Fehlersuche beim I²C-Protokoll

Embedded-Entwickler müssen die I²C-Nachrichten verstehen die in deren System hin- und hergeschickt werden. Sie müssen in der Lage sein, anhand der Adresse eines bestimmten Gerätes die Nachrichten, die an dieses Gerät gesendet werden, zu identifizieren, um dann die Nutzdaten/Datenbytes, die zwischen den Geräten gesendet werden, zu analysieren.

(ID:23284390)