Electronic – I2C Slave ACK not driving down sufficiently

i2cnfcoscilloscopestm32

My I2C slave is not pulling down the bus all the way for the ACK.

I have tried replacing 1.5k pullup with 10k pullup, but the ACK voltage remains the same (1.6V).

System Voltage: 2.5V

Master: STM32L151

Slave: NXP NT3H211

I have confirmed that the NT3H2211 is recognizing its address, because when I send another address (0x56 instead of 0x55), I see no response. (See screenshot).

I have confirmed that the NT3H2211 has a good ground and power supply, stable during the I2C access.

I have also ruled out an I2C peripheral issue on the master by writing a bit-bang rutine with the same result.

In this situation, how to proceed?

Schematic

Scope Screenshot

Best Answer

@DoxyLover and the others are right: the master was pulling up, causing driver contention. My mistakes were:

  1. Assuming that configuring the I2C peripheral (alternate function in STM jargon) would automatically set SDA as open drain.

  2. In my bit-banging code, configuring the wrong port for open drain (leaving SDA still push-pull and leading me to believe that the master was not the issue).

  3. Assuming that the functional state of the NT3H2211 does not change during testing. Once I corrected the open drain issue, I saw no ACK at all! It turned out the NT3H2211 failed somewhere along the way. Swapping the NT3H2211, and running the corrected code, fixed the problem.

enter image description here