I2C Slave ACK no está disminuyendo lo suficiente

5

Mi esclavo I2C no está bajando el bus hasta el final para el ACK.

He intentado reemplazar 1.5k pullup con 10k pullup, pero el voltaje ACK sigue siendo el mismo (1.6V).

Voltaje del sistema: 2.5V

Maestro: STM32L151

Esclavo: NXP NT3H211

He confirmado que el NT3H2211 está reconociendo su dirección, porque cuando envío otra dirección (0x56 en lugar de 0x55), no veo respuesta. (Ver captura de pantalla).

He confirmado que el NT3H2211 tiene una buena conexión a tierra y alimentación, estable durante el acceso I2C.

También he descartado un problema de periféricos I2C en el maestro al escribir una rutina de bit bang con el mismo resultado.

En esta situación, ¿cómo proceder?

    
pregunta Chris Merck

1 respuesta

8

@DoxyLover y los demás tienen razón: el maestro estaba levantando, causando la contención del conductor. Mis errores fueron:

  1. Suponiendo que la configuración del periférico I2C (función alternativa en la jerga STM) configurará automáticamente SDA como drenaje abierto.

  2. En mi código de bit banging, configurar el puerto incorrecto para el drenaje abierto (dejando a SDA todavía push-pull y haciéndome creer que el maestro no era el problema).

  3. Suponiendo que el estado funcional del NT3H2211 no cambia durante la prueba. Una vez que corregí el problema del drenaje abierto, ¡no vi ACK en absoluto! Resultó que el NT3H2211 falló en algún momento del camino. Cambiar el NT3H2211 y ejecutar el código corregido solucionó el problema.

    
respondido por el Chris Merck

Lea otras preguntas en las etiquetas