前言
Embedded DisplayPort(eDP) 作为一种高效、低功耗的显示接口标准,广泛应用于嵌入式设备、平板电脑、笔记本电脑以及工业控制设备中。RK3576 是瑞芯微电子(Rockchip)推出的一款高性能处理器,其内置的显示子系统支持 eDP 接口,能够满足高分辨率、高刷新率的显示需求。
本文档旨在为开发者提供 RK3576 处理器上 eDP 接口的配置指南,涵盖硬件连接、软件驱动配置、时钟设置、时序调整等内容。通过本文档,开发者可以快速了解如何在 RK3576 平台上实现 eDP 显示功能的初始化与调试,确保显示系统稳定运行。
一、eDP的配置方式
1:edp在Rk上基本上就2中配置方式,一种就是我们常规的固定屏,一种就是支持热拔插,而我在项目中主要使用到的是固定屏的方式。
二、使用步骤
1.根据硬件提供的原理图
我们要确认几个点,背光、使能、是否支持热拔插(hpd),还有信号线这几组,还有各个电压点是否正确。
2.首先根据我们的原理图我们是不支持hpd的,只需要添加force-hpd就行了
&edp0 {
force-hpd;
status = "okay";
ports {
port@1 {
reg = <1>;
edp0_out_panel: endpoint {
remote-endpoint = <&panel_in_edp0>;
};
};
};
};
3.如果eDP 外接显示器,支持 HPD 参考配置如下(HPD FUNC 功能引脚)
hdmim0_tx0_hpd (gpio1_a5)hdmim1_tx0_hpd (gpio3_d4)
&edp0 {
pinctrl-names = "default";
pinctrl-0 = <&hdmim0_tx0_hpd>;
status = "okay";
};
&edp0_in_vp0 {
status = "disabled";
};
&edp0_in_vp1 {
status = "disabled";
};
&edp0_in_vp2 {
status = "okay";
};
HPD GPIO 自定义引脚设置:
&edp0 {
pinctrl-names = "default";
pinctrl-0 = <&edp0_hpd>;
hpd-gpios = <&gpio1 RK_PA5 GPIO_ACTIVE_HIGH>;
status = "okay";
};
&pinctrl {
edp {
edp0_hpd: edp0-hpd {
rockchip,pins = <1 RK_PA5 0 &pcfg_pull_none>;
};
};
};
&edp0_in_vp0 {
status = "disabled";
};
&edp0_in_vp1 {
status = "disabled";
};
&edp0_in_vp2 {
status = "okay";
};
4.eDP Panel dts 配置
4.1首先第一个就是我们根据屏幕厂家给的规格书,我们获取到了屏幕的相关参数,
4.2根据这些参数我们知道了我们的屏幕参数
panel-edp {
compatible = "simple-panel";
backlight = <&backlight>;
prepare-delay-ms = <120>;
enable-delay-ms = <120>;
unprepare-delay-ms = <120>;
disable-delay-ms = <120>;
display-timings {
native-mode = <&timing_4kp60>;
timing_4kp60: timing1 {
clock-frequency = <147840000>;
hactive = <1920>;
vactive = <1080>;
hfront-porch = <48>;
hsync-len = <32>;
hback-porch = <200>;
vfront-porch = <3>;
vsync-len = <6>;
vback-porch = <31>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
port {
panel_in_edp: endpoint {
remote-endpoint = <&edp_out_panel>;
};
};
};
};
4.3各个参数的说明
clock-frequency时钟频率:
clock-frequency=(hactive+hfront-porch+hsync-len+hback-porch)×(vactive+vfront-porch+vsync-len+vback-porch)×refresh-rate
-
示例:
-
如果分辨率为 1920x1080,刷新率为 60Hz,则:
clock-frequency=(1920+48+32+200)×(1080+3+6+31)×60clock-frequency=(1920+48+32+200)×(1080+3+6+31)×60计算得到
clock-frequency
约为 147.84 MHz。 -
hactive
水平有效像素数(Horizontal Active Pixels) -
vactive
垂直有效行数(Vertical Active Lines) -
hfront-porch
水平前沿:作用水平同步信号(HSync)开始之前的时间 -
hback-porch
水平后沿:HSync 信号结束后到下一行有效像素开始之前的时间 -
vfront-porch
:垂直前沿(Vertical Front Porch)。-
作用:定义垂直同步信号(VSync)开始之前的时间。
-
示例:
vfront-porch = 3
表示 VSync 信号开始前有 3 行。
-
-
vsync-len
:垂直同步信号宽度-
作用:定义 VSync 信号的持续时间。
-
示例:
vsync-len = 6
表示 VSync 信号持续 6 行。
-
-
vback-porch
:垂直后沿-
作用:定义 VSync 信号结束后到下一帧有效行开始之前的时间。
-
示例:
vback-porch = 31
表示 VSync 信号结束后有 31 行。
-
-
hsync-active
:水平同步信号极性-
作用:定义 HSync 信号的有效电平(0 表示低电平有效,1 表示高电平有效)。
-
示例:
hsync-active = 0
表示 HSync 信号低电平有效。
-
-
vsync-active
:垂直同步信号极性-
作用:定义 VSync 信号的有效电平(0 表示低电平有效,1 表示高电平有效)。
-
示例:
vsync-active = 0
表示 VSync 信号低电平有效。
-
-
de-active
:数据使能信号极性-
作用:定义数据使能信号的有效电平(0 表示低电平有效,1 表示高电平有效)。
-
示例:
de-active = 0
表示数据使能信号低电平有效。
-
-
pixelclk-active
:像素时钟极性-
作用:定义像素时钟的采样边沿(0 表示上升沿采样,1 表示下降沿采样)。
-
示例:
pixelclk-active = 0
表示像素时钟在上升沿采样。
-
-
刷新率计算
刷新率(Refresh Rate)可以通过以下公式计算:
refresh-rate=clock-frequency/((hactive+hfront-porch+hsync-len+hback-porch)×(vactive+vfront-porch+vsync-len+vback-porch))示例:
-
根据提供的参数:
refresh-rate=147840000/((1920+48+32+200)×(1080+3+6+31))计算得到刷新率约为 60Hz。
5.背光设置
根据原理图上我们可以知道我们的pwm使用了GPIO0 RB7引脚,通过RK3576-Pinctrl.dtsi可以知道使用到的pwm1m0_ch4
/omit-if-no-ref/
pwm1m0_ch4: pwm1m0-ch4 {
rockchip,pins =
/* pwm1_ch4_m0 */
<0 RK_PB7 12 &pcfg_pull_none>;
};
所以我们在pwm1_6ch_4中配置我们的pinctrl-0中去,如示例
&pwm1_6ch_1 {
status = "okay";
pinctrl-0 = <&pwm1m0_ch4>;
};
到此我们就可以将pwm1_6ch_4添加到我们的backlight中。
pwms = <&pwm1_6ch_4 0 25000 0>;
使用
pwm1_6ch_4
控制器的第 0 通道。PWM 信号周期为 25000 纳秒(40 kHz)。
占空比为 0%(低电平)。
默认极性(高电平有效)。
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm1_6ch_4 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
31 32 32 33 33 34 34 35
35 36 36 37 37 38 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95
96 97 98 99 100 101 102 103
104 105 106 107 108 109 110 111
112 113 114 115 116 117 118 119
120 121 122 123 124 125 126 127
128 129 130 131 132 133 134 135
136 137 138 139 140 141 142 143
144 145 146 147 148 149 150 151
152 153 154 155 156 157 158 159
160 161 162 163 164 165 166 167
168 169 170 171 172 173 174 175
176 177 178 179 180 181 182 183
184 185 186 187 188 189 190 191
192 193 194 195 196 197 198 199
200 201 202 203 204 205 206 207
208 209 210 211 212 213 214 215
216 217 218 219 220 221 222 223
224 225 226 227 228 229 230 231
232 233 234 235 236 237 238 239
240 241 242 243 244 245 246 247
248 249 250 251 252 253 254 255
>;
default-brightness-level = <200>;
};
6,常见的问题
console:/ # dmesg | grep backlight[ 3.164274] pwm-backlight: probe of backlight failed with error -16
console:/ # dmesg | grep panel[ 3.156813] panel-simple panel-edp: failed to get enable GPIO: -16[ 3.156919] panel-simple: probe of panel-edp failed with error -16
console:/ # dmesg | grep edp[ 3.236549] rockchip-dp fdec0000.edp: failed to read max link rate[ 3.260422] rockchip-dp fdec0000.edp: failed to read max link rate[ 3.284163] rockchip-dp fdec0000.edp: failed to read max link rate