大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验

  痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD显示有异常亮点的问题,这个问题的定位和排查花了一点时间,整个过程现在回想起来仍觉得有意思。做嵌入式(尤其是软件)这行主要工作除了写代码就是解Bug了,而且很多时候往往是写代码容易,解Bug难,所以解Bug能力是衡量一个工程师是否资深的重要因素。Bug不仅要解得好,还得解得快,这个很考验工程师的逻辑思维能力和调试经验。今天痞子衡就给把之前分析解决LCD异常亮点问题全过程复现给大家,希望对大家今后解Bug有所帮助。

  本篇是上篇,主要是抛出问题,希望大家能够留言积极回复,给出你解Bug的思路,看看谁的思路能更胜一筹。

一、问题描述

  先给大家简单描述一下这个LCD显示异常亮点问题,客户使用的是一块由ST7701S驱动的480x480分辨率的RGB接口LCD屏,主控芯片是i.MXRT1062,客户在FlexSPI1接口上挂了一片QuadSPI Flash存放应用程序,还在FlexSPI2接口上挂了一片HyperRAM做显存。为了验证系统是否正常,客户设计了一个LCD显示测试程序(即下图中的App),这个App连同L2 Boot一起被烧写进QuadSPI Flash,芯片上电启动,BootROM加载L2 Boot运行,L2 Boot完成HyperRAM初始化(为什么设计二级启动后面会解释)后加载App到HyperRAM运行,App里构造uint32_t s_frameBuffer[480][480](像素格式是XRGB8888)内容后借助eLCDIF模块驱动LCD屏显示,s_frameBuffer里的内容就是简单的横向渐变色,但是渐变色显示出了问题,如下图中左边LCD示意图所示,均匀地出现了几根不明白色纵向线条。

  这是客户的LCD显示测试代码(下图左侧),基于\SDK_2.6.2_EVK-MIMXRT1060\boards\evkmimxrt1060\driver_examples\elcdif\rgb下的IAR工程,代码仅稍作修改(LCD驱动部分要增加ST7701S初始化,并且相应调整LCD宽高参数),主函数则相当简单,s_frameBuffer[][]放在HyperRAM里,其内容填充由APP_FillFrameBuffer()函数完成,实现红/绿/蓝三种颜色的横向渐变显示(下图右侧,存在不明亮线条)。

  核心显示数据填充函数APP_FillFrameBuffer()再贴一遍,防止大家看不清上图中的代码:

#define APP_IMG_HEIGHT 480
#define APP_IMG_WIDTH 480 __no_init uint32_t s_frameBuffer[APP_IMG_HEIGHT][APP_IMG_WIDTH]; void APP_FillFrameBuffer(void)
{
uint32_t i = 0, j = 0;
for (i = 0; i < APP_IMG_HEIGHT / 3; i++)
{
for (j = 0; j < APP_IMG_WIDTH; j++)
{
uint8_t k = j % 255;
s_frameBuffer[i][j] = APP_MakeLutData(k, 0, 0);
s_frameBuffer[i+APP_IMG_HEIGHT/3][j] = APP_MakeLutData(0, k, 0);
s_frameBuffer[i+APP_IMG_HEIGHT*2/3][j] = APP_MakeLutData(0, 0, k);
}
}
}

二、现有条件

  • 一个实验室,焊接工具一应俱全。
  • 一块出问题的客户板子(以及客户测试程序)。
  • 客户LCD屏厂给的驱动程序(基于STM32开发板,屏厂反馈屏面板本身没有问题)
  • 一块恩智浦官方i.MXRT1060-EVK,如下图所示。
  • 几片HyperRAM芯片(与恩智浦EVK上HyperFlash同封装,但型号与客户板子上HyperRAM不一致)
  • 客户LCD屏40pin连接线与恩智浦EVK上LCD屏40pin连接线线序不一致。

三、你的解Bug思路

  痞子衡列了一些可能出问题的地方(不一定全),供大家参考:

  • 客户LCD显示测试代码逻辑是否有问题?
  • 客户LCD屏与i.MXRT1060连接(线序)是否有问题?
  • 客户LCD屏的ST7701S驱动移植(从STM32到i.MXRT1060)是否有问题?
  • 客户选用的HyperRAM本身质量是否有问题?
  • i.MXRT1060配置的客户HyperRAM时序参数是否有问题?
  • i.MXRT1060的LCD显示模块eLCDIF驱动是否有问题?
  • i.MXRT1060系统的总线处理(如Cache、总线竞争)是否有问题?

  请留言给出你能想到的其他出问题的地方,你解Bug的思路(要从解决问题的效率出发,看看谁的方法能更快的定位问题)。

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)的更多相关文章

  1. 痞子衡嵌入式:恩智浦SDK驱动代码风格、模板、检查工具

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是恩智浦 SDK 驱动的代码风格. 上周痞子衡受领导指示,给 SE 同事做了一个关于 SDK 代码风格的分享.随着组内新人的增多,这样的培训 ...

  2. 痞子衡嵌入式:恩智浦SDK驱动代码风格检查工具预览版

    大家好,我是痞子衡,是正经搞技术的痞子. 接上文 <恩智浦SDK驱动代码风格.模板.检查工具> 继续聊,是的,过去的三天里我花了一些时间做了一个基于 PyQt5 的 GUI 工具,可以帮助 ...

  3. 痞子衡嵌入式:基于恩智浦i.MXRT1060的MP4视频播放器(RT-Mp4Player)设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是基于i.MXRT1062的MP4播放器参考设计. i.MXRT1062是恩智浦i.MXRT四位数系列的中端型号,外设搭配上很均衡,辅以6 ...

  4. 痞子衡嵌入式:降低刷新率是定位LCD花屏显示问题的第一大法(i.MXRT1170, 1280x480 LVDS)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170上LCD花屏显示问题的分析解决经验. 痞子衡最近这段时间在参与一个基于i.MXRT1170的大项目(先保个密),需要 ...

  5. 痞子衡嵌入式:利用i.MXRT1060,1010上新增的FlexSPI地址重映射(Remap)功能可安全OTA

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT部分型号上新增的FlexSPI Remap功能. OTA升级设计几乎是每个量产客户都绕不开的话题,产品发布后免不了要做固件( ...

  6. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(3) - 统一FlexSPI驱动访问

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(3)之统一FlexSPI驱动访问. 文接上篇 <超级下载算法(RT-UFL)开发笔记(2) - 识别当前i. ...

  7. 痞子衡嵌入式:自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动. 接着上篇文章 <了解i.M ...

  8. 痞子衡嵌入式:再测i.MXRT1060,1170上的普通GPIO与高速GPIO极限翻转频率

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060/1170上的普通GPIO与高速GPIO极限翻转频率. 按照上一篇文章 <实测i.MXRT1010上的普通GP ...

  9. 痞子衡嵌入式:了解i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点. 前段时间痞子衡写了一篇 <深入i.MXRT1050系 ...

随机推荐

  1. 全栈新视觉——前后端分离

    1234 前端工程化从单纯的 HTML/CSS/JavaScript,到 gulp/webpack 以及 node.js.可能还需要其他的插件 sass.less.vue.react.angular. ...

  2. gcc编译器常用选项的含义

    -w: 关闭编译时的警告, 也就是编译后不显示任何warning,因此有时编译中会出现一些诸如数据转换之类的可忽略警告, -Wall: 显示编译后所有警告 -W: 显示警告,但是只是显示编译器认为的会 ...

  3. Haproxy的应用

    如上图所示,在 192.168.1.0/24 这个网段的客户端想要访问在 172.20.0.0/20 网段内的服务器,所有的通信又不想暴露在互联网上,因此可以在这两个网段内分别都放一台 Haproxy ...

  4. 【转载】Java DecimalFormat 用法

    转载只供个人学习参考,以下查看请前往原出处:http://blog.csdn.net/wangchangshuai0010/article/details/8577982 我们经常要将数字进行格式化, ...

  5. Java工作流引擎结合可视化表单开发,10分钟完成一个业务流程发布

    回忆以前工作流引擎的应用,感觉历历在目啊!当初公司接了一个项目关于政府单位公文流转的管理系统,一开始客户跟我画了十多张业务流程图.话说这十多张业务流程图,涉及的业务范围还蛮多,像用审批授权,开通流程, ...

  6. 从零开始打造 Mock 平台 - 核心篇

    前言 最近一直在捣鼓毕设,准备做的是一个基于前后端开发的Mock平台,前期花了很多时间完成了功能模块的交互.现在进度推到如何设计核心功能,也就是Mock数据的解析. 根据之前的需求设定加上一些思考,用 ...

  7. JZOJ 5257. 小X的佛光 (Standard IO)

    5257. 小X的佛光 (Standard IO) Time Limits: 2000 ms Memory Limits: 524288 KB Description Input Output Sam ...

  8. 从0到1使用MyBatis

    MyBatis作为最流行的数据中间层,成为企业Java软件开发中非常重要的软件. 一.基本配置 1.首先需要导入Maven <dependency> <groupId>org. ...

  9. 数据分析你需要知道的操作:ETL和ELT

    如果您接触过数据仓库, 您可能会使用 ETL (Extract. Transform. Load) 或 ELT ( Extract.Load. Transform) 将您的数据从不同的来源提取到数据仓 ...

  10. 2020ubuntu1804server编译安装redis笔记(三)启动服务和使用redis

    第一篇笔记记录了ubuntu1804server编译安装redis5,接下来要配置redis5了 网址:https://www.cnblogs.com/qumogu/p/12435694.html 第 ...