El esclavo no puede conducir el bus I2C bajo

Estoy tratando de usar un IC aislador I2C ( ADuM1251 ) para aislar uno de los esclavos en mi bus I2C.

Sin el aislador, la comunicación funciona bien. Con el aislador, mi configuración es la siguiente:

Configuración

Estoy usando condensadores de desacoplamiento de 1 μF. El maestro está conectado al lado 1 y el esclavo al lado 2. Las resistencias pull-up en cada lado se eligen de manera que el tiempo de subida de la señal en cada lado esté dentro de la especificación I2C.

Usando el aislador, una lectura del esclavo funcionará durante unos pocos bytes y luego dejará de funcionar. Desde el alcance, me parece que el esclavo no puede conducir el autobús bajo.

Alcance

Esto da como resultado que el maestro lea correctamente los primeros bytes y 0xFFel resto. El esclavo debe poder generar suficiente corriente para bajar las líneas (3,3 V, 2,2 kΩ, la fuente de corriente máxima por pin es 4 mA).

¡Cualquier consejo sobre cómo proceder es increíble!

los pls publican sus esquemas reales con valores de voltaje y resistencia
También publique la forma de onda completa que muestre el inicio/reinicio y las transmisiones de direcciones.
¿La traza del alcance está en el lado 2 o en el lado 1? Según la hoja de datos, parece que el lado 1 solo tiene una capacidad de 3 mA. Estás pidiendo ~ 5 mA.
No estoy seguro si es un error de medición de su SDA, pero parece que está acoplando pulsos SCL a sus datos.
640 ohmios es un pull-up MUY fuerte, incluso 2,2 kohmios es demasiado bajo para I2C. 4,7k y 10k son valores de uso común.
Aumenté la resistencia en el lado 1, creo que eso es lo que estaba causando el problema. La razón por la que tuve paradas tan fuertes fue porque, para empezar, había mucho ruido en el autobús... de ahí los aisladores. ¡¡Gracias!!

Respuestas (1)

La hoja de datos dice que el Lado 2 consumirá de 1,6 a 2,8 mA cuando se conecte a 3,3 V. La configuración de la resistencia que ha proporcionado extrae 1,5 mA de cada resistencia si tanto SDA como SCL están bajos, superando el límite de la fuente.

Puede aumentar el tamaño de la resistencia para que solo usen 0,5 mA cada uno, pero eso aumentará la constante de tiempo RC y limitará la velocidad de su reloj I2C si necesita un I2C rápido.

De lo contrario, podría usar un regulador de 3.3v en el lado esclavo para quitar la fuente de alimentación del esclavo.

Las velocidades de I2C solo alcanzan los 400 kHz, por lo que las resistencias pueden volverse bastante grandes antes de que la constante de tiempo RC comience a convertirse en un problema.