AnsweredAssumed Answered

K22 slave pulling I2C clock/data lines low when not sending/receiving

Question asked by Kevin Luty on Nov 3, 2016
Latest reply on Nov 4, 2016 by EARL GOODRICH

When my K22F device is plugged in, I immediately start communicating over I2C with the master via polled communication (versus interrupt driven) and everything works as expected.  When the job is done, every (1) second, the Master issues a read to the K22F slave.  If the slave doesn't write data (respond) to the master, the I2C clock and data line are pulled to low voltage signals and its the K22's fault.  My question is WHY and perhaps how do I prevent that.  Because of this, all other components on the I2C bus stop communicating because the signals are to low to be considered in a HIGH state.  Here is an image of the scope when the K22F slave is not responding:



These signals are approximately 390mV.  This is the master issuing a read to address 10 (the K22F) and the slave not responding.  Under normal conditions and regular communication, the signals are 5V and there is no issues.  When the K22F slave is taken off the I2C bus, the signals go immediately back to 5V.  


I can currently work around this by having the K22F slave send data, but in the event we don't do this, the signals shouldn't be pulled down I would think.


So far I've tried enabling pull-ups on the I2C0_SCL and SDA lines, but that didn't help.  I've tried attaching physical pull-ups to the I2C0_SCL and SDA lines, that didn't work.  And lastly, I've set i2c_slave_user_config_t.slaveListening = true, and the line never goes low, but that breaks all the other code and will always send something out.  So, is my only option to constantly send out data with the K22F when I'm not sending any other data over the line?