cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Visitor
Visitor
6,175 Views
Registered: ‎07-16-2008

IIC bus recovery

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,

Philippe

0 Kudos
3 Replies
Highlighted
Newbie
Newbie
6,028 Views
Registered: ‎08-01-2008

Re: IIC bus recovery

Philippe:

 

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.

 

Thanks,

 

Rick S.

0 Kudos
Highlighted
Visitor
Visitor
6,023 Views
Registered: ‎07-16-2008

Re: IIC bus recovery

Rick,

 

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.

 

Philippe.

0 Kudos
Visitor
Visitor
4,516 Views
Registered: ‎11-28-2008

Re: IIC bus recovery

Philippe, Rick

 

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.

 

Mike

0 Kudos