i2c über gpio - Level-Shifter

Ich bin ganz neu dabei. Ich habe nur Grundkenntnisse in der Elektronik. Daher würde ich mich über einen Rat von jemandem mit Erfahrung freuen.

Ich möchte ein i2c-Display an mein tp-link wr703n (ar9331) router gpios anschließen. Der Router läuft unter Linux und verwendet das Kernel-Modul, um die i2c-Schnittstelle mit gpios zu simulieren. Das Display ist hd44780, das mit dem i2c-Expander pcf8574 verbunden ist.

Das Display arbeitet mit 5 V, während gpios wahrscheinlich 2,5 V + -10% tolerant sind. Ich habe das Datenblatt von ar9331 überprüft, bin mir aber nicht sicher, was die maximale Spannung für einen hohen Pegel ist. Es gibt einige Berichte von Leuten, die den GPIO-Pin auf 3,3 V hochgezogen haben und es gut läuft. Ich bin mir also nicht sicher über die Pullup-Spannung am GPIO.

Aber trotzdem brauche ich wahrscheinlich einen Level-Shifter. Ich dachte, ich könnte so etwas tun.

Vc1 2.5V? ---------------       ------------ Vc2 5V
                 |      |       |   
                 X      |       X   
            4k7R X      |  4k7R X      
                 X      |       X   
                 |      |       |   
 gpio-7 --------------[FET]------------------ pcf8574

same for gpio-29

Ich bin mir nicht sicher, welchen N-FET ich dafür verwenden soll. Normalerweise verwenden die Leute 2n7000, das eine typische Vgs-Schwelle von 2,1 V hat, aber maximal 3 V beträgt. Ich denke also, dass dieser nicht richtig funktionieren könnte, wenn die Schwelle des verwendeten FET 2,5 V oder mehr betragen würde.

Und ist das überhaupt gut zu tun?

EDIT2: Ich habe ein besseres Bild der Schaltung hinzugefügt.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

nxp.com/documents/application_note/AN10441.pdf unter der Annahme, dass der richtige Fet verwendet wird, scheint alles in Ordnung zu sein
@ Gorloth OPs fragen nach dem richtigen Fet für seinen Spannungspegel ...
Sie haben Recht, dies funktioniert nicht, wenn die Schwelle des MOSFET größer als eine der Versorgungen ist, und es funktioniert nicht "optimal", es sei denn, die Schwellenspannung des MOSFET ist klein im Vergleich zum kleinsten Spannungspegel in Ihrem System . Um einen geeigneten MOSFET für diese Anwendung zu finden, kann Ihnen electronic.stackexchange.com/questions/36529/… helfen.
Eine ältere Philips AppNote listet die Anforderungen an die zu verwendenden FETs auf: adafruit.com/datasheets/an97055.pdf Ich würde FDV301N oder FDV303N für diese Aufgabe in Betracht ziehen, BSS138 könnte genauso gut funktionieren.
Bitte beachten Sie, dass der TXB0102 IC nicht funktioniert, da I2C Open-Drain-Treiber auf allen an den Bus angeschlossenen Geräten benötigt. Verwenden Sie stattdessen den TXS0102.

Antworten (1)

Es gibt spezialisierte ICs für die Übersetzung auf I 2 C-Ebene. PCA9306 (bis 1,8 V), TCA9517 (bis 0,9 V), FXMA2102 (bis 1,65 V). IC Level Shifter wäre meine Wahl.

@Laszlo hatte AN97055 von Philips (jetzt NXP) erwähnt.
Auszug aus dieser App-Notiz (S. 13).

3. EIGENSCHAFTEN DER MOSFETS.

Die Anforderungen an die wichtigsten Eigenschaften der MOS-FET's, eingesetzt als bidirektionaler Level-Shifter in einem I 2 C-Bus-System mit max. 6V und min. 2,7 V-Pegel, sind unten aufgeführt. Die Werte sind als Anhaltspunkt gedacht und können für andere Versorgungsspannungen, andere Logikpegel und/oder andere Anwendungen angepasst werden.

Typ: N-Kanal-Anreicherungsmodus-MOS-FET.
Gate-Schwellenspannung: V GS(th) min. 0,1 V max. 2V
Einschaltwiderstand : R DS(on) max. 100 Ohm @ I D = 3 mA, V GS = 2,5 V
Eingangskapazität : C iss max. 100 pF @ V DS = 1 V, V GS = 0 V
Schaltzeiten : t ein t aus max. 50 ns.
Zulässiger Drainstrom: I D 10 mA oder höher.