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

  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是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的思路(要从解决问题的效率出发,看看谁的方法能更快的定位问题)。


©著作权归作者所有:来自51CTO博客作者痞子衡V的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(8.A)- SEMC NAND
  2. 痞子衡嵌入式:恩智浦机器视觉模块OpenMV-RT那些事(1)- 初体验
  3. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(10)- KBOOT特性(可
  4. 山东潍坊某数据恢复公司客户服务器感染 .Globeimposter-Alpha865
  5. Oracle结果集缓存(Result Cache)--服务器、客户端、函数缓存
  6. 痞子衡嵌入式:如果i.MX RT是一匹悍马,征服它时别忘了用马镫MCUBoot
  7. 痞子衡嵌入式:超级好用的可视化PyQt GUI构建工具(Qt Designer)
  8. 痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景
  9. 痞子衡嵌入式:高性能MCU之音视频应用开发那些事 - 索引

随机推荐

  1. Android GWES 基本框架篇
  2. 了解 uri, content provide,包括 data and
  3. 关于android:layout_weight属性使用注意
  4. Android动态换肤(二、apk免安装插件方式)
  5. Android(安卓)Activity基础概念
  6. 共享Android开发手册
  7. Android事件分发
  8. Android(安卓)Studio学习之安装插件
  9. Android中gravity的各种效果图
  10. Android(安卓)Service