嵌入式驱动RK3566 HDMI eDP MIPI 背光 屏幕选型与调试提升篇-eDP屏

eDP是嵌入式显示端口,具有高数据传输速率,高带宽,高分辨率、高刷新率、低电压、简化接口数量等特点。现大多数笔记本电脑都是用的这种接口。整个eDP是很复杂的,这里我们不讲底层原理,我们先掌握如何用泰山派来驱动各种常见的eDP屏幕,eDP在使用上来讲也会比上面的HDMI复杂很多,HDMI屏幕基本不需要适配即插即用,虽然大多数eDP屏幕参数基本差不多,但是有些eDP还是需要我配置屏参的,如果屏幕参数不正确可能无法点亮。泰山派eDP接口位于板载顶部位置。

分辨率与尺寸:

最大支持分辨率是主控决定的,通过数据手册可知RK3566的eDP接口最大支持2560x1600@60Hz,所以所选的eDP屏幕分辨率不大于这个分辨率就行,大于了点不亮,

常见的尺寸有11.6寸,13.3寸,15.6寸等,屏幕对尺寸没有太大要求可以根据自己的项目和喜好来选择。

引脚接口:

接口线序要和板载资源一样,否则需要自己画转接板,泰山派的eDP接口用的是30Pin 0.5mm的FPC座,30Pin引脚大多数线序都是通用的,但大家不能盲目的看见一个30Pin的eDP屏幕就直接怼上去,还需要确定一下它的引脚顺序 他用的排线是正排线还是反排线,电源电源是否匹配 ,还有背光供电电压是否匹配等。

上图就是我们的板载资源的硬件图示了,接口不要搞错了,这边用的是泰山派。

上图就是我们买的一款edp屏幕的参数。

屏幕调试

要调试eDP屏幕我们首先要找到泰山派user设备树linux/kernel/arch/arm64/boot/dts/tspi-rk3566-user-v10-linux.dts,并打开tspi-rk3566-user-v10-linux.dts 设备树头文件,这里面主要是和我们edp相关的设备树配置。

tspi-rk3566-edp-v10.dtsi设备树分析

edp相关的设备树tspisdk/kernel/arch/arm64/boot/dts/rockchiptspi-rk3566-edp-v10.dtsi,我们要修改的其实就13行-21行屏幕就参数正确屏幕就能点亮这些参数后续也会讲到,这里作为一个引子。

cpp 复制代码
/ {
        edp_panel: edp-panel {
                compatible = "simple-panel";    //上节我们讲过的edp驱动通过这个来匹配设备树
                backlight = <&backlight>;   // 引用背光,在下面背光是一个PWM信号
                enable-gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;  // 激活GPIO引脚
                enable-delay-ms = <120>;  // 开启延迟时间(毫秒)
                pinctrl-0 = <&edp_en_gpio>;  // 引脚控制器

                edp_disp_timings: display-timings {
                        native-mode = <&edp_timing0>;
                        /*开始:这一部分就是我们要调试的屏幕参数了*/
                        edp_timing0: edp_timing0 {
                                clock-frequency = <150000000>;  // 像素时钟频率
                                hactive = <1920>;  // 水平像素数
                                vactive = <1080>;  // 垂直像素数
                                hfront-porch = <150>;  // 水平前肩期
                                hsync-len = <5>;  // 水平同步长度
                                hback-porch = <5>;  // 水平后肩期
                                vfront-porch = <3>;  // 垂直前肩期
                                vsync-len = <1>;  // 垂直同步长度
                                vback-porch = <9>;  // 垂直后肩期
                                hsync-active = <0>;  // 水平同步有效状态
                                vsync-active = <0>;  // 垂直同步有效状态
                                de-active = <0>;  // DE有效状态
                                pixelclk-active = <0>;  // 像素时钟有效状态
                        };
                        /*结束:这一部分就是我们要调试的屏幕参数了*/
                };
                
                ports {
                        panel_in_edp: endpoint {
                                remote-endpoint = <&edp_out_panel>;  // 引用端点连接
                        };
                };
        };
        /*这是我们的背光*/
        backlight: backlight {
                compatible = "pwm-backlight";
                pwms = <&pwm4 0 25000 0>;  // PWM参数设置
                brightness-levels = <  // 亮度级别
                        0 20 20 21 21 22 22 23
                        // 其他亮度级别
                        ...
                        254 255
                >;
                default-brightness-level = <200>;  // 默认亮度级别
        };
};

&pwm4 { //背光引脚使用的是PWM4
        status = "okay";  // PWM状态为正常
};

&pinctrl {
        edp {
                edp_en_gpio: edp-en-gpio { //这个是edp对应的使能引脚
                        rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;  // GPIO设置
                };
        };
};

&edp {
        status = "okay";
        force-hpd;  // 强制HPD,这里非常重要哟,因为我们硬件上面是没有去做检测的所以要强制
        ports {
                edp_out: port@1 {
                        reg = <1>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        edp_out_panel: endpoint@0 {
                                reg = <0>;
                                remote-endpoint = <&panel_in_edp>;  // 远程端点连接
                        };
                };
        };
};

&edp_phy {
        status = "okay";  // EDP PHY状态为正常
};

&route_edp {
        status = "okay";  // EDP线路状态为正常
        //注意我们前面有讲到rk3566有两个vop,我们这里就是来链接vop的,你可以选择1或者0这里我们选择0
        connect = <&vp0_out_edp>;  // 连接设置
        // connect = <&vp1_out_edp>;
};
//注意我们前面有讲到rk3566有两个vop,我们这里就是来链接vop的,你可以选择1或者0这里我们选择0
&edp_in_vp0 {
        status = "okay";  // EDP输入VP0状态为正常
};
//注意我们前面有讲到rk3566有两个vop,我们这里就是来链接vop的,我们前面选择了vp0所以这里vp1就关掉
&edp_in_vp1 {
        status = "disabled";  // 禁用EDP输入VP1
};

&edp_panel {
        status = "okay";  // 打开edp面板,这个一定要打开哟如果用edp屏幕
};

edp背光电路

cpp 复制代码
/ {
        edp_panel: edp-panel {
                compatible = "simple-panel";    //上节我们讲过的edp驱动通过这个来匹配设备树
                backlight = <&backlight>;   // 引用背光,在下面背光是一个PWM信号
        /*这是我们的背光*/
        backlight: backlight {
                compatible = "pwm-backlight";
                pwms = <&pwm4 0 25000 0>;  // PWM参数设置
                brightness-levels = <  // 亮度级别
                        0 20 20 21 21 22 22 23
                        // 其他亮度级别
                        ...
                        254 255
                        // 如果你在安卓里面调背光发现是反的可以把这个数组倒过来
                >;
                default-brightness-level = <200>;  // 默认亮度级别
        };
};

&pwm4 { //背光引脚使用的是PWM4
        status = "okay";  // PWM状态为正常
};

edp使能引脚

cpp 复制代码
/ {
        edp_panel: edp-panel {
                compatible = "simple-panel";    //上节我们讲过的edp驱动通过这个来匹配设备树
                pinctrl-0 = <&edp_en_gpio>;  // 引脚控制器
                .......
};

&pinctrl {
        edp {
                edp_en_gpio: edp-en-gpio { //这个是edp对应的使能引脚
                        rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;  // GPIO设置
                };
        };
};
.......

GPIO0_A6_d这个引脚就是普通的GPIO,通过高低电平来控制edp屏幕打开与关闭

屏幕参数调试

水平像素参数:Hor Active = 1366,表示水平活动像素为 1366 个。

水平空白参数:Hor Blanking = 160,表示水平空白像素为 160 个。

垂直像素参数:Ver Active = 768,表示垂直活动像素为 768 个。

垂直空白参数:Ver Blanking = 22,表示垂直空白像素为 22 个。

水平同步参数:Hor Sync Offset = 48,表示水平同步偏移量为 48;H Sync Pulse Width = 32,表示水平同步脉冲宽度为 32。

垂直同步参数:V sync Offset = 3 line,表示垂直同步偏移量为 3 行;V Sync Pulse width = 6 line,表示垂直同步脉冲宽度为 6 行。

对应到我们设备树中

clock-frequency:可以对应上面提到的主时钟频率,即 72.3 MHz。

hactive:可以对应上面提到的水平活动像素,即 Hor Active = 1366。

vactive:可以对应上面提到的垂直活动像素,即 Ver Active = 768。

hfront-porch、hsync-len 和 hback-porch:可以对应上面提到的水平同步参数,即 Hor Sync Offset、H Sync Pulse Width 和 Hor Blanking。

vfront-porch、vsync-len 和 vback-porch:可以对应上面提到的垂直同步参数,即 V sync Offset、V Sync Pulse width 和 Ver Blanking。

cpp 复制代码
/*************************************************
                11.6寸1366x768
**************************************************/
&edp_timing0 {
    clock-frequency = <72300000>;
    hactive = <1366>;
    vactive = <768>;
    hfront-porch = <48>;
    hsync-len = <32>;
    hback-porch = <160>;
    vfront-porch = <3>;
    vsync-len = <6>;
    vback-porch = <32>;
    hsync-active = <0>;
    vsync-active = <0>;
    de-active = <0>;
    pixelclk-active = <0>;
};
相关推荐
小林熬夜学编程27 分钟前
【Linux网络编程】第十三弹---构建HTTP响应与请求处理系统:从HttpResponse到HttpServer的实战
linux·运维·服务器·c语言·网络·c++·http
嗯? 嗯。33 分钟前
单片机的诗意
单片机·嵌入式硬件
流穿1 小时前
ELK系列-(五)指标收集-MetricBeat(下)
linux·运维·ubuntu·elk·docker·容器
chengf2231 小时前
ubuntu 开机自动mount 的方法
linux·服务器·ubuntu
Zfox_1 小时前
【Linux】网络基础探索:开启你的网络之旅
linux·服务器·网络
u0109053591 小时前
白嫖内网穿透之神卓互联Linux安装教程(树莓派)
linux·运维·服务器
电子工程师UP学堂1 小时前
电子应用设计方案-65:智能餐桌系统方案设计
网络·人工智能·单片机·嵌入式硬件·计算机外设
孙同学_2 小时前
【Liunx篇】基础开发工具-自动化构建-make/Makefile
linux·运维·自动化
迷迭所归处2 小时前
Linux系统 —— 进程控制系列 - 进程的创建与终止 :fork与exit
linux·运维·服务器
云计算运维丁丁2 小时前
负载均衡+LNMP+rsync+NFS+lsync部署流程
linux·运维·负载均衡·kylin