07-16-2008 08:48 AM
Hello fellow programmers,
My setup is as follow: a board with a Spartan-3E running uBlaze using OPB IIC IP in master mode. My C application is using xiic.h interface calls to initialize, send and receive data on the IIC bus.
An IIC slave device connected to the board I am working on is sometime not acknowledging a byte, making the communication stops because it is keeping the SDA line low. Is there a way to recover from that situation? I have read from several sources that there are two usual way to recover from such a IIC failure, one is to reset the slave device (using a reset pin for instance, not always available...), the other is a recovery proceidure involving SCL clock pulses (maximum 9) to make the slave device free the SDA line. Is the latter implemented in something like a function call in xiic.h or in another way using the OPB IIC IP?
Thank you very much,
08-19-2008 02:20 AM
I have the same sorts of problems. Have you found any tricks to make the slave let go of the data line? It could be very helpful to me.
08-19-2008 07:43 AM
There was some development, but no official solution yet. Try to send an extra clock pulse and see if it releases the SDA line, most of the time, it actually unstuck the slave device here.
11-28-2008 03:27 AM
Any resolution? I have a similary problem using the OPB_IIC core - I need to provide extra SCL pulses to release the SDA line. The OPB_IIC core is encrypted and it will not allow me to 'or' the SCL signal with my own signal in order to take control b/c it is required to be connected to an external port directly.