6、Lctech Pi(F1C200S)4.3寸(480*272)16位RGB565LCD屏驱动适配(CherryPi,Mangopi,F1C100S)

article/2025/9/22 4:06:33

本次主要参考:
https://blog.csdn.net/wending1986/article/details/106837597/
http://blog.chinaunix.net/uid-20543672-id-3246283.html
https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/index.html
李山文大佬
(如果方便请给这几位大佬一个关注)

注意代码块之间的空行

如有不足之处,欢迎指出。

1、设置LCD基础参数(需要自己去根据屏幕参数进行适配)
在drivers/gpu/drm/panel/panel-simple.c文件中,第2713行开始修改如下:

static const struct drm_display_mode qd43003c0_40_mode = {
    .clock = 9000,
    .hdisplay = 480,
    .hsync_start = 480 + 8,
    .hsync_end = 480 + 8 + 4,
    .htotal = 480 + 8 + 4 + 43,
    .vdisplay = 272,
    .vsync_start = 272 + 8,
    .vsync_end = 272 + 8 + 4,
    .vtotal = 272 + 8 + 4 + 12,
    .vrefresh = 60,
};

部分参数含义如下:
    hdisplay:有效显示区水平像素数量,对应Active Width
    hsync_start:水平同步开始,对应hdispay + HFP
    hsync_end:水平同步结束,对应hdisplay + HFP + HSYNC width(HPW)
    htotal:水平总像素,对应hdisplay + HFP + HSYNC width + HBP
    vdisplay:垂直显示像素,对应Active Height
    vsync_start:垂直同步开始,对应vdispay + VFP
    vsync_end:垂直像素结束,对应vdisplay + VFP + VSYNC width(VPW)
    vtotal:垂直总像素,对应vdisplay + VFP + VSYNC width + VBP
    vrefresh:刷新率

第2726行开始修改如下:

static const struct panel_desc qd43003c0_40 = {
    .modes = &qd43003c0_40_mode,
    .num_modes = 1,
    //.bpc = 8,
    .size = {
        .width = 95,
        .height = 53,
    },
    .bus_format = MEDIA_BUS_FMT_RGB565_1X16//MEDIA_BUS_FMT_RGB888_1X24
};

其中需要注意,参数bus_format设置为:MEDIA_BUS_FMT_RGB565_1X16;width与height为液晶尺寸。

2、配置设备树
2.1、修改suniv-f1c100s.dtsi文件
打开linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s.dtsi文件。
在第38行插入如下代码:

de: display-engine {
    .compatible = “allwinner,suniv-f1c100s-display-engine”;
    .allwinner,pipelines = <&fe0>;
    .status = “disabled”;
};

在soc->pio 下(第104行)添加如下代码:

lcd_rgb565_pins: lcd-rgb565-pins {
    pins = “PD1”, “PD2”, “PD3”, “PD4”, “PD5”,
        “PD6”, “PD7”, “PD8”, “PD9”, “PD10”, “PD11”,
        “PD13”, “PD14”, “PD15”, “PD16”, “PD17”,
        “PD18”, “PD19”, “PD20”, “PD21”;
    function = “lcd”;
};

在第172~173行中间,添加如下代码:

tcon0: lcd-controller@1c0c000 {compatible = "allwinner,suniv-f1c100s-tcon";reg = <0x01c0c000 0x1000>;interrupts = <29>;clocks = <&ccu CLK_BUS_LCD>,<&ccu CLK_TCON>,<&osc24M>;	/* Still unknown */clock-names = "ahb","tcon-ch0","tcon-ch1";clock-output-names = "tcon-pixel-clock";resets = <&ccu RST_BUS_LCD>;reset-names = "lcd";status = "disabled";ports {#address-cells = <1>;#size-cells = <0>;tcon0_in: port@0 {#address-cells = <1>;#size-cells = <0>;reg = <0>;tcon0_in_be0: endpoint@0 {reg = <0>;remote-endpoint = <&be0_out_tcon0>;};};tcon0_out: port@1 {#address-cells = <1>;#size-cells = <0>;reg = <1>;};};
};fe0: display-frontend@1e00000 {compatible = "allwinner,suniv-f1c100s-display-frontend";reg = <0x01e00000 0x20000>;interrupts = <30>;clocks = <&ccu CLK_BUS_DE_FE>, <&ccu CLK_DE_FE>,<&ccu CLK_DRAM_DE_FE>;clock-names = "ahb", "mod","ram";resets = <&ccu RST_BUS_DE_FE>;status = "disabled";ports {#address-cells = <1>;#size-cells = <0>;fe0_out: port@1 {#address-cells = <1>;#size-cells = <0>;reg = <1>;fe0_out_be0: endpoint@0 {reg = <0>;remote-endpoint = <&be0_in_fe0>;};};};
};be0: display-backend@1e60000 {compatible = "allwinner,suniv-f1c100s-display-backend";reg = <0x01e60000 0x10000>;reg-names = "be";interrupts = <31>;clocks = <&ccu CLK_BUS_DE_BE>, <&ccu CLK_DE_BE>,<&ccu CLK_DRAM_DE_BE>;clock-names = "ahb", "mod","ram";resets = <&ccu RST_BUS_DE_BE>;reset-names = "be";assigned-clocks = <&ccu CLK_DE_BE>;assigned-clock-rates = <300000000>;ports {#address-cells = <1>;#size-cells = <0>;be0_in: port@0 {#address-cells = <1>;#size-cells = <0>;reg = <0>;be0_in_fe0: endpoint@0 {reg = <0>;remote-endpoint = <&fe0_out_be0>;};};be0_out: port@1 {#address-cells = <1>;#size-cells = <0>;reg = <1>;be0_out_tcon0: endpoint@0 {reg = <0>;remote-endpoint = <&tcon0_in_be0>;};};};
};

完成之后,保存退出。

2.2、修改suniv-f1c100s-licheepi-nano.dts文件
打开linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts文件。
在第9行插入如下代码:

#include <dt-bindings/gpio/gpio.h>

在第26行~27行中间,添加如下代码:

panel: panel {compatible = "qiaodian,qd43003c0-40", "simple-panel";#address-cells = <1>;#size-cells = <0>;enable-gpios = <&pio 4 6 GPIO_ACTIVE_HIGH>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;panel_input: endpoint@0 {reg = <0>;remote-endpoint = <&tcon0_out_lcd>;};};
};

在第40行下面,也就是文档最后添加如下代码:

&be0 {status = "okay";
};&fe0 {status = "okay";
};&de {status = "okay";
};&tcon0 {pinctrl-names = "default";pinctrl-0 = <&lcd_rgb565_pins>;status = "okay";
};&tcon0_out {tcon0_out_lcd: endpoint@0 {reg = <0>;remote-endpoint = <&panel_input>;};
};

完成之后,保存退出。

3、修改内核代码,配置fb
在linux-5.7.1/drivers/gpu/drm/sun4i/文件夹下,需要修改sun4i_tcon.c、sun4i_drv.c、sun4i_backend.c等文件。因为这些文件的配置是参考其他大佬给的资料完成,不予以外示。

4、uboot相关配置
本次不进行uboot的相关编译。因为在uboot启动完成到内核启动,会有花屏一闪而过。一直没有很好的解决。相关参数如下(有些为下面单词前两个字母的缩写):

xres; /* 可见分辨率 /
yres;
/
时序: 所有值都以像素时钟为单位(当然除了像素时钟本身) /
pixclock; /
像素时钟(单位:微秒) /
left_margin; /
从行同步到图像左边沿的像素时钟数 /
right_margin; /
从行同步到图像右边沿的像素时钟数 /
upper_margin; /
从场同步到图像上边沿的行数 /
lower_margin; /
从场同步到图像下边沿的行数 /
hsync_len; /
行同步时间长度(像素时钟数) /
vsync_len; /
场同步时间长度(行数) /
sync; /
see FB_SYNC_* /
vmode; /
see FB_VMODE_* */

5、进行编译与运行
将编译后的zImage,suniv-f1c100s-licheepi-nano.dtb下载到sunxi-fel.exe同级目录下。
用两根type-c线将电脑与CherryPi-F1C200S连接起来,在串口终端以115200 8n1配置打开串口。
按一下板载RST键后,在windows命令终端进入到sunxi-fel.exe同级目录下,执行以下命令可以看到串口终端有log打印,LCD屏有log显示:

sunxi-fel -p uboot u-boot-sunxi-with-spl.bin write 0x80008000 zImage write 0x80c08000 suniv-f1c100s-licheepi-nano.dtb

可以在串口终端翻阅log,会看到如下信息:
在这里插入图片描述
在这里插入图片描述

QQ:763314235,会在第一时间处理。


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

相关文章

【F1C100S】编译启动所需的uboot,kernel,rootfs

个人画了块没有连接任何其他模块的F1C100S开发板&#xff0c;没有链接任何外设&#xff0c;本文是编译所有启动所需的三大件。&#xff08;只要编译出三个东西复制到sd卡就可启动&#xff0c;不需要制作成镜像img文件&#xff09; 环境&#xff1a;使用安装了ubuntu18的电脑进…

荔枝派nano(f1c100s)从零开始TF卡启动(附源码下载)

本文所使用的所有文件都已打包到SDK中&#xff0c;可以直接使用&#xff0c;有些细节我已省略&#xff0c;直接使用我包里的文件即可。 (无需积分&#xff0c;免费下载&#xff0c;里面的东西都来源于官方&#xff09; 觉得可以的&#xff0c;可以点个赞、点个关注&#xff0…

全志F1C100s使用记录:u-boot linux rootfs 编译与烧录测试(基于SD卡)

文章目录 目的基础准备硬件准备开发环境 制作toolchain和rootfs设置编译工具链 u-boot & linux编译u-bootboot.scrlinux 测试程序文件烧录分区设置分块烧录 上电测试系统镜像制作镜像文件使用镜像文件 可能会遇到的问题SDK数据包总结 目的 这篇文章中将测试在 F1C100s 中运…

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

【f1c200s/f1c100s】RGB接口 LCD驱动适配 RGB模式介绍F1C200s/F1C100s RGB LCD驱动适配设备树修改源码修改结果 RGB模式介绍 RGB 模式就是我们通过说的 RGB 屏&#xff0c;以 RGB&#xff08;TTL 信号&#xff09;并行数据线传输&#xff0c;广泛的应用于 5 寸及以上的 TFT-LC…

全志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…