2.3、修改屏幕配置

2.3.1、配置

  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;
    };
  2. 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、参数分析

  1. size,width = <66>size,height = <156>;

    这两行定义了显示面板的物理宽度和高度,单位为毫米。在这个例子中,显示面板的宽度为 66mm,高度为 156mm。

  2. 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 接口的行为。

  3. dsi,format = <MIPI_DSI_FMT_RGB888>;

    这一行指定了显示数据的格式为 RGB888,也就是每个像素使用 24 位色深。

  4. dsi,lanes = <4>;

    这里定义了 MIPI DSI 使用的传输通道数。<4> 表示使用 4 条数据通道来传输数据。

  5. panel-init-sequencepanel-exit-sequence

    • panel-init-sequence:这部分是显示面板的初始化命令序列,通常这些命令会发送到显示器,以设置其工作模式、时序和其他显示参数。
    • panel-exit-sequence:这部分是显示器退出时的命令序列,通常用于关闭显示或进入低功耗状态。
  6. 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...:实际发送给显示器的命令数据。根据显示器的要求,可能是字节值或者具体的控制字。

一般规则:

  1. 命令长度和数据格式:

    • command_length 是 8 位或 16 位数字,表示该命令的数据长度(以字节为单位)。例如,39 05 表示这个命令的数据长度为 39 个字节。
    • command_data 是命令的具体数据,可以是控制信号、颜色数据、时序数据等。显示器根据这些命令来改变其状态。
  2. 控制命令:控制命令通常以 0x15 开头,表示“发送控制命令”,后面跟随的字节可能是控制代码和数据。例如:

    15 00 02 51 ff

    这表示发送一个控制命令 0x15,后面紧跟着控制数据 00 02 51 ff

  3. 数据命令:数据命令通常以 0x39 开头,表示“发送数据”,后面是要发送的字节流。例如:

    39 05 05 2a 00 00 04 37

    这表示发送一个数据命令 0x39,后面是数据 05 05 2a 00 00 04 37

  4. 延迟命令:一些命令可能会包含延迟时间,通常会在 panel-init-sequence 中插入一个延迟命令。延迟命令通常以 0x15 命令为基础,例如:

    15 00 02 51 ff

    后面的数据可能包含延迟时间,表示等待指定的毫秒数。

  5. 不同命令的功能:

    • 0x39:通常用于写数据命令,包含显示控制或时序调整数据。
    • 0x15:通常用于写控制命令或控制信号。
    • 0x29:可能用于显示控制或使能显示。
    • 0x2A, 0x2B, 0x2C:通常涉及像素数据的写入或显示区块控制。
  6. 编写时注意事项:

    • 确保命令与显示器的数据手册一致。每个显示器的初始化命令和顺序可能会有所不同,必须根据显示器的要求来编写命令。
    • 如果显示器要求在某些命令之间等待(如发送完初始化命令后等待几毫秒),应插入延迟命令。
    • 初始化序列中的命令顺序非常重要,错误的顺序可能会导致显示器不正常工作。

示例:

以下是一个典型的 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修改屏幕配置的更多相关文章

  1. nuc950支持nand的mtd驱动的kernel修改

    支持nand的mtd驱动的kernel修改 一.更新nanddriver文件 将新的nanddriver文件nuc900_nand.c放到kernel的drivers/mtd/nand目录下 二.修改 ...

  2. hi3531 SDK 编译 kernel, 修改 参数

    开发环境用户指南上这么写的 3.1 内核源代码 成功安装Hi3531 SDK后,内核源代码已存放于SDK目录下的osdrv/目录中,用户可 直接进入目录进行相关操作. 3.2 配置内核 如果对内核和H ...

  3. vue全家桶安装以及修改webpack配置新增vue项目启动方式

    一.安装node环境(自带npm) 下载地址 二.替换下载源 // 淘宝 NPM 镜像 npm install -g cnpm --registry=https://registry.npm.taob ...

  4. CentOS工作内容(五)单一网卡配置多个IP

    CentOS工作内容(五)单一网卡配置多个IP 用到的快捷键 tab 自动补齐(有不知道的吗) ctrl+a 移动到当前行的开头(a ahead) ctrl+e 移动到当前行的开头(e end) ct ...

  5. SuSE Linux修改网卡配置

    http://blog.chinaunix.net/uid-20765159-id-1850854.html SuSE Linux修改网卡配置             2010 SuSE linux ...

  6. Android Studio(五):修改Android Studio项目包名

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  7. discuz论坛移植修改数据库配置

    从其他地方拷贝的discuz源码,可能需要修改数据库配置 分别打开discuz目录下面以下三个文件 discuzRoot/uc_server/data/config.inc.phpdiscuzRoot ...

  8. ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段

    Loop at screen会loop处理屏幕上的每一个组件,并对其做相应的处理. SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME.PARAMETERS  ...

  9. SQL Server安装完成后3个需要立即修改的配置选项(转载)

    你用安装向导安装了全新的SQL Server,最后你点击了完成按钮.哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的. 是的,你没看 ...

  10. Cent OS 修改网卡配置

    进入网卡修改界面 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 描述网卡设备名称 BOOTPROTO=static 静态IP,这里一 ...

随机推荐

  1. 【C#】Winform嵌入dll到exe中

    [C#]Winform嵌入dll到exe中 零.问题 最近在做一个上位机,需要保存数据,所以引用了一些Excel的组件,但是比较麻烦的是会多出几个DLL文件,压缩打包不方便使用,于是想能不能嵌入到ex ...

  2. nodejs目录与文件遍历

    路径相关函数 path.basename('/foo/bar/baz/asdf/quux.html'); // Returns: 'quux.html' path.basename('/foo/bar ...

  3. 成都信息工程大学天梯赛 L2-2 不要刁难我们了

    赛时板子没写对,原因就是标记数组的位置放错了,放到了while外面,导致这样距离数组是不会更新的,板子还是要自己多写少看 #include <bits/stdc++.h> #define ...

  4. 使用傅里叶级数和Python表示方波

    引言 在信号处理和数字通信中,方波是非常常见的一种波形.方波是一种周期性波形,信号在两个固定的幅度之间跳跃,通常是"高"与"低"的状态.你可能会问,如何通过数学 ...

  5. jmeter使用:解决压测时获取token问题

    在执行压测过程中,首先要执行登录接口来获取token.如果并发数比较大只需要一个用户的登录token,可以使用setup线程组.如果是模拟多个用户登录获取token,需要使用仅一次控制器. 一.添加s ...

  6. sonarqube+gitlab+jenkins+maven集成搭建 (五)

    Jenkins与SonarQube Jenkins 配置 SonarQube在 SonarQube 中生成 Server authentication token登录 SonarQube 后,在 &q ...

  7. Vue(六)——条件渲染

    Vue--条件渲染 v-if.v-else-if.v-else v-if 指令用于条件性地渲染一块内容,表达式的值为 true --渲染. false--不渲染 v-if.v-else-if.v-el ...

  8. C# 线程(二)——Thread学习

    参照:C#多线程 - .NET开发菜鸟 - 博客园 (cnblogs.com) C# Thread 线程状态知识 - 大圣的笑 - 博客园 (cnblogs.com) 背景: 在.NET Framew ...

  9. 同余最短路&转圈背包算法学习笔记(超详细)

    一.问题引入 当你想要解决一个完全背包计数问题,但是 \(M\) 的范围太大,那么你就可以使用同余最短路. 二.算法推导过程 首先对于一个完全背包计数问题,我们要知道如果 \(x\) 这个数能凑出来, ...

  10. 【记录】IDA|IDA怎么查看当前二进制文件自动分析出来的内存分布情况(内存范围和读写性)

    IDA版本:7.6 背景:我之前一直是直接看Text View里面的地址的首尾地址来判断内存分布情况的,似乎是有点不准确,然后才想到IDA肯定自带查看内存分布情况的功能,而且很简单. 文章目录 1 查 ...