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. Momentum Contrast for Unsupervised Visual Representation Learning论文精读

    目录 Birth of MoCo Supervised Learning Contrastive Learning MoCo Dictionary Limits of the early learni ...

  2. Win环境下的批处理命令和JScript脚本结合使用笔记

    最近工作有接触到.bat 批处理命令,在Win环境下编写的时候基于以前的编码习惯,觉得批处理语法可读性较差,于是学习了解了一下结合JScript的用法,特此记录. 什么是JScript JScript ...

  3. kubernetes mysql-StatefulSet报错处理

    我们使用网上mysql-StatefulSet集群教程时候mysql-1启动错误,init-error. 第一次尝试解决:我从官网上下载yaml部署依然报错. 第二次尝试解决:网上换各种版本的yaml ...

  4. 【Linux】3.1 远程登录Linux系统

    为什么需要远程登录 Linux 示意图 说明: 公司开发时候, 具体的情况是这样的 linux 服务器是开发小组共享的. 正式上线的项目是运行在公网的. 因此程序员需要远程登录到 centos 进行项 ...

  5. 【Python】面向对象版学员管理系统

    面向对象版学员管理系统 一. 系统需求 使用面向对象编程思想完成学员管理系统的开发,具体如下: 系统要求:学员数据存储在文件中 系统功能:添加学员.删除学员.修改学员信息.查询学员信息.显示所有学员信 ...

  6. 【Python】使用PyInstaller把代码打包成exe可执行文件

    使用PyInstaller打包自己写好的代码 零.需求 最近接到一个小单,需要批量修改文档内容,用Python做好后要打包成exe程序给客户的Win7电脑使用,此时需要用到PyInstaller打包自 ...

  7. Kubernetes基础教程-通过部署Nginx快速学习基本使用命令

    1.验证节点信息 1.1.查看控制平面组件的状态 [root@linux-servertwo software]# kubectl get cs Warning: v1 ComponentStatus ...

  8. 深入理解 C++ 条件变量:为何 `wait` 钟爱 `std::unique_lock`?

    深入理解 C++ 条件变量:为何 wait 钟爱 std::unique_lock?在 C++ 多线程编程中,线程间的协调是一个核心挑战.我们经常需要一个线程等待某个条件满足(例如,等待任务队列非空, ...

  9. Linux centos8 VPS基本配置之SSH

    Linux centos8 VPS基本配置之SSH 最近在使用阿里云的时候,需要安装一些nodejs模块,但是总是安装失败,我已经使用了淘宝镜像cnpm加速,查看了具体原因是有github的依赖. 阿 ...

  10. C 图上的遍历算法

    图上的遍历算法 广度优先搜索 BFS 概念 广度优先搜索(Breadth-First Search)是一种图遍历算法,用于在图或树中按层次逐层访问节点.它从源节点(起始节点)开始,首先访问源节点的所有 ...