• 迅为国产RK3568开发板Android移植 LCD 屏幕


    rk3568 芯片非常强大,可以支持的屏幕接口有很多,显示接口支持可是非常丰富的,

     

    iTOP-rk3568 开发板支持 MIPI 接口的屏幕,接口如下图所示:

     

    1 屏幕点亮流程

    点亮屏幕基本的流程是一致的,一般是背光使能---->背光点亮---->屏幕使能---->reset

    脚按照指定的时序/波形拉高或者拉低---->初始化序列命令发送。

    流程主要是以下几步

    l

    需要向屏幕厂商要一些屏幕关键参数和资料

    l

    进行关键引脚对应

    l

    进行设备树配置

    l

    进行驱动配置

    l

    源码编译,烧写镜像测试

    15.2.1关键引脚对应

     

    15.2.2屏幕关键参数

    15.2.3屏幕初始化序列改写

    2根据屏参和硬件设计填写 dts

    这一部分是重点,全部之前的工作全为此处进行准备。我们新建一个 dtsi 文件特意放屏

    幕相关的:kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi

    然后在 kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dts 文件中加入这个头文

    件,如下图所示:

    另注意,由于 DTS 文件设计到层层包含(DTS 文件可以包含后缀为.dtsi 的文件,作用就

    C 语言中的.h 文件),故建议重要配置及板卡特性配置写到最后一级的 DTS 文件中,防

    止由于在较高层级的 dtsi 配置后手误在后面又进行了配置,导致配置被错误覆盖。

    共需要以下几个重点内容:dsi, route_dsi, backlight, vcc_lcd, dsi_in_vopb,

    dsi_in_vopl,vopb

    2.1 dsi节点

     

    mipi 屏幕我们使用 dsi1 接口,所以需要在设备树里面查找 dsi 节点,如下图所示:

    kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi

    (瑞芯微写好的)

     

     

     

     

     

     

     

     

     

    kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi (瑞芯微写好的)

    dsi1: dsi@fe070000 {

    compatible = "rockchip,rk3568-mipi-dsi";

    reg = <0x0 0xfe070000 0x0 0x10000>;

    interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;

    clocks = <&cru PCLK_DSITX_1>, <&cru HCLK_VO>, <&video_phy1>;

    clock-names = "pclk", "hclk", "hs_clk";

    resets = <&cru SRST_P_DSITX_1>;

    reset-names = "apb";

    phys = <&video_phy1>;

    phy-names = "mipi_dphy";

    power-domains = <&power RK3568_PD_VO>;

    rockchip,grf = <&grf>;

    #address-cells = <1>;

    #size-cells = <0>;

    status = "disabled";

    ports {

    #address-cells = <1>;

    #size-cells = <0>;

    dsi1_in: port@0 {

    reg = <0>;

    #address-cells = <1>;

    #size-cells = <0>;

    dsi1_in_vp0: endpoint@0 {

    reg = <0>;

    remote-endpoint = <&vp0_out_dsi1>;

    status = "disabled";

    };

    dsi1_in_vp1: endpoint@1 {

    reg = <1>;

    remote-endpoint = <&vp1_out_dsi1>;

    status = "disabled";

    };

    };

    };

    };

    默认的源码中是配置了 dsi1 节点的,是适配的瑞芯微的屏幕。现在我们要适配迅为的

    MIPI 7 寸屏,所以我们在修改之前,要删掉瑞芯微之前适配的屏幕节点。在下图的设备树中

    找到&dsi1 以及和 dsi1 相关的注释掉。

     

     

     

     

    好,现在接下来便可以在 topeet_rk3568_lcds.dtsi 中配置迅为的屏幕了。配置如下:

    &dsi1 {

    status = "okay";

    dsi1_panel: panel@0 {

    status = "okay";

    compatible = "simple-panel-dsi";

    reg = <0>;

    //供电电压是 3.3V

    power-supply = <&vcc3v3_lcd1_n>;

    //设置背光

    backlight = <&backlight>;

    //reset-gpios 表示屏幕 reset 引脚,拉低,具体的拉高或者拉低要根据内

    核配置和时序要求来进行对应的修改

    reset-gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_LOW>;

    //enable-gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_HIGH>;

    //下述配置中有一些延时,reset-delay-ms 是在屏幕初始化过程中,第一次

    操作 reset 引脚之前的延时。init-delay-ms,是在屏幕初始化过程中,第一次操作 reset 引脚

    之后的延时。

    reset-delay-ms = <60>;

    enable-delay-ms = <60>;//<35>; //<60>;

    prepare-delay-ms = <60>;//<6>; //<60>;

    unprepare-delay-ms = <60>;//<0>; //<60>;

    disable-delay-ms = <60>;//<20>; //<60>;

    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>;是配置当前 mipi 是几通道的,需根据屏幕实际情况配置。

    dsi,lanes = <4>;

    // panel-init-sequence 填写刚刚改写好的初始化序列

     

    panel-init-sequence = [

    39 00 03 E0 AB BA

    39 00 03 E1 BA AB

    .................

    05 C8 01 11

    05 14 01 29

    ];

    //panel-exit-sequence 填写 display off 序列,一般为两条,也需要厂家提供。

    panel-exit-sequence = [

    05 05 01 28

    05 78 01 10

    ];

    //这一部分也很重要,是屏幕的一些参数。hactive vactive 就是水平数值的像素,也就是

    hback-porch,hfront-porch,vback-porch,vfront-porch

    HBP,HFP,VBP,VFP,这个跟厂家讨要后,根据简写字母对应即可。这个在之前的章节中已经讲解

    过了。

    disp_timings0: display-timings {

    native-mode = <&dsi1_timing0>;

    dsi1_timing0: timing0 {

    //clock-frequency 像素时钟频率

    //像素时钟频率 = (

    hactive+hbp+hfp+hsync-len)x (vactive+vbp+vfp+vsync-len)xfps

    // 然后保留两位有效数字(不要四舍五入),后面数据直接填 0 即可。

    clock-frequency = <72000000>;

    //以下的这些参数在数据手册中,我们已经查找到了。

    hactive = <800>;

    vactive = <1280>;

    hfront-porch = <48>; //20

    hsync-len = <20>;

    hback-porch = <48>; //20

    vfront-porch = <16>; //10

    vsync-len = <6>; //10

    vback-porch = <15>; //4

    hsync-active = <0>;

    vsync-active = <0>;

    de-active = <0>;

    pixelclk-active = <0>;

    };

    };

    //配置 ports

    ports {

    #address-cells = <1>;

    #size-cells = <0>;

    port@0 {

    reg = <0>;

    panel_in_dsi1: endpoint {

    remote-endpoint = <&dsi1_out_panel>;

    };

    };

    };

    };

    ports {

    #address-cells = <1>;

    #size-cells = <0>;

    port@1 {

    reg = <1>;

    dsi1_out_panel: endpoint {

    remote-endpoint = <&panel_in_dsi1>;

    };

    };

    };

    };

    我们使用 dsi1 绑定到 vp1 上,所以 dsi1_in_vp0 节点为 disabled,dsi1_in_vp1 节点为 okay

    dsi1 使能的时候,video_phy1 要使能,video_phy0 要关闭。设备树 topeet_rk3568_lcds.dtsi

    中添加如下图所示:

     

     

     

     

     

     

     

     

    2.2 Backlight

    背光常用的有三种情况:

    一是 常开。

    二是 背光 IC 使能后,输入 PWM 信号调光。

    三是 背光 IC 使能后,通过 FB 获得反馈自动进行调光。

    设备树里面配置背光。首先根据原理图,我们知道使用的是 pwm5,

    kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi 文件里面 backlight1 节点如下所示:

    backlight1: backlight1 {

    compatible = "pwm-backlight";

    pwms = <&pwm5 0 25000 0>;

    brightness-levels = <

    0 20 20 21 21 22 22 23

    23 24 24 25 25 26 26 27

    27 28 28 29 29 30 30 31

    .................................................

    >;

    default-brightness-level = <200>;

    };

    kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi 设备树中添加背光节点

    &backlight {

    status = "okay";

    pwm = <&pwm5 0 25000 0>;

    };

    pwms = <&pwm5 0 25000 0>; 配置 pwm,使用 pwm5,25000 是周期,pwm 为正极性。

    brightness-levels 属性:配置背光亮度数组,一般以值 255 为一个 scale,当 pwm 设置为正

    极时,从 0~255 表示背光为正极,占空比从 0%~100%变化,,255~0 为负极性,占空比从

    100%~0%变化,当 pwm 设置为负极性时,反之。

    default-brightness-level 属性,时开机时默认背光亮度,范围是 0~255

    2.3 logo 显示

    设备树 kernel/scripts/dtc/include-prefixes/arm64/rockchip/rk3568.dtsi 中节点如下:

     

     

    所以我们要使用 route_dsi1 显示通路,绑定到 vp1 上,修改

    kernel/scripts/dtc/include-prefixes/arm64/rockchip/topeet_rk3568_lcds.dtsi 文件,添加如下所

    示:

     

    3 Config 配置

    RK3568 SDK kernel/arch/arm64/configs/*_defconfig 已经把 LCD 相关的配置设置好了,

    如果自己做了修改,修改 kernel/arch/arm64/configs/rockchip_defconfig 配置文件,增加如下

    所示:

    CONFIG_DRM_ROCKCHIP=y

    CONFIG_ROCKCHIP_DW_MIPI_DSI=y

    CONFIG_DRM_PANEL_SIMPLE=y

    4烧写验证

    4.1测试显示

    重新编译 android 源码,烧写镜像,发现 mipi 屏幕显示正常。如下图所示:

     

    4.2 背光亮度调节测试

    目前还没有配置屏幕触摸,我们可以在开发板上插上鼠标,进入”设置”APP,依次点击

    “显示”,“亮度”,拖动滑条可以调节亮度。

    也可以使用命令行来设置屏幕亮度,数值可以在 0~250 中设置,数字越大,亮度越高。

    echo 100 > /sys/class/backlight/backlight/brightness

  • 相关阅读:
    NHibernate 中in的使用方法,以及使用sql表达式
    C#调用存储过程,并且获得返回值和OutPut字符串
    NHibernate 中delete的使用方法
    SQL中Case when 方法的使用
    NHibernate 根据Model ID获取对象
    C# Excel导出数据和Excel导入数据帮助类
    查询五个月前到现在的数据
    NHibernate 中Between的使用方法
    jquery操作滚动条滚动到指定位置
    将DataReader转换为DataTable
  • 原文地址:https://www.cnblogs.com/topeet/p/16139211.html
Copyright © 2020-2023  润新知