-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Description
Running Zephyr with a SSD1306 compatible OLED screen does not work over I2C
I am running with a seeeduino xiao and its accompanying dev kit which features a SSD1306 compatible 128x64 pixels OLED screen, accessed over the I2C bus.
Comparing with a similar library from the Arduino ecosystem I saw that the I2C packets of Zephyr was incorrectly chopped up into smaller chunks. I tracked it down and it seems that it comes from the usage of i2c_burst_write(), but I don't know what is the supposed behavior of the I2C driver. Is it okay for it to inject STOP conditions between each I2C message? There is a warning in the header file which seems to indicate that it is.
To Reproduce
- checkout the below zephyr version
- apply the changes in the below attached patch (except the one for the ssd1306.c file which contains a workaround)
- unpack blinken.zip below
west build -b seeeduino_xiaowest flash- See error
Expected behavior
A stripey pattern on the display
Impact
Showstopper for any application using this driver combo (and possibly others with the ssd1306?)
Logs and console output
Expected comms:

Environment (please complete the following information):
- Manjaro Linux
- zephyr-v2.6.0-740-gc32a96af6ade
Additional context
0001-seeduino-xiao-add-i2c-support-fix-ssd1306-burst-writ.patch.txt
blinken.zip
