ARM40-A5应用——fbset与液晶屏参数的适配【转】

2024-01-05 07:10

本文主要是介绍ARM40-A5应用——fbset与液晶屏参数的适配【转】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:https://blog.csdn.net/vonchn/article/details/80784579

ARM40-A5应用——fbset与液晶屏参数的适配

2018.6.18

版权声明:本文为博主原创文章,允许转载。

 

        在ARM板卡上使用某个型号的LCD,往往要修改LCD驱动程序或者设备树,很不方便。

        在ARM40-A5中,我们把常用的LCD型号的配置指令存放在 /etc/init.d/S01user1lcd 文件中,通过修改该文件,即可非常方便的适配不同的LCD。

        对于 /etc/init.d/S01user1lcd 文件中未包含的LCD型号,也可通过本文介绍的方法,方便的自行在该文件中添加新的LCD型号。

 

一、Linux fbset 指令介绍

         fbset指令可用于设置framebuffer缓冲区的大小,还能调整画面分辨率,位置,高低宽窄,色彩深度,并可决定是否启动显卡之各项硬件特性。

语法

fbset [-ahinsvVx][-db <信息文件>][-fb <外围设备代号>][--test][显示模式]

参数:

 

 

二、fbset 指令在ARM40-A5上的应用

         在 /etc/init.d/S01user1lcd 文件中,有如下的内容:

#for TM028HDHG59

#fbset -fb /dev/vfb -g 240 320 240 320 24 -t 142857 38 10 8 4 10 4

#for TM035kdh03,vrefresh=36

#fbset -fb /dev/vfb -g 320 240 320 240 24 -t 254320 19 50 10 13 20 1

#for at043tn24 and G043FW01

#fbset -fb /dev/vfb -g 480 272 480 272 24 -t 180000 2 41 2 11 2 2

#for AT070TN92

#fbset -fb /dev/vfb -g 800 480 800 480 24 -t 30030 210 41 22 21 5 2

#for NL084SV01L

#fbset -fb /dev/vfb -g 800 600 800 600 24 -t 26040 200 12 5 15 12 5

#for A104SN03

#fbset -fb /dev/vfb -g 800 600 800 600 24 -t 25000 40 88 1 24 128 3

         例如我们现在要使用 NL084SV01L 这一款LCD,则取消LCD配置指令前面的注释,改为:

fbset -fb /dev/vfb -g 800 600 800 600 24 -t 26040 200 12 5 15 12 5

        保存后,reboot 重启 ARM40-A5,即已适配 NL084SV01L,然后可用《ARM40-A5应用程序——液晶屏触摸屏测试程序》介绍的方法,对LCD做简单的测试,观察适配是否完美。

        LCD的接线情况,需参阅ARM40-A5的硬件文档、TCON板文档、以及LCD本身的数据手册。

 

三、fbset 指令参数详解

         仍以 NL084SV01L 液晶屏为例,根据该LCD的数据手册,可知其部分参数:

 

                                                                       图1

         我们参照图1的 Timing characteristics 表格对 fbset -fb /dev/vfb -g 800 600 800 600 24 -t 26040 200 12 5 15 12 5 中的参数进行解析。

        (1)fbset 指令中 -g 800 600 800 600 24 的前两个参数为XRES和YRES,是液晶屏的分辨率,对应于图1中的 thd 和 tvd 。第5个参数24为色彩深度,对于ARM40-A5,若硬件接线为888,则色彩深度为24;若硬件接线为666,则色彩深度为18.

        (2)fbset 指令中 -t 26040 200 12 5 15 12 5 的参数,名称依次为 PIXCLOCK、LEFT、RIGHT、UPPER、LOWER、HSLEN、VSLEN,其中:(实际数值与LCD数据手册中的可能稍有差异,需根据调试的情况决定实际数值)

                    LEFT值200为HBP,“HS Back Porch”;

                    RIGHT值12为HFP,“HS Front Porch”;

                    HSLEN值12为HPW或HWH,“HS pluse width”;

         XRES+LEFT+RIGHT+HSLEN 应等于 th 的值 1024(CLK),有的LCD给出的 th 值是一个范围,则 XRES+LEFT+RIGHT+HSLEN 的值应在 th 的范围内。

         由于 NL084SV01L 未给出LEFT、RIGHT、HSLEN三者的值,本文中三者的值由实际调试得来,其意义在第四节讲解。

                    UPPER值5为VBP,“VS Back Proch”;

                    LOWER值15为VFP,“VS Front Porch”;

                    VSLEN值5为VPW或VWH,“VS pulse width”;

         YRES+UPPER+LOWER+VSLEN 应等于 tv 的值 625(H),有的LCD给出的 tv 值是一个范围,则 YRES+UPPER+LOWER+VSLEN 的值应在 tv 的范围内。

         由于 NL084SV01L 未给出UPPER、LOWER、VSLEN三者的值,本文中三者的值由实际调试得来,其意义在第四节讲解。

        注意:

        不同的型号的LCD和CPU/GPU,“VS pulse width”、“VS Front Porch”等术语和缩写会有差异,请注意理解其实质,避免因为术语和缩写的不同产生误解。本文亦未严格统一术语和缩写。

         PIXCLOCK的计算公式:

            ① 假定LCD的刷新率为60Hz,则

               (XRES+LEFT+RIGHT+HSLEN) * (YRES+UPPER+LOWER+VSLEN) * 60

                    = 1024 * 625 * 60 = 38400000

            ② PIXCLOCK = 10^12/38400000 = 26040

            ③ 上述计算方式可以这样理解:

                     th * tv * 刷新率 = fclk                                   // fclk = 1/tc

         按实际取的值,计算fclk为:

                    fclk = 1024 * 625 * 60 = 38.4 MHz               // 与数据手册中的的典型值 1/tc = 38.362MHz 极为接近

                    PIXCLOCK = tc = 1 / fclk = 26042 (ps)        // 实际取值26040,与数据手册中的典型值26067很接近

         上述计算,可参照 AT070TN92、A104SN03等其它液晶屏进一步理解。

         液晶屏 fbset 参数的调试,应以其数据手册为基本依据,根据测试时图像的显示情况,反复多次调整,方能得到理想的参数。

 

四、LCD参数的时序解析

         4.1、VSLEN与HSLEN

         仍以 NL084SV01L 液晶屏为例,其分辨率为800 * 600,若刷新率为60时,每秒LCD刷 800 * 600 * 60 个像素。 而CPU/GPU 不可能恰好给出 800 * 600 * 60 个像素的信号,这样LCD会无法确知信号的起始和结束,因此需要给信号添加一些标识,方便识别。这一帧信号与下一帧信号之间需要增加一个标识,宽度为VSLEN,为方便行文,以VSLEN指代这个标识。一行信号与下一行信号之间,也需要增加一个标识,宽度为HSLEN,即以HSLEN指代这个标识。

         在其它资料中,我们也可以看到类似场同步和行同步的描述:LCD的垂直同步(Vertical Sync),用来表示一帧(Frame)图像的起始的,有的时候也会被称为场同步(即VSLEN);而水平同步(Horizontal Sync),则是用来表示一行像素点(即一帧图像中的一行)的起始的,有的时候也会被称为行同步(即HSLEN)。

        4.2、LEFT、RIGHT、UPPER、LOWER

         但是,除了给信号添加标识以外,剩余的信号,仍难以恰好是 800 * 600 * 60 个像素,因为这样就要求CPU/GPU与LCD的时序严格同步,实际上有困难。因此,除了VSLEN和HSLEN标识以外,VSLEN和HSLEN的前后,都需要一段时间的空白。VSLEN前的空白为LOWER,其后的空白为UPPER。HSLEN前的空白为RIGHT,其后的空白为LEFT。

        我们结合图2、图3做进一步的讲解,在很多LCD数据手册中,都能看到图2、图3,或类似的时序图。

 

                                                                       图2

         对 fbset -fb /dev/vfb -g 800 600 800 600 24 -t 26040 200 12 5 15 12 5 来说:

                    VSLEN值5为“VS pulse width”,即图2中的 tvp;

                    UPPER值5为“VS Back Proch”,即图2中的 tvb;

                    LOWER值15为“VS Front Porch”,即图2中的 tvf;

                    YRES值600为“Vertial Display period”,即图2中的 tvd;

         YRES+UPPER+LOWER+VSLEN值625为“Vertical Cycle”,即图中的 tv;

         注意:

         ① VSLEN 前面的空白为LOWER(tvf),其后的空白为UPPER(tvb),可与下文的图5相应证。

         ② VSLEN、UPPER、LOWER、YRES的单位是PIXCLOCK。

 

                                                                       图3

         对 fbset -fb /dev/vfb -g 800 600 800 600 24 -t 26040 200 12 5 15 12 5 来说:

                    HSLEN值12为“HS pulse width”,即图3中的 thp;

                    LEFT值200为“HS Back Proch”,即图3中的 thb;

                    RIGHT值12为“HS Front Porch”,即图3中的 thf;

                    XRES值800为“Hertial Display period”,即图3中的 thd;

         XRES+LEFT+RIGHT+HSLEN值1024为“Horizontal Cycle”,即图3中的 th;

         注意:

         ① HSLEN前的空白为RIGHT,即上图thd后面的一段;HSLEN后的空白为LEFT,即上图中thd前面的一段,可与下文的图5对照理解。

         ② HSLEN、LEFT、RIGHT、XRES的单位是H,即“Horizontal Cycle”,1H = 1024 * PIXCLOCK。

        4.3、DE

         图4进一步图示了LEFT、RIGHT、UPPER、LOWER、XRES、YRES、VSLEN、HSLEN的关系。

         另外,图4中没有使用行同步HS、场同步VS信号,而是使用另一种常见的DE信号,DE信号相对HS、VS来说,只有一根线,其作用仍旧是标识。其中:

                UPPER+LOWER+VSLEN = tvdh + tvds + tvp = tv - tvd

                LEFT+RIGHT+HSLEN = th - thd

         我们经常会碰到LCD数据手册仅给出了DE的时序图,只有tv、tvd、th、thd的数值,这时只有依据上面两个公式,通过反复调试,得到最佳的 fbset 参数。

 

 

                                                                       图4

五、LCD参数的空间域解析

         Linux 操作系统源码的 Documentation/fb/framebuffer.txt 文件中,给出了LCD参数的空间域解析,见图5所示。

 

                                                                       图5

        Documentation/fb/framebuffer.txt 文件中对图5的解释摘录如下:

The frame buffer device expects all horizontal timings in number of dotclocks (in picoseconds, 1E-12 s), and vertical timings in number of scanlines.

The frame buffer device uses the following fields:

  - pixclock: pixel clock in ps (pico seconds)

  - left_margin: time from sync to picture                // 行同步信号后肩,“HS Back Proch”

  - right_margin: time from picture to sync              // 行同步信号前肩,“HS Front Proch”

  - upper_margin: time from sync to picture            // 场同步信号后肩,“VS Back Porch”

  - lower_margin: time from picture to sync            // 场同步信号前肩,“VS Front Porch”

  - hsync_len: length of horizontal sync                   // 行同步信号脉宽,“HS pulse width”

  - vsync_len: length of vertical sync                       // 场同步信号脉宽,“VS pulse width”

 

        下面的三张图是《Configuring the LCD Controller of SAMA5D3x Devices》中给的一个计算实例:

 

六、常见问题

         刷新率

                有些LCD的刷新率不高,甚至远低于其数据手册中的典型值,此时可以尝试较低的刷新率,例如30、36、40等。

         LEFT、RIGHT、UPPER、LOWER

                图5转动180°后,LEFT、RIGHT、UPPER、LOWER会两两互换。难以调通时,可以尝试互换LEFT与RIGHT,UPPER与LOWER。

         spwg和jeida

                液晶屏的接线有spwg和jeida两种接法,请根据LCD数据手册,正确接线。

        fbset

                本文的fbset与液晶屏参数的适配,仅针对ARM40-A5产品;其它产品极少有类似便利的方法。

 

参考文章:

        Linux fbset命令

        https://wizardforcel.gitbooks.io/tutorialspoint-misc/content/linux-ref/316.html

        https://www.zzxworld.com/linux/commands/fbset

        BusyBox - The Swiss Army Knife of Embedded Linux,Chapter 3. BusyBox Commands,fbset

        http://www.spblinux.de/2.0/doc/fbset.html

        ABLE User Guide,Chapter 17. Framebuffer commands,fbset

http://www.simtec.co.uk/products/SWABLE/files/userguide-v2.54/userguide/command_fbset.html

        NL084SV01L液晶屏数据手册

        NL6448BC33-59液晶屏数据手册

        Linux 操作系统源码 Documentation/fb/framebuffer.txt 文件

        Mstar ScalerTiming调整

        LCD RGB 控制技术 时钟篇(上)

        https://blog.csdn.net/Richard_LiuJH/article/details/46352857

        LCD RGB 控制技术 时钟篇(下)

        https://blog.csdn.net/richard_liujh/article/details/46363483

        Configuring the LCD Controller of SAMA5D3x Devices

        荟聚计划:共商 共建 共享 Grant 

转载于:https://www.cnblogs.com/sky-heaven/p/9667556.html

这篇关于ARM40-A5应用——fbset与液晶屏参数的适配【转】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572064

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了