五、kernel修改屏幕配置
2.3、修改屏幕配置
2.3.1、配置
gpio
修改 ./rk_linux_sdk/kernel/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10.dtsi
&dsi0_panel {
power-supply = <&vcc3v3_lcd0_n>;
reset-gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&lcd0_rst_gpio>;
rotation = <270>; // 设置屏幕旋转为90度
}; lcd0 {
lcd0_rst_gpio: lcd0-rst-gpio {
rockchip,pins = <3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
};
}; &vcc3v3_lcd0_n {
gpio = <&gpio3 RK_PC3 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
dsi0_panel
修改 ./rk_linux_sdk/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
&dsi0 {
status = "okay";
//power-supply = <&mipi_dsi0_power>; dsi0_panel: panel@0 {
compatible = "simple-panel-dsi";
reg = <0>;
//backlight = <&backlight>;
//reset-gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_LOW>;
//enable-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>;
enable-delay-ms = <1035>;
prepare-delay-ms = <399>;
reset-delay-ms = <2000>;
init-delay-ms = <20>;
unprepare-delay-ms = <0>;
disable-delay-ms = <20>; size,width = <66>;
size,height = <156>; 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>; panel-init-sequence = [
15 00 02 fe 26
。。。
15 00 02 fe 00
15 00 02 fa 07
15 00 02 c2 08
15 00 02 35 00
39 05 03 51 0d bb 05 c8 01 11
05 c8 01 29
];
panel-exit-sequence = [
05 78 01 28
05 00 01 10
];
disp_timings0: display-timings {
native-mode = <&dsi0_timing0>;
dsi0_timing0: timing0 {
clock-frequency = <178483200>;
hactive = <1080>;
vactive = <1920>;
hsync-len = <8>;
hback-porch = <8>;
hfront-porch = <100>;
vsync-len = <4>;
vback-porch = <8>;
vfront-porch = <8>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
panel_in_dsi: endpoint {
remote-endpoint = <&dsi_out_panel>;
};
};
};
}; ports {
#address-cells = <1>;
#size-cells = <0>; port@1 {
reg = <1>;
dsi_out_panel: endpoint {
remote-endpoint = <&panel_in_dsi>;
};
};
};
};
2.3.2、参数分析
size,width = <66>
和size,height = <156>;
这两行定义了显示面板的物理宽度和高度,单位为毫米。在这个例子中,显示面板的宽度为 66mm,高度为 156mm。
dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
这一行设置了 MIPI DSI 的工作模式标志:
MIPI_DSI_MODE_VIDEO
:使用视频模式。MIPI_DSI_MODE_VIDEO_BURST
:使用视频突发模式。MIPI_DSI_MODE_LPM
:启用低功耗模式。MIPI_DSI_MODE_EOT_PACKET
:启用数据包结束标志。
这些标志定义了 MIPI DSI 接口的行为。
dsi,format = <MIPI_DSI_FMT_RGB888>;
这一行指定了显示数据的格式为 RGB888,也就是每个像素使用 24 位色深。
dsi,lanes = <4>;
这里定义了 MIPI DSI 使用的传输通道数。
<4>
表示使用 4 条数据通道来传输数据。panel-init-sequence
和panel-exit-sequence
panel-init-sequence
:这部分是显示面板的初始化命令序列,通常这些命令会发送到显示器,以设置其工作模式、时序和其他显示参数。panel-exit-sequence
:这部分是显示器退出时的命令序列,通常用于关闭显示或进入低功耗状态。
disp_timings0: display-timings
这部分定义了显示的时序设置:
clock-frequency = <178483200>;
:显示时钟频率为 178483200Hz。hactive = <1080>;
和vactive = <1920>;
:显示的有效像素分辨率为 1080x1920。hsync-len
,hback-porch
,hfront-porch
,vsync-len
,vback-porch
,vfront-porch
:这些是显示的水平同步宽度、水平回扫、水平前扫、垂直同步宽度、垂直回扫和垂直前扫的设置。这些值影响显示的刷新率和屏幕的扫描模式。hsync-active = <0>;
和vsync-active = <0>;
:这指定了同步信号的极性,0
表示低电平有效。de-active = <1>;
和pixelclk-active = <0>;
:分别表示显示使能信号和像素时钟的极性。
2.3.3、panel-init-sequence 设置规则
panel-init-sequence
是用于定义显示面板初始化时发送的命令序列的部分,它通常会在显示面板上电并准备启动时执行。这些命令直接控制显示器的各个功能,比如电源开关、显示模式、时序设置、颜色格式等。
设置规则:
panel-init-sequence
是一个数组,数组中的每个元素都是一个命令,这些命令按照初始化顺序发送到显示面板。通常,每个命令的格式如下:
<command_length> <command_data...>
其中:
command_length
:表示该命令数据的长度。command_data...
:实际发送给显示器的命令数据。根据显示器的要求,可能是字节值或者具体的控制字。
一般规则:
命令长度和数据格式:
command_length
是 8 位或 16 位数字,表示该命令的数据长度(以字节为单位)。例如,39 05
表示这个命令的数据长度为 39 个字节。command_data
是命令的具体数据,可以是控制信号、颜色数据、时序数据等。显示器根据这些命令来改变其状态。
控制命令:控制命令通常以
0x15
开头,表示“发送控制命令”,后面跟随的字节可能是控制代码和数据。例如:15 00 02 51 ff
这表示发送一个控制命令
0x15
,后面紧跟着控制数据00 02 51 ff
。数据命令:数据命令通常以
0x39
开头,表示“发送数据”,后面是要发送的字节流。例如:39 05 05 2a 00 00 04 37
这表示发送一个数据命令
0x39
,后面是数据05 05 2a 00 00 04 37
。延迟命令:一些命令可能会包含延迟时间,通常会在
panel-init-sequence
中插入一个延迟命令。延迟命令通常以0x15
命令为基础,例如:15 00 02 51 ff
后面的数据可能包含延迟时间,表示等待指定的毫秒数。
不同命令的功能:
0x39
:通常用于写数据命令,包含显示控制或时序调整数据。0x15
:通常用于写控制命令或控制信号。0x29
:可能用于显示控制或使能显示。0x2A
,0x2B
,0x2C
:通常涉及像素数据的写入或显示区块控制。
编写时注意事项:
- 确保命令与显示器的数据手册一致。每个显示器的初始化命令和顺序可能会有所不同,必须根据显示器的要求来编写命令。
- 如果显示器要求在某些命令之间等待(如发送完初始化命令后等待几毫秒),应插入延迟命令。
- 初始化序列中的命令顺序非常重要,错误的顺序可能会导致显示器不正常工作。
示例:
以下是一个典型的 panel-init-sequence
示例:
panel-init-sequence = [
39 05 05 2a 00 00 04 37 // 第一个初始化命令
39 05 05 2b 00 00 04 d7 // 第二个初始化命令
15 00 02 51 ff // 控制命令,可能是颜色设置或启用显示
15 00 02 35 00 // 控制命令,可能是显示模式的设置
39 05 03 44 02 6c // 数据命令,可能是时序设置
15 00 02 f0 50 // 控制命令,可能是电源控制
39 05 03 b0 0e 0e // 数据命令,控制显示区域设置
];
五、kernel修改屏幕配置的更多相关文章
- nuc950支持nand的mtd驱动的kernel修改
支持nand的mtd驱动的kernel修改 一.更新nanddriver文件 将新的nanddriver文件nuc900_nand.c放到kernel的drivers/mtd/nand目录下 二.修改 ...
- hi3531 SDK 编译 kernel, 修改 参数
开发环境用户指南上这么写的 3.1 内核源代码 成功安装Hi3531 SDK后,内核源代码已存放于SDK目录下的osdrv/目录中,用户可 直接进入目录进行相关操作. 3.2 配置内核 如果对内核和H ...
- vue全家桶安装以及修改webpack配置新增vue项目启动方式
一.安装node环境(自带npm) 下载地址 二.替换下载源 // 淘宝 NPM 镜像 npm install -g cnpm --registry=https://registry.npm.taob ...
- CentOS工作内容(五)单一网卡配置多个IP
CentOS工作内容(五)单一网卡配置多个IP 用到的快捷键 tab 自动补齐(有不知道的吗) ctrl+a 移动到当前行的开头(a ahead) ctrl+e 移动到当前行的开头(e end) ct ...
- SuSE Linux修改网卡配置
http://blog.chinaunix.net/uid-20765159-id-1850854.html SuSE Linux修改网卡配置 2010 SuSE linux ...
- Android Studio(五):修改Android Studio项目包名
Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...
- discuz论坛移植修改数据库配置
从其他地方拷贝的discuz源码,可能需要修改数据库配置 分别打开discuz目录下面以下三个文件 discuzRoot/uc_server/data/config.inc.phpdiscuzRoot ...
- ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段
Loop at screen会loop处理屏幕上的每一个组件,并对其做相应的处理. SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME.PARAMETERS ...
- SQL Server安装完成后3个需要立即修改的配置选项(转载)
你用安装向导安装了全新的SQL Server,最后你点击了完成按钮.哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的. 是的,你没看 ...
- Cent OS 修改网卡配置
进入网卡修改界面 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 描述网卡设备名称 BOOTPROTO=static 静态IP,这里一 ...
随机推荐
- 【C#】Winform嵌入dll到exe中
[C#]Winform嵌入dll到exe中 零.问题 最近在做一个上位机,需要保存数据,所以引用了一些Excel的组件,但是比较麻烦的是会多出几个DLL文件,压缩打包不方便使用,于是想能不能嵌入到ex ...
- nodejs目录与文件遍历
路径相关函数 path.basename('/foo/bar/baz/asdf/quux.html'); // Returns: 'quux.html' path.basename('/foo/bar ...
- 成都信息工程大学天梯赛 L2-2 不要刁难我们了
赛时板子没写对,原因就是标记数组的位置放错了,放到了while外面,导致这样距离数组是不会更新的,板子还是要自己多写少看 #include <bits/stdc++.h> #define ...
- 使用傅里叶级数和Python表示方波
引言 在信号处理和数字通信中,方波是非常常见的一种波形.方波是一种周期性波形,信号在两个固定的幅度之间跳跃,通常是"高"与"低"的状态.你可能会问,如何通过数学 ...
- jmeter使用:解决压测时获取token问题
在执行压测过程中,首先要执行登录接口来获取token.如果并发数比较大只需要一个用户的登录token,可以使用setup线程组.如果是模拟多个用户登录获取token,需要使用仅一次控制器. 一.添加s ...
- sonarqube+gitlab+jenkins+maven集成搭建 (五)
Jenkins与SonarQube Jenkins 配置 SonarQube在 SonarQube 中生成 Server authentication token登录 SonarQube 后,在 &q ...
- Vue(六)——条件渲染
Vue--条件渲染 v-if.v-else-if.v-else v-if 指令用于条件性地渲染一块内容,表达式的值为 true --渲染. false--不渲染 v-if.v-else-if.v-el ...
- C# 线程(二)——Thread学习
参照:C#多线程 - .NET开发菜鸟 - 博客园 (cnblogs.com) C# Thread 线程状态知识 - 大圣的笑 - 博客园 (cnblogs.com) 背景: 在.NET Framew ...
- 同余最短路&转圈背包算法学习笔记(超详细)
一.问题引入 当你想要解决一个完全背包计数问题,但是 \(M\) 的范围太大,那么你就可以使用同余最短路. 二.算法推导过程 首先对于一个完全背包计数问题,我们要知道如果 \(x\) 这个数能凑出来, ...
- 【记录】IDA|IDA怎么查看当前二进制文件自动分析出来的内存分布情况(内存范围和读写性)
IDA版本:7.6 背景:我之前一直是直接看Text View里面的地址的首尾地址来判断内存分布情况的,似乎是有点不准确,然后才想到IDA肯定自带查看内存分布情况的功能,而且很简单. 文章目录 1 查 ...