Rk3399调试mipi&edp显示屏分析

现在 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个步骤都正确,就可以点亮我们的显示屏!
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣敢飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值