I2C Physical Signal
I2C Lockup
I2C can get lockup and hang the whole I2C bus due to communication error. This is due to noise or incorrect signalling resulting in slave waiting for clock cycle, when the master already finish its clocking. The following are some of the common reasons for the communication error.
- Too much capacitance on the bus.
- Communication speed too high.
It is important to also program your codes to handle possible bus hang. You can clock out at least 10 clock cycle to clear the bus.
Solution
A common problem is that the pull up resistor on the bus is too low. This results in a slow slew rate. The digital signal is not sharp enough. Use a 1Kohm pull up resistor for both the SDA and SCK. It is the most common design problem I have encounter. I always put a pullup resistor value too high. 3.3Kohm can be too high.