nRF54L15作为Nordic新的旗舰芯片,支持最大32M的SPI和64M的sQSPI,今天分享一下使用32M的SPI添加LVGL组件驱动ST7789芯片
一、使用的外设驱动是使用 nRF54L15 的高速SPI00 ,速率可以达到32M
需要注意的是,使用SPI00,
第一点,GPIO一点需要是使用P2的特定引脚,具体可以看我的博客
Nordic随笔】nRF54L15的引脚说明
第二点,需要使用高驱动模式
&pinctrl { spi21_default
: spi21_default {
group1 { psels
= <NRF_PSEL(SPIM_MISO,
1,
14)
>,
<NRF_PSEL(SPIM_MOSI,
1,
13)
>,
<NRF_PSEL(SPIM_SCK,
1,
11)
>; nordic,drive
-mode
= <NRF_DRIVE_H0H1
>; }; }; spi21_sleep
: spi21_sleep {
group1 { psels
= <NRF_PSEL(SPIM_MISO,
1,
14)
>,
<NRF_PSEL(SPIM_MOSI,
1,
13)
>,
<NRF_PSEL(SPIM_SCK,
1,
11)
>; low
-power
-enable; }; };}
二、使用的初始代码v3.1.0\zephyr\samples\subsys\display\lvgl
需要需要在这个例程添加驱动屏幕的设备树即可
三、修改设备树添加spi设备
添加st7789节点
将display的节点改成st7789
/ {
/delete-node/ leds;
/delete-node/ buttons;
/delete-node/ aliases; chosen { zephyr,display = &st7789v;
// nordic,pm-ext-flash = &zd26q16;
// user,ext-flash = &zd26q16; }; mipi_dbi { compatible =
"zephyr,mipi-dbi-spi";
// spi-dev = <&spi21>;
/* 你的 SPI 控制器 */ spi-dev = <&spi0
0>;
/* 你的 SPI 控制器 */ dc-gpios = <&gpio1
5 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio1
6 GPIO_ACTIVE_LOW>;
#address-cells = <1>; #size-cells = <0>; write-only; st7789v: st7789v@0 { compatible =
"sitronix,st7789v"; reg = <
0>; mipi-max-frequency = <
32000000>; mipi-mode =
"MIPI_DBI_MODE_SPI_4WIRE";
/* 必须添加 */ width = <
240>; height = <
320>;
x-offset = <
0>;
y-offset = <
0>; vcom = <
0x3f>; gctrl = <
0x35>; vrhs = <
0x12>; vdvs = <
0x20>; mdac = <
0x00>; gamma = <
0x01>; colmod = <
0x05>;
/* 16‑bit RGB565,对应你写的 COLMOD 0x55 */ lcm = <
0x2c>; porch-param = [0c 0c
00 33 33]; cmd2en-param = [
5a
69 02 01]; pwctrl1-param = [a4 a1]; pvgam-param = [D
0 04 0D
11 13 2B
3F
54 4C
18 0D 0B
1F
23]; nvgam-param = [D
0 04 0C
11 13 2C
3F
44 51 2F
1F
1F
20 23]; ram-param = [
00 F
0]; rgb-param = [CD 08
14]; }; }; control_pins { compatible =
"dev-gpios"; backlight_pin: backlight_pin { gpios = <&gpio1
9 GPIO_ACTIVE_LOW>; label =
"back light pin"; }; };};
SPI:
&spi00 { //
cs-gpios = <&gpio2
5 GPIO_ACTIVE_LOW>
; cs-gpios = <&gpio1
12 GPIO_ACTIVE_LOW>
; pinctrl-
0 = <&spi00_default>
; pinctrl-
1 = <&spi00_sleep>
; max-frequency = <DT_FREQ_M(
32)>
;}
;四、测试屏幕是320*240的,刷新率有点低,大屏估计得用QSPI
