跳到主要内容

简介

该示例运行在 Duo 设备上,使用一块 240x320 分辨率的 SPI 接口显示屏,运行 LVGL 测试程序。

需准备 Milk-V Duo 开发板(或 Duo256M)、TF卡、一块 ST7789V 芯片液晶屏,这里使用的一块全彩 2.4 寸的屏幕,分辨率为 240*320,接口方式为 SPI,可按需选择不同尺寸屏幕。不同分辨率屏幕请注意下列配置时对应修改。

Document Pictures

点亮 SPI 显示屏

编译固件

获取官方SDK:https://github.com/milkv-duo/duo-buildroot-sdk.git

git clone https://github.com/milkv-duo/duo-buildroot-sdk.git

获取 Duo LVGL Demo:https://github.com/milkv-duo/duo-lvgl-fb-demo.git

git clone https://github.com/milkv-duo/duo-lvgl-fb-demo.git

进入 SDK 目录,并为 SDK 的内核打一个支持 ST7789V 芯片的补丁(该补丁在上面的 duo-lvgl-fb-demo.git 仓库中):

cd duo-buildroot-sdk
git apply --reject ../duo-lvgl-fb-demo/duo-kernel-fb_st7789v.patch

确认内核配置有打开 FB TFT 的支持(最新的 Buildroot SDK 中默认都已经支持):

CONFIG_FB=y
CONFIG_FB_TFT=y
CONFIG_FB_TFT_ST7789V=y

内核配置文件所在的位置:

  • Duo:
    build/boards/cv180x/cv1800b_milkv_duo_sd/linux/cvitek_cv1800b_milkv_duo_sd_defconfig
  • Duo256M:
    build/boards/cv181x/cv1812cp_milkv_duo256m_sd/linux/cvitek_cv1812cp_milkv_duo256m_sd_defconfig
  • DuoS SD:
    build/boards/cv181x/cv1813h_milkv_duos_sd/linux/cvitek_cv1813h_milkv_duos_sd_defconfig
  • DuoS eMMC:
    build/boards/cv181x/cv1813h_milkv_duos_emmc/linux/cvitek_cv1813h_milkv_duos_emmc_defconfig

编译SD卡固件:

  • Duo
    ./build.sh milkv-duo
  • Duo256M
    ./build.sh milkv-duo256m
  • DuoS SD
    ./build.sh milkv-duos-sd
  • DuoS eMMC
    ./build.sh milkv-duos-emmc

编译完后,将 out 目录中对应的 img 文件烧录到 TF 卡中。

硬件连接

接下来根据 Duo 的引脚位置参考,进行连线配置。注意该显示屏 BL 引脚是背光使能引脚,高电平背光亮。

Duo 和 Duo256M

Duo/Duo256M 物理引脚ST7789V
PIN 38: GNDGND
PIN 36: 3.3V(OUT)VCC
PIN 9: SPI2_SCKSCL
PIN 10: SPI2_SDOSDA
PIN 21: GP16RES
PIN 22: GP17DC
PIN 12: SPI2_CS_XCS
PIN 36: 3.3V(OUT)BL
Document Pictures

DuoS

DuoS 物理引脚ST7789V
PIN 25: GNDGND
PIN 17: 3V3VCC
PIN 23: SPI3_SCKSCL
PIN 19: SPI3_SDOSDA
PIN 26: A28RES
PIN 22: A18DC
PIN 24: B16CS
PIN 1: 3V3BL
Document Pictures

测试屏显示是否正常

Duo 插入上面烧录好的 TF 卡,上电开机,通过串口终端或者 SSH 登陆到 Duo 的控制台,查看 ST7789V 的驱动是否正常:

[root@milkv-duo]~# dmesg | grep st7789v
[ 0.998809] fb_st7789v spi0.0: fbtft_property_value: buswidth = 8
[ 1.005243] fb_st7789v spi0.0: fbtft_property_value: debug = 0
[ 1.011392] fb_st7789v spi0.0: fbtft_property_value: rotate = 0
[ 1.017613] fb_st7789v spi0.0: fbtft_property_value: fps = 60
[ 1.529233] graphics fb0: fb_st7789v frame buffer, 240x320, 150 KiB video memory, 4 KiB buffer memory, fps=62, spi0.0 at 48 MHz

如上显示则说明驱动已正常加载。

花屏测试:

cat /dev/random > /dev/fb0

清空屏幕(黑屏):

cat /dev/zero > /dev/fb0

能正常显示花屏和黑屏,说明屏可以正常使用了。

LVGL 测试

下载 LVGL frame buffer demo 源码

下载 lv_port_linux_frame_buffer 仓库源码, LVGL 已提供 Linux 的 fb 工程,该工程已通过 git submodule 子仓库形式集成了 lvgl 和 lvgl_drivers 两个子仓库。

该仓库已整理后集成到了前面下载的 Duo LVGL Demo 代码中,并适配 Duo 和该 SPI 显示屏,可以直接编译测试。

下载交叉编译工具链

下载工具链:

git clone https://github.com/milkv-duo/host-tools.git

也可以直接使用 Buildroot SDK 中 host-tools 目录,二者是一样的。

进入到工具链目录中 export 工具链到环境变量中:

cd host-tools
export PATH=$PATH:$(pwd)/gcc/riscv64-linux-musl-x86_64/bin

验证工具链是否可用:

riscv64-unknown-linux-musl-gcc -v

能够正常显示交叉编译工具链的版本信息,即工具链可用。

编译 LVGL

进入 Demo 代码中的 lv_port_linux_frame_buffer 目录执行:

make clean
make -j

编译完成后,在 build/bin 目录会生成 demo 程序,通过 scp 命令拷贝到 Duo 设备上:

scp demo [email protected]:/root/

密码是 milkv

通过串口或者 SSH 登陆到 Duo 的终端控制台:

为 demo 程序添加可执行权限:

chmod +x demo

运行测试程序:

./demo

可以看到 lvgl 的 widget Demo:

Document Pictures

如后续运行颜色不对,可修改 LV_COLOR_16_SWAP 为 1。

更换 Demo 为 Benchmark 测试样例

修改 lv_conf.h 中的宏定义,将 LV_USE_DEMO_WIDGETS 改为 0,LV_USE_DEMO_BENCHMARK 改为 1 后重新编译:

make clean
make -j

同样的方法将生成的 demo 上传到 Duo 中执行测试,注意再次上传时,Duo 中运行的 demo 程序需要先退出(Ctrl+C)。

Document Pictures

该测试运行之后会生成统计结果:

Document Pictures

测试结果为 FPS:100 左右。

参考

  • carbonfix