2024年9月5日 星期四

香橙派 zero3 linux 6.1.31 下点亮 2.4寸 SPI LCD 屏幕 (ili9341)

原文 https://blog.csdn.net/qq_35266025/article/details/137723770。照著做,成功了。把相關資料保留下來,以便參考。

前言

在網路上找到的資料,都是舊的作法,這一篇是最近的,可以成功地輸出顯示到 LCD。

在淘寶買 spi lcd屏幕時,要注意使用的晶片。第一次貪大,買了 3.5" 的 LCD,使用的晶片為 ILI9488,就很少支援了。要選較舊的 ILI9341 晶片的 LCD,才比較多支援。

香橙派 zero3 的系统是 debian bookworm linux6.1.31,去用户手册中查找驱动方法,发现只有 linux 4.9 下驱动屏幕的方案。

正文

首先连接屏幕,按如下方式接线。前面是 LCD 的引腳定義,後面是香橙派的引腳編號及定義。

  • VCC,1 号引脚,3.3V
  • GND,6 号引脚
  • CS,24 号引脚,SPI1 CS
  • RESET,7 号引脚 PC9 -- 73
  • D/C,11 号引脚,PC6 -- 70
  • SDI (MOSI),19 号引脚,SPI1 MOSI
  • SCK,23 号引脚,SPI1 CLK
  • LED,13 号引脚,PC5 -- 69


经过查找,发现有ili9341的驱动模块,位於下面的目錄:

/lib/modules/6.1.31-sun50iw9/kernel/drivers/staging/fbtft/fb_ili9341.ko

于是通过设备树 overlay 添加 ili9341 的设备节点,如下:

在 /boot/dtb/allwinner/overlay/ 目錄下,建立檔案 ili9341.dts。

/dts-v1/;
/plugin/;

/ {
    compatible = "xunlong,orangepi-zero2", "allwinner,sun50i-h616";
    fragment@0 {
        target = <&spi1>;
        __overlay__ {
            status = "okay";
            cs-gpios = <&pio 7 9 0>; /* PH9 */
            ili9341: ili9341@0 {
                compatible = "ilitek,ili9341";
                reg = <0>;
                spi-max-frequency = <40000000>;
                rotate = <90>;
                bgr;
                fps = <30>;
                buswidth = <8>;
                reset-gpios = <&pio 2 9 1>; /*RESET=PC9*/
                dc-gpios = <&pio 2 6 0>; /*DC_RS=PC6*/
                led-gpios = <&pio 2 5 0>; /*LED=PC5*/
                debug = <0>;
            };
        };
    };
}; 

执行下面的指令,會產生 ili9341.dtbo,放在 /boot/overlay-user/ 的目錄下。

$ sudo orangepi-add-overlay ili9341.dts
Compiling the overlay
Copying the compiled overlay file to /boot/overlay-user/
Overlay ili9341 was already added to /boot/orangepiEnv.txt, skipping
Reboot is required to apply the changes

重新啟動,可以成功點亮 LCD。


疑难杂症

1.dmesg出现以下报错:


pin PH9 already requested by 5011000.spi;

将ili9341.dts中的cs-gpio一行注释掉


2.fb0成功挂载,但是屏幕白屏



可以尝试更换cs的引脚,我把cs的引脚从PH9更换至PC7后可以正常点亮。


具体操作:


修改ili9341.dts,将 cs-gpios = <&pio 7 9 0>; 改为 cs-gpios = <&pio 2 7 0>; 


網誌存檔