RK3568 解决MIPI屏幕开机只显示uboot logo的问题

news2025/1/13 7:48:44

1、前言

      之前写过一篇文章介绍了RK3568驱动MIPI屏幕的方法,这次产品迭代,硬件改版,选型的新的屏幕了。所以再次开启调试屏幕的过程。本以为会和上次一样会轻车熟路,事情总是事与愿违,同样的路,遇到新的坑。

2、配置屏幕

      适配MIPI屏幕只需要修改一下屏幕的相关的参数,主要是屏幕时序参数,初始化序列这些。整个设备树的配置如下:

&dsi0 {
    status = "okay";
    //rockchip,lane-rate = <1000>;
    dsi0_panel: panel@0 {
        status = "okay";
        compatible = "simple-panel-dsi";
        reg = <0>;
        backlight = <&backlight_0>;
		power-supply = <&vcc1v8_lcd0_power>;
        //enable-gpios = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>;
	    reset-gpios = <&gpio4 RK_PA1 GPIO_ACTIVE_LOW>;

        enable-delay-ms = <35>;
        prepare-delay-ms = <20>;
        reset-delay-ms = <20>;
        init-delay-ms = <120>;
        unprepare-delay-ms = <0>;
        disable-delay-ms = <20>;
        mipi-data-delay-ms = <100>;
		/*屏幕的宽度,高度,单位mm*/
        size,width = <152>;
        size,height = <244>;
        dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
        dsi,format = <MIPI_DSI_FMT_RGB888>;
        dsi,lanes  = <4>;
        /*上海琪翰HQ10-21440B1-C 10寸屏 驱动芯片ILI9881C 寄存器初始操作, 0x15命令类型,单字节数据, 第2个字节为延时, 第3个字节为数据长度,第4,5个字节为数据表示寄存器地址和写入的数据 */
        panel-init-sequence = [
		    39 00 04 FF 98 81 03
			/*GPI_1*/
			15 00 02 01 00
			15 00 02 02 00
			15 00 02 03 53
			15 00 02 04 D3
			15 00 02 05 00
			15 00 02 06 0D
			15 00 02 07 08
			15 00 02 08 00
			15 00 02 09 00
			15 00 02 0a 00
			15 00 02 0b 00
			15 00 02 0c 00
			15 00 02 0d 00
			15 00 02 0e 00
			15 00 02 0f 28
			15 00 02 10 28
			15 00 02 11 00
			15 00 02 12 00
			15 00 02 13 00
			15 00 02 14 00
			15 00 02 15 00
			15 00 02 16 00
			15 00 02 17 00
			15 00 02 18 00
			15 00 02 19 00
			15 00 02 1a 00
			15 00 02 1b 00
			15 00 02 1c 00
			15 00 02 1d 00
			15 00 02 1e 40
			15 00 02 1f 80
			15 00 02 20 06
			15 00 02 21 01
			15 00 02 22 00
			15 00 02 23 00
			15 00 02 24 00
			15 00 02 25 00
			15 00 02 26 00
			15 00 02 27 00
			15 00 02 28 33
			15 00 02 29 33
			15 00 02 2a 00
			15 00 02 2b 00
			15 00 02 2c 00
			15 00 02 2d 00
			15 00 02 2e 00
			15 00 02 2f 00
			15 00 02 30 00
			15 00 02 31 00
			15 00 02 32 00
			15 00 02 33 00
			15 00 02 34 03
			15 00 02 35 00
			15 00 02 36 00
			15 00 02 37 00
			15 00 02 38 96
			15 00 02 39 00
			15 00 02 3a 00
			15 00 02 3b 00
			15 00 02 3c 00
			15 00 02 3d 00
			15 00 02 3e 00
			15 00 02 3f 00
			15 00 02 40 00
			15 00 02 41 00
			15 00 02 42 00
			15 00 02 43 00
			15 00 02 44 00
			/*GIP_2*/
			15 00 02 50 00
			15 00 02 51 23
			15 00 02 52 45
			15 00 02 53 67
			15 00 02 54 89
			15 00 02 55 AB
			15 00 02 56 01
			15 00 02 57 23
			15 00 02 58 45
			15 00 02 59 67
			15 00 02 5a 89
			15 00 02 5b AB
			15 00 02 5c CD
			15 00 02 5d EF

			/*GIP_3*/ 
			15 00 02 5e 00
			15 00 02 5f 08
			15 00 02 60 08
			15 00 02 61 06
			15 00 02 62 06
			15 00 02 63 01
			15 00 02 64 01
			15 00 02 65 00
			15 00 02 66 00
			15 00 02 67 02
			15 00 02 68 15
			15 00 02 69 15
			15 00 02 6a 14
			15 00 02 6b 14
			15 00 02 6c 0D
			15 00 02 6d 0D
			15 00 02 6e 0C
			15 00 02 6f 0C
			15 00 02 70 0F
			15 00 02 71 0F
			15 00 02 72 0E
			15 00 02 73 0E
			15 00 02 74 02

			15 00 02 75 08
			15 00 02 76 08
			15 00 02 77 06
			15 00 02 78 06
			15 00 02 79 01
			15 00 02 7a 01
			15 00 02 7b 00
			15 00 02 7c 00
			15 00 02 7d 02
			15 00 02 7e 15
			15 00 02 7f 15
			15 00 02 80 14
			15 00 02 81 14
			15 00 02 82 0D
			15 00 02 83 0D
			15 00 02 84 0C
			15 00 02 85 0C
			15 00 02 86 0F
			15 00 02 87 0F
			15 00 02 88 0E
			15 00 02 89 0E
			15 00 02 8A 02
			/*CMD_Page 4*/
			39 00 04 FF 98 81 04
			
			15 00 02 6E 2B
			15 00 02 6F 37
			15 00 02 3A A4
			15 00 02 8D 1A
			15 00 02 87 BA
			15 00 02 B2 D1
			15 00 02 88 0B
			15 00 02 38 01
			15 00 02 39 00
			15 00 02 B5 07
			15 00 02 31 75
			15 00 02 3B 98
			
			/*CMD_Page 1*/
			39 00 04 FF 98 81 01
			15 00 02 22 0A
			15 00 02 31 00
			15 00 02 53 40
			15 00 02 55 40
			15 00 02 50 99
			15 00 02 51 94
			15 00 02 60 10
			15 00 02 62 20
			/*Gamma start*/
			15 00 02 A0 00
			15 00 02 A1 00
			15 00 02 A2 15
			15 00 02 A3 14
			15 00 02 A4 1B
			15 00 02 A5 2F
			15 00 02 A6 25
			15 00 02 A7 24
			15 00 02 A8 80
			15 00 02 A9 1F
			15 00 02 AA 2C
			15 00 02 AB 6C
			15 00 02 AC 16
			15 00 02 AD 14
			15 00 02 AE 4D
			15 00 02 AF 20
			15 00 02 B0 29
			15 00 02 B1 4F
			15 00 02 B2 5F
			15 00 02 B3 23
			/*Neg Register*/
			15 00 02 C0 00
			15 00 02 C1 2E
			15 00 02 C2 3B
			15 00 02 C3 15
			15 00 02 C4 16
			15 00 02 C5 28
			15 00 02 C6 1A
			15 00 02 C7 1C
			15 00 02 C8 A7
			15 00 02 C9 1B
			15 00 02 CA 28
			15 00 02 CB 92
			15 00 02 CC 1F
			15 00 02 CD 1C
			15 00 02 CE 4B
			15 00 02 CF 1F
			15 00 02 D0 28
			15 00 02 D1 4E
			15 00 02 D2 5C
			15 00 02 D3 23
			
			/*Gamma End*/
			39 00 04 FF 98 81 00

			05 C8 01 11
			05 14 01 29	
        ];

        disp_timings0: display-timings {
            native-mode = <&dsi0_timing0>;
            dsi0_timing0: timing0 {
                clock-frequency = <70000000>;//时钟频率(hactive+ hsync-len + hfront-porch + hback-porch)*(vactive + vsync-len + vfront-porch + vback-porch) * Frame rate60Hz = 70060800
                hactive = <800>;    //水平像素点数
                vactive = <1280>;   //垂直像素点数
                hsync-len = <10>;   //水平同步信号宽度HSYNC/thp
                hback-porch = <40>; //水平同步后肩
                hfront-porch = <40>;//水平同步前肩
	            vsync-len = <2>;    //垂直同步信号宽度VSYNC/tvp
	            vback-porch = <20>; //垂直同步后肩
	            vfront-porch = <10>;//垂直同步前肩
	            hsync-active = <0>; //hsync激活有效电平为低电平
	            vsync-active = <0>; //vsync激活有效电平为低电平
	            de-active = <1>;    //de激活有效电平为高电平
                pixelclk-active = <0>; //pixelclk激活有效电平为低电平
            };
        };

        ports {
            #address-cells = <1>;
            #size-cells = <0>;

            port@0 {
                reg = <0>;
                panel_in_dsi0: endpoint {
                    remote-endpoint = <&dsi0_out_panel>;
                };
            };
        };
	};

    ports {
        #address-cells = <1>;
        #size-cells = <0>;

        port@1 {
            reg = <1>;
            dsi0_out_panel: endpoint {
                remote-endpoint = <&panel_in_dsi0>;
            };
        };
	};
};

    设备树配置好,检查好硬件屏幕的接口电路全部正确后,测试屏幕可以正常显示并进入系统桌面。看来还是顺利的。

 3、出现问题

      前面调试很顺利,当时测试的一个供应商样品10寸屏,后面批量供货了10个屏幕,连接主板一测试,开机只显示uboot的logo之后屏幕就黑屏了,系统能正常启动并进入linux内核,屏幕无显示,背光有亮。一样的程序驱动,样品屏可以点亮,批量屏不行。所以大概率怀疑是屏的问题。

       联系厂家说了情况,厂家说也是第一次遇到这种情况,双方反复确认硬件接口电路,没有问题。厂家出了另外一个屏幕初始化序列设置屏幕可以自行显示测试彩条,测试屏幕正常。问题未定位,提供整机给厂家,厂家找人测试了硬件,分析到屏幕的供电的VCC_3V3_LCD电压启动后有跌落。

 

      把屏幕的3.3V供电修改成使用RK3568核心板的3.3V供电后,系统启动后可以正常显示桌面图片。这是为什么呢?难道是内核启动后重新初始化控制屏幕的电源的IO导致电压临时降低的导致屏幕掉电需要重新初始屏幕?使用示波器测试U2芯片2脚与VCC_3V3_PRE的波形,其中黄色为2脚的控制波形,蓝色的为VCC_3V3_PRE波形,从波形看是控制信号在1秒后产生了8.8ms低电平,导致DC-DC关闭输出电压降低。

 

        分析一下屏幕的供电电源树, 外部电源->DC-DC->Q14开关管->屏幕3.3V ,  DC-DC的开关由GPIO1_B1控制, Q14开关管由 GPIO0_C7控制。设备树驱动如下图

	/*On-board peripherals  3.3V DC-DC poweren*/
	vcc_3v3_bp_power:vcc-3v3-bp-regulator {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v3_bp_power";
		enable-active-high;
		gpio = <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&vcc3v3_bp_en_pin>;

		regulator-always-on;
		
    };

	vcc1v8_lcd0_power: vcc1v8-lcd0-power-regulator {
        compatible = "regulator-fixed";
		regulator-name = "vcc1v8_lcd0_bl_power";
        enable-active-high;
        gpio = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&vcc1v8_lcd0_bl_en>;
        regulator-always-on;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
    }; 

  4、分析解决问题

        按上面的分析,uboot能显示logo,说明屏幕应该没有问题,uboot程序使用应用程序的设备树初始化了屏幕,内核启动后会调用panel-simple.c驱动屏幕。为分析问题做了如下测试:

       (1)、panel-simple.c增加打印信息,确认了内核启动后,调用了probe函数,没有调用这个文件中初始化屏幕的函数代码,所以是不是驱动问题,调用一下初始就可以了,修改代码在probe阶段时初始化一次屏幕,依然不行。

       (2)、关闭uboot中屏幕驱动代码,系统启动后uboot logo不显示了,系统启动显示黑屏,并且显示一个光标。panel-simple.c的屏幕初始化代码被调用过。

        以上测试未解决问题,尝试检查一下regulator的设备树, 给前级regulator  vcc_3v3_bp_power增加了regulator-boot-on 属性。屏幕开机可以正常显示了。因此确认了屏幕电源控制时序的问题。此时再次测量U2芯片2脚与VCC_3V3_PRE的波形,发现电压跌落还在,所以上面的测试到的启动后1秒后的电压跌落应该是uboot初始化屏幕导致的,不是此问题的原因。至于真正的波形应该在2秒左右的位置,有时间可以测量验证下,项目时间紧就不深究了。

      最后献上修改好的regulator设备树。

                    

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

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

相关文章

鸿蒙原生应用/元服务开发-Stage模型能力接口(十)下

ohos.app.form.FormExtensionAbility (FormExtensionAbility) 系统能力&#xff1a;SystemCapability.Ability.Form 示例 import FormExtensionAbility from ohos.app.form.FormExtensionAbility; import formBindingData from ohos.app.form.formBindingData; import formP…

python读取eps矢量图片

再利用Image读取时&#xff0c;提示报错&#xff1a; OSError: Unable to locate Ghostscript on paths 解决办法&#xff1a; 首先要安裝ghostscript软件&#xff1a;Ghostscript : Downloads 安装后记住安装路径&#xff0c;并找到bin的文件夹 之后在使用时&#xff0c;在代…

element表格排序功能

官方展示 个人项目 可以分别对每一项数据进行筛选 注&#xff1a;筛选的数据不能是字符串类型必须是数字类型&#xff0c;否则筛选会乱排序 html <el-table :data"tableData" border height"600" style"width: 100%"><el-table-co…

K8s实战-init容器

概念&#xff1a; 初始化容器的概念 比如一个容器A依赖其他容器&#xff0c;可以为A设置多个 依赖容易A1&#xff0c;A2&#xff0c;A3 A1,A2,A3要按照顺序启动&#xff0c;A1没有启动启动起来的 话&#xff0c;A2,A3是不会启动的&#xff0c;直到所有的静态容器全 部启动完毕…

基于Java车间工时管理系统(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

[stm32f103]DMA

简介 • DMA &#xff08; Direct Memory Access &#xff09;直接存储器存取 • DMA 可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须 CPU 干预&#xff0c;节省了 CPU 的资源 • 12 个独立可配置的通道&#xff1a; DMA1 &#xff08; 7 个通道…

Python爬取今日头条热门文章

前言 今日头条文章收益是没有任何门槛&#xff0c;只要是你发布文章&#xff0c;每篇文章的阅读量超过1000就能有收益&#xff0c;阅读量越多收益越高。于是乎我就有了个大胆的想法。何不利用Python爬虫&#xff0c;爬取热门文章&#xff0c;然后完成自动化发布文章呢&#xf…

独立容器 Rancher Server 证书过期解决

问题 Rancher无法登录 容器报错X509&#xff1a;certificate has expired or is not ye valid 在某天需要发布新版本的时候&#xff0c;发现rancher无法登录&#xff0c;于是到服务器上查看rancher日志&#xff0c;发现以下内容&#xff1a; docker logs -f rancher --since10…

Large-Precision Sign using PBS

参考文献&#xff1a; [CLOT21] Chillotti I, Ligier D, Orfila J B, et al. Improved programmable bootstrapping with larger precision and efficient arithmetic circuits for TFHE[C]//Advances in Cryptology–ASIACRYPT 2021: 27th International Conference on the T…

【强化学习】基于蒙特卡洛MC与时序差分TD的简易21点游戏应用

1. 本文将强化学习方法&#xff08;MC、Sarsa、Q learning&#xff09;应用于“S21点的简单纸牌游戏”。 类似于Sutton和Barto的21点游戏示例&#xff0c;但请注意&#xff0c;纸牌游戏的规则是不同且非标准的。 2. 为方便描述&#xff0c;过程使用代码截图&#xff0c;文末附链…

JavaSE基础50题:25. 查找数组中指定元素(顺序查找)

概述 给定一个数组&#xff0c;再给定一个元素&#xff0c;找出该元素在数组中的位置。 for循环遍历 【概述】 一个一个找&#xff0c;比较慢。 想要快一点的方法&#xff0c;可以使用二分查找&#xff0c;在后续《JavaSE基础50题》专栏中27题中详细讲解。 【代码】 public …

MySql篇——MySql使用常见问题及解决办法

这里汇总MySql使用常见问题及解决办法&#xff0c;会持续更新。 问题1.ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。 含义&#xff1a;你设置的密码不符合当前的密码等级。 可使用 SHOW VARIABLES LIKE validate_password%; 查看…

C#中的Attribute详解(上)

C#中的Attribute详解&#xff08;上&#xff09; 一、Attribute是什么二、Attribute的作用三、Attribute与注释的区别四、系统Attribute范例1、如果不使用Attribute&#xff0c;为了区分这四类静态方法&#xff0c;我们只能通过注释来说明&#xff0c;但这样做会给系统带来很多…

计算机图形学光线追踪大作业C++基于Optix为框架实现的光线追踪算法合集,含直射光阴影效果、漫反射阴影效果、镜面反射效果等示例

MineRay 使用Optix为框架实现的光线追踪算法。 包含4个示例&#xff0c;直射光阴影效果、漫反射阴影效果、镜面反射效果、折射效果 环境需求 本项目在Windows 10中测试&#xff0c;以下环境为Windows中的环境 CUDA 10.1 OptiX 7 SDK cmake 编译方式 使用cmake编译 打开Mi…

分布式、CAP 和 BASE 理论

在计算机科学领域&#xff0c;分布式系统是一门极具挑战性的研究方向&#xff0c;也是互联网应用中必不可少的优化实践&#xff0c;而 CAP 理论和 BASE 理论则是分布式系统中的两个关键的概念。 什么是分布式系统 首先&#xff0c;让我们来谈谈分布式系统。你可以将分布式系统…

C++进阶--继承和多态常见题目

继承和多态常见题目 概念考查问答题 概念考查 下面哪种面向对象的方法可以让你变得富有( A) A: 继承   B: 封装   C: 多态   D: 抽象 这道题说哪种面向对象的方法可以让我们更富有&#xff0c;也就是东西更多&#xff0c;那么一定是继承无疑了&#xff0c;因为继承可以让…

ArcGIS高程点生成等高线

基本步骤&#xff1a;数据清洗→创建TIN→TIN转栅格→等值线→平滑线。 1.&#xff08;重要&#xff09;数据清理&#xff1a;删除高程点中的高程异常值数据。 2.创建TIN:系统工具→3D Analyst Tools→数据管理→TIN→创建TIN&#xff08;可直接搜索工具TIN&#xff09;。 单击…

移动机器人规划、控制算法初识

规划与控制PNC(PlanningandControl) 1 路径规划算法&#xff1a; 移动机器人路径规划算法总结_机器人运动轨迹算法-CSDN博客 2 控制算法&#xff1a; 机器人控制算法综述_机器人控制技术综述-CSDN博客 机器人控制算法简要概述_智能控制算法-CSDN博客 学习资源&#xff1a; …

VSCode 未装插件

EditorConfig for VS Code&#xff1a;自定义代码规范&#xff0c;按照自己指定的规则而不是编辑器默认的格式化。 ES7 React/Redux/React-Native snippets&#xff1a;款苏插入React代码片段。 Material Icon Theme&#xff1a;文件图标主题。 Prettier - Code formatte…

自然语言处理(第16课 机器翻译4、5/5)

一、学习目标 1.学习各种粒度的系统融合方法 2.学习两类译文评估标准 3.学习语音翻译和文本翻译的不同 4.学习语音翻译实现方法 二、系统融合 以一个最简单的例子来说明系统融合&#xff0c;就是相当于用多个翻译引擎得到不同的翻译结果&#xff0c;然后选择其中最好的作为…