Electrical – I2C communication not working

fpgai2cmicrocontrollerpullupxilinx

I am trying to read data from / write data to a Xilinx Zedboard (FPGA platform) using an external microcontroller via the I2C bus. The schematic for this would currently look as follows:

enter image description here

As you can see in the schematic, the microcontroller uses 1k pull-up resistors for the I2C bus.

I noticed that after the first transaction, the microcontroller will not read/write anymore data.

I cannot debug this on the microcontroller because I cannot make any changes to the microcontroller software. The microcontroller has been verified to work correctly with other I2C peripherals.

When I look at an oscilloscope trace, I can see the Zedboard does not pull down the SDA line to the logic low level of the microcontroller while sending an ACKnowledge. I think this might be the reason why the transaction fails. See the capture below, where you can see the SDA low of the Zedboard is about 600 mV above the SDA low of the microcontroller.

enter image description here

I think the reason for this might be because the pull-up resistors are quite low. However, I cannot make any changes to the microcontroller board, and therefore I cannot replace them for higher resistances.

Do you have any idea what might be the problem here and how I can solve this?

Thank you and regards.

Best Answer

The voltage you see on your bus line corresponds to a resistance of the low side switch of something above 200 ohm.

A quick glance in the schematic of the ZedBoard shows, that some input pins have a 200 ohm series resistor, probably for ESD protection. I assume you used such a pin for your I2C communication, but since you did not tell us how exactly you connected the µC to the ZedBoard I can't say for sure.

You will have to use an input pin without this series resistance to get a good low level.