I2C-Kommunikation mit verschiedenen Stromquellen

Werde ich Probleme haben, wenn ich versuche, eine I2C-Kommunikation zwischen 2 µC herzustellen, die von zwei verschiedenen Quellen gespeist werden?

Beide µC laufen auf 3,3 V, aber diese Spannung wird von einem anderen Regler (LM317) bereitgestellt. Genaue 3,3 V sind aufgrund der Widerstandstoleranz nicht garantiert. Da beide Regler die gleiche Masse haben, gibt es keine große Spannungslücke zwischen den µCs.

Ich bin mir ziemlich sicher, dass es funktionieren wird, aber ich hätte gerne die Bestätigung der EE-Community.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Es wird klappen...
Ich wusste, dass es. Ich sollte mir etwas mehr zutrauen
Natürlich überprüfen Sie besser die MCU-Spezifikationen auf die Spannungstoleranz der Pins, aber ich glaube, sie ist breit genug.
Es sollte nicht mehr als 0,7 V Unterschied geben, da sonst einige Schutzdioden an den Eingängen zu leiten beginnen (was schlecht ist).
Danke für den Tipp. Ich werde einen Widerstand mit niedrigem Prozentsatz verwenden, um dann eine genaue Spannungsversorgung zu haben
Beim Einschalten KÖNNEN Probleme auftreten, wenn ein LM317 3,3 V erreicht, bevor der andere hochfährt (siehe Jankas Notiz), selbst wenn keine I2C-Übertragungen versucht werden. Abschalten hat das gleiche Problem.
@glen_geek Was für ein Problem?
In dem Moment, in dem Sie den Master einschalten, liefern R1 und R2 3,x Volt an die Datenleitungen, was, wenn der Slave noch nicht mit Strom versorgt wird, 3,x Volt mehr bedeutet als die Pins am Slave. Dadurch werden alle Schutzdioden zu Vcc im Slave leitend und leiten (3,x-0,7) Volt zur Vcc des Slaves und zum Ausgang seines Reglers. Es kann die Chips nicht beschädigen, da der Strom durch R1 + R2 auf wenige mA begrenzt ist, aber es kann zu unerwünschtem Verhalten kommen oder auch nicht.
@JimmyB Danke für diese Antwort. Dann muss ich sicher sein, dass alle Slaves mit Strom versorgt werden, bevor ich mit dem Senden von Daten beginne?
Ich erwarte keine Probleme, wenn Sie beide Geräte fast gleichzeitig einschalten. Wahrscheinlich auch nicht, wenn einer von ihnen längere Zeit ohne Strom bleibt. Beachten Sie, dass R1 + R2 die Datenleitungen mit Strom versorgen, unabhängig davon, ob eine Kommunikation stattfindet oder nicht. - Aber kurz gesagt: Nur zu, es geht.
Ich werde dann weitermachen ;) Ich werde meine eigene Frage mit all der Präzision beantworten, die Sie mir gegeben haben
Latch-up ist ein potenzielles Problem, bei dem der noch nicht mit Strom versorgte Mikrocontroller I/O-Pins mit Spannung sieht, aber nichts an seinem Vdd-Pin (Power) hat. Dedizierte I2C-Leitungen sollten gegen dieses Problem immun sein, aber die meisten Mikrocontroller haben Mehrzweck-IO-Pins, die einen Überspannungsschutz haben, der zu Latch-up-Problemen führen könnte . Jeder Mikrocontroller warnt vor Spannungen, die an I/O-Pins angelegt werden und mehr als etwa 0,5 V über Vdd (oder etwa 0,5 V unter Masse) liegen.

Antworten (3)

Ja, es wird funktionieren, auch wenn zwischen den beiden Reglern eine kleine Spannungslücke besteht. Diese Lücke muss jedoch kleiner als 0,7 V sein , um zu verhindern, dass die innere Schutzdiode leitet und den Chip im Laufe der Zeit (wenig) beschädigt. Die Versorgung muss genau sein, um ein Anhängen zu verhindern. Zur Konfiguration des LM317-Reglers sollte ein Widerstand mit niedrigem Toleranzwert verwendet werden.

Beim Hochfahren werden nicht beide µC gleichzeitig mit Strom versorgt. Die Busleitung wird schließlich vor beiden µC (über R1 und R2) mit Strom versorgt. Dies sollte jedoch aufgrund des geringen Stromflusses (dank des hohen Pull-up-Widerstandswerts) keinen Schaden anrichten.

Danke an JimmyB, glen_geek und Janka, die mir im Kommentar geholfen haben.

Ja, was Sie vorschlagen, funktioniert, solange die Pullups auf die niedrigere der beiden Versorgungsspannungen gehen. Natürlich muss dieses Angebot eine gewisse Marge über der garantierten Mindestobergrenze für IIC liegen. Ich weiß nicht mehr, was das ist, aber 3 V sind in Ordnung.

Denken Sie an den maximalen Senkenstrom, um eine Leitung niedrig zu halten. Das sind 3 mA, wenn ich mich recht erinnere (Ihre Aufgabe zu überprüfen). Das heißt, bei 3 V Versorgung dürfen die Pullups nicht kleiner als 1 kΩ sein.

Der Pull-up-Widerstand am I2C-Bus betrug früher etwa 10 kΩ. Aber ich werde die Berechnung gemäß diesem Beitrag durchführen

Wenn Sie nachschlagen, wie I2C tatsächlich funktioniert, werden Sie schnell feststellen, dass es nicht so schwierig ist, es mit mehreren Spannungspegeln zu verwenden. Bis das Delta zu groß wird (z. B.: 1,8 V und 5 V)

I2C-Ersatzschaltbild

Alles, was I2C tun kann, ist, die Leitung nach unten zu ziehen. Dafür braucht man die Pullup-Widerstände.

Wenn Sie dies wissen, können Sie den niedrigsten Spannungspegel als Pull-up verwenden und dann sicherstellen, dass die MCU mit höherer Spannung dies als logisch hoch mit genügend Spielraum erkennt. Für diesen Spielraum müssen Sie sich die Buskapazität und die erforderlichen Timings ansehen.

Das Gegenteil ist auch möglich, aber wie @M.Ferru erklärte, müssen Sie unter der Schwelle der internen Schutzdioden bleiben. Diese Methode wird nicht empfohlen.

Danke an sparkfun für das Bild.