4 votos

¿Un diodo de bloqueo en serie con resistencias pull-up afectará negativamente al bus I2C?

Estoy usando un IC I2C EEPROM en un proyecto para almacenar la configuración y los ajustes de un microcontrolador Teensy, y actualmente estoy tratando de averiguar cómo lograr la reprogramación de los ajustes. Tengo la intención de utilizar una aplicación de escritorio de mi propio diseño para comunicarse a través de un enlace en serie a otro microcontrolador que hará la escritura real de la EEPROM.

He optado por una cabecera 2x3 (con el receptáculo para un cable plano IDC) que se conecta directamente al CI, con un diodo de bloqueo para evitar que el "módulo de programación" conectado a través del puerto de programación 2x3 alimente el resto del proyecto.

En mi esquema incluido, +3V3 es la alimentación del microcontrolador en el proyecto principal. Si, en cambio, la alimentación se realiza desde el puerto de programación, directamente a VI2C La placa de circuito impreso debe ser capaz de alimentar sólo el circuito impreso, nada más en la placa.

Si la energía se recibe a través de +3V3 ¿el diodo que está en serie con las dos resistencias afectará al funcionamiento del bus I2C? La EEPROM es el sólo dispositivo I2C. Si es así, ¿hay algo que pueda hacer para mitigar esos problemas?

schematic

7voto

Justme Puntos 201

Hay algunos problemas. El diseño de circuitos que sólo se alimentan parcialmente es difícil, a menos que se sepa mucho sobre cómo se diseñan los circuitos integrados.

Cuando la alimentación de 3,3V proporciona 3,3V, el 25LC512 se alimenta a través del diodo que deja caer algo de tensión. Si el diodo se aproxima a una caída de unos 0,7V, la alimentación VI2C para la EEPROM es de unos 2,6V. Eso está muy cerca del límite de voltaje mínimo de 2,5V que tiene.

Como también los pull-ups van al VI2C, la variación de la corriente a través de las resistencias pull-up del bus cuando la EEPROM o el MCU tiran del cable hacia abajo hará que el VI2C varíe en función del consumo. Y no hay tapas de bypass de ningún tamaño en el nodo VI2C.

El bus I2C tampoco sube a 3,3V, así que esperemos que sea suficiente para que la MCU lo entienda como nivel lógico alto, pero reduce el margen de ruido.

Si la alimentación de 3,3V no está alimentada y un dispositivo de programación aplica tensión a VI2C directamente, puede haber incluso más problemas. Como los cables del bus I2C se suben a través de resistencias, se suben con la MCU sin alimentación en el bus, y dependiendo de la MCU que estés utilizando, puede tratar de retroalimentar la tensión de alimentación de la MCU a través de los pines del bus I2C de la MCU y esto también significa que los pines del bus I2C pueden no ir lo suficientemente alto para comunicarse correctamente entre el dispositivo de programación y la EEPROM.

Puede que simplemente sea más fácil tener una única alimentación de 3,3V y dejar que la EEPROM se programe a través del Teensy, o encender toda la alimentación de 3,3V y mantener el Teensy en reset para acceder a la EEPROM mientras el Teensy no hace nada.

0 votos

Sólo quiero señalar que a la corriente que requiere este circuito, el diodo sólo dejaría caer una fracción de 0,7 V.

0 votos

@VladimirCravero 0,5 es una fracción de 0,7, sí. Incluye las tolerancias tanto en la fuente de alimentación como en el CI y sí que tienes un problema.

0 votos

Así que me he tomado un tiempo para asimilar las respuestas y he decidido seguir el consejo que das en el último párrafo de tu respuesta. En su lugar he cambiado el conector de seis pines para conectar a un puerto serie y ahora estoy usando dos de los pines para poner el Teensy en un "modo de programación" usando un pin IO y una interrupción. El módulo de programación cortocircuita el pin IO a tierra y esto dispara una rutina ISR que maneja la programación para emular esta etapa de espera. Luego voy a reiniciar, ya sea llamando de nuevo a las rutinas init o reiniciando realmente el Teensy una vez que averigüe cómo reiniciar un 4.1

4voto

looksmart Puntos 1
  1. Necesitas pensar en la caída de voltaje a través del diodo (puedes asumir 0.7V para un diodo estándar). Asegúrate de que las especificaciones de voltaje de tu eeprom I2C lo permiten en caso de que se utilice el carril de 3V3. También deberías añadir condensadores de desacoplamiento a tu dispositivo en la línea VI2C (100nF y 1uF) por si acaso. También asegúrese de que los pines del puerto I2C de su aplicación están en el llamado modo HIGH-Z durante el apagado. En resumen: No debe haber retroalimentación en los dispositivos. Esto se aplica a todos los dispositivos del bus.
  2. Como I2C es un bus de tipo "colector abierto", no debería haber ningún problema, siempre y cuando la tensión del bus de 3,3V - 0,7V esté dentro del espectro operativo seguro del puerto I2C de tu mcu. Asegúrese de que estos niveles de señal (añada márgenes, por ejemplo, el 25%) estén dentro de las especificaciones típicas de los puertos I2C de su controlador. Esto puede parecer trivial, pero no te olvides de tu margen de ruido. Los errores introducidos por estos escenarios son un dolor de cabeza. Tenga especial cuidado con el umbral inferior aquí. También podrías añadir otro condensador de 100nF en la línea VI2C cerca de los pullup's - sólo para una buena medida de nuevo.
  3. En conclusión: Este diseño, si se aplican los puntos anteriores, funcionará como se desea. Podrías utilizar un tipo de diodo con baja caída de voltaje para hacer tu solución más predecible - dispositivos con valores tan bajos como 300mV están disponibles y son baratos. Pero aquí viene la trampa: Como siempre hay una caída de tensión a través del diodo, tienes que validar tu diseño. Si es sólo para uso de aficionados: No hay problema. Para uso profesional: Tenga en cuenta que la caída de tensión y los umbrales aceptables cambian con la temperatura y la edad del dispositivo. También asegúrese de que otros dispositivos en el bus I2C pueden verse afectados.
  4. Piensa también en el caso de uso del puerto de conexión en su conjunto. ¿Se utilizará sobre el terreno? Entonces piense en añadir protección ESD y fusibles al conector. ¿Sólo se utilizará en producción? No se requiere protección ESD. ¿Se va a utilizar una sola vez? No añada un cabezal - sólo añada las almohadillas para una cama de clavos o una conexión de tipo de presión. ¿Es válido su requisito? ¿Se requiere siquiera la separación de la energía? Solo agregue un conector y programe la eeprom mientras no hay actividad en el bus por parte de la mcu (asumiendo un solo maestro). Esto se puede conseguir manteniendo el controlador en modo reset. Entonces la mcu puede ser encendida sin ningún problema durante el proceso de escritura. Puedes controlar este comportamiento con tu mcu programador externo o con un conector cableado también. ¿Es necesario el programador externo? Podrías programar el I2C a través de tu mcu de aplicación. Esta mcu podría establecer una conexión usb con tu aplicación host y enviar los datos a la eeprom vía I2C. ¿Se necesita una eeprom? Puedes almacenar tu configuración en la flash de la mcu de aplicación fácilmente.
  5. Mis dos centavos (Bajo la suposición, que se requiere una eeprom externa y el programador debe ser utilizado): Como tienes un conector de 6 pines, ve con estas señales: 3V3, GND, I2C_SDA, I2C_SCL, !Reset y Status. 3V3 en este caso es el rail principal del programador externo. No hay ningún problema en que alimente la aplicación mcu también. Tan pronto como el programador externo desea escribir en la eeprom, se pone el reset a nivel bajo y por lo tanto se "desactiva" la mcu. Después de que todo el proceso de escritura haya terminado, la aplicación mcu hace un 'reboot' y debe comprobar un byte especial en la eeprom. Si este byte contiene una bandera, debería leer toda la eeprom y validar su contenido basándose en algún tipo de suma de comprobación. Esta suma de comprobación también puede ser almacenada en la eeprom, ya que es computada por su aplicación de escritorio. El resultado es entonces señalado al programador a través de la línea de estado. Por favor, no olvides añadir una resistencia pullup en la línea de reset. También la señal de estado debe ser de tipo colector abierto - esto permite algún tipo de interfaz bidireccional.
  6. He visto y utilizado este tipo de implementación muchas veces - funciona muy bien y es adecuado para la producción y las interfaces de tipo de campo (las interfaces de campo deben ser resistentes). Es simple y realizable, pero permite una amplia variedad de extensiones. Por ejemplo, el programador puede realizar una validación de la suma de comprobación después del proceso de escritura. Tu MCU de aplicación puede escuchar la línea de estado y luego establecer una conexión I2C con tu MCU programador als Slave - puedes usar la línea para señalar al mcu de aplicación que entre en modo esclavo y así sucesivamente ....

1 votos

ElectronicsStudent - Hola, Por favor, no incluya saludos, firma u otra cháchara ya que rompe este regla del sitio. Esta vez las he eliminado por ti. Stack Exchange no es un foro. Te recomiendo que leas el sitio visita . Gracias.

2voto

Pierre Buyle Puntos 3107

En lugar de un diodo, utilice un diodo ideal formado por un MOSFET de canal P con la puerta a tierra. Funcionará igual que un diodo, pero tendrá una caída de tensión de 0, evitando los problemas que otros han planteado.

Ideal diode circuit

Fuente

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X