当前位置: 首页 > news >正文

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节点&#xff0c;关闭其他显示面板接口&#xff08;&edp_panel、&lvds_panel&#xff09; --- a/kernel/arch/arm/boot/dts/lcd-box.dtsib/kernel/arch/arm/boot/dts/lcd-box.dtsi-5,14 …...

BLE协议—协议栈基础

BLE协议—协议栈基础 BLE协议栈基础通用访问配置文件层&#xff08;Generic Access Profile&#xff0c;GAP&#xff09;GAP角色设备配置模式和规程安全模式广播和扫描 BLE协议栈基础 蓝牙BLE协议栈包含三部分&#xff1a;主机、主机接口层和控制器。 主机&#xff1a;逻辑链路…...

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的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 1.2.源码跟踪 为什么我们只输入…...

2023新年总结与展望

2023年总结 对Spring Cloud微服务更加熟悉&#xff0c;对consul、kafka、gateway的熟悉和掌握更近一步对docker和虚拟化部署更加熟悉对PostgreSQL数据库和JPA更加熟悉对clickhouse数据库和大数据分析更加熟悉对netty和socket网络通信更加熟悉 2024年flag 继续深入研究和学习…...

论文阅读——SG-Former

SG-Former: Self-guided Transformer with Evolving Token Reallocation 1. Introduction 方法的核心是利用显著性图&#xff0c;根据每个区域的显著性重新分配tokens。显著性图是通过混合规模的自我关注来估计的&#xff0c;并在训练过程中自我进化。直观地说&#xff0c;我们…...

常用环境部署(十三)——GitLab整体备份及迁移

一、GitLab备份 注意&#xff1a;由于我的GitLab是docker安装的&#xff0c;所以我的操作都是在容器内操作的&#xff0c;大家如果不是用docker安装的则直接执行命令就行。 1、Docker安装GitLab 链接&#xff1a;常用环境部署(八)——Docker安装GitLab-CSDN博客 2、GitLab备…...

海外数据中心代理与住宅代理:优缺点全面对比

数据中心代理和住宅代理是为了匿名而开发的&#xff0c;通过替换网站眼中您自己的 IP 地址。然而&#xff0c;它们在价格、功能、性能或最佳用例方面存在一些差异。那么&#xff0c;这些代理类型到底有什么相似点和不同点呢&#xff1f; 一、什么是数据中心代理&#xff1f; 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 中&#xff0c;你可以使用注解来为类、方法或字段添加元数据&#xff0c;影响它们的行为。Scala 的注解使用与 Java 类似&#xff0c;但是 Scala 也支持自定义注解。 文章目录 注解的常见使用方法自定义注解 注解的常见使用方法 以下是一些 Scala 中常见的注解以及它…...

数通基础知识总结

1. 基础概念 1.1. 通信基本原理 通信基本原理涉及信息的生成、编码、传输和解码的过程。在实际应用中&#xff0c;例如电话通信&#xff0c;信息通过话筒转换成模拟信号&#xff0c;经过传输线路传递到接收端&#xff0c;再由耳机解码还原为可理解的信息。 1.2. 信道和信号 …...

机器学习深度学习面试笔记

机器学习&深度学习面试笔记 机器学习Q. 在线性回归中&#xff0c;如果自变量之间存在多重共线性&#xff0c;会导致什么问题&#xff1f;如何检测和处理多重共线性&#xff1f;Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)&#xff1f;它们与普通线性回…...

安卓和Android是两种不同的操作系统?

实际上&#xff0c;安卓和Android并不是同一种操作系统&#xff01; Android是由Google开发并维护更新的一款操作系统&#xff0c;目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机&#xff1a;哪个更好&#xff1f;Google Pixel 与 Apple iPhone哪个手机才是性价比最…...

Java学习——设计模式——结构型模式2

文章目录 结构型模式装饰者模式桥接模式外观模式组合模式享元模式 结构型模式 结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能&#xff0c;但结构型模式不仅仅简单地使用继承&#xff0c;而更多地通过…...

什么是Maven ??? (以及关于依赖,中央仓库,国内源)

文章目录 什么是 Maven创建第一个 Maven 项目依赖管理Maven 的仓库Maven 如何设置国内源 什么是 Maven Maven &#xff1a;用于构建和管理任何基于java的项目的工具。**说白了就是管理 Java项目 的工具。**我们希望我们已经创建了一些东西&#xff0c;可以使Java开发人员的日常…...

c++期末考题笔试来咯

最后一道大题题目再现 写一个person类&#xff0c;有姓名&#xff0c;性别&#xff0c;年龄。然后在此基础上派生出教师类和学生类。教师类增加了以下数据&#xff1a;工号&#xff0c;职称&#xff0c;工资。学生类增加了以下数据成员&#xff1a;学号&#xff0c;专业&#…...

目标检测篇:如何根据xml标注文件生成类别classes的json文件

1. 介绍 之前在做目标检测任务的时候&#xff0c;发现很多的数据集仅有数据(只有图片标注的xml文件)&#xff0c;没有关于类别的json文件&#xff0c;为了以后方便使用&#xff0c;这里记录一下 一般来说&#xff0c;yolo标注的数据集&#xff0c;只有第一个是数字类别&#x…...

spring见解2基于注解的IOC配置

3.基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 3.1.创建工程 3.1.1.pom.xml <?xml version"1.0" en…...

Uncaught TypeError: Cannot read property ‘snj‘ of null

项目场景&#xff1a; 项目相关背景&#xff1a; 调试项目时&#xff0c;控制台出现红色报错信息 问题描述 问题&#xff1a; 调试项目时&#xff0c;控制台出现如下所示的报错信息&#xff1a; Uncaught TypeError: Cannot read property snj of nullat T.Inj.Ya [as Inj…...

Jenkins基础教程

目录 第一章、快速了解Jenkins1.1&#xff09;Jenkins中一些概念介绍1.2&#xff09;Jenkins和maven用途上的区别1.3&#xff09;为什么使用Jenkins1.4&#xff09;学习过程中的疑问 第二章、安装Jenkins2.1&#xff09;安装之前的准备2.2&#xff09;Windows中Jenkins下载安装…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...