i2c sobre gpio - cambiador de nivel

Soy bastante nuevo en esto. Solo tengo formación básica en electrónica. Así que agradecería un consejo de alguien con más experiencia.

Me gustaría conectar una pantalla i2c a mi enrutador gpios tp-link wr703n (ar9331). El enrutador ejecuta Linux y usa el módulo kernel para simular la interfaz i2c usando gpios. La pantalla es hd44780 conectada al expansor pcf8574 i2c.

La pantalla funciona a 5 V, mientras que los gpio son probablemente tolerantes a 2,5 V +-10 %. Revisé la hoja de datos de ar9331 pero no estoy seguro de cuál es el voltaje máximo para un nivel alto. Hay algunos informes de personas que tienen pin gpio subido a 3.3V y funcionando bien. Así que no estoy seguro sobre el voltaje pullup en el gpio.

Pero de todos modos, probablemente necesite algún cambiador de nivel. Pensé que podría hacer algo como esto.

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

same for gpio-29

No estoy seguro de qué N-FET usar para esto. Por lo general, las personas usan 2n7000, que tiene un umbral típico de Vgs de 2.1V, pero el máximo es de 3V. Así que supongo que este no podría funcionar correctamente si el umbral de FET usado fuera de 2,5 V o más.

¿Y es bueno hacer esto de todos modos?

EDIT2: he agregado una mejor imagen del circuito.

esquemático

simular este circuito : esquema creado con CircuitLab

nxp.com/documents/application_note/AN10441.pdf suponiendo que se use el fet adecuado parece estar bien
@Gorloth OPs preguntando por el fet adecuado para usar para su nivel de voltaje...
Tiene razón, esto no funcionará si el umbral del MOSFET es mayor que uno de los suministros, y no funcionará "óptimamente" a menos que el voltaje del umbral del MOSFET sea pequeño, en comparación con el nivel de voltaje más pequeño en su sistema . Para encontrar un MOSFET adecuado para esta aplicación, electronics.stackexchange.com/questions/36529/… puede ayudarlo.
Una nota de aplicación de Philips más antigua enumera los requisitos contra los FET que se utilizarán: adafruit.com/datasheets/an97055.pdf Consideraría FDV301N o FDV303N para esta tarea, BSS138 también podría funcionar.
Tenga en cuenta que el IC TXB0102 no funcionará, ya que I2C requiere controladores de drenaje abierto en todos los dispositivos conectados al bus. Utilice el TXS0102 en su lugar.

Respuestas (1)

Hay circuitos integrados especializados para la traducción de nivel I 2 C. PCA9306 (hasta 1,8 V), TCA9517 (hasta 0,9 V), FXMA2102 (hasta 1,65 V). El cambiador de nivel IC sería mi elección.

@Laszlo había mencionado AN97055 de Philips (ahora NXP).
Extracto de esa nota de la aplicación (p.13).

3. CARACTERÍSTICAS DE LOS MOS-FET'S.

Los requisitos para las características más importantes de los MOS-FET, utilizados como desplazadores de nivel bidireccionales en un sistema I 2 C-bus con máx. 6V y mín. Los niveles de 2,7 V se enumeran a continuación. Los valores son indicativos y pueden adaptarse a otras tensiones de alimentación, otros niveles lógicos y/u otras aplicaciones.

Tipo: Modo de mejora de canal N MOS-FET.
Voltaje de umbral de puerta: V GS(th) min. 0,1 V máx. 2V
en resistencia: R DS (encendido) máx. 100 Ohm @ I D = 3mA, V GS = 2.5V
Capacitancia de entrada: C iss máx. 100 pF @ V DS = 1V, V GS = 0V
Tiempos de conmutación: t encendido t apagado máx. 50 ns.
Corriente de drenaje permitida: I D 10 mA o superior.