之前使用了 fbtft 成功驅動了lcd st7735r,現在嘗試下驅動 ili9341,
配置
跟之前用 fbtft 驅動 st7735r 一樣,先用 make menuconfig 配置內核,添加 fbtft 。然后修改設備樹,同樣是在設備樹spi5下添加:
ili9341@0{
compatible = "adafruit,yx240qv29", "ilitek,ili9341";
reg = <0>;
spi-max-frequency = <32000000>;
buswidth=<8>;
dc-gpios = <&gpiof 3 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;
rotation = <270>;
bgr;
};
編譯,更新板子上的內核跟設備樹,啟動,屏由白變黑,說明驅動應該是沒問題的,看下啟動信息中跟fb有關的部分:
root@stm32mp1:~# dmesg | grep "fb"
[ 2.091619] fbtft_of_value: buswidth = 8
[ 2.416500] graphics fb0: fb_ili9341 frame buffer, 240x320, 150 KiB video memory, 16 KiB buffer memory, fps=20, spi0.0 at 32 MHz
可以看到LCD的相關信息。
簡單測試
配置一下,開機的時候顯示Linux Logo:
顯示隨機數:
系統自帶工具
在測試過程中,無意中發現系統中自帶了 framebuffer 測試工具:
- 使用 fb-test 測試
結果如下:
這個工具可以用來測試LCD驅動正不正常
-
使用fb-rect
運行該命令后,LCD上一直都在顯示不同尺寸不同顏色的方塊:
-
使用fb-perf
運行結果如下:
littlevgl
littlevgl是一個開源的嵌入式GUI庫,詳細信息查看官網:https://littlevgl.com/。
littlevgl 官方已經有支持Linux,工程地址為:https://github.com/littlevgl/lv_linux_frame_buffer
首先下載下來:
git clone --recursive https://github.com/littlevgl/lv_linux_frame_buffer.git
下載下來后,先修改lv_conf.h,以下3個參數需要跟所用LCD一樣:
在文件lv_drv_conf.h中,確認程序中所用設備是否為所用設備對應的fb設備,如下圖,程序中默認是用 fb0,如果不是 fb0,需要做相應修改:
然后直接輸入 make,編譯,編譯的部分信息如下:
編譯完成后把編譯出來的可執行文件 demo 拷貝到 STM32MP157c 的板子上,並運行結果如下: