I2C-Bus – Zuordnung, Gerät, Datenübertragung, Adressierung

Beim Erstellen einer elektronischen Schaltung stehen viele Entwickler vor der Notwendigkeit, eine große Anzahl von Zwischenchips für die Anpassung, Abtastung und Adressierung der einzelnen Blöcke zu verwenden. Um die Anzahl der Zusatzchips zu minimieren, schlug Philips bereits in den 1980er Jahren eine bidirektionale serielle I2C-Netzwerkschnittstelle mit zwei Drähten vor, die speziell für die Verwaltung mehrerer Chips in einem einzigen Gerät entwickelt wurde.

I2C-Bus – Zuordnung, Gerät, Datenübertragung, Adressierung

Heute produziert allein Philips mehr als hundert I2C-kompatible Geräte für elektronische Geräte mit den unterschiedlichsten Einsatzzwecken: Speicher, Videoprozessorsysteme, Analog-Digital- und Digital-Analog-Wandler, Anzeigetreiber usw.

I2C-Bus

Der I2C-Bus ist eine Modifikation des seriellen Datenaustauschprotokolls, das serielle 8-Bit-Daten im üblichen „schnellen“ Modus mit Geschwindigkeiten von 100 bis 400 kbps übertragen kann. Der Prozess des Datenaustauschs wird hier auf nur zwei Leitungen umgesetzt (die gemeinsame Leitung nicht mitgerechnet): SDA-Leitung für Daten und SCL-Leitung für die Synchronisation.

Der Bus wird bidirektional, da die Ausgangskaskaden der an den Bus angeschlossenen Geräte über offene Kollektoren oder Kanäle verfügen und so die UND-Verkabelung nachbilden. Dadurch minimiert der Bus die Anzahl der Verbindungen zwischen Chips, sodass weniger Pins und Leiterbahnen auf der Platine erforderlich sind. Dadurch fällt die Platine selbst einfacher, kompakter und technologisch fortschrittlicher in der Fertigung aus.

Mit diesem Protokoll können Sie Adressdecoder und andere externe Aushandlungslogik deaktivieren. Die Anzahl der Chips, die gleichzeitig am I2C-Bus betrieben werden können, ist durch seine Kapazität begrenzt – maximal 400 pF.

I2C-Protokoll

I2C-kompatible ICs verfügen über einen Hardware-Rauschunterdrückungsalgorithmus, um die Datenintegrität auch bei starken Störungen sicherzustellen. Solche Geräte verfügen über eine Schnittstelle, die es den Mikroschaltungen ermöglicht, auch bei unterschiedlichen Versorgungsspannungen miteinander zu kommunizieren. In der folgenden Abbildung können Sie sich mit dem Prinzip der Verbindung mehrerer Mikroschaltungen über einen gemeinsamen Bus vertraut machen.

Jedes an den Bus angeschlossene Gerät verfügt über eine eigene eindeutige Adresse, wird von dieser bestimmt und kann je nach Verwendungszweck des Geräts als Empfänger oder als Sender fungieren. Bei der Datenübertragung können diese Geräte Master (Master) oder Slave (Slave) sein. Der Master ist das Gerät, das die Datenübertragung initiiert und Taktsignale auf der SCL-Leitung erzeugt. Der Slave ist im Verhältnis zum Master das Zielgerät.

Geräteanschlussplan

Zu jedem Zeitpunkt des Betriebs am I2C-Bus kann nur ein Gerät als Master fungieren; Es erzeugt ein Signal auf der SCL-Leitung.Ein Master kann entweder ein Master-Empfänger oder ein Master-Sender sein.

Der Bus erlaubt prinzipiell mehrere unterschiedliche Master, erlegt jedoch Einschränkungen hinsichtlich der Eigenschaften der Steuersignalbildung und der Statusüberwachung des Busses auf; Dies bedeutet, dass mehrere Master gleichzeitig mit der Übertragung beginnen können. Konflikte dieser Art werden jedoch durch die Arbitrierung, also das Verhalten des Masters, wenn er erkennt, dass der Bus von einem anderen Master belegt ist, eliminiert.

Die Synchronisierung eines Gerätepaares wird dadurch gewährleistet, dass alle Geräte an den Bus angeschlossen sind und eine „UND“-Verkabelung bilden. Zu Beginn sind die SDA- und SCL-Signale hoch.

START und STOP

Der Austausch beginnt damit, dass der Master den Zustand „START“ generiert: Auf der SDA-Leitung geht das Signal vom High- in den Low-Zustand über, während die SCL-Leitung einen stabilen High-Pegel aufweist. Alle an den Bus angeschlossenen Geräte nehmen diese Situation als Befehl zum Starten des Austauschs wahr.


Start und Stopp – Synchronisationssignal

Jeder Master erzeugt bei der Datenübertragung auf dem Bus ein individuelles Taktsignal auf der SCL-Leitung.

Der Austausch endet mit der Bildung des STOP-Zustands durch den Master: Auf der SDA-Leitung wechselt das Signal von Low auf High, während die SCL-Leitung einen stabilen High-Pegel aufweist.

Als Quelle der START- und STOP-Signale fungiert stets der Fahrer. Sobald das Signal „START“ dauerhaft ertönt, bedeutet dies, dass die Leitung besetzt ist. Die Leitung ist frei, wenn ein STOP-Signal erkannt wird.

Datentransfer

Unmittelbar nach der Erklärung des START-Zustands schaltet der Master die SCL-Leitung auf Low und sendet das höchstwertige Bit des ersten Nachrichtenbytes an die SDA-Leitung. Die Anzahl der Bytes in einer Nachricht ist nicht begrenzt.Änderungen auf der SDA-Leitung werden nur aktiviert, wenn der Signalpegel auf der SCL-Leitung niedrig ist. Die Daten sind gültig und sollten nur dann nicht geändert werden, wenn der Synchronisierungsimpuls hoch ist.

Die Bestätigung, dass das Byte vom Master-Sender vom Slave-Empfänger empfangen wurde, erfolgt durch Setzen eines speziellen Bestätigungsbits auf der SDA-Leitung, nachdem das achte Datenbit empfangen wurde.

DIE BESTÄTIGUNG

Das Senden von 8 Datenbits vom Sender zum Empfänger endet also mit einem zusätzlichen Impuls auf der SCL-Leitung, wenn das empfangende Gerät auf der SDA-Leitung auf Low geht, was anzeigt, dass es das gesamte Byte empfangen hat.

Bestätigungssynchronisationsimpuls

Die Bestätigung ist ein integraler Bestandteil des Datenübertragungsprozesses. Der Master erzeugt einen Sync-Impuls. Der Sender sendet einen Low-Zustand an SDA, während der Bestätigungstakt aktiv ist. Während der Synchronimpuls hoch ist, muss der Empfänger SDA niedrig halten.

Wenn der Ziel-Slave seine Adresse nicht bestätigt, weil er beispielsweise gerade beschäftigt ist, muss die Datenleitung auf High gehalten werden. Der Master kann dann ein STOP-Signal geben, um den Versand abzubrechen.

Erfolgt der Empfang durch den Master-Empfänger, so ist dieser verpflichtet, den Slave-Sender nach Abschluss der Übertragung zu informieren – nicht durch Bestätigung des letzten Bytes. Der Slave-Sender gibt die Datenleitung frei, sodass der Master ein STOP-Signal oder ein wiederholtes START-Signal ausgeben kann.

Die Synchronisation der Geräte wird dadurch gewährleistet, dass die Verbindungen zur SCL-Leitung nach dem „UND“-Prinzip erfolgen.

Der Master hat nicht das alleinige Recht, den Übergang der SCL-Leitung von Low nach High zu steuern.Wenn der Slave mehr Zeit benötigt, um ein empfangenes Bit zu verarbeiten, kann er SCL unabhängig niedrig halten, bis er bereit ist, das nächste Datenbit zu empfangen. In einer solchen Situation ist die SCL-Leitung für die Dauer des längsten Synchronimpulses mit niedrigem Pegel niedrig.

Geräte mit dem niedrigsten anhaltenden Tiefstwert bleiben bis zum Ende des langen Zeitraums im Leerlauf. Wenn alle Geräte die niedrige Synchronisierungsperiode abgeschlossen haben, geht SCL auf hoch.

Alle Geräte beginnen mit der hohen Taktung und das erste Gerät, das seine Periode abschließt, ist das erste, das die SCL-Leitung auf niedrig setzt. Infolgedessen wird die Dauer des Low-Zustands von SCL durch den längsten Low-Zustand des Synchronisationsimpulses eines der Geräte bestimmt, und die Dauer des High-Zustands wird durch die kürzeste Synchronisationsperiode eines der Geräte bestimmt Geräte.

Synchronisationssignale können von Empfängern zur Steuerung der Datenübertragung auf Bit- und Byteebene genutzt werden.

Wenn das Gerät in der Lage ist, Bytes mit einer hohen Rate zu empfangen, es jedoch eine gewisse Zeit benötigt, um das empfangene Byte zu speichern oder sich auf den Empfang des nächsten Bytes vorzubereiten, hält es SCL möglicherweise weiterhin niedrig, nachdem es ein Byte empfangen und bestätigt hat, was dies erzwingt Sender in einen Standby-Zustand.

Ein Mikrocontroller ohne eingebaute Hardware-Schaltkreise, beispielsweise auf Bitebene, kann die Taktrate verlangsamen, indem er die Dauer seines Low-Zustands verlängert. Dadurch wird die Baudrate des Master-Geräts durch die Geschwindigkeit des bestimmt langsameres Gerät.


I2C-Bus

ADRESSIERUNG

Jedes an den I2C-Bus angeschlossene Gerät verfügt über eine eindeutige Programmadresse, unter der der Master es anspricht, indem er einen bestimmten Befehl sendet. Mikroschaltungen des gleichen Typs zeichnen sich durch einen Adresswähler aus, der entweder in Form digitaler Eingänge des Wählers oder in analoger Form implementiert ist. Die Adressen werden in den Adressraum der am Bus angeschlossenen Geräte eingeteilt.

Der Normalmodus geht von einer Sieben-Bit-Adressierung aus. Die Adressierung funktioniert wie folgt: Nach dem «START»-Befehl sendet der Master das erste Byte, das bestimmt, welches Slave-Gerät für die Kommunikation mit dem Master benötigt wird. Es gibt auch eine gemeinsame Rufadresse, die alle Geräte am Bus definiert. Alle Geräte antworten darauf (theoretisch) mit einer Bestätigung, in der Praxis ist dies jedoch selten.

Die ersten sieben Bits des ersten Bytes sind also die Slave-Adresse. Das niedrigstwertige Bit, das achte, gibt die Richtung der Datensendung an. Steht dort eine „0“, dann werden die Informationen vom Master auf diesen Slave geschrieben. Bei «1» werden die Informationen vom Master von diesem Slave gelesen.

Nachdem der Master das Senden des Adressbytes beendet hat, vergleicht jeder Slave seine Adresse damit. Jeder mit derselben Adresse ist ein Slave und wird je nach Wert des niedrigstwertigen Bits des Adressbytes als Slave-Sender oder Slave-Empfänger definiert.

Eine Slave-Adresse kann feste und programmierbare Teile enthalten. Nicht selten arbeiten in einem System viele Geräte des gleichen Typs, dann ermöglicht der programmierbare Teil der Adresse die Verwendung maximal gleicher Geräte am Bus. Wie viele Bits im Adressbyte programmierbar sind, hängt von der Anzahl der freien Pins auf dem Chip ab.

Manchmal reicht ein Pin mit analoger Einstellung des programmierbaren Adressbereichs, zum Beispiel der SAA1064 – ein LED-Anzeigetreiber, der genau eine solche Implementierung hat. Das Potenzial eines bestimmten Pins bestimmt den Offset des Adressraums des Chips, sodass Chips desselben Typs nicht in Konflikt geraten, wenn sie auf demselben Bus betrieben werden. Alle Chips, die den I2C-Bus unterstützen, enthalten einen Satz Adressen, die der Hersteller in der Dokumentation angibt.

Die Kombination «11110XX» ist für die 10-Bit-Adressierung reserviert. Wenn wir uns den Datenaustausch vom „START“-Befehl zum „STOP“-Befehl vorstellen, sieht das so aus:


Adressierung

Dabei sind einfache und kombinierte Datenaustauschformate erlaubt. Das kombinierte Format bedeutet, dass Master und Slave zwischen „START“ und „STOP“ als Empfänger und Sender fungieren können, was beispielsweise bei der seriellen Speicherverwaltung nützlich ist.

Lassen Sie das erste Datenbyte eine Speicheradresse übertragen. Wenn Sie dann den Befehl „START“ wiederholen und die Slave-Adresse lesen, funktionieren die Speicherdaten. Entscheidungen zum automatischen Erhöhen oder Erniedrigen der zuvor aufgerufenen Adresse werden vom Geräteentwickler getroffen, nachdem er zuvor die Chipdokumentation studiert hat. Auf die eine oder andere Weise müssen alle Geräte nach Erhalt des START-Befehls ihre Logik wiederherstellen und sich darauf vorbereiten, dass die Adresse nun benannt wird.

Wir empfehlen Ihnen zu lesen:

Warum ist elektrischer Strom gefährlich?