Grundlagen der I³C SYSTEMSCHNITTSTELLEN-Kommunikation vs I²C

Grundlagen der I³C SYSTEMSCHNITTSTELLEN-Kommunikation vs I²C

Im Englischen Original vom 5. Dezember 2022 von ROBERT PERKEL

I³C ist ein neues serielles Kommunikationsprotokoll für eingebettete Systeme, das einen deutlich höheren Datendurchsatz und erweiterte Funktionen als I²C bietet. Mit I³C können Ingenieure und Designer die Leistung ihrer Designs verbessern und gleichzeitig neue Funktionen wie Hot-Join, In-Band-Interrupts (IBI) und HDR-Modi (High Data Rate) hinzufügen. Darüber hinaus ist I³C abwärtskompatibel und kann mit älteren I²C-Zielen kommunizieren.

Tabelle 1 faßt die Unterschiede zwischen I³C und I²C zusammen.

Tabelle 1 Die obigen Daten zeigen, daß I³C einen deutlich höheren Datendurchsatz und erweiterte Funktionen als I²C bietet. Quelle: Microchip

Notes:

  1. Nennwert. Andere Werte sind nicht zulässig.

  2. Die Taktdehnung kann vom aktiven Controller (nicht vom Ziel) mit Einschränkungen hinsichtlich Timing und Busstatus durchgeführt werden.

  3. HDR ist für die grundlegende I³C-Kommunikation nicht erforderlich. I³C-Busse unterstützen die HDR-Kommunikation auch dann, wenn nicht fähige Geräte angeschlossen sind. Weitere Informationen finden Sie unter Modi für hohe Datenraten (HDR).

Bus-Geschwindigkeit

Die auffälligste Änderung zwischen I²C und I³C ist die Taktrate. I²C ist normalerweise 100 kHz, 400 kHz oder 1 MHz, während I³C Geschwindigkeiten von bis zu 12,5 MHz erreichen kann. Einer der Hauptfaktoren für diesen Anstieg ist die Verwendung von Gegentaktausgängen in I³C. I³C schaltet je nach Buszustand zwischen Open-Drain- und Gegentakttreibern um. Open-Drain wird während der anfänglichen Adressierung oder Arbitrierung verwendet, bei der mehrere Ziele die Leitung gleichzeitig steuern können. Im Gegensatz dazu wird Push-Pull verwendet, wenn die Kommunikation unidirektional ist und keine Möglichkeit besteht, dass ein anderes Gerät gleichzeitig kommuniziert.

Elektrische Eigenschaften

Im Gegensatz zu I²C benötigt I³C keine externen Pull-Up-Widerstände, da der Hauptcontroller am Bus diese Funktionen bereitstellt. I²C hat einen weiten Betriebsbereich, wobei 3,3 V und 5 V am häufigsten vorkommen. I³C hat drei Nennpegel: 1,2 V, 1,8 V und 3,3 V. Andere Betriebsbereiche sind jedoch zulässig.

Geräte-Adressierung

I²C unterstützt die 7-Bit- und 10-Bit-Adressierung von Zielgeräten. Mit I³C wird nur 7-Bit-Adressierung unterstützt. I³C verwendet jedoch eine dynamische Adressierung, bei der der aktive Controller jedem Ziel eine eindeutige Adresse zuweist, um Adresskollisionen zu verhindern. Dies steht im Gegensatz zu I²C, wo Entwickler die aktuell verwendeten Adressen verfolgen müssen, um zu verhindern, daß zwei Geräte dieselbe Adresse verwenden. Die dynamische Adressierung von Zielen erfolgt während der Businitialisierung.

In-Band-Interrupts und Hot-Join

In I²C gibt es keinen Mechanismus, mit dem ein Ziel dem Controller anzeigt, dass Daten bereit sind, ohne eine zusätzliche E / A-Leitung zu verwenden. In I³C können Zielgeräte jedoch einen Interrupt über die Leitungen Serial Data (SDA) und Serial Clock (SCL) signalisieren, wodurch es zu einem echten Zweidrahtprotokoll wird. Ebenso wird diese Art der In-Band-Signalisierung auch verwendet, um die Hot-Join-Funktionalität in I³C zu implementieren, sodass Geräte nach der anfänglichen Adresszuweisung beitreten können. Im Abschnitt In-Band-Interrupts (IBI) und Adreß-Arbitrierung wird dies ausführlicher erörtert.

Aktive und sekundäre Controller

I²C unterstützt Multi-Controller-Busse, bei denen mehrere Geräte als Controller arbeiten, aber jeweils nur eines aktiv kommuniziert. In I³C kann jedoch nur ein Gerät der aktive Controller sein; andere fähige Geräte können anfordern, der aktive Controller auf dem Bus zu werden. Ein solches Gerät ist als Sekundärregler bekannt. Wenn ein sekundärer Controller nicht als aktiver Controller fungiert, fungiert er als I³C-Ziel.

I²C-Unterstützung

I³C unterstützt die Kommunikation mit I²C-Zielgeräten. Damit Kommunikation möglich ist, müssen die I²C-Ziele:

  • eine 7-Bit-Adresse haben
  • nicht den Takt ändern

Es wird auch dringend empfohlen, daß das I²C-Target 50-ns-Filter an seinen Eingängen enthält. Wenn diese Anforderungen erfüllt sind, ist das I²C-Target mit dem I³C-Bus kompatibel. Darüber hinaus können einige I³C-Geräte als I²C-Ziel betrieben werden, bis ihnen eine dynamische Adresse zugewiesen wird. Im I²C-Modus verfügt das I³C-Gerät über eine statische Adresse für die Kommunikation. Diese statische Adresse ist nicht unbedingt die gleiche wie die dynamische Adresse, kann aber auf Wunsch gleich zugewiesen werden. Ein Beispiel für einen I³C-Bus ist unten gezeigt.

Abbildung 1 Das Diagramm zeigt einen I³C-Bus. Quelle: Microchip

Grundlagen der I³C-Kommunikation

Bevor eine Kommunikation auf einem I³C-Bus beginnen kann, muß der Bus konfiguriert und den Zielen dynamische Adressen zugewiesen werden.

Dann beginnt die Kommunikation wie bei I²C. Eine Startbedingung wird generiert, dann wird eine dynamische 7-Bit-Adresse gesendet, mit einem R / nW-Bit gefolgt von einem ACK oder NACK vom Ziel. Als nächstes verwendet I³C serielle 9-Bit-Übertragungen wie I²C, aber die Funktion des 9. Bits wurde von ACK / NACK zu einem Übergangsbit oder T-Bit geändert. Das T-Bit hat zwei Funktionen; Wenn der Controller in ein Ziel schreibt, ist das T-Bit ein Bit mit ungerader Parität des gesendeten Datenbytes. Wenn ein Controller von einem Ziel liest, wird das T-Bit als Datenende-Flag verwendet.
Dieses Flag kann entweder vom Controller aktiviert werden, um zu signalisieren, dass das Lesen der Daten abgeschlossen ist, oder vom Ziel, um zu signalisieren, dass keine Daten mehr zurückgegeben werden müssen. Um die Datenübertragung abzuschließen, generiert die Steuerung die STOPP- oder Wiederanlaufbedingung auf dem Bus. Beachten Sie, daß bei einem Neustart der Header im Gegentakt übertragen wird, da keine Arbitrierung erfolgt.

Abbildung 2 Ein vereinfachtes Diagramm der Datenübertragung in I³C ist hier mit einem Daten-Byte dargestellt. Quelle: Microchip

Eine entscheidende Änderung bei I³C ist die fehlende Taktdehnung. I²C verwendet Clock Stretching, um Zielgeräten mehr Zeit für die Verarbeitung zu geben, bevor Daten zurückgegeben werden. Bei I³C wird die Uhr nur vom aktiven Controller angesteuert – im SDR (Single Data Rate) Modus. Daher kann eine Taktdehnung von der Steuerung nur unter begrenzten Umständen durchgeführt werden.

Die Zielvorrichtung kann jedoch Geschwindigkeitsbeschränkungen während des Businitialisierungsprozesses anzeigen, um eine maximale Betriebsfrequenz, Lese- und Schreibdurchlaufzeiten und andere Zeitparameter anzuzeigen.

Gemeinsame Befehlscodes (CCC)

Common Command Codes (CCC) sind ein neues Konzept in I³C. CCCs werden vom aktiven Controller verwendet, um den I³C-Bus zu initialisieren und / oder zu konfigurieren. CCCs können an jedes Ziel gesendet oder privat an ein bestimmtes Ziel gerichtet werden. Um einen CCC zu senden, senden Sie zuerst die Adresse 7’H7e / W. Alle I³C-Geräte müssen diese Adresse bestätigen und abhören. I²C-Geräte können dieser Adresse nicht entsprechen, da 7’H7e gemäß der I²C-Spezifikation reserviert ist. Als nächstes senden Sie den CCC-Code. Bei CCCs, die Daten in Ziele schreiben, senden Sie die Daten weiter, bis sie abgeschlossen sind. Senden Sie für CCCs, die Werte lesen, alle Parameter (nach Bedarf), starten Sie den Bus neu und beginnen Sie mit dem Lesen von Daten.

Es gibt zu viele CCCs, um darüber zu diskutieren, aber hier ist eine Auswahl der Wichtigsten:

Dynamische Adresszuweisung (ENTDAA) eingeben

Dynamische Adresszuweisung eingeben benachrichtigt alle Ziele, dass der aktive Controller dynamische Adressen zuweist. Wenn einem Ziel bereits eine Adresse zugewiesen ist, wird dieser Befehl deaktiviert.

Neue dynamische Adresszuweisung setzen (SETNEWDA)

Neue dynamische Adresszuweisung festlegen wird verwendet, um die dynamische Adresse eines Geräts zu ändern.

Ereignisse aktivieren (ENEC)/Ereignisse deaktivieren (DISEC)

Ereignisbefehle aktivieren oder deaktivieren geben an, ob Ereignisse wie Hot-Join oder In-Band-Interrupts derzeit auf dem Bus zulässig sind.

Dynamische Adreß-Zuweisung zurücksetzen (RSTDAA)

Dynamische Adresse zurücksetzen löscht die aktuell zugewiesene Adresse, weist sie jedoch nicht neu zu. In v1.1 der I³C-Spezifikation ist die direkte Form der dynamischen Adresszuweisung zum Zurücksetzen veraltet.

Maximale Leselänge festlegen (SETMRL) / Maximale Leselänge abrufen (GETMRL)

Set or Get Max Read Length gibt die maximale Anzahl von Bytes an, die gleichzeitig gelesen werden können.

Maximale Schreiblänge festlegen (SETMWL) / Maximale Schreiblänge abrufen (GETMWL)

Maximale Schreiblänge festlegen oder abrufen legt die maximale Anzahl von Bytes fest, die gleichzeitig gelesen oder geschrieben werden können.

Gerätekennzeichenregister abrufen (GETDCR)

Das Device Characteristics Register oder DCR ist ein Register, das angibt, um welche Art von Gerät es sich bei dem Ziel handelt. Ein Beispiel hierfür wäre Code 0xC6, der Code für einen Mikrocontroller. Die I³C-Spezifikation definiert DCR-Werte. Eine Liste dieser Codes ist bei der MIPI Alliance erhältlich (I3C Device Characteristics Register | MIPI).

Bus-Kennlinienregister abrufen (GETBCR)

Das Bus Characteristics Register oder BCR ist ein Register, das definiert, welche I³C-Fähigkeiten auf dem Ziel vorhanden sind. Dieses Register wird auch verwendet, um festzustellen, ob eine Geschwindigkeitsbeschränkung für das Ziel erforderlich ist.

Zielruheaktion (RSTACT)

Die Zielrücksetzaktion in CCC definiert, was mit Zielen geschieht, wenn das In-Band-Rücksetzmuster erkannt wird. Um einen Reset zu erzeugen, wird SDA niedrig gehalten, während SCL 14 Mal getaktet wird, gefolgt von einem Neustart und dann einem STOPP. Ziele erkennen das In-Band-Reset-Muster und handeln entsprechend dem, was ihnen zugewiesen wurde. Dieser CCC löst KEINEN Reset aus, sondern weist das Zielverhalten zu. Wenn nach diesem Befehl nicht zurückgesetzt wird, löscht die nächste Startbedingung die zugewiesene Aktion.

Modus für hohe Datenrate (ENTHDRx) aufrufen

Schließlich gibt es den Eintrag CCC mit hoher Datenrate oder HDR. Dieser CCC zeigt an, daß der aktive Controller in einen der vier HDR-Modi (0, 1, 2 oder 3) wechselt.

Modi mit hoher Datenrate (HDR)

Derzeit gibt es vier HDR-Modi, die in der I³C-Spezifikation definiert sind.

  • HDR doppelte Datenrate (HDR-DDR) [Modus 0]
  • HDR ternäres Symbol reiner Bus (HDR-TSP) [Modus 1]
  • Ternäres HDR-Symbol Legacy-inklusive-Bus (HDR-TSL) [Modus 2]
  • HDR-Schüttguttransport (HDR-BT) [Modus 3]

In HDR ändert die Taktrate nichts an der Art und Weise, wie Daten codiert werden. HDR ist für die I³C-Basiskommunikation nicht erforderlich. Geräte, die HDR nicht unterstützen, ignorieren die Kommunikation, bis sie das HDR-Austrittsmuster erkennen.

HDR-DDR

HDR-DDR ist ein Modus, der beide Flanken der Uhr zur Datenübertragung verwendet. Dies erhöht die Datenrate des Busses erheblich (verdoppelt sie jedoch nicht aufgrund des zusätzlichen Overheads im Protokoll).

HDR-TSP und HDR-TSL

In HDR-TSP und HDR-TSL werden Daten ternär übertragen, wobei drei definierte Symbole aus den SDA- und SCL-Leitungen erstellt werden. Aus der Spezifikation sind die Symbole elektrisch definiert durch:

• Nur SCL-Änderungen

• Nur SDA-Änderungen

  • Sowohl SCL- als auch SDA-Änderungen

Die Wahl zwischen HDR-TSP und TDR-TSL hängt davon ab, ob ein I²C-Ziel vorhanden ist. HDR-TSP kann nur verwendet werden, wenn I³C-Ziele vorhanden sind, während HDR-TSL verwendet wird, wenn ein Legacy-I²C-Ziel vorhanden ist.

HDR-BT

HDR-BT ermöglicht die gleichzeitige Verwendung mehrerer Datenspuren für mehr Parallelität. Aus Kompatibilitätsgründen wird nur das niedrigstwertige Bit oder LSB der SDA-Leitung für die SDR-Kommunikation (Single Data Rate) verwendet. HDR-BT unterstützt Dual- und Quad-Line-Konfigurationen.

Abbildung 3 zeigt eine Beispielkonfiguration.

Abbildung 3 Das Diagramm zeigt ein Beispiel für einen gemischten I³C-Bus mit HDR-BT-Unterstützung. Quelle: Microchip

In-Band-Interrupts (IBI) und Adreß-Arbitrierung

Im Gegensatz zu I²C können Ziele die Startbedingung für IBI generieren, wenn der Bus im Leerlauf (oder frei) ist. Dies geschieht, wenn für eine bestimmte Zeit keine Transaktionen stattfinden. Wenn der aktive Controller die Startbedingung vom Ziel erkennt, liefert er das Taktsignal, um die Transaktion abzuschließen. Wenn zwei Ziele versuchen, gleichzeitig zu kommunizieren, wird eine Adressierungsarbitrierung durchgeführt.

Arbitrierung ist der Prozess der Bestimmung, welches Gerät mit dem Controller kommunizieren darf. Angenommen, zwei Geräte, A und B, möchten gleichzeitig mit dem aktiven Controller sprechen. Gerät A hat eine Adresse von 7’h10, während Gerät B eine Adresse von 7’h14 hat. Wenn ein In-Band-Interrupt generiert wird, versuchen beide Geräte, ihre Adresse an den aktiven Controller zu übertragen. In diesem Buszustand ist die Datenleitung Open-Drain. Bei Open-Drain-Kommunikation kehrt die Leitung über einen Pull-Up-Widerstand passiv auf “1” zurück und kann aktiv auf “0” gesetzt werden. Dies verhindert einen Kurzschluß von zwei Geräten, die gleichzeitig 1 und 0 senden.

image

Abbildung 4 Eine vereinfachte Ansicht der SDA-Leitung zeigt, wie der Pull-up-Widerstand im Hauptcontroller aufgebaut ist. Quelle: Microchip

Die Gewinneradresse im Schiedsverfahren ist diejenige, die der Controller erhält. Im Anschluss an Abbildung 5 werden zunächst die beiden Nullen von jeder Geräteadresse übertragen. Als nächstes geben beide die Datenleitung für die “1” in ihrer Adresse frei. Dann wird von beiden eine weitere 0 übertragen. Zu diesem Zeitpunkt hat keines der Geräte die Schlichtung gewonnen, da die empfangene Adresse zu diesem Zeitpunkt mit beiden übereinstimmt. Mit diesem nächsten Bit gibt jedoch eines der Ziele die Datenleitung frei, um eine “1” zu senden, während das andere versucht, eine “0” zu senden.

Abbildung 5 Das Beispiel zeigt die I³C-Arbitrierung mit den Adressen 7’h10 und 7’h14. Quelle: Microchip

Der Sender der “1” verliert die Arbitrierung, da die “1” passiv von der Open-Drain-Konfiguration angesteuert wird, während das andere Ziel aktiv die “0” bestätigt. Wenn Sie den Rest der Sendesequenz abschließen, sehen Sie, daß der Controller die Adresse 7’h10 und nicht 7’h14 erhalten hat. Somit hat Gerät B die Arbitrierung verloren und die Kommunikation gestoppt. Bei der I³C-Arbitrierung verliert das Gerät mit höherer Adresse immer und gibt dem Gerät mit niedrigerer Adresse nach.

I³C: Eine Menge neuer Funktionen

I³C bringt eine deutliche Erhöhung der Bandbreite des seriellen Busses sowie eine Reihe neuer Funktionen mit sich. In diesem Artikel wurden die übergeordneten Merkmale und Funktionen des Busses angesprochen, es handelt sich jedoch nicht um eine vollständige Liste der möglichen Merkmale und Befehle. Weitere Details zur I³C-Spezifikation sind bei der MIPI Alliance erhältlich (https://www.mipi.org).

image

Robert Perkel ist Anwendungsingenieur bei der 8-Bit-MCU-Geschäftseinheit von Microchip Technology Inc. in Chandler, Arizona, USA.