eDP接口

eDP(Embedded DisplayPort)是数字显示技术领域的标准协议,它是基于DP(DisplayPort)架构和协议的一种内部数字接口,主要用于笔记本电脑、平板电脑、手机等设备内部连接液晶模块,替代以前的LVDS接口。

DP协议

DP(DisplayPort)是一个由PC及芯片制造商联盟开发,视频电子标准协会(VESA)标准化的数字式视频接口标准,用于视频源与显示器等设备的连接,并支持携带音频、USB和其他形式的数据。

eDP协议是针对DP应用在嵌入式方向架构和协议的拓展,eDP协议完全兼容DP协议。eDP可以看作是DP的超集,不仅包含DP的所有信号,还增加了一些额外的信号,例如用于笔记本背光控制的信号等。这意味着eDP接口在传输视频和音频数据的同时,还可以传输其他控制信号,以满足嵌入式设备的特定需求。

问题:

1、 RK3399点edp屏报错问题:

从csdn上了解到一篇关于RK3399点edp屏报错问题:

开机log报错如下

[    2.744420] [drm:rockchip_dp_bind] *ERROR* failed to find panel
[    2.744455] rockchip-drm display-subsystem: failed to bind ff970000.edp (ops rockchip_dp_component_ops): -517
[    2.744737] rockchip-drm display-subsystem: master bind failed: -517

原因:

1.由于dts配置中edp节点里面compatible = "panel-simple";这个没有起到作用,需要添加一个匹配。如:compatible ="auo,b125han03", "panel-simple"。

2.由于enable-gpios 配置错误或者被其他节点占用。

3.没有配置背光节点。

2、edp屏幕(GV101WUM-N40)时亮时不亮

问题描述:上电,待屏幕显示出logo时立马断电,重新上电;偶尔会出现无法正常显示的现象。

现在用K1的板子edp接口去点屏(edp口,1920x1200分辨率)。将rk3568-kickpi-lcd-edp-15.6-1920-1080.dtsi这个文件复制了一份进行修改(只是改了屏参),相同的屏参使用中华映管的屏幕(1920x1200)每次都可以点亮;可是点boe京东方的时亮时不亮(也是1920x1200的分辨率)

两个屏幕的屏参都是参照京东方的屏规格书来的

接中华映管的屏幕,log信息如下:

Using display timing dts
edp@fe0c0000:  detailed mode clock 154800 kHz, flags[a]
    H: 1920 2000 2032 2112
    V: 1200 1220 1223 1243
bus_format: 100e
VOP update mode to: 1920x1200p59, type: eDP0 for VP1
VP1 set crtc_clock to 154750KHz
VOP VP1 enable Smart1[654x270->654x270@633x465] fmt[2] addr[0xedf04000]
Link Training success!
final link rate = 0x0a, lane count = 0x02
hdmi@fe0a0000 disconnected
...

Starting kernel ...

...
[    6.017444] pwm-backlight backlight-edp: supply power not found, using dummy regulator
...
[    7.644981] rockchip-drm display-subsystem: bound fe0c0000.edp (ops 0xffffffc009603068)
...

目前京东方屏幕点不亮时主要报下面这些错误

[ 7.802618] rockchip-dp fe0c0000.edp: CR Max reached (0,3,0) 
[ 7.807988] rockchip-dp fe0c0000.edp: LT CR failed! 
[ 7.808137] rockchip-dp fe0c0000.edp: eDP link training failed (-5)

或者

Using display timing dts
edp@fe0c0000:  detailed mode clock 154800 kHz, flags[a]
    H: 1920 2000 2032 2112
    V: 1200 1220 1223 1243
bus_format: 100e
VOP update mode to: 1920x1200p59, type: eDP0 for VP1
VP1 set crtc_clock to 154750KHz
VOP VP1 enable Smart1[654x270->654x270@633x465] fmt[2] addr[0xedf04000]
CR Max reached (0,3,0)
AUX CH error happens: 6
LT CR failed!
AUX CH error happens: 6
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
AUX CH error happens: 6
AUX CH error happens: 2
LT CR failed!
AUX CH error happens: 6
CR Max reached (0,3,0)
AUX CH error happens: 6
AUX CH error happens: 6
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
unable to do link train

网上了解到lcd屏端的供电一定要比aux早。

这时候参考规格书通过不断修改屏参和时序,开机log报错的问题逐渐趋于稳定:

这里将规格书时序模块对应驱动参数作对应如下:

规格书时序模块 对应驱动参数 作用描述
LCDVCC(电源电压) init-delay-ms 电源上电稳定时间,确保屏幕供电稳定
edpDisplay(主链路启动) prepare-delay-ms 等待EDP主链路完成初始化(如时钟同步、数据通道建立)
HPD from Sink Device unprepare-delay-ms 热插拔信号断开后的延迟,避免误触发
Sink Device Aux CH prepare-delay-ms Aux通道的EDID读取和配置时间(如分辨率、色彩深度协商)
Source Device Main-Link enable-delay-ms 主链路数据传输前的信号稳定时间(如像素时钟同步)
Display Backlight enable-delay-ms 背光电路的启动延迟(如PWM调光芯片响应)

参考的文章:

[LCD接口设计系列一:基于eDP接口屏的硬件电路设计]:
(https://zhuanlan.zhihu.com/p/502815072)

[Display Port 1.4 link Training 过程]:
(https://blog.csdn.net/kingsai2012/article/details/129880250)

[DisplayPort--Link training之Clock Recovery (CR) ]:
(https://blog.csdn.net/qq_37708525/article/details/127910385?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168024525316800222892301%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168024525316800222892301&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-127910385-null-null.142%5Ev80%5Ekoosearch_v1,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=DP%20Link%20Training&spm=1018.2226.3001.4187)     

LT CR failed!

成功

Using display timing dts
edp@fe0c0000:  detailed mode clock 154800 kHz, flags[a]
H: 1920 2000 2032 2112
V: 1200 1220 1223 1243
bus_format: 100e
VOP update mode to: 1920x1200p59, type: eDP0 for VP1
VP1 set crtc_clock to 154750KHz
VOP VP1 enable Smart1[654x270->654x270@633x465] fmt[2] addr[0xedf04000]
CR Max reached (0,3,0)
LT CR failed!
Link Training success!

失败

Using display timing dts
edp@fe0c0000:  detailed mode clock 154800 kHz, flags[a]
 H: 1920 2000 2032 2112
 V: 1200 1220 1223 1243
bus_format: 100e
VOP update mode to: 1920x1200p59, type: eDP0 for VP1
VP1 set crtc_clock to 154750KHz
VOP VP1 enable Smart1[654x270->654x270@633x465] fmt[2] addr[0xedf04000]
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
unable to do link train

3、核查问题

参考文章:

https://www.elecfans.com/d/2251775.html

https://bbs.elecfans.com/jishu_2263008_1_1.html

①通过cat /sys/kernel/debug/dri/0/summary检测屏幕连接情况,发现不管训练成功还是失败,结果都是一样。

root@ubuntu2004:~# cat /sys/kernel/debug/dri/0/summary
Video Port0: DISABLED
Video Port1: ACTIVE
    Connector: eDP-1
        bus_format[100a]: RGB888_1X24
        overlay_mode[0] output_mode[f] color_space[0], eotf:0
    Display mode: 1920x1200p59
        clk[154800] real_clk[154800] type[48] flag[a]
        H: 1920 2000 2032 2112
        V: 1200 1220 1223 1243
    Smart1-win0: ACTIVE
        win_id: 1
        format: XR24 little-endian (0x34325258) SDR[0] color_space[0] glb_alpha[0xff]
        rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0
        csc: y2r[0] r2y[0] csc mode[0]
        zpos: 1
        src: pos[0, 0] rect[1920 x 1200]
        dst: pos[0, 0] rect[1920 x 1200]
        buf[0]: addr: 0x00000000ee882000 pitch: 7680 offset: 0

 modetest -M rockchip

③现在怀疑是不是设备树启动到另一个去了,假如是这种情况可以修改内核只打包一个设备树

检查:

root@ubuntu2004:~# cat /proc/device-tree/compatible
rockchip,rk3568-kickpi-k1arockchip,rk3568root@ubuntu2004:~#

这个怀疑不清楚怎么回事,这是网友的怀疑,我至今还不知道“修改内核只打包一个设备树”该怎么操作

④对比验证

从友商借来一块相同规格的显示屏JW101PD411-25D,来做对比:发现JW101PD411-25D这块屏幕不存在小概率无法显示的现象,每次都能Link Training success!

GV101WUM-N40(京东方)和JW101PD411-25D(京东方),CLAA101FP07-10.1(中华映管)三个屏幕对比

JW101PD411-25D(京东方):

eDP1.3接口

colors:16.7M

edp@fdec0000:  detailed mode clock 154800 kHz, flags[a]
    H: 1920 2000 2032 2112
    V: 1200 1220 1223 1243
bus_format: 100e
VOP update mode to: 1920x1200p59, type: eDP0 for VP2
VP2 set crtc_clock to 154799KHz
VOP VP2 enable Esmart2[654x270->654x270@633x465] fmt[2] addr[0xedf04000]
Link Training success!
...
Starting kernel ...
...
[    4.753200] vcc3v3_lcd_edp: supplied by vcc_3v3_s3
...
[    4.785588] rockchip-drm display-subsystem: bound fdec0000.edp (ops 0xffffffc00931a988)
...

GV101WUM-N40(京东方):

eDP 1.4 接口 (支持 PSR2)

colors:16.2M

edp@fdec0000:  detailed mode clock 154800 kHz, flags[a]
    H: 1920 2000 2032 2112
    V: 1200 1220 1223 1243
bus_format: 100e
VOP update mode to: 1920x1200p59, type: eDP0 for VP2
VP2 set crtc_clock to 154799KHz
VOP VP2 enable Esmart2[654x270->654x270@633x465] fmt[2] addr[0xedf04000]
AUX CH error happens: 6
AUX CH error happens: 6
AUX CH error happens: 6
AUX CH error happens: 6
Link Training success!

CLAA101FP07-10.1(中华映管)

edp 1.2接口

colors:16777216

三者最大的区别是eDP 协议版本不一样!!!网上了解到edp协议版本会导致屏幕显示相关的问题(有一点比较重要:高版本兼容低版本)

这时候就开始研究eDP 协议版本、屏幕接口以及线路、主板主控芯片三者之间的关系

https://blog.csdn.net/lqxandroid2012/article/details/52461657

发现主板(rk3568/rk3588)似乎对edp1.4支持不太好?需要考虑的是能不能在主板linux系统中设置edp屏幕强制降级?

⑤解决问题

训练次数默认是5次,这里把它改成10次

修改文件analogix_dp.c

sdk根目录/u-boot/drivers/video/drm/analogix_dp.c


改完后,编译,将生成的uboot镜像文件烧录到板子,开机log报错信息如下:

edp@fdec0000:
detailed mode clock 154800 kHz,flags[a]
H:1920 2000 2032 2112
V:1200 1220 1223 1243
bus format: 100e
Vop update mode to:1920x1200p59,type: eDP0 for VP2
VP2 set crtc clock to 154799KHz
VoP VP2 enable Esmart2[654x270->654x270@633x465] fmt[2] addr[0xedf04000]
CR Max reached(0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached(0,3,0)
LT CR failed!
CR Max reached(0,3,0)
IT CR failed!
CR Max reached(0,3,0)
LT CR failed!
CR Max reached(0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
unable to do link train

再次修改analogix_dp.c

	if (ret) {
//-//		dev_err(dp->dev, "unable to do link train\n");
//-//		return ret;
            dev_err(dp->dev, "unable to do link train ,using default strength\n");                       //+//
            dp->link_train.training_lane[0] =DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_0; //+//
            analogix_dp_set_lane_link_training(dp);													//+//
	}

如上:

原代码中,如果链路训练失败(ret非零),会直接打印错误日志并返回错误码ret;这种情况下,链路训练失败会导致整个初始化流程中断;然后我们可以设置让它即使链路训练失败,但尝试使用默认的训练参数继续工作。将链路训练的电压摆幅(Voltage Swing)和预加重(Pre-emphasis)设置为最低值,确保硬件能够在最低要求下继续工作,即使无法完成完整的链路训练。

修改后经过测试,屏幕是可以正常显示的,小概率无画面情况消失了。

这时候开机log依旧会报错,只不过报错信息变了;

但是屏幕是可以正常显示的,忽略报错信息即可。

edp@fdec0000:  detailed mode clock 154800 kHz, flags[a]
    H: 1920 2000 2032 2112
    V: 1200 1220 1223 1243
bus_format: 100e
VOP update mode to: 1920x1200p59, type: eDP0 for VP2
VP2 set crtc_clock to 154799KHz
VOP VP2 enable Esmart2[654x270->654x270@633x465] fmt[2] addr[0xedf04000]
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
CR Max reached (0,3,0)
LT CR failed!
unable to do link train,using default strength!