Electronic – I2C – Where’s the ACK

i2cpullup

I'm working on I2C master driver for interfacing a particular peripheral.
The problem I have, is that when the 9th clock arrives, the slave device doesn't pull down the SDA line.

I checked the signals with a scope, and everything looks like fine. the address is fine.
I'm not using external pull-up resistors, I'm using the internal pullup capability of my MCU (EFM32GG).

I'm not an electrical engineer, and my experience is from the software side, so this question may be silly, but is there a chance that the device can't pull down the line because the pull up drive is too high ?

Can there be another explanation for this problem (except for the obvious one, that the slave chip is dead)?

Best Answer

With the scope, you should see some sort of effect on the data line, even if the line is being pulled up too strongly. It may drop only half a volt or something, not enough to be read as a zero.

There's also the possibility of the slave address being wrong. Sometimes the address is specified as 7-bit and sometimes as 8-bit. The latter will be 2x the former. Free advice: Write a loop to try all the addresses and stop if it finds one that responds.