Aislamiento I2C usando Switch

0

En mi diseño tengo un controlador que se conecta al procesador (o SoC) mediante I2C. El procesador tiene pull ups internos para las líneas I2C, por lo que no necesito poner pull ups externos. El riel de voltaje para el controlador está activado independientemente del estado del procesador (encendido o apagado). El riel de voltaje para el procesador está encendido cuando el sistema está encendido.

El problema es cuando el sistema está apagado, las líneas de controlador I2C están en estado indefinido y consume más energía. Este problema no se observa cuando el sistema está encendido y las líneas I2C están en un estado válido.

Si coloco pull ups en el exterior impulsados por un riel siempre, entonces veo una fuga en las resistencias pull up de los pines I2C del procesador, posiblemente fugas a través de diodos de sujeción para los pines del procesador. ¿Cómo puedo aislar las líneas I2C del procesador y el controlador sin causar fugas y un estado indefinido?

Las líneas I2C para el controlador y el procesador funcionan a 1.8 V.

    
pregunta Ash

3 respuestas

1

(No puedo comentar todavía, no hay suficientes puntos, así que esto es más un comentario que una respuesta). Aclarar las condiciones de la fuente de alimentación para el SoC y el controlador cuando ambos están encendidos y cuando "el sistema está apagado". - Cuando están "encendidos", ¿operan ambos al mismo voltaje (qué voltajes)?
- ¿Y cuando el sistema está "apagado", quiere decir que el SoC está apagado y el controlador está encendido? Por su comentario de que las líneas I2C están en un estado indefinido, ese parece ser el caso (el suministro de SoC está desactivado, por lo que las líneas I2C ya no están detenidas).

La fuga que está viendo es desde el suministro del controlador a los diodos ESD de los pines del SoC I2C al suministro del SoC. Si lo verificas, es probable que el suministro de SoC no esté en el suelo, sino que se detenga un poco por los controles externos que agregaste.

Por "consume más energía", ¿te refieres solo a la corriente en las resistencias pullup o también a suministrar la corriente del controlador IC? La lógica de entrada de CMOS debe manejarse a nivel de suministro o tierra para evitar la corriente de arrastre (corriente de palanca o corriente de disparo) que se produce cuando la entrada está en algún lugar entre el suministro y los voltajes de tierra.

Aquí hay una opción que podría evitar un aislador:

Agregue las resistencias externas pull down en las líneas I2C a tierra. Hacer estos débiles, en el orden de 100kohm. Si el SoC no está encendido, esto será suficiente para asegurar que las líneas se conecten a tierra y se eviten las fugas en la lógica de entrada del controlador. Y cuando el SoC está activado, habrá una corriente de fuga adicional a través de estos, por ejemplo. 3.3V / 100k x 2 = 66uA. Si eso es insignificante en su presupuesto de energía, entonces esta podría ser una solución decente.

    
respondido por el mixed_signal
1

Hay un punto específico de importancia aquí: la naturaleza misma de I 2 C como un bus (y quizás el solo bus) específicamente diseñado para permitir cero fugas con Una o más fichas en el bus apagadas. I 2 C logra esto al ser un colector abierto y un colector abierto significa que nada extrae los datos líneas altas dentro de un IC compatible. Pero, por desgracia, un pin de E / S digital genérico en un microcontrolador o en cualquier lugar, que se pueda conducir alto o bajo, no puede satisfacer esta condición.

Un pin digital push-pull tiene un controlador de lado alto de canal P y estructuras de protección conectadas al riel de la fuente de alimentación, lo que significa que ese pin siempre perderá corriente hacia el riel de la fuente de alimentación si el voltaje de ese riel es menor que la tensión en el pin, menos la tensión directa de un diodo. Dichos pines tienen una condición V I, MAX de V CC +0.6 voltios o tal como se indica en la hoja de datos. ¿Se puede verificar si la hoja de datos establece tal condición para los pines? Si lo hace, a la inversa, significa que el mínimo para V CC en dicho IC es el voltaje del bus C I 2 menos 0,6 voltios.

Como consecuencia, el microcontrolador puede tener un puerto de estilo I2C (que no está certificado por I 2 C), o usar pines de E / S genéricos para comunicarse con I 2 dispositivos C, pero solo es lógicamente compatible con I 2 C cuando el microcontrolador está encendido. Los dispositivos que cumplen con I 2 C deben usar almohadillas IO específicas para las señales I 2 C y no pueden tener el controlador del lado alto, y sospecho que cualquier tipo de pull-ups sería al menos problemático.

Si desea aprovechar las propiedades de reducción de cero pérdidas de I 2 C, debe usar solo puertos específicos I 2 C o convertir un pin IO genérico en un colector abierto (o desagüe abierto), disposición de estilo de alguna manera, cortando todos los caminos actuales al lado alto. Me parece que si tuviera una señal de voltaje lo suficientemente más alta que su voltaje de bus I 2 C de 1.8 voltios (3 voltios o más), podría usar NFETs (canal n, mejora -tipo Mosfet, el tipo 'normal') para "cortar" las líneas SCL y SDL cuando el SoC no tiene energía. Conectaría los NFET con la fuente hacia el SoC, drene hacia el bus y la compuerta a una señal de habilitación de 3 voltios. Elija un NFET con un voltaje de umbral suficientemente bajo para que el canal esté conduciendo con seguridad cuando la señal esté a 1.8 voltios. Por lo tanto, a lo sumo 1.2 voltios si su señal de habilitación es de 3 voltios.

simular este circuito : esquema creado usando CircuitLab

    
respondido por el PkP
0

A) un aislador I2C debería hacer el truco. He tenido buena suerte con enlace

B) Los pullups internos en los procesadores tienden a ser pullups débiles, y la resistencia puede ser demasiado alta para una función i2c confiable. Podrías considerar pullups externos del tamaño correcto.

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas