LeoDJ/SSD1303

I2C is flaky (SDA stalls)

LeoDJ opened this issue · 0 comments

LeoDJ commented

For some reason, after a few full display updates (0.5 - 3.5), the SSD1303 controller of my display stalls the I²C bus (keeps SDA pulled low).

I have no idea why this might be happening right now, but I tried to narrow it down:

  • The I2C doesn't stall when Vcc (12V) is not connected to the display
  • Disabling the display during writes delays the stall, but it still happens
  • Display contents with less pixels turned on seem to last longer, but ultimately stalls too after a few cycles.
  • Putting a few delays here and there or slowing down the I2C clock speed doesn't seem to impact it much

Maybe it's something with my test setup (noise) or with the Raspberry Pi Pico Arduino I2C implementation (although the display is the one stalling the bus).

With a better I2C implementation, the MCU could also recover from the broken bus and simply retry the transaction, but I'd rather find the source of the stall.