本文来源电子发烧友社区,作者:cszzlsw, 帖子地址:https://bbs.elecfans.com/jishu_2287667_1_1.html
1.前言
前面两篇帖子咱们回顾了从头制作系统并运行homeassistant,其中不可谓不辛酸,然后我就在想再做个啥,找了一下自己库存的外设,有一个tft屏带触摸芯片的,一想,这不正好的嘛,可以玩玩图形编程了,老听说linux开发板的qt编程咱也没见过啊,说干就干,这就开始了.
2.移植驱动并首先尝试
首先我的屏主控是lil9488的,分辨率320*480,据说再往上就得上rgb屏了,这咱没玩过也不懂,把手头上这个整明白先.
这个在git仓库:https://github.com/starfive-tech/freelight-u-sdk,给的linux内核里面找了一圈,也没见,
然后发现有一个芯片是ili9486的,跟我这差一位数,一想差不多,这个开始弄吧,把文件拷过来,然后改吧:
然后把所有涉及9486的地方都改成9488,
然后是设备树里面改吧改吧(改了好多次,也是第一次写设备树):
这款tft屏除了常规的spi线之外,还有BL(背光BackLight),Reset(复位),DC(Data-Control)线需要接,这里我用的gpio1,2,3脚,
另外最后的那个debug如果不需要就置0,需要就置1.
然后在linux内核里面配置一下,把ili9488加进来:
-> Device Drivers │
│ -> Staging drivers (STAGING [=y]) │
│ -> Support for small TFT LCD display modules (FB_TFT [=y])
然后就是编译内核,再删除rootfs,然后再生成rootfs,这都老熟人了,
这些都整完之后,就把卡插上准备烧录,
然后漫长的等待过程之后,终于烧完了,
紧跟着就把屏接上,按照文档里介绍的40pin引脚对应接好,
上电,然而,并没有出现期待中的点亮屏幕,
二.各种解决问题
1.spi没有设备id问题:
出现这个问题的原因是因为sdk的系统是5.15,属于是很新的系统了,但是linux里面的驱动几年都不更新,所以过期了,需要在ili9844里这么改:
2.ili支持888颜色而ili9486是565模式
这里需要改好几个地方,
首先是ili9488文件里初始化序列里面,把这个值由0x55改成0x66,
然后在ser_var里面添加上888色彩的信息,
然后是display的值,增加一个函数和bbp值:
这里面涉及的这个函数:fbtft_write_vmem24_bus8就是写入像素信息的
这个函数需要放到fbtft-core.c里,放文件最后也行
fbtft-core.c文件还需要修改fbtft_framebuffer_alloc函数的几个地方:
3.修改fbtft-core.c里面的几个函数,
首先是:fbtft_request_one_gpio:
复制代码
然后是fbtft_request_gpios:
复制代码
最后是fbtft_reset:
复制代码
这里主要是那个复位脚重启一下,原来的是把cs脚使能,不知道为什么是这样
烧录之后如果不能显示,可以尝试把系统原来的显示去掉(不知道有没有作用,可以试下,我实验过程中去掉了):
大概主要碰到的问题就是这些吧,可能有些忘记了,想起来的时候再添加.
三.显示logo,
这里需要修改linux配置,配置这个参数,这个就是显示logo的
-> Device Drivers │
│ -> Graphics support │
│ -> Bootup logo (LOGO [=y])
效果看一看(后面有时间换成咱们赛昉的logo试试):
如果还想把终端的打印信息在屏幕上显示出来,就配置这个
│ -> Device Drivers │
│ -> Graphics support │
│ -> Console display driver support
但是这还不够,还需要把console额外赋个值,在bootarg那里增加一个参数(这个功能很酷炫,但实际没什么用,建议不要搞):
这里我们把固件编译出来试一下是可以将字符显示在屏幕上的,在linux终端上输入:
echo hello >/dev/tty0
可以看到hello字符出现在屏幕上了.
四.总结
到这里一款LCD屏幕的移植过程大致就完了,整个步骤其实不是很繁琐,其实最有意义的是这中间找问题的过程,借此机会大致弄明白了设备数的写法
也知道了一些驱动方面的知识,后续等tf卡刷方式速度快点再玩了,准备的实验有触摸,QT写界面等等,拭目以待吧.
再次吐槽发烧友的发帖机制,太难受,要赶紧把图片粘贴功能弄出来
1.前言
前面两篇帖子咱们回顾了从头制作系统并运行homeassistant,其中不可谓不辛酸,然后我就在想再做个啥,找了一下自己库存的外设,有一个tft屏带触摸芯片的,一想,这不正好的嘛,可以玩玩图形编程了,老听说linux开发板的qt编程咱也没见过啊,说干就干,这就开始了.
2.移植驱动并首先尝试
首先我的屏主控是lil9488的,分辨率320*480,据说再往上就得上rgb屏了,这咱没玩过也不懂,把手头上这个整明白先.
这个在git仓库:https://github.com/starfive-tech/freelight-u-sdk,给的linux内核里面找了一圈,也没见,
然后发现有一个芯片是ili9486的,跟我这差一位数,一想差不多,这个开始弄吧,把文件拷过来,然后改吧:
然后把所有涉及9486的地方都改成9488,
然后是设备树里面改吧改吧(改了好多次,也是第一次写设备树):
这款tft屏除了常规的spi线之外,还有BL(背光BackLight),Reset(复位),DC(Data-Control)线需要接,这里我用的gpio1,2,3脚,
另外最后的那个debug如果不需要就置0,需要就置1.
然后在linux内核里面配置一下,把ili9488加进来:
-> Device Drivers │
│ -> Staging drivers (STAGING [=y]) │
│ -> Support for small TFT LCD display modules (FB_TFT [=y])
然后就是编译内核,再删除rootfs,然后再生成rootfs,这都老熟人了,
这些都整完之后,就把卡插上准备烧录,
然后漫长的等待过程之后,终于烧完了,
紧跟着就把屏接上,按照文档里介绍的40pin引脚对应接好,
上电,然而,并没有出现期待中的点亮屏幕,
二.各种解决问题
1.spi没有设备id问题:
出现这个问题的原因是因为sdk的系统是5.15,属于是很新的系统了,但是linux里面的驱动几年都不更新,所以过期了,需要在ili9844里这么改:
2.ili支持888颜色而ili9486是565模式
这里需要改好几个地方,
首先是ili9488文件里初始化序列里面,把这个值由0x55改成0x66,
然后在ser_var里面添加上888色彩的信息,
然后是display的值,增加一个函数和bbp值:
这里面涉及的这个函数:fbtft_write_vmem24_bus8就是写入像素信息的
这个函数需要放到fbtft-core.c里,放文件最后也行
fbtft-core.c文件还需要修改fbtft_framebuffer_alloc函数的几个地方:
3.修改fbtft-core.c里面的几个函数,
首先是:fbtft_request_one_gpio:
- #include "linux/gpio.h"
- #include "linux/of_gpio.h"
- static int fbtft_request_one_gpio(struct fbtft_par *par,
- const char *name, int index,
- struct gpio_desc **gpiop)
- {
- struct device *dev = par->info->device;
- struct device_node *node = dev->of_node;
- int gpio, flags, ret = 0;
- enum of_gpio_flags of_flags;
- if (of_find_property(node, name, NULL)) {
- gpio = of_get_named_gpio_flags(node, name, index, &of_flags);
- if (gpio == -ENOENT)
- return 0;
- if (gpio == -EPROBE_DEFER)
- return gpio;
- if (gpio < 0) {
- dev_err(dev,
- "failed to get '%s' from DTn", name);
- return gpio;
- }
- //active low translates to initially low
- flags = (of_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW :
- GPIOF_OUT_INIT_HIGH;
- ret = devm_gpio_request_one(dev, gpio, flags,
- dev->driver->name);
- if (ret) {
- dev_err(dev,
- "gpio_request_one('%s'=%d) failed with %dn",
- name, gpio, ret);
- return ret;
- }
- *gpiop = gpio_to_desc(gpio);
- fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%dn",
- __func__, name, gpio);
- }
- return ret;
- }
然后是fbtft_request_gpios:
- static int fbtft_request_gpios(struct fbtft_par *par)
- {
- int i;
- int ret;
- ret = fbtft_request_one_gpio(par, "reset-gpios", 0, &par->gpio.reset);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "dc-gpios", 0, &par->gpio.dc);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "rd-gpios", 0, &par->gpio.rd);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "wr-gpios", 0, &par->gpio.wr);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "cs-gpios", 0, &par->gpio.cs);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "latch-gpios", 0, &par->gpio.latch);
- if (ret)
- return ret;
- for (i = 0; i < 16; i++) {
- ret = fbtft_request_one_gpio(par, "db-gpios", i,
- &par->gpio.db[i]);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "led-gpios", i,
- &par->gpio.led[i]);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "aux-gpios", i,
- &par->gpio.aux[i]);
- if (ret)
- return ret;
- }
- return 0;
- }
最后是fbtft_reset:
- static void fbtft_reset(struct fbtft_par *par)
- {
- if (!par->gpio.reset)
- return;
- fbtft_par_dbg(DEBUG_RESET, par, "%s()n", __func__);
- gpiod_set_value_cansleep(par->gpio.reset, 1);
- usleep_range(20, 40);
- gpiod_set_value_cansleep(par->gpio.reset, 0);
- msleep(120);
- gpiod_set_value_cansleep(par->gpio.reset, 1);
- // gpiod_set_value_cansleep(par->gpio.cs, 1);/* Activate chip */
- }
这里主要是那个复位脚重启一下,原来的是把cs脚使能,不知道为什么是这样
烧录之后如果不能显示,可以尝试把系统原来的显示去掉(不知道有没有作用,可以试下,我实验过程中去掉了):
大概主要碰到的问题就是这些吧,可能有些忘记了,想起来的时候再添加.
三.显示logo,
这里需要修改linux配置,配置这个参数,这个就是显示logo的
-> Device Drivers │
│ -> Graphics support │
│ -> Bootup logo (LOGO [=y])
效果看一看(后面有时间换成咱们赛昉的logo试试):
如果还想把终端的打印信息在屏幕上显示出来,就配置这个
│ -> Device Drivers │
│ -> Graphics support │
│ -> Console display driver support
但是这还不够,还需要把console额外赋个值,在bootarg那里增加一个参数(这个功能很酷炫,但实际没什么用,建议不要搞):
这里我们把固件编译出来试一下是可以将字符显示在屏幕上的,在linux终端上输入:
echo hello >/dev/tty0
可以看到hello字符出现在屏幕上了.
四.总结
到这里一款LCD屏幕的移植过程大致就完了,整个步骤其实不是很繁琐,其实最有意义的是这中间找问题的过程,借此机会大致弄明白了设备数的写法
也知道了一些驱动方面的知识,后续等tf卡刷方式速度快点再玩了,准备的实验有触摸,QT写界面等等,拭目以待吧.
再次吐槽发烧友的发帖机制,太难受,要赶紧把图片粘贴功能弄出来
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
RISC-V
+关注
关注
49文章
2947浏览量
53537 -
赛昉科技
+关注
关注
3文章
183浏览量
15597
发布评论请先 登录
相关推荐
热点推荐
昉·星光开发板使用基础和GPIO点灯
电脑连接到昉·星光开发板进行操作和编程。昉·星光开发板也支持通过HDMI连接到显示器进行操作,但本课程的内容,主要为通过电脑进行远程操作。
发表于 03-26 07:51
RISC-V实现数据中心应用突破,赛昉科技BMC芯片重磅亮相
电子发烧友原创 章鹰 近期,在珠海举办的RISC-V产业大会上,赛昉科技展示了面向数据中心、边缘计算及智能终端的全栈产品与成熟应用,其中一款产品引起了记者的注意,这款BMC芯片在11月
2025 RISC-V产业发展大会 | 赛昉科技全景展示规模化商用成果
2025年11月24日,RISC-V产业发展大会在珠海开幕。赛昉科技以“推动RISC-V规模化商用”为核心主题,重点展示了面向数据中心、边缘
赛昉科技重磅发布新产品,RISC-V实现数据中心规模化商用突破
2025年11月14日,中国香港——赛昉科技隆重发布首款基于RISC-V架构的数据中心管理芯片“狮子山芯”。作为一款具有里程碑意义的产品,“狮子山芯”成功实现了RISC-V在数据中心领
【作品合集】赛昉科技VisionFive 2单板计算机开发板测评
赛昉科技VisionFive 2单板计算机开发板测评作品合集
产品介绍:
昉·星光 2是全球首款集成了3D GPU的高性能量产
发表于 09-04 09:08
5 款 RISC-V 单板计算机测试:性能、基准测试、特性及见解
倘若计算的未来并非被专有架构所垄断,那会怎样?想象一下这样一个世界:开发者和业余爱好者都能利用开源硬件的力量自由地构建、创新和实验。现在,让我们走进RISC-V单板计算机(SBC)的世界——一个正在
赛昉科技入驻RuyiSDK开发者社区,双平台协同推进RISC-V生态
赛昉科技(StarFive)正式入驻RuyiSDK开发者社区,携手推动RISC-V技术创新。后续,赛昉科技的技术突破与生态进展将同步在RVs
赛昉科技徐滔:以精准场景牵引,RISC-V抢滩数据中心百万颗市场
7月16-19日,第五届RISC-V中国峰会在上海张江科学会堂成功举办。国内领先的RISC-V厂商赛昉科技携多款重磅产品亮相,集中展示自研创新技术和成果。峰会期间,
赛昉科技联合合见工软实现国产一致性NoC IP与RISC-V核在大规模网络中的适配
2025年7月24日——中国RISC-V软硬件生态领导者赛昉科技与中国数字EDA/IP龙头企业上海合见工业软件集团有限公司(简称“合见工软”)共同宣布双方的突破性技术合作成果。赛
“核心技术突破+关键应用支撑”,赛昉加速RISC-V生态突围
2025RISC-V中国峰会的聚光灯下,赛昉科技亮点纷呈:凭借一系列突破性核心技术及多领域场景化解决方案,为RISC-V生态突围按下加速“快
【VisionFive 2单板计算机试用体验】VisionFive 2一个霸气的游戏机
单板计算机,搭载昉·惊鸿-7110(型号:JH-7110)RISC-V应用处理器,拥有极强的计算能力和图形处理能力。开源的昉·
发表于 07-13 20:41
【VisionFive 2单板计算机试用体验】RISC-V架构卡片计算机初体验
2h........无奈)
参考文献:
全球首款集成3D GPU的高性能量产RISC-V 单板计算机,昉·星光 2 开发实践![全球首款集成3D GPU的高性能量产
发表于 07-06 23:28
权威评测:Orange Pi RV2等5 款 RISC-V 单板计算机测试-性能、基准测试、功能和见解
的生态系统正在挑战ARM和x86平台的主导地位。RISC-V单板计算机采用模块化设计,软件支持不断增加,并承诺提供定制服务,正吸引着各地技术爱好者的目光。但它们在实际
【VisionFive 2单板计算机试用体验】 + 开箱体验
在x86与ARM架构主导的单板计算机市场,中国团队打造的VisionFive 2(防星光2)如同一颗新星,凭借开源开放的RISC-V架构和成熟的桌面体验,为开发者与极客提供了全新的选择
发表于 06-27 09:06
【赛昉科技昉·星光RISC-V单板计算机试用体验】添加tft触摸屏(ili9488)并显示开机logo,为qt做准备
评论