Hello,
I’ve been using SSD1306 128x64 OLED displays with nRF52840 boards for several years without any issues, building with nRF Connect SDK 2.5.x to 3.1.0. Recently, I've been attempting to move existing NCS 3.1.0 projects over to NCS 3.2.1. However, I’m unable to successfully get the SSD1306 OLED display to work with any of the nRF52840 boards using the latest nRF Connect SDK 3.2.1.
All the nRF52840 boards with SSD1306 display work fine when built with vanilla Zephyr 4.1.x and 4.2.x.
Also, the target for thingy53/nrf5340/cpuapp/ns failed to run successfully with both NCS 3.1.0 and NCS 3.2.1. The target thingy53/nrf5340/cpuapp ran fine with the SSD1306 OLED.
To try to isolate the issue, I’ve taken the Zephyr sample, “/opt/nordic/ncs/v3.2.1/zephyr/samples/subsys/display/cfb_custom_font” and built it for a couple of different nRF52840 boards (e.g. particle_xenon_nrf52840, promicro_nrf52840) plus thingy/nrf5340/cpuapp.
Built exactly the same sample "cfb_custom_font" main.c (modified to display board target and Zephyr version) & used the same devicetree overlays. All the builds compiled and linked without any issues. However, only particle_xenon/nrf52840 using NCS 3.1.0 and thingy53/nrf5340/cpuapp using NCS 3.2.1 ran successfully with the SSD1306 displays.
I used the below board configuration and the overlays with the ssd1306 devicetree included in the I2C sections of the overlays. Default sysbuild option used from with the nRF Connect SDKs.
I don't see anything that is obvious that may be wrong. I would appreciate if you could determine the cause of the issue with the nRF52840 boards with SSD1306 when using nRF Connect SDK 3.2.1.
Also, Is there any reason as to why the target for thingy53/nrf5340/ns doesn’t run successfully with the I2C SSD1306 display?
Thank you.
particle_xenon_nrf52840.overlay:
/ {
chosen {
zephyr,display = &ssd1306;
zephyr,console = &uart0;
zephyr,shell-uart = &uart0;
};
};
&uart0 {
compatible = "nordic,nrf-uarte";
status = "okay";
current-speed = <115200>;
pinctrl-0 = <&uart0_default>;
pinctrl-1 = <&uart0_sleep>;
pinctrl-names = "default", "sleep";
};
&gpio0{
status = "okay";
};
&i2c0 {
compatible = "nordic,nrf-twi";
status = "okay";
pinctrl-0 = <&i2c0_default>;
pinctrl-1 = <&i2c0_sleep>;
pinctrl-names = "default", "sleep";
ssd1306: ssd1306@3c {
compatible = "solomon,ssd1306fb";
reg = <0x3c>;
width = <128>;
height = <64>;
segment-offset = <0>;
page-offset = <0>;
display-offset = <0>;
multiplex-ratio = <63>;
segment-remap;
com-invdir;
prechargep = <0x22>;
};
};
thingy53_nrf5340_cpuapp.overlay
/ {
chosen {
zephyr,display = &ssd1306;
};
};
&pinctrl {
i2c0_default: i2c0_default {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 5)>,
<NRF_PSEL(TWIM_SCL, 0, 4)>;
};
};
i2c0_sleep: i2c0_sleep {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 5)>,
<NRF_PSEL(TWIM_SCL, 0, 4)>;
};
};
};
&i2c0 {
compatible = "nordic,nrf-twim";
status = "okay";
clock-frequency = <I2C_BITRATE_FAST>;
zephyr,concat-buf-size = <4096>;
pinctrl-0 = <&i2c0_default>;
pinctrl-1 = <&i2c0_sleep>;
pinctrl-names = "default", "sleep";
ssd1306: ssd1306@3c {
compatible = "solomon,ssd1306fb";
reg = <0x3c>;
width = <128>;
height = <64>;
segment-offset = <0>;
page-offset = <0>;
display-offset = <0>;
multiplex-ratio = <63>;
segment-remap;
com-invdir;
prechargep = <0x22>;
};
};
prj.conf:
CONFIG_HEAP_MEM_POOL_SIZE=16384 CONFIG_DISPLAY=y CONFIG_SSD1306=y CONFIG_CHARACTER_FRAMEBUFFER=y CONFIG_CHARACTER_FRAMEBUFFER_USE_DEFAULT_FONTS=n CONFIG_LOG=y # Preferred SHELL options CONFIG_SHELL=y CONFIG_DEVICE_SHELL=y CONFIG_INIT_STACKS=y CONFIG_KERNEL_SHELL=y CONFIG_SHELL_STATS=n CONFIG_I2C_SHELL=y # Enable RTT to replace UART CONFIG_UART_CONSOLE=y CONFIG_USE_SEGGER_RTT=n CONFIG_SHELL_BACKEND_RTT=n CONFIG_LOG_BACKEND_UART=y CONFIG_SHELL_LOG_BACKEND=y
Console Output
NCS 3.2.1 build - particle_xenon_nrf52840 with SSD1306 (particle_xenon/nrf52840):
*** Booting nRF Connect SDK v3.2.1-d8887f6f32df *** *** Using Zephyr OS v4.2.99-ec78104f1569 *** Display device not ready Failed to turn off display blanking
NCS 3.1.0 build - particle_xenon_nrf52840 with SSD1306 (particle_xenon/nrf52840):
*** Booting nRF Connect SDK v3.1.0-6c6e5b32496e *** *** Using Zephyr OS v4.1.99-1612683d4010 *** Zephyr v4.1.99 Board target: particle_xenon/nrf52840

NCS 3.2.1 build - thingy53_nrf5340_cpuapp with SSD1306:
*** Booting nRF Connect SDK v3.2.1-d8887f6f32df *** *** Using Zephyr OS v4.2.99-ec78104f1569 *** [00:00:00.035,614] <inf> udc_nrf: Initialized Zephyr v4.2.99 Board target: thingy53/nrf5340/cpuapp

NCS 3.1.0 build - thingy53_nrf5340_cpuapp with SSD1306:
[Disconnected] [Connected] *** Booting nRF Connect SDK v3.1.0-6c6e5b32496e *** *** Using Zephyr OS v4.1.99-1612683d4010 *** Zephyr v4.1.99 Board target: thingy53/nrf5340/cpuapp
Vanilla Zephyr 4.2.x from terminal command line: SSD1306 displays works fine.
*** Booting Zephyr OS build v4.2.0-717-g85e135362445 *** Zephyr v4.2.99 Board target: particle_xenon/nrf52840 uart:~$


