关于全志T113开发板接7寸LCD屏幕显示异常问题的解决方案

news2024/11/23 23:41:51

在入手全志T113之后,第一时间移植好了之前6ull平台的rootfs。但是在测试QT的过程中发现屏幕最右侧有一部分显示不正常,经过初步推测应该是RGB行场同步时序有问题。本以为在设备树里面稍作修改之后就能OK,但是居然前前后后一共花了至少三个星期的时间。

这里就不给分析经过了,因为是真的真的太漫长了,搞得我头都大了。真的是要吐槽一下全志的代码:

1.函数名字真的看得头疼
在这里插入图片描述

2.代码杂乱无章,大量使用全局变量,让分析各种没头绪。

然后在这里直接给出最终分析的结果:

1.设备树里面timing,除了width、height、lcd_x和lcd_y之外的参数全没有用上(一开始不停的源码里面找这些参数在什么地方配置的,最后发现特么的根本就没有地方使用过这些参数)

在这里插入图片描述

2.width和height主要是用来计算dpi使用的,我这里写的280最终计算出来的dpi大概是97左右,windows标准的是96,反正相差无几我也没有细调了,lcd_x和lcd_y在原来的代码里主要是用来计算内核里面有一张图片的缩放使用的。

3.lcd timing寄存器里面的值是在uboot里面设置好之后在kernel里面直接拿来用的。

4.uboot里面的timing计算方式有问题,应该是百问没有仔细阅读全志文档的原因造成的,这也是使得屏幕显示向左平移了几十个像素的原因
在这里插入图片描述

5.我忘记我要说什么了…

接下来就说怎么处理吧:

1.首先按照全志的文档把设备树里面的timing改了
在这里插入图片描述

2.打开 drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.c 然后找到 s32 disp_init_lcd(struct disp_bsp_init_para* para) 函数,在前面加上一段代码

typedef struct
{
	volatile unsigned int Timing0;
	volatile unsigned int Timing1;
	volatile unsigned int Timing2;
	volatile unsigned int Timing3;
}RegTypeDef;

static void set_lcd_timings(unsigned int dwLcdRegBase, struct disp_video_timings* pTimings)
{
	RegTypeDef* reg;
	unsigned int dwWidth, dwHeight;
	unsigned int dwHT, dwHBP;
	unsigned int dwVT, dwVBP;
	unsigned int dwHSPW, dwVSPW;

	reg = (RegTypeDef*)(dwLcdRegBase + 0x48);
	
	dwWidth = pTimings->x_res;
	dwHSPW = pTimings->hor_sync_time;
	dwHBP = pTimings->hor_back_porch + pTimings->hor_sync_time;	//在官方文档里:hbp = hbp + hspw,然而在全志的代码里面又将hspw其减去,所以在这里需要加回来
	dwHT = pTimings->hor_total_time;

	dwHeight = pTimings->y_res;;
	dwVSPW = pTimings->ver_sync_time;
	dwVBP = pTimings->ver_back_porch + pTimings->ver_sync_time;
	dwVT = pTimings->ver_total_time;

	reg->Timing0 = ((dwWidth - 1) << 16) | (dwHeight - 1);
	reg->Timing1 = ((dwHT - 1) << 16) | (dwHBP - 1);
	reg->Timing2 = (((dwVT - 1) * 2) << 16) | (dwVBP - 1);
	reg->Timing3 = ((dwHSPW - 1) << 16) | (dwVSPW - 1);

	printk("width: %d, hspw: %d, hbp: %d, ht: %d\n", dwWidth, dwHSPW, dwHBP, dwHT);
	printk("height: %d, vspw: %d, vbp: %d, vt: %d\n", dwHeight, dwVSPW, dwVBP, dwVT);
}

然后在 s32 disp_init_lcd(struct disp_bsp_init_para* para) 函数的 disp_lcd_init(lcd, lcd->disp); 后面加上

set_lcd_timings(para->reg_base[DISP_MOD_LCD0], &lcd->timings);

3.最后编译烧写进去之后重启就搞定了…

4.uboot我就懒得修改了,凑合用吧

本文转载自:https://bbs.aw-ol.com/topic/3533/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

期刊介绍|骨科老牌期刊,无版面费,审稿极速,毕业不二之选!

今天给大家介绍一本中药方面的期刊&#xff1a;JOURNAL OF ORTHOPAEDIC RESEARCH 一、基本信息 1、期刊名称&#xff1a;JOURNAL OF ORTHOPAEDIC RESEARCH&#xff1b; 2、期刊ISSN: 0736-0266&#xff1b; 3、研究方向&#xff1a;医学-整形外科&#xff1b; 4、出版社&#x…

AI怎么把游戏变好玩?米哈游出手了

《原神》发布两年半后&#xff0c;游戏新贵米哈游终于出新&#xff0c;上线了《崩坏:星穹铁道》。新游戏的一大亮点是内置了一个“图生图”的AIGC工具&#xff0c;用户可上传任何图片&#xff0c;生成对应风格的游戏角色“三月七”。 广大玩家脑洞大开&#xff0c;短短一周时间…

专业的图像编辑软件Affinity Photo 2.04版本在win10系统的下载与安装配置教程

目录 前言一、Affinity Photo安装二、使用配置总结 前言 Affinity Photo 是一款专业的图像编辑软件&#xff0c;提供了很多强大的工具和功能。 一些常用工具的介绍&#xff1a; 选择工具 ——矩形选择工具&#xff1a;用于选择矩形区域。 ——椭圆选择工具&#xff1a;用于选…

Android 网络编程基础

Android 网络编程是一个重要的开发技能&#xff0c;可以让我们的应用程序更加丰富、实用。需要开发者根据实际需求选择合适的网络通信方式&#xff0c;并结合安全协议和数据传输加密算法等措施&#xff0c;以保证数据传输的安全性和可靠性。 网络协议 在 Android 网络编程中&a…

虚拟环境中的 CPU 优化技巧

近年来&#xff0c;虚拟化已成为管理计算资源的主流方式&#xff0c;使用户能够在一台机器上运行多个操作系统和应用程序。虚拟化虽然带来了许多好处&#xff0c;例如更好的资源利用和更大的灵活性&#xff0c;但在优化CPU性能方面也带来了挑战。 在本文中&#xff0c;我们将探…

系统分析师:五、系统配置与性能评价

目录 一、性能指标 二、阿姆达尔解决方案 三、性能评价方法 一、性能指标 性能指标总体如下&#xff1a; 主频&#xff1a;也称时钟频率&#xff0c;主频越高&#xff0c;意味着CPU工作速度越快。它的倒数就是时钟周期。 CPI&#xff1a;每条指令执行锁需要的时钟周期数。 …

那些我收藏多年和偷摸使用的工具~~~

作为一个见到好东西&#xff0c;不管有没有用先收藏的我来说&#xff0c;本期活动实在是太有必要写一篇博客了 目录 展示我的收藏癖生活类收藏学习类收藏工具类收藏谷歌插件类收藏 工具推荐效率工具sublime 文件转换工具text转MarkdownMarkdown-Weixin[Cmd Markdown 编辑阅读器…

算法篇——动态规划大集合(js版)

509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 n…

计算机毕业论文选题推荐|软件工程|系列六

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)的研发部署管理…

正视架构设计的重要作用

要讨论软件架构设计在软件开发中的重要作用&#xff0c;首先让我们来了解一下目前国内软件的开发现状。   总的来说&#xff0c;国内的多数企业仍然是采用“瀑布模型”作为软件开发过程的主要模型。虽然在采用瀑布模型的同时可能会引入原型法以及诸如MSF等其它软件开发方法与…

必须要掌握的音视频编码、解码基础!

一、音视频为什么要编码&#xff1f; 音视频编码技术在音视频领域有着举足轻重的地位&#xff0c;这是由于音视频原始数据量较大&#xff0c;在传输的过程中如果不进行编码的话&#xff0c;则无法进行传输。比方说&#xff0c;一张普通的图片的大小大概是1-2M&#xff0c;假设我…

CH-90Na螯合树脂技术在废水除镍、除总铬、除重上的应用

电镀是利用电化学的方法对金属和非金属表面进行装饰、防护及获得某些新的性质的一种工艺过程。为保证电镀产品的质量&#xff0c;使金属镀层具有平整光滑的良好外观并与基体牢固结合&#xff0c;必须在镀前把镀件表面上的污物&#xff08;油、锈、氧化皮等&#xff09;彻底洗干…

美国Keysight是德科技34461A万用表

安捷伦Keysight是德科技34461A万用表 安捷伦万用表 附加功能&#xff1a; 带有内置条形图、直方图、趋势、数学和统计数据的彩色图形显示 I/O&#xff1a;USB、LAN/LXI、GPIB&#xff08;可选&#xff09; 已启用 BenchVue。从您的 PC 控制您的 DMM&#xff0c;以轻松查看和捕…

【沐风老师】3dMax粒子拖尾光效插件Ky_Trail使用教程

Ky_Trail粒子拖尾光效插件使用教程 【Ky_Trail 用户界面】 Ky_Trail粒子拖尾光效插件,可以模拟各种粒子拖尾效果动画。 【适用版本】 3dMax4 - 2021 【安装方法】 将插件文件“Ky_Trail.dlv”复制到3dMax插件目录中(3ds Max\plugins”)。 【使用方法】 1.插件安装完成后启…

github某0day漏洞投毒与钓鱼样本分析

前言 近日&#xff0c;烽火台实验室监测到多起针对安全人员的钓鱼攻击。其中一例利用MS Office Word 0DAY进行钓鱼&#xff0c;在github.com和Telegram群组中公开0DAY利用程序&#xff0c;其中并没有包含真正的利用程序&#xff0c;但是却捆绑了木马。运行后下载和执行木马程序…

git rebase问题:First, rewinding head to replay your work on top of it

分支上使用 git rebase 主干名 同步代码时提示&#xff1a; First, rewinding head to replay your work on top of it... 具体信息如截图&#xff1a; 用下面的命令可以解决&#xff1a; git fetch origin; git reset --hard origin/<branch>

UM2002 一款低功耗SUB-1G 无线接收机芯片

UM2002 是一款工作于 200MHz~960MHz 范围内的低功耗、高性能、单片集成的(G)FSK/OOK 无线接收机芯片。内部集成完整的射频接收机、频率综合器、解调器&#xff0c;只需配备简单、低成本的外 围器件就可以获得良好的接收性能。 芯片支持灵活可设的数据包格式&#xff0c;支持数据…

技术如何通过API接口获取自己想要同款商品的数据

一、随着电子商务的兴起&#xff0c;越来越多的人开始关注如何通过API接口获取自己想要同款的商品数据。本文将介绍如何利用API接口获取商品数据&#xff0c;以及一些必要的步骤和注意事项。 第一步&#xff1a;寻找适当的API接口 在开始获取商品数据之前&#xff0c;我们需要…

力扣 239. 滑动窗口最大值

题目来源&#xff1a;https://leetcode.cn/problems/sliding-window-maximum/ C题解&#xff1a;用暴力解法会超时。下面题解参照代码随想录 为了使队列窗口能快速找对最大值&#xff0c;自定义一个单调队列&#xff0c;队首为最大值&#xff0c;每次push进去的元素值都比队列…

FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持

这里写目录标题 1、前言2、我这里已有的视频图像编解码方案3、H264视频压缩理论4、H264视频压缩-性能表现5、H264视频压缩-设计方案6、Vivado工程详解7、Vivado功能仿真8、福利&#xff1a;工程代码的获取 1、前言 H264视频压缩与解码在FPGA图传领域应用广泛&#xff0c;Xilin…