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

这篇具有很好参考价值的文章主要介绍了linux(全志F1C100S/F1C200S)系列02:移植LCD st7789驱动,LVGL8.3移植。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 LCD st7789移植

1.设备树更改

linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件

&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 4 3 GPIO_ACTIVE_LOW>;
			dc-gpios = <&pio 4 5 GPIO_ACTIVE_LOW>;
			debug = <0>;
	};
};


linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件

reset-gpios = <&pio 4 3 GPIO_ACTIVE_LOW>;
dc-gpios = <&pio 4 5 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驱动

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

static int init_display(struct fbtft_par *par)
{
	par->fbtftops.reset(par);
	mdelay(50);
	write_reg(par,0x11);//Sleep exit
	mdelay(12);
	write_reg(par,0x11);
	mdelay(10);
	write_reg(par,0x3A,0x05); //65k mode
	write_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 120ms
	write_reg(par,0x29);
	mdelay(200);
	return 0;
}
static struct fbtft_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函数

static void fbtft_set_addr_win(struct fbtft_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)
如图所示
linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件
现在选择ST7789V驱动并编译进内核中,如下:
Device Drivers —>  
    [] Staging drivers —>  
        <
> Support for small TFT LCD display modules —>
              <*> FB driver for the ST7789V LCD Controller

linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件
保存退出,然后执行make命令编译内核,然后将镜像拷贝到tf卡第一分区中,此时可以看到屏幕已经可以驱动起来了,并且/dev目录下有fb0设备。

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

5.测试

linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件

此时可以看到屏幕刷新了,然后编程了黑色背景,同时出现了光标,从终端的 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卡
linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件
linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件
linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件

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

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

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

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

linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件

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

Please press Enter to activate this console.

linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件

按下回车键,即可进入终端,使用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
linux lcd7789驱动,# Linux,linux,ui,嵌入式硬件
最简单的模拟器使用方法是安装Vs Studio 2019,打开模拟器工程;编译即可。文章来源地址https://www.toymoban.com/news/detail-800320.html

到了这里,关于linux(全志F1C100S/F1C200S)系列02:移植LCD st7789驱动,LVGL8.3移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数

    2024年02月14日
    浏览(45)
  • f1c200s---编译uboot

    本章所解决问题后的Uboot仓库、docker镜像可在文章末尾找到,如果不想一步步配置编译环境可到文章末尾下载docker镜像直接运行 下载交叉编译链: 解压交叉编译链: 配置环境变量: 打开后在文件最后一行添加以下变量: 生效环境变量: 查询版本确保安装无误: 由于官方

    2024年02月07日
    浏览(40)
  • 全志F1C100s主线linux入坑记录 (6)音视频播放(视频播放软解)

    百度网站 (1)下载安装声卡补丁 参考挖坑网大神提供的声音驱动以及声音卡驱动补丁文件下载文件下载 全志F1C100s声卡补丁 解压文件打上补丁 (2)配置声卡 修改设备树文件添加声卡节点 内核配置 (3)linux内核编译烧录 可以看到声卡已经挂载了 (4)使用声卡 安装alsa-u

    2024年02月07日
    浏览(55)
  • (三)内核移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

    目录 一、bootloader、kernel、rootfs联系 二、内核移植 1. 内核源码获取 2. 内核配置与编译 🍍 基础配置与编译 🍍 TF卡分区 🍍 内核烧录 三、参考内容 kernel可以理解为一个 庞大的裸机程序 ,和uboot以及其他比如点灯类似的裸机程序没有本质区别,只是kernel分为 用户态和内核态

    2024年02月15日
    浏览(84)
  • 全志F1C200S嵌入式驱动开发(串口驱动)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         对于uboot、kernel和rootfs来说,他们的串口输出一般都是uart0。一般这么做,是没有问题的。只不过我们自己买的这块f1c200s电路板,设计者把uart转ttl的接口,改接到了uart1上面。不过这样

    2024年02月16日
    浏览(78)
  • 全志F1C200S嵌入式驱动开发(GPIO输出)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         和v3s一样,f1c200s本身的外部引脚比较少。所以这个时候,不可避免地,很多引脚的功能就会重叠在一起。这种情况下,我们就要学会取舍了。比如说,如果是学习sd卡的时候,那么s

    2024年02月16日
    浏览(45)
  • 给linux移植fbtft驱动st7735s小屏幕(f1c100s)

    内核版本5.4 在使用spi总线接上了一个小网卡,实现了我们开发板对网络的访问之后,我还想接一个小的spi屏幕 1.44寸款,来画一只小企鹅,顺便显示一些系统的调试信息。但是由于我这个开发板向外暴露出来的spi接口就两个,而且有一个已经因为串口的设置而不能使用。所以

    2024年02月10日
    浏览(44)
  • 全志F1C200S嵌入式驱动开发(soc系统集成)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         任何一个嵌入式设备都是由很多的子系统组成的。这里面有硬件、有软件,还可能有机械,并不一定就是大家看到的消费电子那样,即一个soc构成了所有的系统。现实情况是,要构建

    2024年02月12日
    浏览(39)
  • 全志F1C200S嵌入式驱动开发(从DDR中截取内存)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         linux内核起来的时候,不一定所有的内存都是分配给linux使用的。有的时候,我们是希望能够截留一部分内存的。为什么保留这部分内存呢?这里面可以有很多的用途。 比如说,第一,

    2024年02月14日
    浏览(41)
  • 全志F1C200S嵌入式驱动开发(spi-nand驱动)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         和v3s一样,f1c200s也支持tf卡、spi-nor、spi-nand启动。前面也说过,tf卡由于机械结构的原因,更适合拿来学习,spi-nor和spi-nand比较适合用来进行工业部署和消费娱乐领域。只是spi-nor容量

    2024年02月16日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包