0


linux(全志F1C100S/F1C200S)系列02:移植LCD st7789驱动,LVGL8.3移植

目录

一、 LCD st7789移植

1.设备树更改

在这里插入图片描述

&spi0 {
    pinctrl-names ="default";
    pinctrl-0=<&spi0_pins_a>;
    status ="okay";

    flash@0{#address-cells =<1>;#size-cells =<1>;
        compatible ="winbond,w25q128","jedec,spi-nor";
        reg =<0>;
        spi-max-frequency =<40000000>;};};&spi1 {
    pinctrl-names ="default";
    pinctrl-0=<&spi1_pins_a>;
    status ="okay";

    st7789v@0{
        status ="okay";
        compatible ="sitronix,st7789v";
            reg =<0>;
            spi-max-frequency =<32000000>;
            rotate =<90>;
            spi-cpol;
            spi-cpha;
            rgb;
            fps =<30>;
            buswidth =<8>;
            reset-gpios =<&pio 43 GPIO_ACTIVE_LOW>;
            dc-gpios =<&pio 45 GPIO_ACTIVE_LOW>;
            debug =<0>;};};

在这里插入图片描述

reset-gpios =<&pio 43 GPIO_ACTIVE_LOW>;
dc-gpios =<&pio 45 GPIO_ACTIVE_LOW>;

st7789V中指定了rst与dc引脚,pio 4 3 对应PE3,pio 4 5对应PE5;
详细配置方式见链接:全志 :gpio使用
需要根据自身硬件配置。

Tips:更改 spi-max-frequency = <32000000> -> spi-max-frequency = <100000000>; 和 fps = <30>; 改为 fps = <60>; 感谢楼下老哥提示。
rotate = <90>;根据屏幕方向更改。

2. 修改linux自带的fbtft驱动

只需要更改下面的三个地方即可,因为新下载的内核已经做了升级

staticintinit_display(structfbtft_par*par){
    par->fbtftops.reset(par);mdelay(50);write_reg(par,0x11);//Sleep exitmdelay(12);write_reg(par,0x11);mdelay(10);write_reg(par,0x3A,0x05);//65k modewrite_reg(par,0xc5,0x1a);write_reg(par,0x36,0x70);// 屏幕显示方向设置//-------------ST7789V Frame rate setting-----------//write_reg(par,0xb2,0x05,0x05,0x00,0x33,0x33);write_reg(par,0xb7,0x35);//--------------ST7789V Power setting---------------//write_reg(par,0xbb,0x3f);write_reg(par,0xc0,0x2c);write_reg(par,0xc2,0x01);write_reg(par,0xc3,0x0f);write_reg(par,0xc4,0x20);write_reg(par,0xc6,0x11);write_reg(par,0xd0,0xa4,0xa1);write_reg(par,0xe8,0x03);write_reg(par,0xe9,0x09,0x09,0x08);write_reg(par,0xe0,0xd0,0x05,0x09,0x09,0x08,0x14,0x28,0x33,0x3f,0x07,0x13,0x14,0x28,0x30);write_reg(par,0xe1,0xd0,0x05,0x09,0x09,0x08,0x03,0x24,0x32,0x32,0x3b,0x14,0x13,0x28,0x2f);write_reg(par,0x21);write_reg(par,0x11);mdelay(120);//Delay 120mswrite_reg(par,0x29);mdelay(200);return0;}
staticstructfbtft_display display ={.regwidth =8,.width =135,.height =240,.gamma_num =2,.gamma_len =14,.gamma = DEFAULT_GAMMA,.fbtftops ={.init_display = init_display,.set_var = set_var,.set_gamma = set_gamma,.blank = blank,},};

对于1.14寸液晶屏而言,其屏幕有偏移,这里需要修改fbtft-core.c文件中的fbtft_set_addr_win函数

staticvoidfbtft_set_addr_win(structfbtft_par*par,int xs,int ys,int xe,int ye){write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,(xs+40)>>8, xs+40,((xe+40)>>8)&0xFF,(xe+40)&0xFF);write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,((ys+52)>>8)&0xFF,(ys+52)&0xFF,((ye+52)>>8)&0xFF,(ye+52)&0xFF);write_reg(par, MIPI_DCS_WRITE_MEMORY_START);}

现在所有的修改都完成了,剩下的就是编译内核了,在内核根目录下执行
make menuconfig
2.5 内核配置
由于FC1000S的SPI中有一个BUG,因此我们在开启SPI驱动的时候必须选择A31(Device Drivers -> SPI support)
如图所示
在这里插入图片描述
现在选择ST7789V驱动并编译进内核中,如下:
Device Drivers —>  
    [*] Staging drivers —>  
        <*> Support for small TFT LCD display modules —>
              <*> FB driver for the ST7789V LCD Controller

在这里插入图片描述
保存退出,然后执行make命令编译内核,然后将镜像拷贝到tf卡第一分区中,此时可以看到屏幕已经可以驱动起来了,并且/dev目录下有fb0设备。

编译 make -j2
将设备树和zimage复制到tf卡中 重启可以看到光标闪烁
说明移植成功

5.测试

在这里插入图片描述

此时可以看到屏幕刷新了,然后编程了黑色背景,同时出现了光标,从终端的 log 可以看到,当
fb 挂载成功后,控制台驱动检测到 fb 设备后会自动将 fb0 映射到 tty0 上,这样 tty0 实际上就是 fb0 ttys0则是串口
设备。现在我们向屏幕输入一个 hello frame buffer,如下:
#echo hello frame buffer > /dev/tty0

可以看到此时液晶屏上显示了该文字,我们也可以将当前目录输出到液晶屏上:
ls / > /dev/tty0

6 将启动信息同时打印到lcd 和串口

实际上很就简单
在uboot启动 倒计时内按任意键进入uboot命令行,设置bootargs 添加console=tty0最前面即可
注意不要输入错误 一定要确保是在英文输入法下面输入的,有时不小心按到shift 进入中文输入字符就会不对,我就是这样 导致我格式化了多次tf卡
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.设置LCD屏幕为终端控制台

上面的步骤只能使Linux的启动信息显示到LCD上面,
要将LCD作为终端控制台还需要一下步骤

修改/etc/inittab文件,添加一行:

vi /etc/inittab
tty0::askfirst:-/bin/sh

在这里插入图片描述

修改完成以后保存/etc/inittab 并退出,然后重启开发板,重启以后开发板 LCD 屏幕最后一行会显示下面一行语句

Please press Enter to activate this console.

在这里插入图片描述

按下回车键,即可进入终端,使用USB外接键盘,正常交互(按下回车键,前题是已经完成好F1C100S的USB驱动增加)。

下面这个方法是另一个博客里提到的方法,待测试
将原有的console注释掉,改为ttyS0和tty0,ttyS0是USB键盘输入,tty0就是正常输出输入

#console::respawn:-/bin/sh
ttyS0::respawn:-/bin/sh
tty0::respawn:-/bin/sh

二、linux vscode lvgl模拟器

大部分操作参考https://blog.csdn.net/weixin_45652444/article/details/119756079
实际操作有几率无法编译过
一般卡在c99编译上
解决办法 在顶层Makefile CFLAGS 后增加 -std=c99选项
搞了很久才解决
CFLAGS := -O0 -g $(WARNINGS) -std=c99
在这里插入图片描述
最简单的模拟器使用方法是安装Vs Studio 2019,打开模拟器工程;编译即可。


本文转载自: https://blog.csdn.net/qq_33552551/article/details/133740350
版权归原作者 梓默 所有, 如有侵权,请联系我们删除。

“linux(全志F1C100S/F1C200S)系列02:移植LCD st7789驱动,LVGL8.3移植”的评论:

还没有评论