MIPI LCD调试总结

2023-11-08

近来在用SSD2828驱动小米屏,没有代码,没有技术支持,自己写代码反复调试,整死我了,目前已经能正常显示图片,现在总结一下与大家分享一下,
要点:

  1. 小米3屏的分辨率是19201080, 24bit, 行列像素点为10801920, 默认显示方式为从左->右,上->下,这个可以通过DCS指令修改.
  2. SSD2828手册上说SSD2828一行最大可显示1920个像素点(60Hz),而官网上说SSD2828的最大分辨率为1920x1200,所以我一直认为SSD2828
    行像素最大可设置为1920,列最大像素可设置为1200,实际上驱动小米3屏时,行列分别设置为1080*1920.
  3. 要用SSD2828最新的手册,目前能找到的是V1.3,旧版本有些地方是错的,误导人.
  4. SSD2828 RGB接口和MIPI接口的位数是一起设置的(通过B6寄存器设置),即没有RGB为24bit,MIPI为16bit的这种情况.
  5. SSD2828可支持的16,18,24bit的屏,而有的屏不支持16bit的,如小米3的屏就不支持,这个要看清楚.
  6. 屏的data lane和SSD2828设置的要一致
  7. SSD2828的VBP, VFP, HBP, HFP,和CPU这端设置不能一致,显示不正常,我也不知道为什么.

驱动初始化包括SSD2828,LCD屏的初始化

  1. SSD2828初始化主要有设置PLL, 设置LCD参数(分辨率,VBP, VFP, HBP, HFP).
    CPU这端的Pclk设置为90~120MHz, SSD2828 PLL output为800MHz左右,900以上有些危险,干扰大(跟PCB有关系咯)
  2. SSD2828提供给CPU接口,通过DCS设置LCD的一些参数,这个要看LCD手册有哪些参数要设置,最主要的是0x29,0x11指令,
      让LCD exit sleep mode和display on.

屏不显示可能有几种情况

  1. 0x29,0x11指令发送不对,LCD没收到,一直在sleep状态.
  2. 屏要显示,data lane上肯定有波型,如果data lane波型都没有,那就是ssd2828都没有配置好,跟CPU这端没有关系.
  3. data lane有波型,可能跟C9, CA, CB,这几个寄存器有关,随便设置几个值试一下(最大,最小,中间值),我调试了一周,就是C9没有设置对,所以一直没显示

屏幕抖动可能跟VBP, VFP, HBP, HFP,这几个参数有关,修改SSD2828和CPU LCD controler的这几个参数试一下
颜色过度失真,右能跟B6寄存器中的PCLK_P和0xDB中的CLK_DELAY_SEL有关,我设置PCLK_P为1, CLK_DELAY_SEL为0,显示图片就好了.
不行可修改CLK_DELAY_SEL试一下,再不行我也没办法了.

除了必须设置的参数外,对显示有影响的寄存器主要有:
C9, CA, CB, DB, DD, ED, 调试中主要修改了这些寄存器


在展讯平台上点亮MIPI接口屏正常显示需要满足以下几条就可以:

1:确认Lcd的驱动文件被正常编译编译进去,并且lcd 和board name里面注册一质,我有一次就是因为编译出现问题了,导致在kernel中无法正确读取LCD的ic的id,导致系统加载屏的驱动失败,造成系统进入kernel显示花屏,这部分是非常重要的,假如未能正确的编译进系统,你再怎么调试,屏照样无法正常的显示,这非常的关键!

  1. 必须保证数据能够正确的传输到屏上,我有一次调试屏驱动时,发现屏上的显示始终是一些横竖条纹,或者直接灰屏,通过在示波器上检测屏引脚的波形,发现屏上的数据不正常,根本没有切换到hp下刷数据,导致屏无法正常的显示,一般在读取ic 的id和初始化设置指令时,都是在mipi的低速(lp)模式下,在初始化完成后,需要切换到高速(hp)状态下,才能正常的显示!

  2. 必须保证ic设置的proch和timing,通道,速率正确,屏才可以正常的显示,一般显示出现花屏,显示偏移等问题,通常情况下,就是因为你设置的某些参数不正确,导致显示异常!

4:仔细检查上电同时测量,同时将28根rgb interface对应gpio设为lcdc func。对于传统的lcd不需要RST操作只需拉高即可,对于mipi和需要下code的RGB panel需要RST高低高操作,这样code才生效。注意一般sleep out(0x11)和display on(0x29)之间需要mdelay(120)左右,貌似这个对于大部分panel是必须的。如果这部分延时不够,会导致屏在进出睡眠或者显示过程中出现白屏,无法正常的显示!

5:最后还要确认是否有framebuffer输出,要是改动了display这块的clk很有可能没有buffer输出的,可以通过cat /dev/graphyics/fb0查看有没有输出字符。曾经调试开机logo连续显示时遇到过好几次没有buffer输出导致kernel卡住,屏也不亮按power键没有反映的情况。

注:一般wvga以及更高分辨率的陪你过通常采用2 line甚至更高的通道数,hvga及以下分辨率的屏则通常采用单通道的mipi接口

一般情况下屏幕显示有flicker,可采用点翻转解决该问题,但是会带来功耗和潜在的不兼容问题,因为有些玻璃不支持点翻转,可能会带来显示的异常

五.主要调试经验总结(个人+网络):

个人:

(1) DPI LCD最关键的配置是:DPI时钟频率,DE的极性,DPI CLK的极性。特别是DE的极性

如果反了,往往不能正常显示(常见现象为屏幕出现麻点)。如果DE正确,DPI CLK反了,图像一般能显示,但会倾斜。DPI时钟频率(PCLK)按照datasheet和LCD的分辨率来配,过高过低都可能导致不能正常显示。PCLK的设置公式为:PCLK=(WIDTH+前尖/后尖)*(HEGHT+前尖/后尖)*60~70(刷新率)*1.1(补偿)

(2) params->dpi.rgb_order 或 params->dbi.data_format.color_order 往往固定的配置为RGB顺序。当

与LCD的实际顺序不匹配时,会出现偏蓝或偏红的现象。这时可以通过修改LCD初始化代码中相关寄存器的设置来试其匹配。大部分LCD驱动IC使用0x36这个寄存器的某一位来设定RGB或BGR。

(3) 当图像显示左右反或上下反时,可以修改寄存器0x36的设置。

(4) DBI LCD的寄存器0x3A一般用于定义数据宽度,其设置一定要与params->dbi.data_width一

致。否则导致数据不全,显示的图片颜色错乱,清晰度大大降低。

(5) DBI LCD的寄存器0xC5一般用于定义刷新频率frame rate。多数LCD的default值为70~

80HZ。但在某些应用中,会出现顶部显示有锯齿,或者矩形图标摇动时边缘锯齿。这时提高frame rate到90~100HZ,就能改善。

(6) LCD 的亮度可以通过修改power setting来提高或降低。这些设置一般在初始化代码中,不建议

自己修改,最好联系厂家。

(7) 有时FPC上的器件与LCD的背面金属壳接触导致短路,拉低,会影响显示效果。

(8) 部分LCD调好过后,在切屏的时候会有中间被分割的现象,这主要是LCD的刷新方向不对导

致的,这个也是在0x36寄存器里面设置的

(9) Tuna上的国显LCD(rm68120),出现部分模组低部有重影区域的现象,我们试过降低PCLK到

很低,可以解决重影现象,但这不是解决办法。看上去是LCD的一致性的问题,最后芯片商给了一个修改方案,修改B300寄存器,这个寄存器在规格书上都没有描述。所以具体的真正原因只有芯片上知道了。

(10) DBI接口,写入初始化代码后,在其他信号均正常的情况下,屏幕没有反应,还是为白屏,看上

去是没有写成功,仔细检查是写命令的引脚控制不对,一些芯片的写命令pin为D[0-7],一些为D[1-8],所以需要区别对待,在发命令的时候做一个移位

(11) 系统在休眠的时候功耗较大,而且经过排查就是LCD导致的,查看了休眠代码suspend,发现

是休眠代码的delay时间过短,导致LCD根本未完全进入休眠,系统就休眠了

(12) 还有出现的比较多的就是白屏问题,原因也很多,常见的为:背光亮的太早,初始化不成功,

suspend/resume的delay时间不合适等

(13) 屏幕出现抖动,除了要排查相关的信号线,最好也去看看给的工作电压是否匹配(不要太迷信自

己设的,最好能用仪器测试)

(14) 还有各种其他问题,归结起来所有的bug要不是host这段的信号设置有问题,要不是初始化代

码中的寄存器设置问题,这些都是可以通过具体硬件情况和相关datasheet来解决的


  • 调试记录

      LCD半边闪屏问题,原厂给的信息:分析了系統板送出的 video mode timing,資訊摘要如下
    
    
      HSCLK: 160MHz 
      Per lane bit-rate: 320Mbps (UI=3.125ns) 
      HS SoT HS-prepare + HS-zero 約 155ns   
    
      由上述的 timing 懷疑與現象是因為 IC HS data settle timing 搭配不當所導致
      看来是我们输出的mipi信号 HS-prepare + HS-zero 比 LCD 默认设置短引起的。还有随机整屏闪动的问题通过调节 VFP 和 VBP 的值调到了理想状态。另外 LCD 的 VCC 在使用 mos 管控制后休眠后会有 2.0V 的悬浮电压,通过 RC 电路将电压放掉,将 C78 换成了 10K 电阻。
      LCD电路上有几个比较重要的电压: AVDD、VCC、VGH、VGL、HAVDD、VCOM(由AVDD通过电阻分压得到)
    
  • 唤醒慢的问题

在最初调试的几款 LCD 里面初始化 cmd 都比较少,后来在调试一款 IPS 屏的时候发现唤醒需要 3 秒左右,这款 LCD 初始化 cmd 有100多条,之前在调试一款 LCD 的时候每条 cmd 发送之后需要 delay 10ms 再发下一条 cmd,所以在这款 LCD 这里不能有 delay,并且经过调试在确保发送成功的情况下将 LP 的传输速度提高了 3 倍(这里需要读取每条 cmd 的返回值 0x84 确认命令是否发送成功),优化后唤醒时间不到 1 秒。

  • LCD 参数理解更正

才发现之前一直对 LCD 的几个参数 HFP、HBP、VFP、VBP 理解有错误,正确的应该是以同步信号(HSYNC、VSYNC)为基准,在同步信号之前的称为 Front,在同步信号之后的称为 Back,而不是之前理解的以有效像素为基准。

  • LCD 显示呈锯齿状问题

这两天(12.11)还调试了一款 540 x 960 分辨率的 mipi LCD,在开始的时候一直点不亮,和供应商确认了好久无意间才发现是他们给的初始化代码是错的,使用正确的初始化代码就能点亮了,不过显示出来的图像却是呈锯齿状的,即没有对齐。之前在别的平台也遇到过类似问题,也就是分辨率不是 16 的整数倍,LCD controller 在取数据的时候会对不齐。边研究 Datasheet 边和 ASIC 同事讨论,后来确定了一个方案:即在 DSI、LCD 寄存器里面设置分辨率为 540 x 960 以让 LCD 正确识别信号,但 framebuffer 需要设置为 544 x 960 以对齐,并且设置 Source pitch 寄存器为 544,这样显示就正常了,相当于 framebuffer 里每一行的最后 4 个 pixel 会被 LCD controller 丢掉。

今天(12.12)在和 ASIC 同事的讨论下更正了之前的理解:LCD controller 在计算取数据的时候,地址是根据(x,y)坐标来算的,差不多是address = y * pitch + x + base,pitch 就是一行 pixel 在内存里的大小,这个至少是要对齐到 8byte, 因为 bus 宽度是 8byte,如 Data sheet 中的描述 ”Source pitch for RGB channel, QWORD aligned if linear mode“。之前计算 pitch 值的公式为:xres / 8 * bits_per_pixel / 8,如果 xres = 540,bits_per_pixel = 32,计算的结果因为取整的原因为 0x10c,实际上正确的值应该是 0x10e,所以需要将公式改为:xres * (bits_per_pixel / 8) / 8,即在每个像素占 4byte 的情况下只要 xres 为偶数就可以满足对齐的要求,而不用改为 544。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MIPI LCD调试总结 的相关文章

  • Photoshop提示暂存盘已满怎么办?ps暂存盘已满如何解决?

    打开ps软件提示暂存盘已满是什么意思 如何解决Photoshop提示暂存盘已满 本文给大家带来了解决办法 一起来看看吧 如果遇到 暂存盘已满 错误 通常意味着用作暂存盘的硬盘 或驱动器 用尽了执行任务所需的存储空间 解决方案 方法一 释放更
  • spring中的那一堆Configuration

    EnableAutoConfiguration 开启Spring Application Context自动配置 系统会根据你引入的jar包情况 自动配置一些需要的bean 参考spring boot autoconfigure jar 下
  • python典型案例:打印输出九九乘法表

    python典型案例 打印输出九九乘法表 使用for循环语句打印输出代码如下 for x in range 1 10 外循环控制行数 for y in range 1 x 1 内循环控制列 print x y x y end end表示 为
  • Styled-component 入门使用(一)

    Styled component 入门使用 一 styled components 优点 自动引入关键 styled components可以跟踪哪些组件在页面上呈现 并注入其样式 可以实现加载所需的最小代码 不会产生类名冲突 styled
  • 反向代理服务器:nginx

    1 什么是nginx Nginx engine x 是一个高性能的 HTTP 和 反向代理web服务器 其特点是占有内存少 并发能力强 事实上nginx的并发能力在同类型的网页服务器中表现较好 能够支持高达 50 000 个 并发连接数 的
  • LED灯条亮度色温调节

    一般LED灯条为12V或者24V供电 恒压驱动 由于LED灯条中已经内嵌了限流电阻 因此不需要使用复杂的恒流措施 对LED灯条进行色温和亮度的调节 可以通过PWM来开关MOS管 正白4000 4500K或者暖白3000 3500K 1 恒流
  • Linux常用命令(帮助命令、用户管理命令和压缩解压命令)

    详细目录 帮助命令 man whatis apropos help 用户管理命令 useradd passwd who w 压缩解压命令 gzip gunzip tar zip unzip bzip2 bunzip2 帮助命令 man 功能
  • 全球与中国移动健康传感器市场未来发展趋势及十四五投资战略规划研究报告2021-2027年版

    2020年 全球移动健康传感器市场规模达到了 亿元 预计2027年将达到 亿元 年复合增长率 CAGR 为 本报告研究全球与中国市场移动健康传感器的产能 产量 销量 销售额 价格及未来趋势 重点分析全球与中国市场的主要厂商产品特点 产品规格
  • 为什么要重写hashCode和equals方法【深入分析版】

    在回答这个问题前 我们先来看看Object类中的这两个方法 public native int hashCode public boolean equals Object obj return this obj 其中hashCode调用的是
  • 界面设计软件都有哪些?推荐这7款

    本文总结了7种 知名 软件界面设计工具 建议您尝试各种选择 以找到最适合您的UI设计工具 对于UI设计师来说 应用程序的界面设计和制作是最常见的 面对设计师的需求 市场上出现了各种各样的软件界面设计工具 百花齐放的情况不禁让设计师们大吃一惊
  • 异常eclipse Hadoop Failed to set permissions of path的解决

    eclipse Hadoop Failed to set permissions of path window下在eclipse中执行hadoop程序时报错 如下 原因文末有写 来自网友 所有的解决方案都是修改FileUitl文件 然后重新
  • 串口 同步和异步 理解

    串口 同步和异步 理解 https blog csdn net cs74184235 article details 48438727 本文主要三大块 一 串口同步和异步在底层通信上的区别 这部分点到为止 不是主要探讨内容 有个基本理解即可
  • 信捷plc,9伺服通用程序架构

    信捷plc 9伺服通用程序架构 程序已经升级 程序高度模块化 可轻易拓展十几二十多个轴 plc是目前性价比最高的方案 60个点10轴高速脉冲输出 走s形 正弦曲线加减速 程序采用C语言 梯形图架构 玩转信捷系统 可运用于三菱 西门子 欧姆龙
  • 小游戏 《唐僧大战白骨精》

    小游戏 唐僧大战白骨精 有点小无语的小游戏 当时做的还挺认真的 rint 欢迎光临 xxx 游戏 n 请选择你的身份 n 1 唐僧 n 2 白骨精 n sf input 请选择 1 2 if sf 1 print 你已经选择了1 你将以 g
  • pandas写入字典,或者pandas以各种格式输出数据

    1 将字典列表写入到pandas import pandas as pd rows buyer percent 23 2 tier city 1 buyer percent 18 54 tier city 2 df pd DataFrame
  • Python中利用xpath解析HTML的方法

    本文主要介绍了Python中利用xpath解析HTML的方法 利用其lxml html的xpath对html进行分析 获取抓取信息 具有一定的参考价值 感兴趣的小伙伴们可以参考一下 在进行网页抓取的时候 分析定位html节点是获取抓取信息的
  • SpringBoot整合LogBack

    本文演示SpringBoot整合LogBack 一 项目搭建 新建一个SpringBoot项目 引入依赖
  • 【shell中判断是否是整数】

    方法一 使用expr 看该数字是否可以进行加运算 root manager day4 cat ifnum sh bin bash Author pyy Date 2020 06 15 FileName ifnum sh 判断用户输入的是否是
  • Java是值传递还是引用传递?区别是什么?

    文章目录 值传递 引用传递 两者区别 Java到底是值传递还是引用传递 在Java中参数的传递主要有两种 值传递和 引用传递 值传递 实参传递给形参的是值 形参和实参在内存上是两个独立的变量 对形参做任何修改不会影响实参 也就是说 在方法调
  • Java 数组 初始化方式 和遍历方式

    Java 数组 初始化方式总结 第一种 静态初始化 所谓静态初始化 初始化时由程序员显式指定每个数组元素的初始值 有系统决定数组的长度 简单实例 String strArr 张三 李四 王五 第二种 动态初始化 所谓动态初始化 初始化时由程

随机推荐

  • CTF-Web13(涉及哈希长度扩展攻击,难度偏大)

    13 让我进去 首先拿到题目 查看源代码 源代码没问题 直接开始burpsuite尝试key 两行直接admin admin测试 通过burpsuite可以看到以下内容 在Response中看到set cookies无疑是最容易注意到的东西
  • sql查询小记

    1 在MySQL中判断某个字段是否为空需要使用IS NULL 或者 IS NOT NULL 在MySQL5 2 7中测试通过 例子1 Select FROM Test WHERE CODE IS NULL 例子2 Select FROM T
  • 等保测评--通信网络安全测评要求

    信息安全等级保护 是对信息和信息载体按照重要性等级分级别进行保护的一种工作 在中国 美国等很多国家都存在的一种信息安全领域的工作 在中国 信息安全等级保护广义上为涉及到该工作的标准 产品 系统 信息等均依据等级保护思想的安全工作 狭义上一般
  • Python的迭代器和生成器使用示例

    迭代器和生成器是Python中强大而灵活的工具 用于处理可迭代对象的数据 它们提供了一种高效的方式来遍历和处理大型数据集 同时节省内存 在本文中 我们将介绍迭代器和生成器的概念 并提供一些实例来展示它们的用法 迭代器 Iterators 迭
  • repeat多级嵌套

    效果图 前台的 repeat asp 代码 C 代码
  • python爬虫——校花网

    爬取校花网图片 校花网http www xiaohuar com list 1 0 html 1 进入网站 我们会发现许多图片 这些图片就是我们要爬取的内容 2 对网页进行分析 按F12打开开发着工具 本文使用谷歌浏览器 我们发现每个图片都
  • 组合优化问题

    我们经常会遇到需要寻找一个最优方案的问题 也即最优化问题 我们首先对实例和问题做一个区分 在本课程中 不失一般性地 当我们在做一般性讨论的时候 都假定所讨论的最优化问题是最小化问题 定义1 1 1 最优化问题的实例 一个最优化问题的一个实例
  • 使用opencv识别视频中的数字识别

    使用OpenCV识别视频中的数字 需要对视频帧进行图像处理 以提取数字 一种常用的方法是使用边缘检测算法 如Canny边缘检测 检测图像中的边缘 然后 使用数字识别技术 如光学字符识别 OCR 识别图像中的数字 最后 使用算法对识别结果进行
  • ESP8266——AT指令发送POST请求

    AT指令发送POST请求 AT指令发送流程 注意 在串口助手调试过程中 每次发送都要加上 换行 且不能有多于的 空格 否则8266会将发送的数据原样返回 AT 返回值为OK AT CWMODE 1 返回值为OK 设置模块为STA模式 此时可
  • SpringMVC响应使用案例(带数据页面跳转,快捷访问路径,返回json数据)

    页面跳转 转发 默认 RequestMapping showPage1 public String showPage1 System out println user mvc controller is running return WEB
  • Daiwa Securities Co. Ltd. Programming Contest 2021(AtCoder Regular Contest 128)(A+B)

    这里写目录标题 A Gold and Silver B Balls of Three Colors A Gold and Silver 题目链接 https atcoder jp contests arc128 tasks arc128 a
  • React和JSX入门

    在本教程中 我们将了解如何开始创建React应用 并尝试了解JSX的基础知识 本教程假定您对HTML和JavaScript有很好的了解 什么是React React是Facebook开发JavaScript库 用于轻松管理Web应用程序的用
  • 时序预测

    时序预测 MATLAB实现PSO LSTM 粒子群优化长短期记忆神经网络 时间序列预测 目录 时序预测 MATLAB实现PSO LSTM 粒子群优化长短期记忆神经网络 时间序列预测 预测效果 基本介绍 模型介绍 PSO模型 LSTM模型 P
  • mongodb

    操作数据库 启动 停止 net start stop mongodb 进入 退出 mongo exit 查看所有数据库 show dbs 进入数据库 use dbName 查看当前使用的数据库 db db getName 注 空的数据库是不
  • 阿里云实例重启服务器后宝塔面板无法访问打开,同时SSH和网站也无法链接解决方法

    这个持续了一天 今天终于找到办法解决了 分享一下解决方法 网上找了很久 他们说的那些办法都无法解决的 很多人都是说阿里云端口防火墙问题 这个对于新安装的宝塔面板的用户 就要去阿里云或者腾讯云平台上面开启8888端口 我这个之前已经开启 都不
  • ajax datatype_mui.ajax()的使用

    mui ajax 简介 mui封装了常用的Ajax函数 支持get post请求方式 支持返回json xml html text script数据类型 分类 APP端 wkwebview 跨域情况下 使用plus next xmlHttp
  • Ecology 建模表单 数据库字段与页面字段对应关系显示

    Ecology 建模表单 Ecology介绍 数据库字段与页面字段对应关系显示 根据表名查询 billid 根据billid 查询出对应关系 Ecology介绍 Ecology泛微公司OA低代码开发平台 现在市面上常用的版本是以9为开头的
  • CRM客户管理系统

    Sunsiny资产CRM客户管理系统 目录 一 CRM系统背景 2 二 CRM系统分类 3 三 概述 3 四 系统的技术选型 3 五 系统模块简介 4 六 领导驾驶舱 6 七 客户经理驾驶舱 6 八 客户管理 7 九 联系人管理 8 十 服
  • spring-kafka几种AckMode模式介绍,MANUAL_IMMEDIATE和MANUAL区别

    kafka每个partition都有自己的offset 消费端处理完后要向kafka服务器提交offset spring kafka组件有下面几种AckMode提交模式 都是针对 enable auto commit设置为false才适用
  • MIPI LCD调试总结

    近来在用SSD2828驱动小米屏 没有代码 没有技术支持 自己写代码反复调试 整死我了 目前已经能正常显示图片 现在总结一下与大家分享一下 要点 小米3屏的分辨率是19201080 24bit 行列像素点为10801920 默认显示方式为从