UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Visitor philx02
Visitor
6,171 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
Newbie ricksuter
Newbie
6,024 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
Visitor philx02
Visitor
6,019 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 mvanderw
Visitor
4,512 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