现在 3.10 以上的内核都是使用设备树的方式管理代码,所以就RK  3.10以上的代码都是修改 dts 下的配置的,我们3399 android 8.1的代码是 arm64   linux 4.4.126 内核版本,可以使用 make menuconfig来查看

我们介绍下修改地方是什么意思

  • Mipi
  • 1 打开 mipi 通道,并设置 mipi 每条lane 的速率

    &dsi {

    status = "okay";

    rockchip,lane-rate = <1000>;

    2 panel

    panel {

            compatible ="simple-panel-dsi"; // 默认

            status = "okay";// 默认

            reg = <0>;// 默认

            power-supply = <&vcc3v3_sys>;  //

            backlight = <&backlight>;  //可选

            cmd_later_reset = <2>;

            enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;  //

            reset-gpios  = <&gpio1 0 GPIO_ACTIVE_HIGH>;  //

            dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |

             MIPI_DSI_MODE_VIDEO_SYNC_PULSE)>;

            dsi,format = <MIPI_DSI_FMT_RGB888>;

            // bus-format = <MEDIA_BUS_FMT_RGB666_1X24>;

            dsi,lanes = <4>; // mipi lane 数 看 sch

            reset-delay-ms = <20>;// 时序参考屏datasheet

            init-delay-ms = <20>;

            enable-delay-ms = <120>;

            prepare-delay-ms = <120>;

            panel-init-sequence = [// 上电使用命令行就需要填写

                    05 78 01 11

    15 00 02 E0 00  //都是 十六进制  

    //15 是短数据类型,要是数据是有十几个的话,就一般使用39 ,也有 13 23 29 等,很多的,一般使用 05  13  15  23  39

    //00 表示上下两个命令数据需要延时0ms

    //02 表示有多少个数据,要是03或者以上的话,15 就一般使用39

    //E0 00 就是具体的数据

    39 00 0A E1 93 E1 93 E1 93 E1 93 E1 93

    15 00 02 E1 93

                    05 78 01 29

            ];

            panel-exit-sequence = [// 断电使用命令

                    05 00 01 28

                    05 78 01 10

            ];

            display-timings {  //这里的参数参考datasheet

                    native-mode = <&timing0>;

                    timing0: timing0 {

                            clock-frequency = <70000000>;

                            hactive = <800>;

                            vactive = <1280>;

                            hback-porch = <40>;

                            hfront-porch = <40>;

                            vback-porch = <22>;

                            vfront-porch = <16>;

                            hsync-len = <4>;

                            vsync-len = <2>;

                            hsync-active = <0>;

                            vsync-active = <0>;

                            de-active = <0>;

                            pixelclk-active = <0>;

                    };

            };

    }

    Logo:

    route_dsi: route-dsi {

    status = "okay";

    //status = "disabled";

    logo,uboot = "logo.bmp"; 

    logo,kernel = "logo_kernel.bmp";

    logo,mode = "fullscreen";

    charge_logo,mode = "center";

    connect = <&vopb_out_dsi>;

    };

  • EDP
  • &edp {

    status = "okay";

    force-hpd;

    ports {

    port@1 {

    reg = <1>;

    edp_out: endpoint {

    remote-endpoint = <&panel_in>;

    };

    };

    };

    };

    Panel

     panel {

    compatible = "simple-panel";

    backlight = <&backlight>;

    power-supply = <&vcc3v3_sys>;

    enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;

    prepare-delay-ms = <20>;

    enable-delay-ms = <20>;

    reset  = <&gpio1 0 GPIO_ACTIVE_HIGH>;

    reset-delay-ms = <200>;

    display-timings {

    native-mode = <&timing1>;

    timing0: timing0 {//EDP 13.3

    clock-frequency = <150000000>;

    hactive = <1920>;

    vactive = <1080>;

    hfront-porch = <12>;

    hsync-len = <16>;

    hback-porch = <48>;

    vfront-porch = <8>;

    vsync-len = <4>;

    vback-porch = <8>;

    hsync-active = <0>;

    vsync-active = <0>;

    de-active = <0>;

    pixelclk-active = <0>;

    };

    };

    ports {

    panel_in: endpoint {

    remote-endpoint = <&edp_out>;

    };

    };

    }

    route_edp: route-edp {

    status = "okay";

    //status = "disabled";

    logo,uboot = "logo.bmp";

    logo,kernel = "logo_kernel.bmp";

    logo,mode = "fullscreen";

    charge_logo,mode = "center";

    connect = <&vopb_out_edp>;

    };

    接着我们讲下 mipi 使用 cmd 命令行模式控制的,刚才也有讲到

    命令行模式点亮显示屏

    参考 百度网盘的 rk3399-urbetter-mipi.dts

    RK3399 mipi相关驱动位置

    drivers/gpu/drm/rockchip/dw-mipi-dsi.c

    2. edp 屏详解 参考 rk3399-urbetter-edp.dts 或者 rgf_lcd_edp_1920_1080.dtsi

    rk3399 edp 相关驱动

    drivers/gpu/drm/rockchip/analogix_dp-rockchip.c

    drivers/gpu/drm/bridge/analogix/analogix_dp_core.c

    drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c

    时序修改

    3. 由于显示屏种类繁多,现在在 ARM 平台使用的比较多的就是 MIPI 、EDP、LVDS 这几种,其中Mipi 就是有两种控制模式,只有 mipi的cmd模式才需要 命令行初始化的,剩下 MIPI的video、edp、lvds 都只需要上电后,修改分辨率和 合适的前后阶、时钟、时序就差不多可以点亮,之所以是差不多,是因为不排除一些平台有稍微的不一样的地方,不过整体的思路都是一样的

    再看看另外两个 其他公司的开发板上面的显示屏接口

    最后我们看看其他两份开发板原理图

    分析sch

    相信大家现在都知道大概是怎样点亮显示屏了!现在自己感觉把显示屏点亮步骤记下来,就4部分的分析

    1. 上电背光
    2. Lcd_en lcd _rst 脚是否控制正确
    3. 上电时序参数、分辨率
    4. 最后要是还不行,就通过串口看打印信息,看看驱动的打印有什么错误,再根据打印来分析驱动是否有问题,这个3399 基本很少会动的了,基本保障前3个步骤都正确,就可以点亮我们的显示屏!
    物联沃分享整理
    物联沃-IOTWORD物联网 » RK3399调试MIPI的指南

    发表评论