Q: Why do I sometimes get errors when reading or writing to the device thru I2C interface (i.e. no ACK signal from the device)?

 

A: This can occur when insufficient hold time is provided on the SDA signal.  In order to allow for skews in rise/fall time and routing skews, the I2C spec requires that the transmitting device provides a minimum of 300ns of hold time at its outputs, so that at the receiving device, there will be at least 0ns hold time.  The Si514 actually requires a minimum of 40ns of hold time (at the pins of the device) in order for this interface to operate reliably.  Many designers are not aware of the 300ns spec at the pins of the transmitting device as it is a footnote to the spec table and think they can provide 0ns hold.  So, unless the falling edge of SCL is skewed by at least 40ns relative to the SDA signal, they will likely encounter I2C transactions that will not be acknowledged by the Si514. 

 

The solution is to provide a minimum of 300ns of hold time at the transmitting device and ensure there is less than 200ns of rise/fall time and routing skew between the SCL and SDA signals.  This way, there will be at least 100ns of hold time at the device and the I2C interface will operate reliably.

  • Timing
  • Oscillators
  • Knowledge Base Articles