Android—— MIPI屏调试
一、实现步骤
1、在kernel/arch/arm/boot/dts/lcd-box.dtsi文件中打开&dsi0节点,关闭其他显示面板接口(&edp_panel、&lvds_panel)
--- a/kernel/arch/arm/boot/dts/lcd-box.dtsi
+++ b/kernel/arch/arm/boot/dts/lcd-box.dtsi
@@ -5,14 +5,14 @@
&dsi0 {
//enable-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
- reset-gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>;
- status = "disabled";
- rockchip,lane-rate = <1000>;
+ status = "okay";
+ rockchip,lane-rate = <546>;
@@ -276,7 +254,7 @@
//enable-delay-ms = <120>;
pinctrl-0 = <&lcd_cs>;
power-supply = <&vcc_lcd>;
- status = "okay";
+ status = "disabled";
display-timings {
native-mode = <&timing_edp>;
@@ -300,7 +278,7 @@
};
&lvds_panel {
- status = "okay";
+ status = "disabled";
2、根据屏幕厂商提供的初始化指令将panel-init-sequence填好
该指令用于下发到屏幕IC,部分屏幕IC集成了初始化指令则不需要,然后打开文件会看到对应的初始化代码,将初始化指令转换为RK可以识别的格式。大致步骤如下:
(1)打开初始化指令文件,如下图:

从上面可以看到屏幕的一些参数:分辨率(800x1280),使能电压(5.5V)以及差分时钟通道个数(4 Lane) ,转化规则rk说明书上面有,用得比较多的就是DCS Write,0x15,0x39。
1、0x15
REGISTER,01,00,该指令对应的是:15 00 02 01 00
15 :表示0x15指令
00 :表示没有延时
02 :表示2个数据长度 01 00
01 :表示寄存器地址
00 :表示1个数据2、0x39
REGISTER,FF,98,81,03,该指令对应的是:39 00 04 FF 98 81 03
39 :表示0x39指令
00 :表示没有延时
04 :表示4个数据长度 FF 98 81 03
FF :表示寄存器地址
98 81 03 :表示数据1 数据2 数据33、DCS Write
WriteComm (0xAD)<----------------->这是写命令操作,命令地址(寄存器地址)0xAD
WriteData (0xEB)<----------------->这是写数据操作,数据为:0xEB
WriteData (0x98)<----------------->这是写数据操作,数据为:0x98
WriteData (0x67)<----------------->这是写数据操作,数据为:0x67
数据是多个数据,所以用的指令是0x39,39 00 11 AD EB 98 67 如果
WriteComm (0xAD)
WriteData (0x56),则转化为:15 00 02 AD 564.
SSD_SEND(地址,寄存器1的值,寄存器2的值,寄存器3值...)
SSD_SEND(0x01,0xE0,0xAB,0xBA);
SSD_SEND(0x01,0xE1,0xBA,0xAB);
SSD_SEND(0x01,0xB1,0x10,0x01,0x47,0xFF);
SSD_SEND(0x01,0xB2,0x0C,0x14,0x04,0x50,0x50,0x14);转换为:
39 00 03 E0 AB BA
39 00 03 E1 BA AB
39 00 05 B1 10 01 47 FF
39 00 07 B2 0C 14 04 50 50 14
按照瑞芯微官方MIPI屏适配手册以此类推,并将他写到panel-init-sequence数组里面。
(2)完成初始指令时,他的末尾都会有一个ExitSleep指令,如图所示:

该指令的翻译为: 39 00 04 FF 98 81 00 05 78 01 11 05 14 01 29 将它们添加到panel-init-sequence数组末尾,作为屏幕唤醒代码。
(3)添加EnterSleep指令到panel-exit-sequence数组里,实现休眠功能,威耀供应商提供的MIPI屏幕采用的时统一的代码,如下图所示:

3、修改屏参display-timings
按照规格书来配置屏幕的各个参数

1、不要漏了lane-rate,这里是4;
2、clock-frequency的计算公式:
clock-frequency =(Hsync+HBP+HAdr+HFP)x(Vsync+VBP+VAdr+VFP)x FPS ,其中FPS为屏幕刷新率。
3、lane-rate的计算公式,
lane-rate= clk(时钟频率) * RGB(3) * BIT(8) / lane_num ,lane_num表示差分时钟通道数。
4、确定一下reset-gpio
根据硬件原理图,确定reset-gpio

reset-gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>;
配置如下:
&dsi0 {reset-gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>;status = "okay";rockchip,lane-rate = <546>;display-timings {native-mode = <&timing_mipi>;timing_mipi: timing_mipi {clock-frequency = <75000000>;hactive = <800>;vactive = <1200>;hsync-len = <10>;hback-porch = <40>;hfront-porch = <40>;vsync-len = <5>;vback-porch = <20>;vfront-porch = <30>;hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;
}}}
5、检测硬件
(1)查看屏幕的电路设计,针对性的测量电路上的使能引脚和接地脚的电压,然后和硬件设计数据比对,判断是否符合标准
(2)在测量完电路没有问题的情况下,接着我们来通过示波器测量一下reset脚的波形和对应屏幕时钟的差分信号,跟规格书进行比较。

我们reset-gpio的控制则在kernel/drivers/gpu/drm/panel/panel-simple.c

这里可以看到完全不符合供应商屏幕规格书显示的波形,屏幕规格书显示波形转换为代码应该是:
gpiod_direction_output(p->reset_gpio, 1);gpiod_direction_output(p->reset_gpio, 0);gpiod_direction_output(p->reset_gpio, 1);
而我们这边的代码则是这样的顺序:
gpiod_direction_output(p->reset_gpio, 1);gpiod_direction_output(p->reset_gpio, 0);所以我们要再加上拉高reset-gpio的操作:“gpiod_direction_output(p->reset_gpio, 1);”,
代码如图所示:

6、编译kernel并进行烧录,发现屏幕正常亮起
二、调试常见问题
1、在点亮屏后刚开始有开机 logo 闪烁,向右偏移了近半个屏幕的长度
重新确认 clock-frequence 。(不一定要理论数值,可以适当调整大小,理论数值只是作为标准来参考)
2、显示图像偏移比较大
稍微降低 hs_clk ,由 504 降低到 496 解决。
3、垂直方向会显示多一点内容
调整 VFP 后解决。
4、下面会有黑边
稍微增大 VBP 后解决
5、开机 android 最左边会被裁剪一部分
增大 HBP 后解决
6、 显示偏移、图像位置偏差
timing 中的参数设置有误,优先确认。
7、 白屏屏在进出睡眠或者显示过程中白屏 ,唤醒屏幕闪白光
背光早亮了,很有可能是下序列mdelay太久,改小点就沒有这个问题了。根本原因屏幕初始化序列下慢了。 sleep out(0x11)和 display on(0x29)之间需要 mdelay(120ms)左右。
8、花屏
说明 lcd 初始化成功,但是没有 rgb 刷过来。 timing 中的参数设置有误。优先确认 pclk。 花屏还可能是总线速度有问题。 开机就花屏最简单的解决方式是,在 Init 结束的地方加一个刷黑屏的功能。也可以在睡眠函数里加延时函数。
9、屏幕抖动
测时序,延时不足
10、屏幕闪动
通过调节电压来稳定,一般调节的电压为VRL、VRH、VDV和VCM
11、 唤醒闪屏问题
这是由于每次重新RST下序列过程delay久了导致,适当減少delay时间
12、屏幕唤醒显示灰色底面
寄存器没有使能外部升压电路
13、水波纹
通常都是rgb interface polarity导致,需要调整pclk hsync vsync de极性使之符合平台极性
14、图像颜色不正常
可能时钟型号极性反了 、VCOM 调节不正常 、进行 GAMMA 校正
相关文章:
Android—— MIPI屏调试
一、实现步骤 1、在kernel/arch/arm/boot/dts/lcd-box.dtsi文件中打开&dsi0节点,关闭其他显示面板接口(&edp_panel、&lvds_panel) --- a/kernel/arch/arm/boot/dts/lcd-box.dtsib/kernel/arch/arm/boot/dts/lcd-box.dtsi-5,14 …...
BLE协议—协议栈基础
BLE协议—协议栈基础 BLE协议栈基础通用访问配置文件层(Generic Access Profile,GAP)GAP角色设备配置模式和规程安全模式广播和扫描 BLE协议栈基础 蓝牙BLE协议栈包含三部分:主机、主机接口层和控制器。 主机:逻辑链路…...
yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏
文章目录 1. 知识蒸馏理论2. yolov8 蒸馏代码应用2.1 环境配置2.2 训练模型(1) 训练教师模型(2) 训练学生模型baseline(3) 蒸馏训练3. 知识蒸馏代码详解3.1 蒸馏参数设置3.2 蒸馏损失代码讲解3.2.1 Feature based loss3.2.1 Logit loss3.3 获取蒸馏的feature map及channels...
03-微服务-Ribbon负载均衡
Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢? 1.2.源码跟踪 为什么我们只输入…...
2023新年总结与展望
2023年总结 对Spring Cloud微服务更加熟悉,对consul、kafka、gateway的熟悉和掌握更近一步对docker和虚拟化部署更加熟悉对PostgreSQL数据库和JPA更加熟悉对clickhouse数据库和大数据分析更加熟悉对netty和socket网络通信更加熟悉 2024年flag 继续深入研究和学习…...
论文阅读——SG-Former
SG-Former: Self-guided Transformer with Evolving Token Reallocation 1. Introduction 方法的核心是利用显著性图,根据每个区域的显著性重新分配tokens。显著性图是通过混合规模的自我关注来估计的,并在训练过程中自我进化。直观地说,我们…...
常用环境部署(十三)——GitLab整体备份及迁移
一、GitLab备份 注意:由于我的GitLab是docker安装的,所以我的操作都是在容器内操作的,大家如果不是用docker安装的则直接执行命令就行。 1、Docker安装GitLab 链接:常用环境部署(八)——Docker安装GitLab-CSDN博客 2、GitLab备…...
海外数据中心代理与住宅代理:优缺点全面对比
数据中心代理和住宅代理是为了匿名而开发的,通过替换网站眼中您自己的 IP 地址。然而,它们在价格、功能、性能或最佳用例方面存在一些差异。那么,这些代理类型到底有什么相似点和不同点呢? 一、什么是数据中心代理? 1…...
springboot实现OCR
1、引入依赖 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version> </dependency> 2、config Configuration public class TessOcrConfiguration {Beanpublic …...
【Scala 】注解
在 Scala 中,你可以使用注解来为类、方法或字段添加元数据,影响它们的行为。Scala 的注解使用与 Java 类似,但是 Scala 也支持自定义注解。 文章目录 注解的常见使用方法自定义注解 注解的常见使用方法 以下是一些 Scala 中常见的注解以及它…...
数通基础知识总结
1. 基础概念 1.1. 通信基本原理 通信基本原理涉及信息的生成、编码、传输和解码的过程。在实际应用中,例如电话通信,信息通过话筒转换成模拟信号,经过传输线路传递到接收端,再由耳机解码还原为可理解的信息。 1.2. 信道和信号 …...
机器学习深度学习面试笔记
机器学习&深度学习面试笔记 机器学习Q. 在线性回归中,如果自变量之间存在多重共线性,会导致什么问题?如何检测和处理多重共线性?Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)?它们与普通线性回…...
安卓和Android是两种不同的操作系统?
实际上,安卓和Android并不是同一种操作系统! Android是由Google开发并维护更新的一款操作系统,目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机:哪个更好?Google Pixel 与 Apple iPhone哪个手机才是性价比最…...
Java学习——设计模式——结构型模式2
文章目录 结构型模式装饰者模式桥接模式外观模式组合模式享元模式 结构型模式 结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能,但结构型模式不仅仅简单地使用继承,而更多地通过…...
什么是Maven ??? (以及关于依赖,中央仓库,国内源)
文章目录 什么是 Maven创建第一个 Maven 项目依赖管理Maven 的仓库Maven 如何设置国内源 什么是 Maven Maven :用于构建和管理任何基于java的项目的工具。**说白了就是管理 Java项目 的工具。**我们希望我们已经创建了一些东西,可以使Java开发人员的日常…...
c++期末考题笔试来咯
最后一道大题题目再现 写一个person类,有姓名,性别,年龄。然后在此基础上派生出教师类和学生类。教师类增加了以下数据:工号,职称,工资。学生类增加了以下数据成员:学号,专业&#…...
目标检测篇:如何根据xml标注文件生成类别classes的json文件
1. 介绍 之前在做目标检测任务的时候,发现很多的数据集仅有数据(只有图片标注的xml文件),没有关于类别的json文件,为了以后方便使用,这里记录一下 一般来说,yolo标注的数据集,只有第一个是数字类别&#x…...
spring见解2基于注解的IOC配置
3.基于注解的IOC配置 学习基于注解的IOC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。 3.1.创建工程 3.1.1.pom.xml <?xml version"1.0" en…...
Uncaught TypeError: Cannot read property ‘snj‘ of null
项目场景: 项目相关背景: 调试项目时,控制台出现红色报错信息 问题描述 问题: 调试项目时,控制台出现如下所示的报错信息: Uncaught TypeError: Cannot read property snj of nullat T.Inj.Ya [as Inj…...
Jenkins基础教程
目录 第一章、快速了解Jenkins1.1)Jenkins中一些概念介绍1.2)Jenkins和maven用途上的区别1.3)为什么使用Jenkins1.4)学习过程中的疑问 第二章、安装Jenkins2.1)安装之前的准备2.2)Windows中Jenkins下载安装…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
