Me gustaría conectar una Raspberry Pi con un microcontrolador ATmega328p utilizando el bus I2C. Estas dos partes actúan como maestros, pero no al mismo tiempo. La Raspberry Pi se alimenta a través del pin de + 5V en el encabezado de GPIO y la potencia del RPi se controla mediante un MOSFET de canal p a través del ATmega328p µC (consulte los esquemas). Cuando el RPi está en estado de corte de energía, el bus I2C se desactiva, desactivando todas las comunicaciones I2C.
¿Cómo desconecto el RPi del bus I2C cuando se corta la alimentación?
En detalle, hay los siguientes dos modos de operación:
- La Raspberry Pi está encendida (en ejecución) y actúa como maestro I2C. La Raspberry Pi lee / establece la hora desde un PCF8583 RTC (esclavo I2C) y muestra la hora y otra información en un LCD 16x2 compatible con HD44780 conectado a través de un PCF8574 I2C expansor IC. Mientras se ejecuta el RPi, el bus I2C ATmega µC está inactivo y no está involucrado en ninguna comunicación I2C.
Este modo funciona como se esperaba.
- La alimentación de la Raspberry Pi se corta a través de un MOSFET de canal p cuando se apaga. Mientras que la línea + 5V está desconectada por el FET, el RPi aún está conectado a la GND común, tirando de todos los pines GPIO en el RPi bajo. Por lo tanto, el bus I2C se baja constantemente y la comunicación I2C está deshabilitada.
Mi pregunta es, ¿cómo puedo aislar la conexión de la Raspberry PI I2C del bus cuando está apagado?
Probé las siguientes soluciones:
- El RPi se alimenta a través del enchufe micro USB normal y se mantiene presionado restablecer el estado (encabezado P6) cuando se apaga. Las líneas I2C son altas. Impedancia y no interferir con el resto del bus. Esta La solución funciona, pero me gustaría reducir el poder a la RPi por completo.
- Adición de diodos simples en líneas SDA y SCL. Esto funciona para el SCL. línea como el bus RPi I2C siempre actúa como maestro y genera el Señal de reloj para los esclavos I2C. Sin embargo, la línea SDA es bidireccional y por lo tanto la comunicación no es posible con un diodo insertado en el medio.
¿Cuál es la solución más fácil? Encontré sugerencias aquí , pero no entiendo cómo funcionan estos circuitos y no se da ninguna explicación. ¿Cuál de estos esquemas es mejor para este problema (si existe)?
Cualquier otra solución (¿más simple?) es bienvenida.
Muchas gracias por tu ayuda.