BJT, um Debug-UART-Backfeeding-PCB zu verhindern?

Frage

Kann ein einfacher NPN-BJT-Transistor verhindern, dass ein Debug-UART die MCU auf der Zielplatine rückspeist?

Problem

UARTs und zugehörige USB-zu-UART-Dongles (z. B. ein Dongle der Marke FTDI) werden häufig zum Debuggen von Mikrocontrollern auf PCBs verwendet. Das Problem besteht darin, dass die TXLeitung vom FTDI-Gerät zum Mikrocontroller im Leerlauf durch das FTDI-Gerät hoch getrieben wird. Dies kann verhindern, dass Sie die MCU zurücksetzen können, indem Sie die Platine aus- und wieder einschalten, da beim Trennen der Stromversorgung zu VCC, die Leitung +3.3Vauf der TXLeitung durch die internen ESD-Dioden der MCU zu rückgespeist wird VCCund die Spannungsschiene gestützt bleibt. Vorwiderstände funktionieren gut, um dadurch verursachte Schäden zu vermeiden, sind jedoch nicht vollständig geeignet, um sicherzustellen, dass das VCCNetz bis in die Nähe herunterfällt0V, da die Leistungsaufnahme der MCU erheblich abfällt, wenn sie sich abschaltet (z. B. durch "Brown-Out-Erkennung"), was bedeutet, dass die MCU in einem seltsamen Zustand schwebt oder, noch schlimmer, wiederholt beim Einschalten stecken bleibt!

Mögliche Lösung

Würde ein NPN-BJT, wie im Bild unten gezeigt, dieses Problem beheben? Ich werde das bei Gelegenheit auf dem Steckbrett testen, dachte aber, es könnte gut sein, auch hier zu fragen! Zumindest könnte es ein interessantes Gespräch oder eine Diskussion über andere Lösungen dafür beginnen.

Ich denke, der 0.7VAbfall von der Basis zum Emitter wird in Ordnung sein, dies bedeutet nur, dass die MCU eher 2.6Vals HIGH als als 3.3V. Ich habe dies ursprünglich mit einem MOSFET entworfen, aber die äquivalente Gate-Source-Schwellenspannung ist normalerweise viel größer als der Basis-Emitter-Abfall von 0.7V, was bedeutet, dass das logische HIGH sogar kleiner sein kann als 2.6Vund Probleme verursachen kann.

Geben Sie hier die Bildbeschreibung ein

Betrachten Sie so etwas wie die häufig verwendete Level-Shifter-Schaltung für I2C.
Vielleicht ein Optokoppler?

Antworten (5)

Die Grundidee ist OK. Aber die Details sind falsch. Bei 3,3 V an der Basis des Transistors befindet sich der Transistor in einem seltsamen Zustand. Man könnte es sich an diesem Punkt eher wie zwei Dioden mit minimaler Transistorwirkung vorstellen. Der Basis-Emitter-Übergang wäre wie eine Pullup-Diode für MCU_UART_RX und der Basis-Kollektor-Übergang wäre wie eine Pullup-Diode für FTDI_TX.

Ich denke, FTDI_TX würde es schwer haben, den Kollektor niedrig zu fahren, wenn die Basis an 3,3 V angeschlossen ist. VIELLEICHT könnte ein Basiswiderstand die Situation retten, aber ich mag es immer noch nicht und vertraue ihm nicht.

Was Sie wahrscheinlich wollen, ist ein High-Side-PMOS-Schalter. Das Gate könnte von einem NMOS angesteuert werden, dessen Gate an 3,3 V gebunden ist. Wenn Sie Platz für zwei SOT-23-Pakete haben, sollte dies problemlos funktionieren. Möglicherweise finden Sie PMOS und NMOS zusammen in einem einzigen Gehäuse, um Platz zu sparen, wenn der Platz für SOT-23 zu knapp ist.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

ODER Sie könnten einen analogen Busschalter mit der Ioff-Funktion verwenden. Diese bieten Isolierung, wenn sie ausgeschaltet sind. Ich lasse Sie eine Suchmaschine verwenden, um mehr über diese Option zu finden.

Wenn Sie sich für die Verwendung des Puffers entscheiden (was in gewisser Weise die einfachste Lösung ist, aber etwas weniger interessant), können Sie sich die Teilenummer SN74LVC1G34 ansehen. Es ist ein einfacher Puffer. Aber wegen der „Ioff“-Funktion zeigt es an allen Eingängen eine hohe Impedanz, wenn es nicht eingeschaltet ist. Es wird nicht durch MCU_UART_RX zurückgespeist.

Nein, das geht nicht.

Unabhängig davon, ob der FTDI_TX angeschlossen ist oder nicht, bleibt der Emitter bei eingeschalteter 3,3-V-MCU-Versorgung immer auf hohem Pegel, wodurch eine Datenübertragung unmöglich wird.

Duoh! ... guter Punkt! Der Emitter ist nie mehr als 0,7 weniger als die Basis, egal was Sie mit dem Transistor machen, es ist im Wesentlichen eine Diode von B nach E.

Eine hackige, aber funktionale Alternative ist eine Reihendiode, kombiniert mit einem Pull-up auf der MCU-Seite.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Wenn ein hoher Pegel von FTDI übertragen wird, zieht der Pullup das RX-Signal hoch. Wenn ein niedriger Pegel übertragen wird, zieht die Diode ihn niedrig. Aufgrund der Abfallspannung der Diode wird der Rauschabstand an der MCU um etwa 0,3 V reduziert.

Aufgrund des reduzierten Rauschabstands würde ich dies nicht für primäre Kommunikationsbusse empfehlen. Es kann jedoch eine akzeptable Lösung für einen Debug-Port sein, der nur mit kurzen Kabeln verwendet wird.

das war eigentlich die lösung an die ich auch gedacht habe. Nicht super elegant, aber funktioniert wahrscheinlich.
Ich mag die Einfachheit! Zu beachten ist, dass der RX der MCU nicht mehr mit starker Ansteuerung hochgefahren, sondern nur noch hochgezogen wird, was die Flanken des digitalen Signals je nach Kapazität abrundet. Unter der Annahme einer Kapazität von 10 pF (Pin-Kapazität plus die Leiterbahnen auf der Leiterplatte) in Kombination mit einem Pull-up von 100 kΩ ergibt sich eine Zeitkonstante von 1 us (t = RC). Dies ist ungefähr 1/10 einer Bitperiode, wenn es mit der üblichen UART- 115200Baudrate läuft. Dies wird wahrscheinlich in Ordnung sein, aber möglicherweise wäre es eine gute Idee, den Pull-up auf 10 kΩ (Zeitkonstante jetzt 1/100 der Bitperiode) zu reduzieren.
@gbmhunter Stimmt. Die Diodenkapazität wirkt sich zugunsten der Kantenerhaltung aus, hängt also auch ein wenig vom Verhältnis zwischen Eingangskapazität und Diodenkapazität ab.
@jpa guter Punkt bezüglich der Diodenkapazität. Erinnert mich an "Beschleunigungskondensatoren", die in einigen Schaltungsdesigns parallel zu Widerständen hinzugefügt werden.

Es gibt einige großartige Antworten auf diese Frage. Ich habe jetzt etwas mehr gelesen und wollte ein vollständiges Beispiel für eine der vorgeschlagenen Optionen als Kommentar geben. Wie @Justme erwähnte, funktioniert die BJT-Methode nicht, da die Basis den Emitter hochhält und verhindert, dass das TX-Signal durchkommt. Wie @brhans und @mckeith erwähnt haben, ist ein Logik-IC mit der Funktion "Ioff"/"Ausschaltschutz" eine Lösung, wie unten gezeigt:

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass diese ICs eine etwas andere CMOS-Totem-Pole-Treiberkonfiguration haben, die verhindert, dass die Diode von der E/A-Leitung zur Vcc-Bildung geht (die manchmal als "ESD-Diode" verwendet oder bezeichnet wird). Anstatt das Substrat des P-Kanal-MOSFET direkt mit der Source (Vcc) zu verbinden, fügen sie eine zusätzliche Sperrdiode hinzu, die die Ioff-Funktionalität ermöglicht.

Geben Sie hier die Bildbeschreibung ein

Mehr dazu finden Sie unter https://www.ti.com/lit/an/scea026/scea026.pdf .

Ich möchte eine etwas andere Methode zur Lösung dieses Problems skizzieren, obwohl sie aufgrund von Designanforderungen möglicherweise nicht zutrifft.

Alle diese billigen kleinen FTDI-Breakout-Boards haben einen Jumper, mit dem Sie auswählen können, ob das Board das Ziel auf 3,3 V oder 5 V hochziehen soll. Es gibt jedoch eine dritte Option: Lassen Sie den Jumper getrennt und verbinden Sie den VCC des Ziels mit dem VCC-Pin des Breakout-Boards.

Sie benötigen also 4 Drähte (RX, TX, VCC und GND), um den FTDI mit dem Ziel zu verbinden, aber Sie ermöglichen nicht nur verschiedene Spannungsoptionen, sondern dies würde auch Ihr Problem der Rückspeisung durch Schutzdioden lösen.