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. 实现领域驱动设计 - 使用ABP框架 - 领域服务

    领域服务 领域服务实现领域逻辑 依赖于服务和存储库. 需要处理多个聚合,因为该逻辑不适合任何聚合. 领域服务与领域对象一起工作.它们的方法可以获取并返回实体.值对象.原始类型--但是,它们不获取/返回 ...

  2. HTML5 给网站添加图标

    1.首先将图标上传到对应的目录下 2.在网页的index.html,添加已下代码到<head>标签里 <link rel="icon" href="i_ ...

  3. Obsidian 笔记一键转换发布为 Jekyll 博客

    Obsidian 是一款功能强大且灵活的知识管理和笔记软件,与 Jekyll 这一轻量级静态博客框架的结合,既能保留 Obsidian 的网状知识关联优势,又能借助 Jekyll 的高效编译能力快速生 ...

  4. Effective Java理解笔记系列-第1条-何时考虑用静态工厂方法替代构造器?

    为什么写这系列博客? 在阅读<Effective Java>这本书时,我发现有许多地方需要仔细认真地慢慢阅读并且在必要时查阅相关资料才能彻底搞懂,相信有些读者在阅读此书时也有类似感受:同时 ...

  5. C 冒泡排序和选择排序

    冒泡排序 理论概念: 从第一个数开始,将相邻的两个数比较,第一个数和第二个数比较,比如说是从小到大的排序,要是后面的数比前面的小则交换两个的位置,这样第一轮比较基数后最大的数就到了最后面,接着进行第二 ...

  6. 详细介绍Dubbo的SPI机制

    一.定义 Dubbo 的 SPI (Service Provider Interface) 机制是对 Java 原生 SPI 机制的增强和扩展,提供了更强大的扩展能力 二.Dubbo SPI 核心实现 ...

  7. Condition类的signal()方法底层原理

    一.Condition类的signal()方法底层原理 Condition 接口的 signal 方法是用于唤醒一个在 Condition 上等待的线程.与 Object 的 notify 方法类似, ...

  8. app类型划分

    app类型分为native类型,web类型,hybrid类型 一.native类型 1.优点:直接依托于操作系统,交互性最强,性能最好,功能最为强大 2.缺点:开发成本高,无法跨平台,更新缓慢,审核周 ...

  9. JavaScript中的DOM和Timer(简单易用的基本操作)

    JavaScript中的DOM和Timer基本操作 DOM操作 传统的选择器 选择器id var elements = document.getElementById(id的名称); 例如: var ...

  10. java设置权限过滤器--防止用户未登录访问某些页面

    话不多说,上代码!!! package com.store.web.filter; import java.io.IOException; import javax.servlet.Filter; i ...