美文网首页
RK平台mipi屏初始化序列配置

RK平台mipi屏初始化序列配置

作者: 爱因私谈 | 来源:发表于2019-06-25 10:33 被阅读0次

    RK平台mipi屏初始化序列都是在dts中进行配置,有两种方式,下面分别介绍两种方式的配置方法。

    方式一

    RK平台较老的SDK采用下面方式配置mipi参数,如:RK3128 5.1 SDK中就是采用的下面方式。

    示例:

    / {
        /* about mipi */
        disp_mipi_init: mipi_dsi_init{
            compatible = "rockchip,mipi_dsi_init";
            rockchip,screen_init    = <1>;
            rockchip,dsi_lane       = <4>;
            rockchip,dsi_hs_clk     = <550>;
            rockchip,mipi_dsi_num   = <1>;
        };
        
        disp_mipi_power_ctr: mipi_power_ctr {
            compatible = "rockchip,mipi_power_ctr";
            
            /*
            mipi_lcd_rst:mipi_lcd_rst{
                compatible = "rockchip,lcd_rst";
                rockchip,gpios = <&gpio2 GPIO_D1 GPIO_ACTIVE_HIGH>;
                rockchip,delay = <20>;
            };
            
            mipi_lcd_en:mipi_lcd_en {
                compatible = "rockchip,lcd_en";
                rockchip,gpios = <&gpio2 GPIO_D0 GPIO_ACTIVE_LOW>;
                rockchip,delay = <100>;
            };
            */
        };
        
        disp_mipi_init_cmds: screen-on-cmds {
            compatible = "rockchip,screen-on-cmds";
            rockchip,cmd_debug = <1>;
            
            rockchip,on-cmds1 {
                compatible = "rockchip,on-cmds";
                rockchip,cmd_type = <LPDT>;
                rockchip,dsi_id = <0>;
                rockchip,cmd = <0x15 0xE0 0x00>;
                rockchip,cmd_delay = <0>;
            };
            
            rockchip,on-cmds2 {
                compatible = "rockchip,on-cmds";
                rockchip,cmd_type = <LPDT>;
                rockchip,dsi_id = <0>;
                rockchip,cmd = <0x39 0x55 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10>;
                rockchip,cmd_delay = <0>;
            };
    
            //SLP OUT
            rockchip,on-cmds3 {
                compatible = "rockchip,on-cmds";
                rockchip,cmd_type = <LPDT>;
                rockchip,dsi_id = <0>;
                rockchip,cmd = <0x05 0x11>;
                rockchip,cmd_delay = <120>;
            };
    
            //DISP ON
            rockchip,on-cmds4 {
                compatible = "rockchip,on-cmds";
                rockchip,cmd_type = <LPDT>;
                rockchip,dsi_id = <0>;
                rockchip,cmd = <0x05 0x29>;
                rockchip,cmd_delay = <5>;
            };
        };
    
        disp_timings: display-timings {
            native-mode = <&timing0>;
            compatible = "rockchip,display-timings";
            timing0: timing0 {
                screen-type = <SCREEN_MIPI>;
                lvds-format = <LVDS_8BIT_2>;
                out-face    = <OUT_P888>;
                
                clock-frequency = <67330000>;
                hactive = <800>;             
                vactive = <1280>;       
                hback-porch = <18>;           
                hfront-porch = <18>;          
                vback-porch = <10>;         
                vfront-porch = <20>;          
                hsync-len = <18>;            
                vsync-len = <4>;
                
                hsync-active = <0>;
                vsync-active = <0>;
                de-active = <0>;
                pixelclk-active = <0>;
                swap-rb = <0>;
                swap-rg = <0>;
                swap-gb = <0>;
            };
        };
    };
    

    这里只分析disp_mipi_init_cmds的配置规则,disp_mipi_init、disp_mipi_power_ctl、disp_timings不分析,其中disp_timings可以参考另一篇文章:《如何确定lcd timing参数》

    下面代码段为一条mipi初始化数据,主要关心的参数有“rockchip,cmd”和“rockchip,cmd_delay”。

    rockchip,on-cmds1 {
        compatible = "rockchip,on-cmds";
        rockchip,cmd_type = <LPDT>;
        rockchip,dsi_id = <0>;
        rockchip,cmd = <0x15 0xE0 0x00>;
        rockchip,cmd_delay = <0>;
    };
    
    rockchip,cmd

    命令格式如下:

    0x15 0xE0 0x00
     |     |   |
     |     |   数据
     |     寄存器地址
     命令类型(0x05: 单字节数据 0x15: 双字节数据 0x39: 多字节数据)
    

    单字节数据举例:

    rockchip,on-cmds3 {
        compatible = "rockchip,on-cmds";
        rockchip,cmd_type = <LPDT>;
        rockchip,dsi_id = <0>;
        rockchip,cmd = <0x05 0x11>;
        rockchip,cmd_delay = <120>;
    };
    

    双字节数据举例:

    rockchip,on-cmds1 {
        compatible = "rockchip,on-cmds";
        rockchip,cmd_type = <LPDT>;
        rockchip,dsi_id = <0>;
        rockchip,cmd = <0x15 0xE0 0x00>;
        rockchip,cmd_delay = <0>;
    };
    

    多字节数据举例:

    rockchip,on-cmds2 {
        compatible = "rockchip,on-cmds";
        rockchip,cmd_type = <LPDT>;
        rockchip,dsi_id = <0>;
        rockchip,cmd = <0x39 0x55 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10>;
        rockchip,cmd_delay = <0>;
    };
    
    rockchip,cmd_delay

    此字段定义发送完命令后延时时长,单位毫秒(ms),大部分命令无须延时。

    方式二

    RK平台新的SDK已经统一采用下面方式配置mipi参数,如:RK3288 8.1 SDK中就是采用的下面方式。

    示例:

    &dsi0 {
        status = "okay";
        rockchip,lane-rate = <600>;
    
        panel: panel {
            compatible = "simple-panel-dsi";
            reg = <0>;
            backlight = <&backlight>;
            enable-gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>;
            //reset-gpios = <&gpio7 4 GPIO_ACTIVE_HIGH>;
            power-supply = <&vcc_lcd>;
            dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST)>;
            dsi,format = <MIPI_DSI_FMT_RGB888>;
            dsi,lanes = <4>;
            reset-delay-ms = <20>;
            init-delay-ms = <20>;
            enable-delay-ms = <120>;
            prepare-delay-ms = <120>;
            status = "okay";
        
            panel-init-sequence = [
                15 00 02 80 77
                15 00 02 81 77
                15 00 02 82 77
                15 00 02 83 77
                15 00 02 84 77
                15 00 02 85 77
                15 00 02 86 77
                05 64 01 11
                05 14 01 29
            ];
    
            panel-exit-sequence = [
                05 64 01 28
                05 96 01 10
            ];
    
            disp_timings: display-timings {
                native-mode = <&timing2>;
                timing2: timing0 {
                    clock-frequency = <52000000>;
                    hactive = <1024>;
                    vactive = <600>;
                    hback-porch = <160>;
                    hfront-porch = <160>;
                    vback-porch = <23>;
                    vfront-porch = <12>;
                    hsync-len = <10>;
                    vsync-len = <10>;
                    hsync-active = <0>;
                    vsync-active = <0>;
                    de-active = <0>;
                    pixelclk-active = <0>;
                };
            };
        };
    };
    

    这里依然只分析panel-init-sequence和panel-exit-sequence的配置规则,其它配置可以参考另一篇文章:《如何确定lcd timing参数》

    新的mipi初始化序列配置规则与老方法其实是一致的,只是改写了表达方式,如下:

    panel-init-sequence = [
        15 00 02 80 77
        15 00 02 81 77
        15 00 02 82 77
        15 00 02 83 77
        15 00 02 84 77
        15 00 02 85 77
        15 00 02 86 77
        39 00 0D C3 01 66 13 23 00 66 85 33 20 38 38 00
        05 64 01 11
        05 14 01 29
    ];
    

    中括号里的内容,每一行表示一串命令字,规则如下:

    15 00 02 80 77
     |  |  | |  |
     |  |  | |  数据
     |  |  | | 寄存器地址
     |  |  数据长度
     |  延时
     命令类型(0x05: 单字节数据 0x15: 双字节数据 0x39: 多字节数据)
    

    单字节数据举例:

    05 64 01 11
    

    双字节数据举例:

    15 00 02 86 77
    

    多字节数据举例:

    39 00 0D C3 01 66 13 23 00 66 85 33 20 38 38 00
    

    相关文章

      网友评论

          本文标题:RK平台mipi屏初始化序列配置

          本文链接:https://www.haomeiwen.com/subject/uuzzqctx.html