-
BEREICH DER OFFENLEGUNG
-
Diese Offenbarung bezieht sich auf ein Inter-Integrated Circuit (I2C)-Gerät.
-
HINTERGRUND
-
In einem I2C-Busnetz sollten alle an den I2C-Bus angeschlossenen Slave-Geräte eine eindeutige Adresse haben, damit sie vom Master-Gerät angesprochen werden können. Das I2C-Protokoll sieht keine erfolgreiche Kommunikation vor, wenn zwei Slave-Geräte mit der gleichen Adresse an den I2C-Bus angeschlossen sind. In diesem Fall besteht aufgrund der ACK-Phase des I2C-Protokolls die Möglichkeit einer Buskonkurrenz.
-
Eine bekannte Lösung zur Überwindung dieses Problems auf Protokollebene ist die Verwendung eines zusätzlichen Pins an jedem Slave-Gerät, der entweder mit einer Stromschiene oder mit Masse verbunden ist, um das Slave-Gerät in Abhängigkeit von seiner Verbindung zum I2C-Bus zu konfigurieren.
-
Eine andere Lösung ist der Einsatz von Multiplexer-Schaltungen, die sich außerhalb der beiden Slave-Geräte befinden, um sicherzustellen, dass immer nur eines der beiden Slave-Geräte mit dem I2C-Bus verbunden ist.
-
Eine andere Lösung besteht darin, dass die Hersteller mehrere Teilenummern für ein Teil angeben, wobei der einzige Unterschied die I2C-Adresse ist.
-
ZUSAMMENFASSUNG
-
Die Erfinder haben festgestellt, dass bekannte Lösungen für den Anschluss mehrerer Instanzen desselben Slave-Geräts an einen I2C-Bus insofern problematisch sind, als sie (i) die Verwendung zusätzlicher Pins an den Slave-Geräten erfordern; (ii) zusätzliche Komponenten im I2C-Bus-Netzwerk erfordern; oder (iii) den Herstellungsprozess komplizieren.
-
Gemäß einem Aspekt der vorliegenden Offenbarung wird eine I2C-Vorrichtung (Inter-Integrated Circuit) bereitgestellt, die Folgendes umfasst: eine I2C-Master-Vorrichtung; und eine erste I2C-Slave-Vorrichtung, die mit der Master-Vorrichtung über einen I2C-Bus kommunikativ verbunden ist, der eine serielle Taktleitung und eine serielle Datenleitung umfasst, wobei ein Taktstift der ersten Slave-Vorrichtung mit der seriellen Taktleitung verbunden ist und ein Datenstift der ersten Slave-Vorrichtung mit der seriellen Datenleitung verbunden ist; eine zweite I2C-Slave-Vorrichtung, die mit der Master-Vorrichtung über den I2C-Bus kommunikativ verbunden ist, wobei ein Takt-Pin der zweiten I2C-Slave-Vorrichtung mit der seriellen Datenleitung verbunden ist und der Daten-Pin der zweiten I2C-Slave-Vorrichtung mit der seriellen Taktleitung verbunden ist; wobei ein in die erste I2C-Slave-Vorrichtung programmierter Adresswert derselbe ist wie ein in die zweite I2C-Slave-Vorrichtung programmierter Adresswert; wobei die zweite I2C-Slave-Vorrichtung umfasst: eine Verarbeitungslogik, die einen Takteingangsanschluss, einen Dateneingangsanschluss und einen Datenausgangsanschluss umfasst; ein Taktleitungsidentifizierungsmodul, das so konfiguriert ist, dass es erkennt, ob der Taktstift oder der Datenstift der zweiten I2C-Slave-Vorrichtung mit der seriellen Taktleitung verbunden ist; und ein Steuermodul, das so konfiguriert ist, dass es als Reaktion auf die Erkennung, dass der Datenstift mit der seriellen Taktleitung verbunden ist, die Kopplung des Datenstifts der ersten I2C-Slave-Vorrichtung steuert: die Kopplung des Datenpins der zweiten I2C-Slave-Vorrichtung mit dem Takteingangsport der Verarbeitungslogik zu steuern; die Kopplung des Taktpins der zweiten I2C-Slave-Vorrichtung mit dem Dateneingangsport der Verarbeitungslogik und einem Datenausgangsport der Verarbeitungslogik zu steuern; und eine Vorrichtungsadresse für die zweite I2C-Slave-Vorrichtung zu konfigurieren, indem der in die zweite I2C-Slave-Vorrichtung programmierte Adresswert modifiziert wird.
-
Vorteilhafterweise können in Ausführungsformen der vorliegenden Offenbarung zwei Slave-Geräte, die mit derselben Standardgeräteadresse programmiert sind (z. B. mehrere Instanzen desselben Slave-Geräts), ohne externe Komponenten an denselben I2C-Bus angeschlossen werden. Darüber hinaus wird die Herstellung von Instanzen des Slave-Geräts vereinfacht, da alle Instanzen desselben Slave-Geräts mit dergleichen Standardgeräteadresse programmiert werden können. Wenn sich das zweite I2C-Slave-Gerät in einer „Cross-Connected“-Konfiguration befindet (wobei ein Takt-Pin des zweiten I2C-Slave-Geräts mit der seriellen Datenleitung und der Daten-Pin des zweiten I2C-Slave-Geräts mit der seriellen Taktleitung verbunden ist), erkennt es seine Verbindung mit dem I2C-Bus, vertauscht die Leitungen, die von seinen Pins zur Verarbeitungslogik führen, und ändert seine Standardadresse, um sicherzustellen, dass jedes I2C-Slave-Gerät eine eindeutige Geräteadresse in Übereinstimmung mit dem I2C-Protokoll hat.
-
In Implementierungen ist das Steuermodul so konfiguriert, dass es als Reaktion auf eine Erkennung, dass der Taktpin der zweiten I2C-Slave-Vorrichtung mit der seriellen Taktleitung verbunden ist, Folgendes tut: Aufrechterhalten der Kopplung des Taktpins der zweiten I2C-Slave-Vorrichtung mit dem Takteingangsport der Verarbeitungslogik; Aufrechterhalten der Kopplung des Datenpins der zweiten I2C-Slave-Vorrichtung mit dem Dateneingangsport der Verarbeitungslogik und einem Datenausgangsport der Verarbeitungslogik; und Beibehalten des in die zweite I2C-Slave-Vorrichtung programmierten Adresswerts als Vorrichtungsadresse für die zweite I2C-Slave-Vorrichtung.
-
In Implementierungen umfasst das Taktleitungsidentifizierungsmodul: einen ersten Flankenzähler, der so konfiguriert ist, dass er Flanken eines über den Taktstift der zweiten I2C-Vorrichtung empfangenen Signals zählt; und einen zweiten Flankenzähler, der so konfiguriert ist, dass er Flanken eines über den Datenpin der zweiten I2C-Vorrichtung empfangenen Signals zählt; wobei das Taktleitungsidentifizierungsmodul so konfiguriert ist, dass es durch Vergleichen des ersten Zählwerts und des zweiten Zählwerts erkennt, ob der Taktpin oder der Datenpin der zweiten I2C-Vorrichtung mit der seriellen Taktleitung verbunden ist, sobald eine Summierung eines ersten Zählwerts durch den ersten Flankenzähler und eines zweiten Zählwerts durch den zweiten Flankenzähler einen vorbestimmten Schwellenwert überschreitet.
-
In Implementierungen ist das Taktleitungsidentifizierungsmodul so konfiguriert, dass es: erkennt, dass der Datenpin der zweiten I2C-Vorrichtung mit der seriellen Taktleitung verbunden ist, basierend auf dem zweiten Zählwert, der den ersten Zählwert überschreitet; und erkennt, dass der Taktpin der zweiten I2C-Vorrichtung mit der seriellen Taktleitung verbunden ist, basierend auf dem ersten Zählwert, der den zweiten Zählwert überschreitet.
-
In Implementierungen umfasst die zweite I2C-Slave-Vorrichtung ferner: eine Multiplexerstufe, die den Taktstift und den Datenstift der zweiten I2C-Vorrichtung mit der Verarbeitungslogik koppelt, wobei das Steuermodul so konfiguriert ist, dass es ein Schaltsignal erzeugt und an die Multiplexerstufe überträgt, um die Kopplung des Datenstifts und des Taktstifts der I2C-Slave-Vorrichtung mit der Verarbeitungslogik zu steuern, wobei das Schaltsignal einen Wert hat, der davon abhängt, ob der Taktstift oder der Datenstift der Vorrichtung mit der seriellen Taktleitung verbunden ist.
-
In Implementierungen ist das Steuermodul so konfiguriert, dass es als Reaktion auf eine Erkennung, dass der Taktstift der zweiten I2C-Vorrichtung mit der seriellen Taktleitung verbunden ist, das Schaltsignal mit einem ersten Wert erzeugt und überträgt, um die Multiplexerstufe so zu konfigurieren, dass der Taktstift der zweiten I2C-Vorrichtung mit dem Takteingangsanschluss der Verarbeitungslogik gekoppelt ist und der Datenstift der zweiten I2C-Vorrichtung mit dem Dateneingangsanschluss und dem Datenausgangsanschluss der Verarbeitungslogik gekoppelt ist.
-
In Implementierungen ist das Steuermodul so konfiguriert, dass es als Reaktion auf die Erkennung, dass der Datenpin der zweiten I2C-Vorrichtung mit der seriellen Taktleitung verbunden ist, das Schaltsignal mit einem zweiten Wert erzeugt und überträgt, um die Multiplexerstufe so zu konfigurieren, dass der Datenpin der zweiten I2C-Vorrichtung mit dem Takteingangsport der Verarbeitungslogik gekoppelt ist und der Taktpin der zweiten I2C-Vorrichtung mit dem Dateneingangsport und dem Datenausgangsport der Verarbeitungslogik gekoppelt ist.
-
In Implementierungen ist das Steuermodul so konfiguriert, dass es erkennt, dass der I2C-Bus im Leerlauf ist, und als Reaktion auf die Erkennung, dass der I2C-Bus im Leerlauf ist, das Schaltsignal mit dem zweiten Wert erzeugt und überträgt. Dadurch wird vorteilhafterweise sichergestellt, dass der Signaltausch nur dann durchgeführt wird, wenn der I2C-Bus im Leerlauf ist und nicht während einer I2C-Transaktion.
-
Wenn der Daten-Pin der zweiten I2C-Vorrichtung mit der seriellen Taktleitung verbunden ist, kann das Steuermodul so konfiguriert werden, dass es erkennt, dass der I2C-Bus im Leerlauf ist, indem es einen Übergang des über den Takt-Pin empfangenen Signals von einem logisch niedrigen Wert zu einem logisch hohen Wert erkennt, während das über den Daten-Pin empfangene Signal einen logisch hohen Wert hat.
-
Wenn der Taktstift der zweiten I2C-Vorrichtung mit der seriellen Taktleitung verbunden ist, kann das Steuermodul so konfiguriert werden, dass es erkennt, dass der I2C-Bus im Leerlauf ist, indem es einen Übergang des über den Datenstift empfangenen Signals von einem logisch niedrigen Wert zu einem logisch hohen Wert erkennt, während das über den Taktstift empfangene Signal einen logisch hohen Wert hat.
-
In einigen Implementierungen ist das Steuermodul so konfiguriert, dass es ein Schaltabschlusssignal erzeugt und das Schaltabschlusssignal an die Multiplexerstufe überträgt, wobei die Multiplexerstufe als Reaktion sowohl auf das Schaltsignal als auch auf das Schaltabschlusssignal konfigurierbar ist. In diesen Implementierungen ist nach dem Einschalten eine I2C-Transaktion erforderlich, damit beide I2C-Slave-Geräteinstanzen beginnen, auf I2C-Transaktionen von einem I2C-Master-Gerät mit ihren jeweiligen Adressen zu reagieren. Bei diesen Implementierungen besteht vorteilhafterweise kein Risiko eines Zeitfehlers oder eines Fehlverhaltens der 12C-Protokoll-Slave-Logik. In diesen Implementierungen kann die Multiplexerstufe so angeordnet sein, dass, wenn das Schaltabschlusssignal einen ersten Wert hat, das Schaltsignal daran gehindert wird, die Multiplexerstufe zu konfigurieren, und wenn das Schaltabschlusssignal einen zweiten Wert hat, das Schaltsignal die Multiplexerstufe konfigurieren kann. In diesen Implementierungen kann die Multiplexerstufe den Takteingangsanschluss, den Dateneingangsanschluss und den Datenausgangsanschluss an einen logischen Standard-Hochwert binden, bis das Schaltbeendigungssignal den zweiten Wert aufweist, der es dem Schaltsignal ermöglicht, die Multiplexerstufe zu konfigurieren.
-
In anderen Implementierungen wird die Multiplexerstufe nur als Reaktion auf das Schaltsignal konfiguriert. Bei diesen Implementierungen wird der Entwurf und die Herstellung des I2C-Slave-Geräts vereinfacht, da weniger Bauteile im Steuermodul und in der Multiplexerstufe verwendet werden. Bei diesen Implementierungen sollte die Verarbeitungslogik so ausgelegt sein, dass sie auf Timing-Verletzungen reagiert.
-
Das Steuermodul kann den Adresswert durch Erhöhen oder Verringern des Adresswerts ändern.
-
In Implementierungen ist der in das erste I2C-Slave-Gerät programmierte Adresswert derselbe wie der in das zweite I2C-Slave-Gerät programmierte Adresswert.
-
Gemäß einem anderen Aspekt der Offenbarung wird eine Inter-Integrated Circuit (I2C)-Slave-Vorrichtung bereitgestellt, die Folgendes umfasst: einen Taktstift und einen Datenstift zur Kopplung an einen I2C-Bus zur Kommunikation mit einer I2C-Mastervorrichtung, wobei der I2C-Bus eine serielle Taktleitung und eine serielle Datenleitung umfasst; eine Verarbeitungslogik, die einen Takteingangsanschluss, einen Dateneingangsanschluss und einen Datenausgangsanschluss umfasst; ein Taktleitungsidentifizierungsmodul, das so konfiguriert ist, dass es erkennt, ob der Taktstift oder der Datenstift mit der seriellen Taktleitung verbunden ist; und ein Steuermodul, das so konfiguriert ist, dass es als Reaktion auf eine Erkennung, dass der Datenstift mit der seriellen Taktleitung verbunden ist, Folgendes tut die Kopplung des Datenpins mit dem Takteingangsport der Verarbeitungslogik zu steuern; die Kopplung des Taktpins mit dem Dateneingangsport der Verarbeitungslogik und einem Datenausgangsport der Verarbeitungslogik zu steuern; und eine Geräteadresse für das I2C-Slave-Gerät zu konfigurieren, indem ein in das I2C-Slave-Gerät programmierter Adresswert modifiziert wird.
-
Gemäß einem anderen Aspekt der Offenbarung wird ein computerimplementiertes Verfahren bereitgestellt, das auf einer Inter-Integrated-Circuit-(12C)-Slave-Vorrichtung ausgeführt wird, die einen Taktstift und einen Datenstift zur Kopplung an einen I2C-Bus zur Kommunikation mit einer I2C-Master-Vorrichtung umfasst, wobei der I2C-Bus eine serielle Taktleitung und eine serielle Datenleitung umfasst; und eine Verarbeitungslogik, die einen Takteingangsanschluss, einen Dateneingangsanschluss und einen Datenausgangsanschluss umfasst, wobei das computerimplementierte Verfahren umfasst: Erfassen, ob der Taktstift oder der Datenstift mit der seriellen Taktleitung verbunden ist; und als Reaktion auf eine Erfassung, dass der Datenstift mit der seriellen Taktleitung verbunden ist, umfasst das Verfahren ferner: Steuern des Koppelns des Datenstifts mit dem Takteingangsanschluss der Verarbeitungslogik; Steuern des Koppelns des Taktstifts mit dem Dateneingangsanschluss der Verarbeitungslogik und einem Datenausgangsanschluss der Verarbeitungslogik; und Konfigurieren einer Geräteadresse für das I2C-Slave-Gerät durch Modifizieren eines in das I2C-Slave-Gerät programmierten Adresswerts.
-
Gemäß einem anderen Aspekt der Offenbarung wird ein computerlesbares Speichermedium bereitgestellt, das Anweisungen enthält, die, wenn sie von einem Prozessor eines Computergeräts ausgeführt werden, das Computergerät veranlassen, eines der hier beschriebenen Verfahren durchzuführen.
-
Die Anweisungen können auf einem Träger wie einer Diskette, einer CD- oder DVD-ROM, einem programmierten Speicher wie einem Festwertspeicher (Firmware) oder auf einem Datenträger wie einem optischen oder elektrischen Signalträger bereitgestellt werden. Der Code (und/oder die Daten) zur Implementierung von Ausführungsformen der vorliegenden Offenbarung kann Quell-, Objekt- oder ausführbaren Code in einer herkömmlichen Programmiersprache (interpretiert oder kompiliert) wie C oder Assemblercode, Code zum Einrichten oder Steuern eines ASIC (Application Specific Integrated Circuit) oder FPGA (Field Programmable Gate Array) oder Code für eine Hardwarebeschreibungssprache umfassen.
-
Diese und andere Aspekte werden aus den im Folgenden beschriebenen Ausführungsformen ersichtlich. Der Umfang der vorliegenden Offenbarung soll durch diese Zusammenfassung nicht eingeschränkt werden, auch nicht auf Implementierungen, die notwendigerweise einige oder alle der genannten Nachteile lösen.
-
Figurenliste
-
Einige Ausführungsformen der Offenbarung werden jetzt nur beispielhaft und unter Bezugnahme auf die beigefügten Zeichnungen beschrieben, in denen:
- zeigt ein schematisches Blockdiagramm einer Inter-Integrated Circuit (I2C)-Vorrichtung vor einer I2C-Transaktion gemäß den Ausführungsformen der vorliegenden Offenbarung;
- zeigt eine Slave-Vorrichtung gemäß einer ersten Ausführungsform der vorliegenden Offenbarung;
- zeigt eine I2C-Transaktion, die von den Pins eines an einen I2C-Bus angeschlossenen Slave-Geräts in einer herkömmlichen Konfiguration gesehen wird; zeigt dieselbe I2C-Transaktion, die von den Pins eines an den I2C-Bus angeschlossenen Slave-Geräts in einer Cross-Connected-Konfiguration gesehen wird; zeigt ein Pad-Switch-Steuermodul des Slave-Geräts gemäß der ersten Ausführungsform der vorliegenden Offenbarung;
- zeigt eine Multiplexerstufe des Slave-Geräts gemäß der ersten Ausführungsform der vorliegenden Offenbarung;
- zeigt eine Slave-Vorrichtung gemäß einer zweiten Ausführungsform der vorliegenden Offenbarung;
- zeigt eine Multiplexer-Stufe des Slave-Geräts gemäß der zweiten Ausführungsform der vorliegenden Offenbarung;
- zeigt ein Beispiel für eine Zeitsteuerungslogik; und
- zeigt ein schematisches Blockdiagramm der Inter-Integrated Circuit (I2C)-Vorrichtung nach einer I2C-Transaktion gemäß den Ausführungsformen der vorliegenden Offenbarung.
-
Es wird darauf hingewiesen, dass gleiche Elemente, die in einer oder mehreren der Abbildungen dargestellt sind, durch gleiche Bezugsziffern gekennzeichnet sind.
-
Detaillierte Beschreibung der bevorzugten Ausführungsformen
-
Im Allgemeinen ermöglicht die Offenlegung, dass zwei Slave-Geräte, die mit der gleichen Standardgeräteadresse programmiert sind (z. B. mehrere Instanzen desselben Slave-Geräts), ohne externe Komponenten an denselben I2C-Bus angeschlossen werden können
-
Einige Beispiele für die Lösung sind in den beigefügten Abbildungen dargestellt.
-
zeigt eine Inter-Integrated Circuit (I2C)-Vorrichtung 100. Die I2C-Vorrichtung umfasst ein I2C-Mastergerät 102, das an einen I2C-Bus angeschlossen ist. Die I2C-Master-Vorrichtung 102 kann beispielsweise ein Mikroprozessor oder Mikrocontroller sein. Der I2C-Bus ist ein bidirektionaler serieller Zweidraht-Bus mit einer seriellen Taktleitung (SCL) 104 zum Senden von Taktimpulsen und einer seriellen Datenleitung (SDA) 106 zum seriellen Senden von Daten.
-
In Ausführungsformen der vorliegenden Offenbarung ist die Slave-Geräteanordnung 107 mit dem I2C-Bus gekoppelt. Die Slave-Geräteanordnung 107 umfasst zwei I2C-Slave-Geräte.
-
Wie in dargestellt, umfasst die Slave-Geräteanordnung 107 ein erstes I2C-Slave-Gerät 108, das über den I2C-Bus mit dem I2C-Master-Gerät 102 kommunikationsfähig verbunden ist. Die erste I2C-Slave-Vorrichtung 108 ist in einer herkömmlichen Konfiguration mit dem I2C-Bus verbunden, wobei ein Taktstift (SCL) der ersten I2C-Slave-Vorrichtung 108 mit der seriellen Taktleitung 104 und ein Datenstift (SDA) der ersten I2C-Slave-Vorrichtung 108 mit der seriellen Datenleitung 106 verbunden ist.
-
Die Slave-Bauelementanordnung 107 umfasst ferner ein zweites I2C-Slave-Bauelement 110, das über den I2C-Bus mit dem I2C-Master-Bauelement 102 verbunden ist. Der Taktstift (SCL) des zweiten I2C-Slave-Geräts 110 ist mit der seriellen Datenleitung 106 verbunden, und ein Datenstift (SDA) des zweiten I2C-Slave-Geräts 110 ist mit der seriellen Taktleitung 104 verbunden. Diese Konfiguration wird hier als „kreuzgeschaltete“ Konfiguration bezeichnet.
-
Ein „Pin“ eines Slave-Geräts wird hier auch als „Pad“ bezeichnet.
-
veranschaulicht die Geräteadresse des ersten I2C-Slave-Geräts 108 und des zweiten I2C-Slave-Geräts 110 vor einer I2C-Transaktion auf dem I2C-Bus. Wie in dargestellt, ist ein in das erste I2C-Slave-Gerät 108 programmierter Adresswert (X) derselbe wie ein bei der Herstellung in das zweite I2C-Slave-Gerät 110 programmierter Adresswert (X). Eine oder beide der ersten I2C-Slave-Vorrichtung 108 und der zweiten I2C-Slave-Vorrichtung 110 können eine Sensorvorrichtung sein (z. B. ein Näherungssensor, ein Beschleunigungsmesser, ein Gyroskop, ein Temperatursensor, ein Magnetometer, ein Lichtsensor usw.). Die Ausführungsformen der vorliegenden Offenbarung sind jedoch nicht darauf beschränkt, dass es sich bei dem ersten I2C-Slave-Gerät 108 und dem zweiten I2C-Slave-Gerät 110 um Sensorgeräte handelt.
-
In einigen Ausführungsformen sind das erste I2C-Slave-Gerät 108 und das zweite I2C-Slave-Gerät 110 zwei Instanzen desselben Slave-Geräts (d. h. sie haben dieselbe Teilenummer). Dies ist in dargestellt. Im Zusammenhang mit Ohrstöpselanwendungen ist es beispielsweise erforderlich, dass zwei Proximity-Geräte an denselben I2C-Bus angeschlossen sind. Im Beispiel des Ohrstöpsels besteht ein einzelner Ohrstöpsel aus dem in dargestellten Gerät 100.
-
Ein Gerät enthält die I2C-Vorrichtung 100. Das Gerät ist nicht darauf beschränkt, ein Ohrhörer zu sein. Bei dem Gerät kann es sich beispielsweise um ein Mobiltelefon, ein Tablet oder ein anderes mobiles Computergerät handeln. Das Gerät kann z. B. ein tragbares Gerät sein (z. B. eine Smartwatch oder ein am Kopf getragenes Gerät wie eine intelligente Brille).
-
Ein oder mehrere zusätzliche Slave-Geräte mit anderen Adresswerten als die Slave-Geräte der Slave-Geräteanordnung 107 können ebenfalls mit dem I2C-Bus verbunden werden. In ist beispielsweise ein zusätzliches Slave-Gerät (I2C-Slave2) 112 dargestellt, in das ein Adresswert (A) einprogrammiert ist.
-
Gemäß dem I2C-Protokoll muss jedes an den I2C-Bus angeschlossene Slave-Gerät eine eindeutige Adresse haben. Die hier beschriebene Funktionalität des zweiten I2C-Slave-Geräts 110 berücksichtigt dies.
-
zeigt ein Beispiel für ein Slave-Gerät 200 in einer ersten Konfiguration. Unter Bezugnahme auf weist das zweite I2C-Slave-Gerät 110 die nachstehend beschriebenen Funktionen des Slave-Geräts 200 auf. Die erste I2C-Slave-Vorrichtung 108 kann ebenfalls die unten beschriebene Funktionalität der Slave-Vorrichtung 200 aufweisen.
-
Wie in dargestellt, verfügt das Slave-Gerät 200 über einen Taktstift (SCL) 201 und einen Datenstift (SDA) 203.
-
Der Taktstift 201 ist mit einer SCL-Ausgangstreiberschaltung 202 und einer SCL-Pad-Verzögerungs- und Filterschaltung 204 gekoppelt. Die SCL-Ausgangstreiberschaltung 202 wandelt logische 0/1-Werte von der I2C-Protokoll-Slave-Logik 236 in einen I2C-definierten Spannungspegel auf dem I2C-Bus um. Die SCL-Pad-Delay- und Filterschaltung 204 arbeitet in umgekehrter Richtung und wandelt die I2C-Busspannung in interne logische Pegel von 0/1 um. Die SCL-Pad-Verzögerungs- und Filterschaltung 204 kann eine Filterung durchführen, um Spannungsspitzen auf dem I2C-Bus zu unterdrücken und/oder eine Verzögerung des Signalübergangs einzuführen. Ein Ausgangssignal zur Übertragung über den Taktpin 201 (scl_out) wird durch die SCL-Ausgangstreiberschaltung 202 geleitet, bevor es über den Taktpin 201 auf den I2C-Bus ausgegeben wird. Ein über den Takt-Pin 201 (scl_in) empfangenes Eingangssignal wird durch die SCL-Pad-Verzögerungs- und Filterschaltung 204 geleitet und über den Anschluss 206 an ein Taktleitungsidentifikationsmodul 205 und ein Pad-Switch-Steuermodul 222 ausgegeben.
-
Der Datenpin 203 ist mit einer SDA-Ausgangstreiberschaltung 212 und einer SDA-Pad-Verzögerungs- und Filterschaltung 214 gekoppelt. Die SDA-Ausgangstreiberschaltung 212 wandelt logische 0/1-Werte von der I2C-Protokoll-Slave-Logik 236 in einen I2C-definierten Spannungspegel auf dem I2C-Bus um. Die SDA-Pad-Delay- und Filterschaltung 214 arbeitet in umgekehrter Richtung und wandelt die I2C-Busspannung in interne logische Pegel von 0/1 um. Die SDA-Pad-Verzögerungs- und Filterschaltung 214 kann eine Filterung durchführen, um Spannungsspitzen auf dem I2C-Bus zu unterdrücken und/oder eine Verzögerung des Signalübergangs einzuführen. Ein Ausgangssignal für die Übertragung über den Datenpin 203 (sda_out) wird durch die SDA-Ausgangstreiberschaltung 212 geleitet, bevor es über den Datenpin 203 auf den I2C-Bus ausgegeben wird. Ein über den Daten-Pin empfangenes Eingangssignal (sda_in) wird durch die SDA-Pad-Verzögerungs- und Filterschaltung 214 geleitet und über den Anschluss 216 an das Taktleitungsidentifizierungsmodul 205 und das Pad-Switch-Steuermodul 222 ausgegeben.
-
Das Taktleitungserkennungsmodul 205 ist so konfiguriert, dass es erkennt, ob der Taktstift oder der Datenstift des Nebengeräts mit der seriellen Taktleitung 104 verbunden ist. Das Taktleitungserkennungsmodul 205 kann auf verschiedene Weise implementiert werden. Ein Implementierungsbeispiel ist in dargestellt.
-
Wie in dargestellt, umfasst das Taktleitungsidentifizierungsmodul 205 einen ersten Flankenzähler 208, der das scl_in-Signal am Anschluss 206 als Eingang empfängt. Der erste Flankenzähler 208 ist so konfiguriert, dass er die Flanken des über den Taktstift 201 empfangenen Signals (scl_in) zählt. Der erste Flankenzähler 208 kann zum Beispiel ein positiver Flankenzähler sein.
-
Das Taktleitungsidentifikationsmodul 205 umfasst auch einen zweiten Flankenzähler 218, der das sda_in-Signal am Anschluss 216 als Eingang empfängt. Der zweite Flankenzähler 218 ist so konfiguriert, dass er die Flanken des über den Datenpin 203 empfangenen Signals (sda_in) zählt, wobei der zweite Flankenzähler 218 beispielsweise ein positiver Flankenzähler sein kann.
-
Der Ausgang des ersten Flankenzählers 208 ist als Eingang mit einem Addierer und Komparator 210 verbunden (siehe Eingang „A“). Der Ausgang des zweiten Flankenzählers 218 ist ebenfalls als Eingang mit dem Addierer und Komparator 210 gekoppelt (siehe Eingang „B“).
-
Ein Addierer und Komparator 210 wird verwendet, um den vom ersten Flankenzähler 208 erhaltenen Zählerstand A und einen vom zweiten Flankenzähler 218 erhaltenen Zählerstand B zu summieren und einen logischen Hochwert als Ausgang an das Pad-Schalter-Steuermodul 222 zu liefern, wenn diese Summierung einen vorgegebenen Schwellenwert überschreitet. Solange diese Bedingung nicht erfüllt ist, gibt der Addierer und Komparator 210 einen logischen Low-Wert an das Pad-Switch-Steuermodul 222 aus. Der vorgegebene Schwellenwert kann z. B. auf (mindestens) zwei Zählwerte festgelegt werden (d. h. als Mindestanforderung muss die Summe drei Zählwerte betragen). In einem Beispiel wird der vorgegebene Schwellenwert auf sieben Zählungen festgelegt (die Summierung muss acht Zählungen ergeben).
-
Der Ausgang des ersten Flankenzählers 208 ist auch als Eingang mit einem Komparator 220 gekoppelt (siehe Eingang „A“). Der Ausgang des zweiten Flankenzählers 218 ist ebenfalls als Eingang mit dem Komparator 220 gekoppelt (siehe Eingang „B“).
-
Der Komparator 220 vergleicht den vom ersten Flankenzähler 208 erhaltenen Zählerstand A und den vom zweiten Flankenzähler 218 erhaltenen Zählerstand B und stellt fest, ob der vom zweiten Flankenzähler 218 erhaltene Zählerstand B größer ist als der vom ersten Flankenzähler 208 erhaltene Zählerstand A.
-
Die serielle Taktleitung 104 schaltet schneller um als die serielle Datenleitung 106. Wenn also der Taktstift 201 mit der seriellen Taktleitung 104 verbunden ist (d. h. das Slave-Gerät ist in der herkömmlichen Konfiguration mit dem I2C-Bus gekoppelt), dann ist der vom ersten Flankenzähler 208 erhaltene Zählerstand A größer als der vom zweiten Flankenzähler 218 erhaltene Zählerstand B, und der Komparator 220 gibt einen logischen Low-Wert an das Pad-Switch-Steuermodul 222 aus. In diesem Szenario wird das über den Takt-Pin 201 (scl_in) empfangene Eingangssignal ein Eingangstaktsignal sein, das über den Daten-Pin 203 (sda_in) empfangene Eingangssignal wird ein Eingangsdatensignal sein, außerdem sollte über den Daten-Pin 203 ein Datenausgangssignal zur Übertragung vom Slave-Gerät zum I2C-Master-Gerät 102 übertragen werden.
-
Ist dagegen der Daten-Pin 203 mit der seriellen Taktleitung 104 verbunden (d. h. das Slave-Gerät ist in der Cross-Connected-Konfiguration mit dem I2C-Bus gekoppelt), dann ist der vom zweiten Flankenzähler 218 erhaltene Zählerstand B größer als der vom ersten Flankenzähler 208 erhaltene Zählerstand A, und der Komparator 220 gibt einen logisch hohen Wert an das Pad-Switch-Steuermodul 222 aus. In diesem Szenario wird das über den Takt-Pin 201 (scl_in) empfangene Eingangssignal ein Eingangsdatensignal sein, das über den Daten-Pin 203 (sda_in) empfangene Eingangssignal wird ein Eingangstaktsignal sein, außerdem sollte ein Datenausgangssignal zur Übertragung vom Slave-Gerät zum I2C-Master-Gerät 102 über den Takt-Pin 201 übertragen werden.
-
Wie in dargestellt, ist das Pad-Switch-Steuermodul 222 so angeordnet, dass es als Eingänge den Ausgang des Addierers und des Komparators 210, das scl_in-Signal am Anschluss 206, das sda_in-Signal am Anschluss 216 und den Ausgang des Komparators 220 empfängt.
-
Das Pad-Switch-Steuermodul 222 ist so konfiguriert, dass es die Verbindungen zwischen dem Clock-Pin 201 und der I2C-Protokoll-Slave-Logik 236 steuert. Das Pad-Switch-Steuermodul 222 ist auch so konfiguriert, dass es die Verbindungen zwischen dem Daten-Pin 203 und der I2C-Protokoll-Slave-Logik 236 steuert. Die i2C-Protokoll-Slave-Logik 236 ist so konfiguriert, dass sie vom I2C-Mastergerät 102 empfangene Daten verarbeitet und an dieses überträgt. Die i2C-Protokoll-Slave-Logik 236 ist so angeordnet, dass sie ein Datenausgangssignal (sda_out) von einem Datenausgangsanschluss der I2C-Protokoll-Slave-Logik 236 zur Übertragung an das I2C-Master-Gerät 102 über den I2C-Bus bereitstellt. Die I2C-Protokoll-Slave-Logik 236 umfasst zusätzlich einen Dateneingangsanschluss (sda_in) zum Empfangen von Daten, die von der I2C-Master-Vorrichtung 102 übertragen werden, und einen Takteingangsanschluss (scl_in) zum Empfangen eines von der I2C-Master-Vorrichtung 102 übertragenen Taktsignals.
-
Im Beispiel-Slave-Gerät 200 ist das Pad-Switch-Steuermodul 222 so konfiguriert, dass es die jeweiligen Verbindungen zwischen dem Takt-Pin 201 und dem Daten-Pin 203 mit der I2C-Protokoll-Slave-Logik 236 steuert, indem es ein Schaltsignal (I2C_PAD_SWITCH) erzeugt, das an Anschluss 226 ausgegeben wird, und indem es ein Schaltabschluss-Signal (I2C_PAD_SWITCH_DONE) erzeugt, das an Anschluss 224 ausgegeben wird.
-
Das Pad-Switch-Steuermodul 222 gibt das Schaltsignal (I2C_PAD_SWITCH) und das Schaltabschluss-Signal (I2C_PAD_SWITCH_DONE) an eine Multiplexerstufe 228a aus, um die Kopplung des Taktpins 201 und des Datenpins 203 des Slave-Geräts mit der I2C-Protokoll-Slave-Logik 236 zu steuern.
-
In operation, in response to a detection by the clock line identification module 205 that the data pin 203 is connected to the serial clock line 104 (i.e. the slave device is connected to the I2C bus in the cross connected configuration), the pad switch control module 222 is configured to: (i) die Kopplung des Datenpins 203 mit dem Takteingangsport (scl_in) der I2C-Protokoll-Slave-Logik 236 so zu steuern, dass das über den Datenpin 203 empfangene Eingangstaktsignal dem Takteingangsport (scl_in) der I2C-Protokoll-Slave-Logik 236 zugeführt wird; und (ii) Steuerkopplung des Taktpins 201 mit dem Dateneingangsport (sda_in) der I2C-Protokoll-Slave-Logik 236 und dem Datenausgangsport der I2C-Protokoll-Slave-Logik 236, so dass ein über den Taktpin 201 empfangenes Eingangsdatensignal dem Dateneingangsport der I2C-Protokoll-Slave-Logik 236 zugeführt wird und ein von der I2C-Protokoll-Slave-Logik 236 zur Übertragung an die I2C-Master-Vorrichtung 102 ausgegebenes Datensignal über den Taktpin 201 übertragen wird.
-
Das heißt, auf der Grundlage der Identifizierung der Taktleitung vertauscht der Prozess die Leitungen, die von den Pins zur I2C-Protokoll-Slave-Logik 236 führen. Das heißt, wenn der Daten-Pin 203 mit der seriellen Taktleitung 104 verbunden ist, dann vertauscht das Pad-Switch-Steuermodul 222 die Pin-Ausgänge, die zur I2C-Protokoll-Slave-Logik 236 gehen, als Eingänge, und das sda_out-Signal von der I2C-Protokoll-Slave-Logik wird mit der SCL-Ausgangstreiberschaltung 202 verbunden.
-
Im Betrieb ist das Pad-Switch-Steuermodul 222 als Reaktion auf eine Erkennung durch das Taktleitungsidentifikationsmodul 205, dass der Taktstift 201 mit der seriellen Taktleitung 104 verbunden ist (d.h. das Slave-Gerät in der konventionellen Konfiguration mit dem I2C-Bus verbunden ist), ist das Pad-Switch-Steuermodul 222 so konfiguriert, dass es: (i) die Kopplung des Taktpins 201 mit dem Takteingangsport der I2C-Protokoll-Slave-Logik 236 aufrechtzuerhalten, so dass das über den Taktpin 201 empfangene Eingangstaktsignal an den Takteingangsport (scl_in) der I2C-Protokoll-Slave-Logik 236 geliefert wird; und (ii) Aufrechterhalten der Kopplung des Datenstifts 203 mit dem Dateneingangsanschluss der I2C-Protokoll-Slave-Logik 236 und dem Datenausgangsanschluss der I2C-Protokoll-Slave-Logik 236, so dass ein über den Datenstift 203 empfangenes Eingangsdatensignal dem Dateneingangsanschluss der I2C-Protokoll-Slave-Logik 236 zugeführt wird und ein von der I2C-Protokoll-Slave-Logik 236 zur Übertragung an die I2C-Master-Vorrichtung 102 ausgegebenes Datensignal über den Datenstift 203 übertragen wird.
-
Die Funktionsweise des Pad-Switch-Steuermoduls 222 und der Multiplexerstufe 228a, die in dem Beispiel-Slave-Gerät 200 gemäß der ersten Konfiguration implementiert sind, wird im Folgenden unter Bezugnahme auf die und näher beschrieben.
-
Zunächst wird auf verwiesen, die eine I2C-Transaktion 300 zeigt, die von Pins eines an den I2C-Bus angeschlossenen Slave-Geräts in einer konventionellen Konfiguration gesehen wird, und auf , die dieselbe I2C-Transaktion 350 zeigt, die von Pins eines an einen I2C-Bus angeschlossenen Slave-Geräts in einer Cross-Connected-Konfiguration gesehen wird.
-
Gemäß dem I2C-Protokoll beginnt jede von einem Master-Gerät initiierte I2C-Transaktion mit einer START-Bedingung und endet mit einer STOP-Bedingung.
-
Wie in gezeigt, wird gemäß dem I2C-Protokoll in einer I2C-Transaktion 300, wenn das Slave-Gerät in einer konventionellen Konfiguration an den I2C-Bus angeschlossen ist, ein STOP-Zustand genannt, wenn das am Daten-Pin 203 SDA empfangene Signal 302 (das in der konventionellen Konfiguration von der seriellen Datenleitung 106 stammt) von niedrig auf hoch (posedge) geht, während das am Takt-Pin 201 SCL empfangene Signal 304 hoch ist (das in der konventionellen Konfiguration von der seriellen Taktleitung 104 stammt). In der vorliegenden Offenlegung wird dies als pstop (positive stop) 312 bezeichnet.
-
Der Vollständigkeit halber sei angemerkt, dass in der konventionellen Konfiguration, wenn das am Datenstift 203 SDA (der in der konventionellen Konfiguration von der seriellen Datenleitung 106 kommt) empfangene Signal 302 von hoch auf niedrig (negedge) geht, wenn das am Taktstift 201 SCL (der in der konventionellen Konfiguration von der seriellen Taktleitung 104 kommt) empfangene Signal 304 hoch ist, dies als START-Bedingung bezeichnet wird. In der vorliegenden Offenlegung wird dies als pstart (positiver Start) 306 bezeichnet.
-
Wie in gezeigt, wird derselbe STOP-Zustand erkannt, wenn das am Taktstift 201 SCL (der in der kreuzgeschalteten Konfiguration von der seriellen Datenleitung 106 kommt) empfangene Signal von niedrig auf hoch (posedge) geht, wenn das am Datenstift 203 SDA empfangene Signal 302 hoch ist (das in der kreuzgeschalteten Konfiguration von der Taktleitung 104 kommt), und dies wird nstop (negativer Stopp) 310 genannt.
-
Der Vollständigkeit halber sei angemerkt, dass in der kreuzgeschalteten Konfiguration dieselbe START-Bedingung erkannt wird, wenn das am Taktstift 201 SCL (der in der kreuzgeschalteten Konfiguration von der seriellen Datenleitung 106 stammt) empfangene Signal von hoch auf niedrig (negedge) geht, wenn das am Datenstift 203 SDA (der in der kreuzgeschalteten Konfiguration von der Taktleitung 104 stammt) empfangene Signal 302 hoch ist, und dies als nstart (negativer Start) 308 bezeichnet wird.
-
Es ist anzumerken, dass die pstop-Bedingung nur einmal in einer I2C-Transaktion in der konventionellen Konfiguration erkannt wird (d.h. wenn die Pad-Verbindungen korrekt sind: SCL -> SCL-Bus, SDA-> SDA-Bus) und ähnlich wird die nstop-Bedingung nur einmal in einer I2C-Transaktion in der Cross-Connected-Konfiguration erkannt (d.h. wenn die Pad-Verbindungen vertauscht sind: SCL -> SDA-Bus, SDA -> SCL-Bus). Nach einem pstop- oder nstop-Ereignis ist der I2C-Bus für eine im Protokoll festgelegte Zeitspanne im Leerlauf, und es ist vorteilhaft, wenn ein interner Pad-Tausch durchgeführt wird, während der I2C-Bus im Leerlauf ist.
-
zeigt ein Beispiel für die Anordnung des Tamponschalter-Steuermoduls 222.
-
Wie in dargestellt, umfasst das Pad-Switch-Steuermodul 222 ein erstes Flip-Flop 402 (als D-Flip-Flop dargestellt) und ein zweites Flip-Flop 408 (als D-Flip-Flop dargestellt). Der Ausgang des Addierers und Komparators 210 ist mit einem Eingang des ersten Flipflops 402 verbunden. Der Ausgang des Komparators 220 ist mit einem Eingang des zweiten Flipflops 408 gekoppelt. Sowohl das erste Flipflop 402 als auch das zweite Flipflop 408 werden durch dasselbe Taktsignal angesteuert, das von der Zeitsteuerungslogik 600 bereitgestellt werden kann (später ausführlicher beschrieben).
-
Das Pad-Switch-Steuermodul 222 umfasst einen nstop-Erkennungsblock 404, der als Eingänge das über den Taktstift 201 an der Verbindung 206 empfangene Eingangssignal und das über den Datenstift 203 an der Verbindung 216 empfangene Eingangssignal empfängt. Der nstop-Erkennungsblock 404 ist so konfiguriert, dass er bei Erkennung der oben beschriebenen nstop-Bedingung einen logischen High-Wert ausgibt. Bis die nstop-Bedingung erkannt wird, ist der nstop-Erkennungsblock 404 so konfiguriert, dass er einen logischen Low-Wert ausgibt.
-
Das Pad-Switch-Steuermodul 222 umfasst auch einen pstop-Erkennungsblock 410, der als Eingänge das über den Taktstift 201 an der Verbindung 206 empfangene Eingangssignal und das über den Datenstift 203 an der Verbindung 216 empfangene Eingangssignal empfängt. Der pstop-Erkennungsblock 410 ist so konfiguriert, dass er bei Erkennung der oben beschriebenen pstop-Bedingung einen logisch hohen Wert ausgibt. Bis die pstop-Bedingung erkannt wird, ist der pstop-Erkennungsblock 404 so konfiguriert, dass er einen logischen Low-Wert ausgibt.
-
Der Ausgang des nstop-Erkennungsblocks 404 ist mit einem Multiplexer 406 verbunden. Der Multiplexer 406 erhält auch den Ausgang des pstop-Erkennungsblocks 410 als Eingang. Der Ausgang des zweiten Flipflops 408 wird als Steuereingang für den Multiplexer 406 bereitgestellt. Wenn der Ausgang des zweiten Flipflops 408 niedrig ist, ist der Multiplexer 406 so konfiguriert, dass er den Ausgang des pstop-Erfassungsblocks 410 als einen Ausgang des Multiplexers 406 bereitstellt. Wenn der Ausgang des zweiten Flipflops 408 high ist, ist der Multiplexer 406 so konfiguriert, dass er den Ausgang des nstop-Erkennungsblocks 404 als einen Ausgang des Multiplexers 406 bereitstellt.
-
Ein UND-Gatter 412 erhält als ersten Eingang den Ausgang des ersten Flipflops 402. Das UND-Gatter 412 empfängt als zweiten Eingang den Ausgang des Multiplexers 406. Der Ausgang des UND-Gatters 412 wird als Taktsignal für ein drittes Flipflop 416 (als D-Flipflop dargestellt) und ein viertes Flipflop 418 (als D-Flipflop dargestellt) bereitgestellt. Der Dateneingang des dritten Flipflops 416 ist auf High geschaltet. Das dritte Flipflop 416 liefert das Schaltabschluss-Signal (l2C_PAD_SWITCH_DONE), das am Anschluss 224 ausgegeben wird. Der Ausgang des zweiten Flipflops 408 wird dem Dateneingang des vierten Flipflops 418 zugeführt. Das vierte Flipflop 418 liefert das Schaltsignal (I2C_PAD_SWITCH), das am Anschluss 226 ausgegeben wird.
-
Der Betrieb des Pad-Switch-Steuermoduls 222 wird zunächst beschrieben, wenn das Slave-Gerät 200 in einer herkömmlichen Konfiguration an den I2C-Bus angeschlossen ist, beispielsweise wenn das erste I2C-Slave-Gerät 108 die Funktionalität des Slave-Geräts 200 hat.
-
Beim Einschalten des Slave-Geräts 200 haben das Schaltabschluss-Signal (I2C_PAD_SWITCH_DONE) und das Schaltsignal (I2C_PAD_SWITCH) einen niedrigen Wert.
-
Der Addierer und Komparator 210 summiert den vom ersten Flankenzähler 208 erhaltenen Zählerstand A und einen vom zweiten Flankenzähler 218 erhaltenen Zählerstand B und liefert einen logischen Hochwert als Ausgang an das erste Flipflop 402, wenn diese Summierung einen vorgegebenen Schwellenwert überschreitet.
-
Die serielle Taktleitung 104 schaltet schneller um als die serielle Datenleitung 106. Wenn also das Slave-Gerät 200 in der herkömmlichen Konfiguration an den I2C-Bus angeschlossen ist, ist der vom ersten Flankenzähler 208 erhaltene Zählerstand A größer als der vom zweiten Flankenzähler 218 erhaltene Zählerstand B, und der Komparator 220 gibt einen logisch niedrigen Wert an das zweite Flipflop 408 aus. Das zweite Flip-Flop 408 gibt daher einen logischen Niedrigwert aus.
-
Wie oben erwähnt, wird der Ausgang des zweiten Flipflops 408 als Steuereingang für den Multiplexer 406 bereitgestellt. Insbesondere wenn der Ausgang des zweiten Flipflops 408 niedrig ist, ist der Multiplexer 406 so konfiguriert, dass er den Ausgang des pstop-Erkennungsblocks 410 als einen Ausgang des Multiplexers 406 bereitstellt.
-
Wenn der pstop-Erkennungsblock 410 die oben beschriebene pstop-Bedingung erkennt. Der Ausgang des Multiplexers 406 wechselt von einem niedrigen zu einem hohen Wert, der dem zweiten Eingang des UND-Gatters 412 zugeführt wird.
-
Der erste Eingang des UND-Gatters 412 hat ebenfalls einen hohen Wert, da das erste Flipflop 402 einen hohen Wert ausgibt, sobald die Summe der Zählungen den vorgegebenen Schwellenwert überschreitet. Wenn also die pstop-Bedingung erkannt wird, wechselt der Ausgang des UND-Gatters 412, der als Taktsignal sowohl an das dritte Flipflop 416 (als D-Flipflop dargestellt) als auch an das vierte Flipflop 418 (als D-Flipflop dargestellt) geliefert wird, von einem niedrigen auf einen hohen Wert. Dies bewirkt, dass der Wert des Schaltabschluss-Signals (I2C_PAD_SWITCH_DONE) von einem niedrigen auf einen hohen Wert übergeht. Das Schaltsignal (I2C_PAD_SWITCH) hat weiterhin einen niedrigen Wert, da der niedrige Ausgang des zweiten Flipflops 408 an den Dateneingang des vierten Flipflops 418 geliefert wird.
-
Wie unter Bezugnahme auf 4b näher beschrieben wird, bewirkt dies, dass (i) die Kopplung des Taktpins 201 mit dem Takteingangsanschluss der I2C-Protokoll-Slave-Logik 236 aufrechterhalten wird, so dass das über den Taktpin 201 empfangene Eingangstaktsignal an den Takteingangsanschluss (scl_in) der I2C-Protokoll-Slave-Logik 236 geliefert wird; und (ii) die Kopplung des Datenstifts 203 mit dem Dateneingangsanschluss der I2C-Protokoll-Slave-Logik 236 und dem Datenausgangsanschluss der I2C-Protokoll-Slave-Logik 236, die so aufrechtzuerhalten ist, dass ein über den Datenstift 203 empfangenes Eingangsdatensignal dem Dateneingangsanschluss der I2C-Protokoll-Slave-Logik 236 zugeführt wird und ein von der I2C-Protokoll-Slave-Logik 236 zur Übertragung an die I2C-Master-Vorrichtung 102 ausgegebenes Datensignal über den Datenstift 203 übertragen wird.
-
Darüber hinaus behält das Slave-Gerät 200 den bei der Herstellung in das Slave-Gerät programmierten Adresswert als Geräteadresse für das Slave-Gerät bei. Dies wird durch den Wert des Schaltersignals (I2C_PAD_SWITCH) gesteuert, das als Steuereingang an den Multiplexer 229 (siehe geliefert wird.
-
Wenn das Schaltsignal (I2C_PAD_SWITCH) niedrig ist, ist der Multiplexer 229 so konfiguriert, dass er den Adresswert 230, der bei der Herstellung in das Slave-Gerät programmiert wurde, an die I2C-Protokoll-Slave-Logik 236 am Anschluss 234 zur Verwendung als Geräteadresse für das Slave-Gerät liefert. Wenn das Schaltsignal (I2C_PAD_SWITCH) hoch ist, ist der Multiplexer 229 so konfiguriert, dass er eine modifizierte Geräteadresse 232 an die I2C-Protokoll-Slave-Logik 236 am Anschluss 234 zur Verwendung als Geräteadresse für das Slave-Gerät liefert. Wenn das Slave-Gerät 200 in einer herkömmlichen Konfiguration an den I2C-Bus angeschlossen ist, ist das Schaltsignal (I2C_PAD_SWITCH) niedrig, so dass das Slave-Gerät 200 den Adresswert, der bei der Herstellung in das Slave-Gerät programmiert wurde, als Geräteadresse für das Slave-Gerät beibehält.
-
Der Betrieb des Pad-Switch-Steuermoduls 222 wird nun beschrieben, wenn das Slave-Gerät 200 mit dem I2C-Bus in einer Cross-Connected-Konfiguration verbunden ist, z. B. wenn das zweite I2C-Slave-Gerät 110 die Funktionalität des Slave-Geräts 200 hat.
-
Wie bereits erwähnt, haben beim Einschalten des Slave-Geräts 200 das Schaltabschluss-Signal (I2C_PAD_SWITCH_DONE) und das Schaltsignal (I2C_PAD_SWITCH) einen niedrigen Wert.
-
Der Addierer und Komparator 210 summiert den vom ersten Flankenzähler 208 erhaltenen Zählerstand A und einen vom zweiten Flankenzähler 218 erhaltenen Zählerstand B und liefert einen logischen Hochwert als Ausgang an das erste Flipflop 402, wenn diese Summierung einen vorgegebenen Schwellenwert überschreitet.
-
Die serielle Taktleitung 104 schaltet schneller um als die serielle Datenleitung 106. Wenn also das Slave-Gerät 200 in der kreuzgeschalteten Konfiguration an den I2C-Bus angeschlossen ist, ist der vom zweiten Flankenzähler 218 erhaltene Zählerstand B größer als der vom ersten Flankenzähler 208 erhaltene Zählerstand A, und der Komparator 220 gibt einen logisch hohen Wert an das zweite Flip-Flop 408 aus. Das zweite Flipflop 408 gibt daher einen logisch hohen Wert aus.
-
Wie oben erwähnt, wird der Ausgang des zweiten Flipflops 408 als Steuereingang für den Multiplexer 406 bereitgestellt. Insbesondere ist der Multiplexer 406 so konfiguriert, dass er den Ausgang des nstop-Erkennungsblocks 404 als Ausgang des Multiplexers 406 bereitstellt, wenn der Ausgang des zweiten Flipflops 408 High ist.
-
Wenn der nstop-Erkennungsblock 404 die oben beschriebene nstop-Bedingung feststellt. Der Ausgang des Multiplexers 406 wechselt von einem niedrigen zu einem hohen Wert, der dem zweiten Eingang des UND-Gatters 412 zugeführt wird.
-
Der erste Eingang des UND-Gatters 412 hat ebenfalls einen hohen Wert, da das erste Flipflop 402 einen hohen Wert ausgibt, sobald die Summe der Zählungen den vorgegebenen Schwellenwert überschreitet. Wenn also die nstop-Bedingung erkannt wird, wechselt der Ausgang des UND-Gatters 412, der als Taktsignal sowohl an das dritte Flipflop 416 (als D-Flipflop dargestellt) als auch an das vierte Flipflop 418 (als D-Flipflop dargestellt) geliefert wird, von einem niedrigen auf einen hohen Wert. Dies bewirkt, dass der Wert des Schaltabschluss-Signals (I2C_PAD_SWITCH_DONE) von einem niedrigen auf einen hohen Wert übergeht. Das Schaltsignal (I2C_PAD_SWITCH) geht ebenfalls von einem niedrigen auf einen hohen Wert über, da der hohe Ausgang des zweiten Flipflops 408 an den Dateneingang des vierten Flipflops 418 geliefert wird.
-
Wie unter Bezugnahme auf näher beschrieben wird, bewirkt dies, dass (i) der Datenpin 203 mit dem Takteingangsport (scl_in) der I2C-Protokoll-Slave-Logik 236 gekoppelt wird, so dass das über den Datenpin 203 empfangene Eingangstaktsignal dem Takteingangsport (scl_in) der I2C-Protokoll-Slave-Logik 236 zugeführt wird; und (ii) den Taktstift 201, der mit dem Dateneingangsanschluss (sda_in) der I2C-Protokoll-Slave-Logik 236 und dem Datenausgangsanschluss der I2C-Protokoll-Slave-Logik 236 zu koppeln ist, so dass ein über den Taktstift 201 empfangenes Eingangsdatensignal dem Dateneingangsanschluss der I2C-Protokoll-Slave-Logik 236 zugeführt wird und ein von der I2C-Protokoll-Slave-Logik 236 zur Übertragung an das I2C-Mastergerät 102 ausgegebenes Datensignal über den Taktstift 201 übertragen wird.
-
Außerdem konfiguriert das Slave-Gerät 200 eine Geräteadresse für das Slave-Gerät, indem es den in das Slave-Gerät programmierten Adresswert ändert. Dies wird über den Wert des Schaltersignals (I2C_PAD_SWITCH) gesteuert, das als Steuereingang dem Multiplexer 229 zugeführt wird (siehe .
-
Wenn das Slave-Gerät 200 an den I2C-Bus in einer Querverbindungskonfiguration angeschlossen ist, ist das Schaltsignal (I2C_PAD_SWITCH) hoch und der Multiplexer 229 ist so konfiguriert, dass er eine modifizierte Geräteadresse 232 an die I2C-Protokoll-Slave-Logik 236 zur Verwendung als Geräteadresse für das Slave-Gerät liefert. Insbesondere modifiziert das Slave-Gerät 200 den bei der Herstellung in das Slave-Gerät programmierten Adresswert, um eine neue Geräteadresse für das Slave-Gerät zu erzeugen. Dadurch wird sichergestellt, dass das zweite I2C-Slave-Gerät 110 eine eindeutige Geräteadresse gemäß dem I2C-Protokoll hat. Wie man sieht, kann diese Modifikation auf verschiedene Weise durchgeführt werden, so dass das erste I2C-Slave-Gerät 108 und das zweite I2C-Slave-Gerät 110 unterschiedliche Geräteadressen haben. Beispielsweise kann das Slave-Gerät 200 den in das Slave-Gerät programmierten Adresswert um einen ganzzahligen Wert (z. B. 1) erhöhen, um die neue Geräteadresse für das Slave-Gerät zu erzeugen. Alternativ kann das Slave-Gerät 200 den in das Slave-Gerät einprogrammierten Adresswert um einen ganzzahligen Wert (z.B. 1) dekrementieren, um die neue Geräteadresse für das Slave-Gerät zu erzeugen. Selbstverständlich sind auch andere Änderungen des in das Slave-Gerät programmierten Adresswerts möglich.
-
Die im Slave-Gerät 200 gemäß der ersten Konfiguration verwendete Multiplexer-Stufe 228a wird nun unter Bezugnahme auf 4b näher beschrieben.
-
Die Multiplexerstufe 228a, die im Slave-Gerät 200 gemäß der ersten Konfiguration verwendet wird, ist sowohl als Reaktion auf das Schaltsignal (I2C_PAD_SWITCH) als auch auf das Schaltabschluss-Signal (12C_PAD SWITCH_DONE) konfigurierbar.
-
Wie in dargestellt, empfängt die Multiplexerstufe 228a sowohl das Schaltsignal (I2C_PAD_SWITCH) als auch das Signal zum Abschluss des Schaltvorgangs (12C_PAD SWITCH_DONE).
-
Die Multiplexerstufe 228a umfasst eine erste Schicht von Multiplexern, die aus vier Multiplexern besteht: Multiplexer 451, Multiplexer 453, Multiplexer 455 und Multiplexer 457. Jeder Multiplexer in der ersten Schicht empfängt das Schaltsignal (I2C_PAD_SWITCH) als Steuereingang.
-
Die Multiplexerstufe 228a umfasst auch eine zweite Schicht von Multiplexern mit vier Multiplexern: Multiplexer 452, Multiplexer 454, Multiplexer 456 und Multiplexer 458. Jeder Multiplexer in der zweiten Schicht empfängt das Schaltabschluss-Signal (I2C_PAD_SWITCH_DONE) als Steuereingang.
-
Wie in dargestellt, empfängt der Multiplexer 451 das über den Taktpin 201 empfangene Eingangssignal (scl_in) und das über den Datenpin 203 empfangene Eingangssignal (sda_in). Wenn das Schaltsignal (I2C_PAD_SWITCH) einen niedrigen Wert hat, gibt der Multiplexer 451 das über den Taktpin 201 empfangene Eingangssignal (scl_in) aus. Wenn das Schaltsignal (I2C_PAD_SWITCH) einen hohen Wert hat, gibt der Multiplexer 451 das über den Datenpin 203 empfangene Eingangssignal (sda_in) aus. Der Ausgang des Multiplexers 451 ist mit einem Eingang des Multiplexers 452 gekoppelt, und der andere Eingang des Multiplexers 452 ist auf High geschaltet. Der Ausgang des Multiplexers 452 ist mit dem Takteingangsanschluss (scl_in) der I2C-Protokoll-Slave-Logik 236 gekoppelt.
-
Der Multiplexer 453 empfängt das über den Taktpin 201 empfangene Eingangssignal (scl_in) und das über den Datenpin 203 empfangene Eingangssignal (sda_in). Wenn das Schaltsignal (I2C_PAD_SWITCH) einen niedrigen Wert hat, gibt der Multiplexer 451 das über den Datenpin 203 empfangene Eingangssignal (sda_in) aus. Wenn das Schaltsignal (I2C_PAD_SWITCH) einen hohen Wert hat, gibt der Multiplexer 451 das über den Taktpin 201 empfangene Eingangssignal (scl_in) aus. Der Ausgang des Multiplexers 453 ist mit einem Eingang des Multiplexers 454 gekoppelt, und der andere Eingang des Multiplexers 454 ist auf High geschaltet. Der Ausgang des Multiplexers 454 ist mit dem Dateneingangsanschluss (sda_in) der I2C-Protokoll-Slave-Logik 236 gekoppelt.
-
Der Datenausgangsanschluss (sda_out) der I2C-Protokoll-Slave-Logik 236 ist mit einem ersten Eingang des Multiplexers 456 und mit einem ersten Eingang des Multiplexers 458 verbunden. Ein zweiter Eingang des Multiplexers 456 und ein zweiter Eingang des Multiplexers 458 sind beide auf High geschaltet. Der Ausgang des Multiplexers 456 ist mit einem Eingang des Multiplexers 455 gekoppelt, und der andere Eingang des Multiplexers 455 ist auf „high“ geschaltet. Der Ausgang des Multiplexers 455 ist mit dem Eingang der SDA-Ausgangstreiberschaltung 212 verbunden. Der Ausgang des Multiplexers 458 ist mit einem Eingang des Multiplexers 457 gekoppelt, und der andere Eingang des Multiplexers 457 ist auf „high“ geschaltet. Der Ausgang des Multiplexers 457 ist mit dem Eingang der SCL-Ausgangstreiberschaltung 202 gekoppelt.
-
Wie bereits erwähnt, haben beim Einschalten des Slave-Geräts 200 das Schaltabschluss-Signal (I2C_PAD_SWITCH_DONE) und das Schaltsignal (I2C_PAD_SWITCH) einen niedrigen Wert.
-
Wie aus ersichtlich, ist die Multiplexerstufe 228a so angeordnet, dass, wenn das Schaltabschlusssignal (I2C_PAD_SWITCH_DONE) niedrig ist (ein erster Wert), standardmäßig alle internen Ausgangs- und Eingangssignale des Slave-Geräts (an/von der I2C-Protokoll-Slave-Logik 236) auf einen logischen hohen Wert gebunden sind und das Schaltsignal (I2C_PAD_SWITCH) daran gehindert wird, die Multiplexerstufe 228a zu konfigurieren. Wenn das Signal zur Beendigung des Schaltvorgangs (I2C_PAD_SWITCH_DONE) High ist (ein zweiter Wert), kann der Wert des Schaltsignals die Multiplexerstufe konfigurieren.
-
Wenn das Slave-Gerät 200 in der konventionellen Konfiguration an den I2C-Bus angeschlossen ist, bleibt als Reaktion auf die Erkennung der pstop-Bedingung das Schaltsignal (I2C_PAD_SWITCH) niedrig und das Schaltabschluss-Signal (I2C_PAD_SWITCH_DONE) geht von einem niedrigen auf einen hohen Wert über.
-
Dies verursacht:
- - das über den Taktstift 201 empfangene Eingangssignal (scl_in) durch den Multiplexer 451 auszugeben und dann durch den Multiplexer 452 auszugeben, so dass das über den Taktstift 201 empfangene Eingangssignal (scl_in) an den Takteingangsanschluss (scl_in) der I2C-Protokoll-Slave-Logik 236 geliefert wird;
- - das über den Datenstift 203 empfangene Eingangssignal (sda_in) durch den Multiplexer 453 auszugeben und dann durch den Multiplexer 454 auszugeben, so dass das über den Datenstift 203 empfangene Eingangssignal (sda_in) dem Dateneingangsanschluss (sda_in) der I2C-Protokoll-Slave-Logik 236 zugeführt wird; und
- - das vom Datenausgangsanschluss (sda_out) der I2C-Protokoll-Slave-Logik 236 ausgegebene Datensignal, das vom Multiplexer 456 ausgegeben und dann vom Multiplexer 455 ausgegeben wird, so dass das Datensignal dem Datenstift 203 zur Ausgabe auf der seriellen Datenleitung 106 zugeführt wird.
-
Diese Änderungen werden durchgeführt, wenn sich der I2C-Bus im Leerlauf befindet (nach der Erkennung der pstop-Bedingung).
-
Wenn das Slave-Gerät 200 an den I2C-Bus in der Konfiguration mit Querverbindung angeschlossen ist, gehen als Reaktion auf die Erkennung der nstop-Bedingung sowohl das Schaltsignal (I2C_PAD_SWITCH) als auch das Schaltabschluss-Signal (I2C_PAD_SWITCH_DONE) von einem niedrigen auf einen hohen Wert über.
-
Dies verursacht:
- - das über den Daten-Pin 203 empfangene Eingangssignal (sda_in) durch den Multiplexer 451 auszugeben und dann durch den Multiplexer 452 auszugeben, so dass das über den Daten-Pin 203 empfangene Eingangssignal (sda_in) an den Takteingangsanschluss (scl_in) der I2C-Protokoll-Slave-Logik 236 geliefert wird;
- - das über den Taktstift 201 empfangene Eingangssignal (scl_in) durch den Multiplexer 453 auszugeben und dann durch den Multiplexer 454 auszugeben, so dass das über den Taktstift 201 empfangene Eingangssignal (scl_in) an den Dateneingangsanschluss (sda_in) der I2C-Protokoll-Slave-Logik 236 geliefert wird; und
- - das vom Datenausgangsanschluss (sda_out) der I2C-Protokoll-Slave-Logik 236 ausgegebene Datensignal, das vom Multiplexer 458 ausgegeben und dann vom Multiplexer 457 ausgegeben werden soll, so dass das Datensignal dem Taktstift 201 zur Ausgabe auf der seriellen Datenleitung 106 zugeführt wird.
-
Diese Änderungen werden durchgeführt, wenn sich der I2C-Bus im Leerlauf befindet (nach der Erkennung der nstop-Bedingung).
-
Das Slave-Gerät 200 gemäß der oben beschriebenen ersten Konfiguration benötigt nach dem Einschalten eine I2C-Transaktion, um auf I2C-Transaktionen vom I2C-Master-Gerät 102 mit seiner Geräteadresse zu reagieren. Insbesondere in Ausführungsformen, bei denen sowohl das erste I2C-Slave-Gerät 108 als auch das zweite I2C-Slave-Gerät 110 über die hierin beschriebene Funktionalität des Slave-Geräts 200 verfügt (z. B. wenn es sich um mehrere Instanzen desselben Slave-Geräts handelt), ist nach dem Einschalten eine I2C-Transaktion für beide I2C-Slave-Geräte erforderlich, damit sie beginnen, auf I2C-Transaktionen vom I2C-Master-Gerät 102 mit ihrer jeweiligen Geräteadresse zu reagieren.
-
Diese erforderliche I2C-Transaktion kann beispielsweise eine I2C-Transaktion zwischen dem I2C-Mastergerät 102 und einem an den I2C-Bus angeschlossenen I2C-Slavegerät sein, das nicht Teil der Slavegeräteanordnung 107 ist, z. B. zwischen dem I2C-Mastergerät 102 und dem zusätzlichen Slavegerät 112. Das heißt, die erforderliche I2C-Transaktion wird weder an das erste I2C-Slave-Gerät 108 noch an das zweite I2C-Slave-Gerät 110 adressiert. Alternativ kann die erforderliche I2C-Transaktion auch eine Dummy-I2C-Transaktion zwischen dem I2C-Master-Gerät 102 und dem ersten I2C-Slave-Gerät 108 oder dem zweiten I2C-Slave-Gerät 110 sein.
-
Bei Verwendung des Slave-Geräts 200 gemäß der oben beschriebenen ersten Konfiguration besteht kein Risiko eines Zeitfehlers oder Fehlverhaltens der I2C-Protokoll-Slave-Logik 236.
-
zeigt ein Beispiel für ein Slave-Gerät 500 in einer zweiten Konfiguration. Unter Bezugnahme auf weist das zweite I2C-Slave-Gerät 110 die nachstehend beschriebenen Funktionen des Slave-Geräts 500 auf. Das erste I2C-Slave-Gerät 108 kann auch die Funktionalität des unten beschriebenen Slave-Geräts 500 aufweisen.
-
Das Beispiel-Slave-Gerät 500 gemäß einer zweiten Konfiguration unterscheidet sich von dem oben beschriebenen Slave-Gerät 200 durch die Implementierung des Pad-Switch-Steuermoduls 222 und der Multiplexer-Stufe 228.
-
Wie in dargestellt, wird der Ausgang des UND-Gatters 412 an ein einzelnes Flip-Flop 418 (als D-Flip-Flop dargestellt) geleitet - das dritte Flip-Flop 416 des Slave-Geräts 200 ist nicht vorhanden.
-
Im Beispiel-Slave-Gerät 500 ist das Pad-Switch-Steuermodul 222 so konfiguriert, dass es die jeweiligen Verbindungen zwischen dem Takt-Pin 201 und dem Daten-Pin 203 zur I2C-Protokoll-Slave-Logik 236 steuert, indem es das Schaltsignal (I2C_PAD_SWITCH) erzeugt, das am Anschluss 226 ausgegeben wird. Im Vergleich zum Slave-Gerät 200 wird gemäß der zweiten Konfiguration vom Pad-Switch-Steuermodul 222 kein Schaltabschluss-Signal (12C_PAD_SWITCH_DONE) ausgegeben.
-
Das Pad-Switch-Steuermodul 222 gibt das Schaltsignal (I2C_PAD_SWITCH) an eine Multiplexerstufe 228b aus, um die Kopplung des Taktpins 201 und des Datenpins 203 des Slave-Geräts mit der I2C-Protokoll-Slave-Logik 236 zu steuern.
-
In operation, in response to a detection by the clock line identification module 205 that the data pin 203 is connected to the serial clock line 104 (i.e. the slave device is connected to the I2C bus in the cross connected configuration), the pad switch control module 222 is configured to: (i) die Kopplung des Datenpins 203 mit dem Takteingangsport (scl_in) der I2C-Protokoll-Slave-Logik 236 so zu steuern, dass das über den Datenpin 203 empfangene Eingangstaktsignal dem Takteingangsport (scl_in) der I2C-Protokoll-Slave-Logik 236 zugeführt wird; und (ii) Steuerkopplung des Taktpins 201 mit dem Dateneingangsport (sda_in) der I2C-Protokoll-Slave-Logik 236 und dem Datenausgangsport der I2C-Protokoll-Slave-Logik 236, so dass ein über den Taktpin 201 empfangenes Eingangsdatensignal dem Dateneingangsport der I2C-Protokoll-Slave-Logik 236 zugeführt wird und ein von der I2C-Protokoll-Slave-Logik 236 zur Übertragung an die I2C-Master-Vorrichtung 102 ausgegebenes Datensignal über den Taktpin 201 übertragen wird.
-
Das heißt, dass der Prozess auf der Grundlage der Taktleitungsidentifizierung die von den Pins zur I2C-Protokoll-Slave-Logik 236 führenden Leitungen vertauscht. Das heißt, wenn der Daten-Pin 203 mit der seriellen Taktleitung 104 verbunden ist, dann vertauscht das Pad-Switch-Steuermodul 222 die Pin-Ausgänge, die zur I2C-Protokoll-Slave-Logik 236 gehen, als Eingänge, und das sda_out-Signal von der I2C-Protokoll-Slave-Logik wird mit der SCL-Ausgangstreiberschaltung 202 verbunden.
-
Im Betrieb ist das Pad-Switch-Steuermodul 222 als Reaktion auf eine Erkennung durch das Taktleitungsidentifikationsmodul 205, dass der Taktstift 201 mit der seriellen Taktleitung 104 verbunden ist (d.h. das Slave-Gerät in der konventionellen Konfiguration mit dem I2C-Bus verbunden ist), ist das Pad-Switch-Steuermodul 222 so konfiguriert, dass: (i) die Kopplung des Taktpins 201 mit dem Takteingangsport der I2C-Protokoll-Slave-Logik 236 aufrechtzuerhalten, so dass das über den Taktpin 201 empfangene Eingangstaktsignal an den Takteingangsport (scl_in) der I2C-Protokoll-Slave-Logik 236 geliefert wird; und (ii) Aufrechterhalten der Kopplung des Datenpins 203 mit dem Dateneingangsanschluss der I2C-Protokoll-Slave-Logik 236 und dem Datenausgangsanschluss der I2C-Protokoll-Slave-Logik 236, so dass ein über den Datenpin 203 empfangenes Eingangsdatensignal dem Dateneingangsanschluss der I2C-Protokoll-Slave-Logik 236 zugeführt wird und ein von der I2C-Protokoll-Slave-Logik 236 zur Übertragung an die I2C-Master-Vorrichtung 102 ausgegebenes Datensignal über den Datenpin 203 übertragen wird.
-
Die Funktionalität der Multiplexerstufe 228b, die in dem Beispiel-Slave-Gerät 500 gemäß der zweiten Konfiguration implementiert ist, wird im Folgenden unter Bezugnahme auf näher beschrieben.
Die Multiplexerstufe 228b, die im Slave-Gerät 500 gemäß der zweiten Konfiguration verwendet wird, ist nur in Reaktion auf das Schaltsignal (I2C_PAD_SWITCH) konfigurierbar.
-
Die Multiplexerstufe 228a umfasst eine einzige Schicht von Multiplexern mit vier Multiplexern, Multiplexer 551, Multiplexer 552, Multiplexer 553 und Multiplexer 554. Jeder Multiplexer in dieser einzelnen Schicht empfängt das Schaltsignal (I2C_PAD_SWITCH) als Steuereingang.
-
Wie in dargestellt, empfängt der Multiplexer 551 das über den Taktstift 201 empfangene Eingangssignal (scl_in) und das über den Datenstift 203 empfangene Eingangssignal (sda_in). Der Ausgang des Multiplexers 551 ist mit dem Takteingangsanschluss (scl_in) der I2C-Protokoll-Slave-Logik 236 verbunden.
-
Der Multiplexer 552 empfängt das über den Taktpin 201 empfangene Eingangssignal (scl_in) und das über den Datenpin 203 empfangene Eingangssignal (sda_in). Der Ausgang des Multiplexers 552 ist mit dem Dateneingangsanschluss (sda_in) der I2C-Protokoll-Slave-Logik 236 verbunden.
-
Der Datenausgangsanschluss (sda_out) der I2C-Protokoll-Slave-Logik 236 ist mit einem ersten Eingang des Multiplexers 553 und mit einem ersten Eingang des Multiplexers 554 verbunden. Ein zweiter Eingang des Multiplexers 553 und ein zweiter Eingang des Multiplexers 554 sind beide auf High geschaltet. Der Ausgang des Multiplexers 553 ist mit dem Eingang der SDA-Ausgangstreiberschaltung 212 verbunden. Der Ausgang des Multiplexers 554 ist mit dem Eingang der SCL-Ausgangstreiberschaltung 202 gekoppelt.
-
Beim Einschalten des Slave-Geräts 500 hat das Schaltsignal (I2C_PAD_SWITCH) einen niedrigen Wert.
-
Dies verursacht:
- - das über den Taktstift 201 empfangene Eingangssignal (scl_in) durch den Multiplexer 551 auszugeben, so dass das über den Taktstift 201 empfangene Eingangssignal (scl_in) dem Takteingangsanschluss (scl_in) der I2C-Protokoll-Slave-Logik 236 zugeführt wird;
- - das über den Datenstift 203 empfangene Eingangssignal (sda_in) durch den Multiplexer 552 auszugeben, so dass das über den Datenstift 203 empfangene Eingangssignal (sda_in) dem Dateneingangsanschluss (sda_in) der I2C-Protokoll-Slave-Logik 236 zugeführt wird; und
- - das vom Datenausgangsanschluss (sda_out) der I2C-Protokoll-Slave-Logik 236 ausgegebene Datensignal, das vom Multiplexer 553 ausgegeben werden soll, so dass das Datensignal dem Datenstift 203 zur Ausgabe auf der seriellen Datenleitung 106 zugeführt wird.
-
Wenn das Slave-Gerät 500 in der konventionellen Konfiguration an den I2C-Bus angeschlossen ist, bleibt als Reaktion auf die Erkennung der pstop-Bedingung das Schaltsignal (I2C_PAD_SWITCH) niedrig, was zu keiner Änderung des oben genannten Zustands der Multiplexerstufe 228a führt.
-
In diesem Szenario ist das Slave-Gerät 500 nach dem Einschalten in der Lage, jede an es gerichtete I2C-Transaktion sofort zu verarbeiten.
-
Wenn das Slave-Gerät 500 an den I2C-Bus in der Konfiguration mit Querverbindung angeschlossen ist, wechselt das Schaltsignal (I2C_PAD_SWITCH) als Reaktion auf die Erkennung der nstop-Bedingung von einem niedrigen zu einem hohen Wert.
-
Dies verursacht:
- - das über den Daten-Pin 203 empfangene Eingangssignal (sda_in), das vom Multiplexer 551 auszugeben ist, so dass das über den Daten-Pin 203 empfangene Eingangssignal (sda_in) dem Takteingangsanschluss (scl_in) der I2C-Protokoll-Slave-Logik 236 zugeführt wird;
- - das über den Taktstift 201 empfangene Eingangssignal (scl_in) durch den Multiplexer 552 auszugeben, so dass das über den Taktstift 201 empfangene Eingangssignal (scl_in) dem Dateneingangsanschluss (sda_in) der I2C-Protokoll-Slave-Logik 236 zugeführt wird; und
- - das vom Datenausgangsanschluss (sda_out) der I2C-Protokoll-Slave-Logik 236 ausgegebene Datensignal, das vom Multiplexer 554 ausgegeben werden soll, so dass das Datensignal dem Taktstift 201 zur Ausgabe auf der seriellen Datenleitung 106 zugeführt wird.
-
In diesem Szenario benötigt das Slave-Gerät 500 nach dem Einschalten eine I2C-Transaktion, um auf I2C-Transaktionen vom I2C-Master-Gerät 102 mit seiner Geräteadresse zu reagieren. Insbesondere in Ausführungsformen, bei denen sowohl das erste I2C-Slave-Gerät 108 als auch das zweite I2C-Slave-Gerät 110 über die hierin beschriebene Funktionalität des Slave-Geräts 200 verfügt (z. B. wenn es sich um mehrere Instanzen desselben Slave-Geräts handelt), ist nach dem Einschalten eine I2C-Transaktion für beide I2C-Slave-Geräte erforderlich, damit sie beginnen, auf I2C-Transaktionen vom I2C-Master-Gerät 102 mit ihrer jeweiligen Geräteadresse zu reagieren. Wie oben erläutert, kann diese erforderliche I2C-Transaktion beispielsweise eine I2C-Transaktion zwischen dem I2C-Master-Gerät 102 und einem an den I2C-Bus angeschlossenen I2C-Slave-Gerät, das nicht Teil der Slave-Geräteanordnung 107 ist, oder eine Dummy-I2C-Transaktion zwischen dem I2C-Master-Gerät 102 und dem ersten I2C-Slave-Gerät 108 oder dem zweiten I2C-Slave-Gerät 110 sein.
-
Die I2C-Protokoll-Slave-Logik 236 des Slave-Geräts 500 gemäß der zweiten Konfiguration sollte sorgfältig entworfen werden, um auf Timing-Verletzungen zu achten. Insbesondere empfängt der Takteingangsanschluss (scl_in) der I2C-Protokoll-Slave-Logik 236 in der Querverbindungskonfiguration Daten von der seriellen Datenleitung 106. Analog dazu empfängt der Dateneingangsanschluss (sda_in) der I2C-Protokoll-Slave-Logik 236 ein Taktsignal von der seriellen Taktleitung 104. Aufgrund dieser vertauschten Beziehung sollte die I2C-Protokoll-Slave-Logik 236 so ausgelegt sein, dass sie nicht in einen unerwünschten Zustand gerät.
-
Sowohl in der Slave-Vorrichtung 200 gemäß der ersten Konfiguration als auch in der Slave-Vorrichtung 500 gemäß der zweiten Konfiguration werden das erste Flip-Flop 402 und das zweite Flip-Flop 408 durch dasselbe Taktsignal gesteuert. Dieses Taktsignal kann von der Zeitsteuerungslogik 600 bereitgestellt werden, ein Beispiel hierfür ist in dargestellt.
-
Da der Eingang des ersten Flipflops 402 und des zweiten Flipflops 408 jeweils auf der Grundlage des über den Takt-Pin 201 empfangenen Eingangssignals (scl_in) und des über den Daten-Pin 203 empfangenen Eingangssignals (sda_in) gesteuert wird (d. h. Takt- und Datensignale unabhängig davon, wie das Slave-Gerät mit dem I2C-Bus verbunden ist), ist die Timing-Logik 600 vorgesehen, um die Timing-Anforderungen des ersten Flipflops 402 und des zweiten Flipflops 408 zu erfüllen.
-
zeigt eine Möglichkeit, wie die Zeitsteuerungslogik 600 implementiert werden kann, es sind jedoch auch andere Implementierungen möglich. Die in dargestellte Beispiel-Zeitsteuerungslogik 600 empfängt als Eingänge das über den Taktstift 201 empfangene Eingangssignal (scl_in) und das über den Datenstift 203 empfangene Eingangssignal (sda_in). In einem ersten Zweig 602 wird das Eingangssignal (sda_in) invertiert und verzögert, bevor es als erster Eingang einem ersten UND-Gatter zugeführt wird, wobei das erste UND-Gatter auch das Eingangssignal (sda_in) als zweiten Eingang erhält. Im ersten Zweig 602 wird das Eingangssignal (scl_in) invertiert und verzögert, bevor es als erster Eingang einem zweiten UND-Gatter zugeführt wird, wobei das zweite UND-Gatter auch das Eingangssignal (scl_in) als zweiten Eingang empfängt. Der Ausgang des ersten UND-Gatters und des zweiten UND-Gatters werden als jeweilige Eingänge einem ODER-Gatter zugeführt, dessen Ausgang als erster Eingang einem Multiplexer 606 zugeführt wird. In einem zweiten Zweig 604 wird das über den Datenpin 203 empfangene Eingangssignal (sda_in) verzögert und als zweiter Eingang dem Multiplexer 606 zugeführt. Der Multiplexer 606 wird über das Steuersignal 608 gesteuert. Das heißt, der Ausgang des Multiplexers 606 ist der Ausgang des ersten Zweigs 602 oder der Ausgang des zweiten Zweigs 604 in Abhängigkeit von dem Wert des Steuersignals 608. Der Multiplexer 606 kann ein einmalig programmierbares Gerät sein. Der Ausgang des Multiplexers 606 ist mit dem Takteingang des ersten Flipflops 402 und des zweiten Flipflops 408 verbunden (610).
-
Im Betrieb gibt es zwei Möglichkeiten der Takterzeugung, die durch das Steuersignal 608 ausgewählt werden.
Wenn 608=0 ist, wird das verzögerte sda_in-Signal als Takt verwendet, so dass der D-Eingang des ersten Flipflops 402 und des zweiten Flipflops 408 beruhigt wird, bevor der Takt seinen Taktpin erreicht, um eine Verletzung des Setup/Hold-Timings der Flipflops zu vermeiden.
-
Wenn 608=1 ist, wird das gleiche, oben erläuterte Verzögerungskonzept verwendet, um ein Setup/Hold-Timing zu vermeiden, jedoch mit zusätzlicher Takterzeugung. In diesem Fall erzeugt jeder Low-High-Übergang am scl-in- oder sda_in-Signal einen Taktimpuls für das erste Flipflop 402 und das zweite Flipflop 408.
zeigt ein schematisches Blockdiagramm der I2C-Vorrichtung 100 nach einer I2C-Transaktion.
-
Nach einer I2C-Transaktion, die nicht an das erste I2C-Slave-Gerät 108 und das zweite I2C-Slave-Gerät 110 (in diesem Beispiel Instanzen desselben Slave-Geräts) adressiert ist, oder einer Dummy-12C-Transaktion (wenn keine anderen Slave-Geräte an den I2C-Bus angeschlossen sind) wird die Pad-Swapping-Erkennung abgeschlossen. Das erste I2C-Slave-Gerät 108, das in der herkömmlichen Konfiguration an den I2C-Bus angeschlossen ist (Slave1 Instanz 1), behält seine Standardadresse. Beim zweiten I2C-Slave-Gerät 110 (Slave1 Instanz 2) sind jedoch die Pins vertauscht, so dass die Logik dieses Szenario erkennt und den in das zweite I2C-Slave-Gerät programmierten Adresswert ändert, wie in dargestellt.
-
Die in der vorliegenden Offenlegung beschriebenen Techniken können in verschiedenen Anwendungen eingesetzt werden. Im kommerziellen Mobilfunkgeschäft müssen beispielsweise bei drahtlosen Ohrhörern zwei I2C-Slave-Geräte an denselben I2C-Bus angeschlossen werden. Die vorliegende Offenlegung kann auf jede Anwendung angewendet werden, bei der zwei Slave-Geräte (z. B. zwei Instanzen desselben Slave-Geräts) an denselben I2C-Bus angeschlossen werden müssen.
-
Die hier beschriebenen Ausführungsformen beziehen sich zwar auf ein oder mehrere Slave-Geräte mit dedizierter Hardwareschaltung, doch kann jede der hier beschriebenen Funktionen eines Slave-Geräts durch Software, Firmware, Hardware (z. B. feste Logikschaltungen) oder eine Kombination dieser Implementierungen realisiert werden. Die hier verwendeten Begriffe „Modul“, „Funktionalität“, „Stufe“, „Block“ und „Logik“ stehen allgemein für Software, Firmware, Hardware oder eine Kombination davon. Im Falle einer Software-Implementierung stellt das Modul, die Funktionalität oder die Logik einen Programmcode dar, der bei Ausführung auf einem Prozessor (z. B. CPU oder CPUs) bestimmte Aufgaben ausführt. Der Programmcode kann in einem oder mehreren computerlesbaren Speichergeräten gespeichert werden. Beispiele für ein computerlesbares Speichermedium sind ein Speicher mit wahlfreiem Zugriff (RAM), ein Festwertspeicher (ROM), eine optische Disk, ein Flash-Speicher, ein Festplattenspeicher und andere Speichervorrichtungen, die magnetische, optische und andere Techniken zur Speicherung von Anweisungen und anderen Daten verwenden können.
-
Obwohl die Offenbarung in Form von bevorzugten Ausführungsformen, wie oben dargelegt, beschrieben wurde, ist es zu verstehen, dass diese Ausführungsformen nur zur Veranschaulichung dienen und dass die Ansprüche nicht auf diese Ausführungsformen beschränkt sind. Der Fachmann kann im Hinblick auf die Offenbarung Modifikationen und Alternativen vornehmen, die in den Anwendungsbereich der beigefügten Ansprüche fallen. Jedes Merkmal, das in der vorliegenden Beschreibung offenbart oder dargestellt ist, kann in jede beliebige Ausführungsform eingebaut werden, sei es allein oder in geeigneter Kombination mit jedem anderen hier offengelegten oder dargestellten Merkmal.
-
Bezugszeichenliste
-
- 100
- Inter-Integrierte Schaltung (I2C) Gerät
- 102
- I2C-Master-Gerät 102
- 104
- serielle Taktleitung
- 106
- serielle Datenleitung
- 107
- Slave-Geräteanordnung
- 108
- erstes I2C-Slave-Gerät
- 110
- Sekunden I2C-Slave-Gerät
- 112
- zusätzliches Slave-Gerät
- 200
- Slave-Gerät gemäß einer ersten Konfiguration
- 201
- Taktgeberstift
- 202
- SCL-Ausgangstreiberschaltung 202
- 203
- Datenstift
- 204
- SCL-Pad-Verzögerungs- und Filterschaltung
- 205
- Modul zur Identifizierung von Taktleitungen
- 206
- Verbindung
- 208
- erster Kantenzähler
- 210
- Addierer und Komparator
- 212
- SDA-Ausgangstreiberschaltung
- 214
- SDA-Pad-Verzögerungs- und Filterschaltung
- 216
- Verbindung
- 218
- Zweiter Randzähler
- 220
- Komparator
- 222
- Polsterschalter-Steuermodul
- 224
- Verbindung
- 226
- Verbindung 228 Amultiplexerstufe des Slave-Geräts gemäß der ersten Konfiguration 228b Multiplexer-Stufe des Slave-Geräts gemäß der zweiten Konfiguration
- 229
- Multiplexer
- 230
- Adresswert, der bei der Herstellung in das Slave-Gerät einprogrammiert wurde
- 232
- geänderte Geräteadresse
- 234
- Verbindung
- 236
- I2C-Protokoll-Slave-Logik
- 300
- I2C-Transaktion, die von den Pins eines an den I2C-Bus angeschlossenen Slave-Geräts in einer herkömmlichen Konfiguration gesehen wird
- 302
- am Datenpin empfangenes Signal
- 304
- am Clock-Pin empfangenes Signal
- 306
- positive Startbedingung
- 308
- negative Startbedingung
- 310
- negative Stoppbedingung
- 312
- positive Stopp-Bedingung
- 350
- I2C-Transaktion, die von den Pins eines an den I2C-Bus angeschlossenen Slave-Geräts in einer Konfiguration mit Querverbindung gesehen wird
- 402
- Erster Flip-Flop
- 404
- nStop-Erkennungsblock
- 406
- Multiplexer
- 408
- Sekunden-Flip-Flop
- 410
- pstop-Erkennungsblock
- 412
- AND Tor
- 416
- dritter Flip-Flop
- 418
- vierte Kippstufe
- 451
- Multiplexer
- 452
- Multiplexer
- 453
- Multiplexer
- 454
- Multiplexer
- 456
- Multiplexer
- 457
- Multiplexer
- 458
- Multiplexer
- 500
- Slave-Gerät gemäß einer zweiten Konfiguration
- 551
- Multiplexer
- 552
- Multiplexer
- 553
- Multiplexer
- 554
- Multiplexer
- 600
- Timing-Logik
- 602
- erste Niederlassung
- 604
- zweite Niederlassung
- 606
- Multiplexer
- 608
- Steuersignal
- 610
- Verbindung