I have a strange problem where the I2C data line is being held low, this obviously stops all communications on the bus. I cannot recover from this situation and there doesnt seem to be any common cause for this event occurring.
The data line has been set to open drain and has 10k pull ups, as does the clock line. Im unsure if its the micro or the device holding it low. (device = PCF8575).
If anyone has experienced this problem or have any ideas for a reason or solution, i would be greatfull.
cut the line held low and insert a very small <100R resistor across the cut. then your scope will tell you what device holds the line. then IMMEDIATELY replace the resistor with a short
been there, done that
Erik
Have you verified your signal integrity? With bad signal integrity, it isn't uncommon for a connected device to clock wrong, so at the end of a transfer, it is hung still emitting a data bit.
I don't know for the built-in I2C controller in your chip, but in some situations, it may be needed to reconfigure the processor pins as normal outputs, and tick out enough clock pulses to get the device into a stable state. Then you can reactivate the I2C controller and restart the failed operation.