I2C START/STOP condition problem


#1

Hi,

We are using the hard I2C bus on a Q24 Plus to control a MCP23008 port expander. The I2C bus operates very strange because after every byte sent, the SDA line remains low and just before sending the next byte, the module issues a STOP-START sequence. This causes sporadic errors on the bus as the port expander loses synchronism - data is written to wrong registers and so on.

This mode of operation of the I2C bus is unusual and risky, apart from the fact that the SDA line remains low almost all the time, causing unnecessary current draw from the pull-up resistor. The SDA remains low even after unsubscribing/resubscribing from/to the bus.

Anyone experiencing the same problem? Is this a bug in the OS or are we using the API incorrectly? Any solution?

Regards,
Martin


#2

Hi Martin

After much struggle just to get the I2C functional (with undocumented features like the shift in the slave address, required pull up, having to do a write before a read, etc…) we got the I2C finally sort of communicating.

We have the same problem where a STOP sequece is not generated after using adl_busWrite() with the I2C configured in hard mode. This mean the write is never accepted by our device and a subsequent operation seem to fails as it still waiting for the stop bit.

Did you manage to find a solution to this problem as also expereinced by you?


#3

Hi,

We replaced the port expander by a small micro which now communicates with the Q24 via a 2 wire proprietary protocol. Now we have a more secure, flexible and less expensive solution, without the problems of the I2C. The I2C problem itself was not resolved.

Regards,
Martin