Slave can’t drive I2C bus low

i2cisolation

I'm trying to use an I2C isolator IC (ADuM1251) to isolate one of the slaves on my I2C bus.

Without the isolator, the communication works fine. With the isolator, my setup is the following:

Setup

I'm using 1μF decoupling capacitors. The master is connected to side 1 and the slave to side 2. The pull-up resistors on each side are chosen so the rise time of the signal on each side falls within the I2C specification.

Using the isolator, a read from the slave will work for a few bytes and then stop working. From the scope it looks to me like the the slave can't drive the bus low.

Scope

This results in the master reading the first few bytes correctly and 0xFF for the remainder. The slave should be able to source enough current to drop the lines low (3.3V, 2.2kΩ, max current source per pin is 4mA).

Any advice on how to proceed is awesome!

Best Answer

The datasheet says Side 2 will draw 1.6 to 2.8mA when connected to 3.3V. The resistor setup you've provided draws 1.5mA from each resistor if both SDA and SCL are low, exceeding the source limit.

You can increase the resistor size so that they only used .5mA each, but that will increase RC time constant an limit your I2C clock speed if you need a fast I2C that is.

Otherwise you could use a 3.3v regulator on the slave side to take the power supply away from the slave.