¿Cómo aislar el bus I2C cuando se está programando el Master?

6

Acabo de hacer esta pregunta tratando de averiguar si tengo un esclavo I2C alimentado en un bus ISP durante la programación de MCU (Attiny) sería problemático. Aparentemente lo haría, así que necesito aislar temporalmente a los esclavos del bus.

No puedo simplemente apagar el esclavo (MPU-6050) porque sus entradas no son tolerantes a 3.3V cuando su Vcc = 0V.

También encontré esta pregunta relacionada interesante, pero las soluciones La propuesta no funciona para mí (tengo un espacio limitado en la junta y la disponibilidad específica de los circuitos integrados es un problema para mí en el presupuesto de este proyecto).

Realmente estoy tratando de alejarme de una solución de conmutador DIP / puente, así que estoy considerando soluciones activas. Aquí va:

Utilice un desplazador de nivel bidireccional discreto

Peroenlugardeunladodealtoybajovoltaje,intentaríaalgocomoesto:

simular este circuito : esquema creado usando CircuitLab

Cuando Attiny está programando, sus salidas son de alta impedancia, R5 apaga M3. C1 es principalmente para evitar que los fallos en el pin vuelvan a encender M3.

R7 luego apaga M1 y M2, y SCK / MOSI puede "rebotar" libremente sin molestar a los esclavos I2C.

Al arrancar, el Attiny enciende M3, proporcionando energía al bus I2C.

¿Esto funcionaría? ¿Estoy pasando por alto o complicando algo?

    
pregunta Wesley Lee

1 respuesta

4

Tienes la idea correcta, pero creo que tu circuito puede simplificarse.

En la condición de inactividad, tanto SCL como SDA deben estar altos, así que conecte R1 y R2 directamente a + 3.3V. M1 y M2 tienen diodos corporales a los que no se debe permitir que transfieran la lógica baja de ATTiny al MPU-6050, por lo que debe intercambiar sus conexiones de origen y drenaje.

Las puertas de M1 y M2 pueden manejarse directamente desde un pin GPIO, luego no se requieren M3 y R7. C1 y R5 ahora se conectan a tierra en lugar de + 3.3V, y el pin GPIO tira alto para habilitar la conexión I 2 .

Una condición I 2 C 'Inicio' se define como un SDA que va de alto a bajo, mientras que SCL es alto. Un dispositivo esclavo no debe manejar SCL a menos que esté ocupado y quiera ralentizar la transferencia de datos, por lo que SCL debería estar a salvo de interferencias a menos que el MPU-6050 vea una condición de inicio mientras está ocupado haciendo otra cosa. Con SDA alto (por R2 con M2 apagado), el MPU-6050 no verá una condición de inicio, por lo que debería dejar a SCL solo, y no se requieren M1 ni R3.

simular este circuito : esquema creado usando CircuitLab

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas