【f1c200s/f1c100s】RGB接口 LCD驱动适配

article/2025/9/22 4:02:31

【f1c200s/f1c100s】RGB接口 LCD驱动适配

  • RGB模式介绍
  • F1C200s/F1C100s RGB LCD驱动适配
    • 设备树修改
    • 源码修改
    • 结果

RGB模式介绍

RGB 模式就是我们通过说的 RGB 屏,以 RGB(TTL 信号)并行数据线传输,广泛的应用于 5 寸及以上的 TFT-LCD 中。引脚包含RGB数据+时钟+控制引脚;数据位数可为:RGB565、RGB666、RGB888,数据位树越多,颜色失真就越少。

信号线描述
R[7:0]8 根红色数据线
G[7:0]8 根绿色数据线
B[7:0]8 根蓝色数据线
DE数据使能线
VSYNC垂直同步信号线
HSYNC水平同步信号线
PCLK像素时钟信号线

由于每一块屏幕分辨率、时序参数不一样(其实差距不大,所以参数有时候设置不完全正确也能点亮屏幕),每一块屏幕的参数都必须重新配置。幸运的是,linux内核已经适配了RGB模式下的LCD驱动(见drivers/gpu/drm/panel/panel-simple.c),我们不需要从零写一个屏幕驱动,所以我们只需要简单几步即可驱动LCD屏幕。

F1C200s/F1C100s RGB LCD驱动适配

基于的硬件为自己设计的Mangopi和正点原子7寸LCD显示屏,分辨率为840x480。
软件在荔枝派官方代码基础上进行修改。

设备树修改

suniv-f1c100s.dtsi中将连接LCD的引脚复用为lcd功能:

pio: pinctrl@1c20800 {compatible = "allwinner,suniv-f1c100s-pinctrl";reg = <0x01c20800 0x400>;interrupts = <38>, <39>, <40>;clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;clock-names = "apb", "hosc", "losc";gpio-controller;interrupt-controller;#interrupt-cells = <3>;#gpio-cells = <3>;uart0_pe_pins: uart0-pe-pins {pins = "PE0", "PE1";function = "uart0";};uart1_pe_pins: uart1-pe-pins {pins = "PA2", "PA3";function = "uart1";};//复用LCD为模式lcd_rgb666_pins: lcd-rgb666-pins {pins = "PD0", "PD1", "PD2", "PD3", "PD4","PD5", "PD6", "PD7", "PD8", "PD9","PD10", "PD11", "PD12", "PD13", "PD14","PD15", "PD16", "PD17", "PD18", "PD19","PD20", "PD21";function = "lcd";};mmc0_pins: mmc0-pins {pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";function = "mmc0";};key_pins: key_pins {pins = "PA0", "PA1";function = "gpio_in";};i2c0_pins: i2c0_pins {pins = "PE11", "PE12";function = "i2c0";};};

suniv-f1c100s-mangopi.dts中修改后的panel节点如下,其中compatible 属性增加了alientek,alientek_7_inch,是为了适配驱动代码中的相应屏幕的配置。

panel: panel {compatible = "alientek,alientek_7_inch", "simple-panel";#address-cells = <1>;#size-cells = <0>;reset-gpios = <&pio 4 4 GPIO_ACTIVE_LOW>;//复位引脚power-supply = <&reg_vcc3v3>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;panel_input: endpoint@0 {reg = <0>;remote-endpoint = <&tcon0_out_lcd>;};};};

源码修改

drivers/gpu/drm/panel/panel-simple.c文件中存在非常多厂家的屏幕参数,如:
在这里插入图片描述
我们要做的就是在这个文件里面,仿照这些预设的参数添加我们自己的屏幕参数。
大约在2560行左右仿照上面预设的屏幕参数添加自己屏幕的时序信息,时序信息的具体含义可以参考:
Documentation/devicetree/bindings/display/panel/display-timing.txtinclude/drm/drm_modes.h、RBG LCD时序参考以及自己屏幕的数据手册。

static const struct drm_display_mode alientek_7_inch_mode = {.clock = 51200,.hdisplay = 800,.hsync_start = 800+20,.hsync_end = 800 + 20 + 160,.htotal = 800 + 20 + 140 + 160,.vdisplay = 480,.vsync_start = 480 + 3,.vsync_end = 480 + 3 + 12,.vtotal = 480 + 3 + 12 + 20,.vrefresh = 60,
};static const struct panel_desc alientek_7_inch = {.modes = &alientek_7_inch_mode,.num_modes = 1,.bpc = 6,.size = {.width = 154,.height = 85,},
};

然后在大约2860行左右,添加屏幕的适配信息,其中的compatible 属性需要和设备树panel中的一致。

 	{.compatible = "winstar,wf35ltiacd",.data = &winstar_wf35ltiacd,}, {.compatible = "alientek,alientek_7_inch",  //自己添加的,需要和设备树一致.data = &alientek_7_inch, //自己添加的}, {  //末尾为空结构体,不能删除/* sentinel */}

然后在menuconfig中配置打开linux logo,保存编译。

-> Device Drivers-> Graphics support -> Bootup logo (LOGO [=y]) -> Standard black and white Linux logo -> Standard 16-color Linux logo -> Standard 224-color Linux logo

在这里插入图片描述

结果

不出意外在内核启动时可以看到屏幕左上角上有小企鹅logo,进入系统后可以在/dev目录下找到fb0设备。有了这个framebuffer设备之后,就可以使用lvgl或者awtk等GUI库编写漂亮的界面了。
在这里插入图片描述
用lvgl简单写了个测试屏幕的demo:在这里插入图片描述


http://chatgpt.dhexx.cn/article/vgNFb7fk.shtml

相关文章

全志F1C100s入坑与填坑 uboot Linux Kernel 与buildroot

全志F1C100s 入手了几块全志的板子准备玩一玩随便记录一下&#xff01;&#xff01; 如图 是一块荔枝派 Nano 从sipeed官网可得如下介绍 官网传送门-----》 sipeed Nano 硬件参数# 硬件参数 CPU&#xff1a; 全志 F1C100s&#xff0c; ARM 926EJS , 最高 900MHz 内存&#xf…

全志F1C100S声卡驱动探究

如果有问题&#xff0c;请加QQ群 891339868 进行交流 最近刚上手全志的F1C100S这个片子&#xff0c;听一下音乐&#xff0c;本来想着挺简单&#xff0c;内核配置一下驱动就OK&#xff0c;谁知道上来就一闷棍&#xff0c;主线内核不支持内置声卡&#xff0c;经过多方面的研究&am…

【f1c200s/f1c100s】全志f1c200s开发板设计(含原理图和PCB)

f1c200s开发板设计 芯片特征开发板包含资源 开发板如图所示&#xff0c;模仿树莓派取了一个mango-pi的名字&#xff0c;haha~。 硬件主要参考了荔枝派nano和正点原子开发板。经过测试&#xff0c;全部功能正常。 芯片特征 全志F1C200s与F1C100s的区别为F1C200s含有64M SIP RA…

全志F1C100s使用记录:资料索引与基础说明

文章目录 前言资料来源u-boot & linux基础特性启动过程FEL模式电路设计 前言 最早接触到F1C100s是前两年的一个文章&#xff0c;里面使用F1C100s制作了一张可以运行Linux的名片&#xff0c;就是下图这个。下图上实际电路部分就占用角落一点点面积&#xff0c;当时觉得蛮有…

MySql 内连接与外连接 作用和 区别

内连接&#xff1a;指连接结果仅包含符合连接条件的行&#xff0c;参与连接的两个表都应该符合连接条件。 外连接&#xff1a;连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。 左外连接&#xff1a;左边表数据行全部保留…

php左内连接,内连接和外连接的区别是什么

内连接和外连接的区别&#xff1a;1、连接结果不同&#xff0c;内连接的连接结果仅包含符合连接条件的行&#xff0c;而外连接的连接结果包含了符合连接条件的行&#xff1b;2、注意事项不同&#xff0c;内连接需要注意区分在嵌套查询时使用的any以及all的区别&#xff0c;外连…

Mysql内连接和外连接的区别

内连接 简单来说&#xff1a;就是根据交集的部分来链接到一条完整的数据&#xff0c;以此来完成查询 以两张表相同的部分来链接上两张表的数据&#xff0c;而不是说&#xff0c;内连接查询的就是交集的部分&#xff0c;那样查询出来的不就是表的id信息了或者仅仅是关联的信息 …

mysql内连接和左连接的区别_MySQL连接查询 内连接和外连接的区别

展开全部 内连接&#xff1a;指连接结果仅包含符合连接条件的行&#xff0c;参与连接的两个表都应该符合连接条件。 外连62616964757a686964616fe78988e69d8331333363393638接&#xff1a;连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连…

mysql内外三种连接,mysql内连接和外连接的区别

以下面两张表为例来看一下内连接与外连接的区别&#xff1a; 一、内连接( 最常用 ) 定义&#xff1a;仅将两个表中满足连接条件的行组合起来作为结果集。 关键词&#xff1a;INNER JOINselect * from employees e inner join department d on e.employee_id d.department_id …

Sql 中内连接、外连接、全连接、交叉连接的区别

外连接(out join) 外连接分为外左连接(left outer join)和外右连接(right outer join) 注释&#xff1a;left outer join 与 left join 等价&#xff0c; 一般写成left join right outer join 与 right join等价&#xff0c;一般写成right join 左连接&#xf…

谈谈你对计算机的发展,结合您目前对计算机的认识,请您谈谈对计算机发展趋势的看法。...

计算机从出现至今&#xff0c;经历了机器语言、程序语言、简单操作系统和Linux、Macos、BSD、Windows等现代操作系统四代&#xff0c;运行速度也得到了极大的提升&#xff0c;第四代计算机的运算速度已经达到几十亿次每秒。 计算机也由原来的仅供军事科研使用发展到人人拥有&am…

对计算机科学与技术专业课程的认识,计算机科学与技术专业课程

计算机科学与技术专业课程计算机科学与技术专业课程 二、课程简介 TOP 1.数字逻辑电路: “数字逻辑”是计算机专业本科生的一门主要课程,具有自身的理论体系和很强的实践性。它是计算机组成原理的主要先导课程之一,是计算机应用专业关于计算机系统结构方面的主干课程之一。…

计算机网络技术的专业认识,计算机网络技术课程学习后的自我认识

计算机网络技术课程学习后的自我认识 随着计算机、多媒体、现代通讯网络为代表的信息技术的迅猛发展&#xff0c;信息技术已经渗透到了教育领域&#xff0c;在教育领域中引起了一场深刻的变化。小编是YJBYS小编整理的计算机网络技术课程学习后的自我认识&#xff0c;欢迎阅读 信…

计算机专业认识和规划,计算机科学与技术专业认识与规划

计算机科学与技术专业认识与规划 专业认识与规划专业认识与规划对于这个专业的学生&#xff0c;它要求学生的英语水平&#xff0c;数学水平很高。最主要的是&#xff0c;它的专业课程很多&#xff0c;很复杂&#xff0c;很累人&#xff0c;它需要你付出很多的努力&#xff0c;…

对计算机网络的认识论文800,对计算机的认识论文

为毕业生写对计算机的认识论文提供对计算机的认识论文范文参考,涵盖硕士、大学本科毕业论文范文和职称论文范文&#xff0c;包括论文选题、开题报告、文献综述、任务书、参考文献等&#xff0c;是优秀免费对计算机的认识论文网站。 对计算机软件属性和保护方式的认识 摘要&…

JS取整,取余

1、取整 // 丢弃小数部分,保留整数部分 parseInt(5/2)  // 2 2.向上取整 // 向上取整,有小数就整数部分加1 Math.ceil(5/2)  // 3 3.向下取整 // 向下取整,丢弃小数部分 Math.floor(5/2)  // 2 4四舍五入 // 四舍五入 Math.round(5/2)  // 3 5 取余 // 取余 6…

JS中的求余和求模

在JS中有两个操作符&#xff0c;求余和求模&#xff0c;它们本质上并没有区别&#xff0c;但仍有一些差异&#xff0c;今天就给大家区分一下它们 求余 符号&#xff1a;% 写法&#xff1a;a % b 求余&#xff1a;a % b &#xff0c;表示为a rem b&#xff0c;相当于 a - n * …

js数据取整,取余,保留小数,数据脱敏等的一些处理方式

一个经典的解决四舍五入问题后js保留两位小数的方法&#xff1a; 1.四舍五入保留2位小数&#xff08;若第二位小数为0&#xff0c;则保留一位小数&#xff09; function keepTwoDecimal(num) {var result parseFloat(num);if (isNaN(result)) {alert(传递参数错误&#xff0…

js中小数计算时精度问题

js中的number为双精度浮点型&#xff0c;计算时需要先进行进制转换&#xff0c;将十进制换成二进制&#xff0c;而进制转换时&#xff0c;小数就有可能出现精度问题了&#xff0c;原因如下 整数转二进制&#xff1a;除二取余法&#xff08;没有问题&#xff09; 4 除以 2 取余…

JavaScript数学运算(取整,取余和取模)

来源 | https://www.fly63.com 这篇文章主要介绍js取整、取余和取模的实现方法和它们之间的区别&#xff0c;以及Math对象的常用方法函数介绍&#xff0c;有需要的朋友可以参考下。 取整 在项目开发过程中&#xff0c;有时要对小数取整操作&#xff0c;JavaScript也提供了4种方…