Verwendung von 74LVC1T45 im Open-Drain-Gehäuse

Ich möchte einen "universellen" oder "Multiprotokoll"-fähigen E/A-Block erstellen und denke derzeit darüber nach, den 74LVC1T45-Pegelübersetzer zu verwenden , um die Kommunikation zwischen zwei Systemen mit unterschiedlichem Spannungspegel durchzuführen.

Ich möchte in der Lage sein, UART, I2C und jede andere benutzerdefinierte Serie zu unterstützen, die auf ähnliche Weise funktioniert. Die B-Seite kann also Push-Pull, Open Drain, mit und ohne Pull-Ups/-Downs sein...

Der schwer zu verstehende Teil ist, wie ein bestimmter Open-Drain-Anwendungsfall berücksichtigt werden kann, bei dem das Interface-D-System (B) möglicherweise NICHT mit einem Pull-Up ausgestattet ist ... Was sollte ich hinzufügen / berücksichtigen, wenn ich die Schaltung mache ...

Wie ich mir das vorstelle, ist das für einen solchen Open-Drain-Anwendungsfall:

B nach A:

Auf einer (Empfänger-)Seite müssen Pull-up(s) aktiviert sein. Die B-Seite hat keinen Pull-up ( warum auch immer ).

Wenn B LOW sendet, wird die A-Seite ebenfalls auf Low gezogen. Wenn B High übertragen will - was bedeutet, dass B ein Float ist (obwohl der derzeit nicht vorhandene Pullup die Leitung sonst auf High ziehen sollte), hat der 74LVC keine Möglichkeit, die A-Leitung auf High zu ziehen? Wenn Floating B einen Schwellenwert von VCCI × 0,65 nicht überschreitet (also für 1,8 V Vih> 1,17 V), kann ich grundsätzlich nicht davon ausgehen, dass A auf High gehen kann, wenn B ein Float ist?

1) Ist in diesem Fall B wirklich von Port A isoliert? und ich muss meinen eigenen Klimmzug für die B-Seite hinzufügen? (Wie ich verstehe, könnte ich von A nach B und Open-Drain-Anwendungsfall mit dem Nicht-Klimmzug auf der B-Seite davonkommen, da, wenn A hoch ist, auch B hochgezogen wird).

oder wie könnte ich es besser verstehen? (Ich habe nur ein oder mehrere IBIS-Modelle für diesen Teil gefunden, aber keine Ahnung, wie man das benutzt).

Schaltung wie gewünscht:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

2) Aha auch, erinnerte sich: Im Falle einer bidirektionalen seriellen - in diesem Fall I2C - erwähnte das Datenblatt, dass "der Designer bedenken muss, dass der Bus keine Konkurrenz bekommt, wenn DIR umgedreht wird". Bedeutet dies also, dass dies in Ordnung ist Um das DIR zu ändern, muss ich zuerst entweder VCCA oder VCCB entfernen (also das Gerät "deaktivieren"), das DIR ändern, VCCa oder VCCB wieder aktivieren und erst dann mit dem Senden/Empfangen beginnen?

Annahmen sind:

  • Die Haupt-MCU ist @1.8VccA und die erwartete maximale Schnittstellenleitung ist @5VccB

  • Die erwartete Last auf der Ausgangsleitung B beim Versuch, High zu ziehen, kann maximal 1k betragen. (Ich habe gelesen, dass der 74LVC mit 2k Last spezifiziert werden soll - das ist eigentlich gut genug für mich).

  • Bei Output als Open-Drain-Sender ist der Pull-up des Senders (B) möglicherweise nicht implementiert.

Bitte erstellen Sie einen Schaltplan für die spezifische Schaltung, nach der Sie fragen.
@CL. fügte den Schaltplan hinzu - der eingebaute war nicht perfekt, daher fehlen einige der 'Block'-Objekte oder sind etwas dispositioniert, aber auf den linken MCU-GPIOs sollte auch ein internes Pull-up / -down angezeigt werden.

Antworten (1)

Wenn ein Open-Drain-Signal ohne Pull-up-Widerstand inaktiv ist, ist der B-Eingang schwebend. Dies ist ein ungültiger Zustand; Der Eingang kann als niedrig oder hoch oder oszillierend gelesen werden, und es kann zu Durchschussströmen kommen (siehe FAQ von TI ).

Außerdem ist I²C ein bidirektionaler Bus, und es gibt Zeiten, in denen es nicht möglich ist, eine Richtung zu bestimmen (wenn kein oder mehrere Treiber aktiv sind). Es ist also nicht möglich, einen richtungsgesteuerten Pegelumsetzer wie den 74LVC1T45 für I²C zu verwenden; Dies erfordert einen passiven Schalter wie den LSF0101 (oder einen einfachen MOSFET).

Wenn Sie zwischen UART und I²C umschalten möchten, benötigen Sie beide Arten von Pegelumsetzern und zusätzliche Schalter, um sie entsprechend zu verbinden.