RK3568支持多种接口,本文主要介绍通过edp显示接口驱动edp显示屏的具体操作方法以及调试记录。
硬件准备
首先介绍一下硬件。主板为风火轮科技的YY3568开发板,主控RK3568。此开发板的相关介绍可以参考
https://wiki.youyeetoo.cn/zh/YY3568
板上带有一个edp接口,这种接口定义是通用的。
edp屏使用的是风火轮科技的11.6寸edp屏。此屏幕的相关介绍可以参考
http://wiki.youyeetoo.cn/zh/YYT_116EDP
硬件连接如下
如果只用到显示功能,接上edp线即可,另外还有触摸相关的IO,下一篇文章会介绍
原理图如下
核心板把EDP的四组差分线都拉出来了,但底板只使用了两组。因为这种30pin的座子标准就是只有两组。
另外EDP还有热插拔引脚,也就是这里的EDP_HPD,接到了GPIO_C2,不过R192默认不贴,因此在底板上默认是用不了热插拔功能的。如果需要这功能需要贴上R192。
另外还有GPIO1_A4是它背光使能,这里直接默认上拉了。如果要控制背光使能,则需要贴上R199
背光调节使用的是PWM14_M0。
软件准备
本文所使用的YY3568开发板已经有配备SDK,以及编译,烧录的教程,可以参考YY3568的wiki,链接如下
https://wiki.youyeetoo.cn/zh/YY3568
linux系列的sdk和android系列的sdk编译方法以及烧录方法是不一样的,编译的时候注意一下。
要调试edp屏,主要涉及kernel部分修改,建议读者首先了解kernel的编译以及烧录方法,这部分本文不做赘述。
Kernel部分修改
RK3568的VOP2带有三个VIDEO PORT(VP0 VP1 VP2),支持最多6个图层。下面以HDMI+EDP为例介绍kernel部分的修改。
目前Android全部采用的都是Linux DRM框架进行显示,在DRM框架中,其显示通路如下图所示
图中的几个组成部分
Framebuffer:显存,嵌入式系统使用的是内存的一部分
CRTC:显示控制器,在RK3568平台是VOP2,VOP2支持三个VIDEO PORT。这三个VP共享6个图层,而每个图层只能被一个VP使用。VP0最大支持4K输出,VP1最大支持2K输出。VP2只能支持RGB和LVDS,最大1080P,用的比较少。
Encoder:输出转换器,指RGB、LVDS、DSI、eDP、HDMI、CVBS、VGA等显示接口,它本质就是一个编码器,将CRTC提供过来的信号编码为对应显示接口需要的信号。RK3568支持DSI0 DSI1 EDP LVDS HDMI RGB六个显示接口。
Connector:连接器,指encoder和panel之间交互的接口部分;
Panel:各种具体的屏幕
因此,要驱动EDP屏幕,有三个部分需要配置,包括VOP,EDP控制器,屏幕的参数。
一般选择VOP和具体显示接口的对应关系时,会考虑性能问题,市面上EDP屏最大的分辨率一般不会超过2K,而HDMI很多4K的,因此这里选择VP0接到HDMI,VP1接到EDP。
首先配置VOP。VOP需要配置的东西不多,只需指定各个vp使用的图层,如果只用两个vp,那一般就是每个vp各分配三个图层。这里的参考如下,也可以调换vp0和vp1的配置。
在芯片级设备树rk3568.dtsi中edp的配置如下图,这个edp控制器有一个ports,指定了它连接到vp0或者是vp1
如果选择连接到vp1,则要把edp_in_vp0设为disabled,同时把edp_in_vp1设为okay。另外还要使能它的phy,也就是这个&edp_phy,因此,在板级设备树中,配置如下图
在rk3568的设备树配置中,vop默认enable了所有的endpoint,因此,只需要使能了edp那里的endpoint,即可设置连接关系。
如果需要开机logo (kernel加载阶段那个logo,不是android logo),则需要使能route_edp节点。默认是disabled的。
如果不使用开机logo的时候,uboot是不会加载DRM驱动的,这样可以略微降低uboot阶段消耗的时间。
然后需要配置edp控制器的一些属性。
其中force-hpd就是强制使能edp输出,无热插拔功能时需要配置这个属性。由于底板默认没有热插拔脚,因此需要配置。不配置此属性时则需要配置hpd-gpios,也就是指定热插拔所使用的引脚。
edp控制器也是有两个port的,前面已经介绍了其中一个port是指定vop的,这里另外一个port是指定屏的。
panel的参数配置如下
其中power-supply是给屏使能的,这里用的是GPIO1_A4。虽然底板上面没有这个功能(默认常使能),但还是可以配置上这个脚,后续有需要可以贴上电阻开启这个功能。
backlight指定的是背光调节的节点,这里用的就是pwm14。
另外这个pwm14的使能要打开。
display-timings指定的是屏参。如果屏支持动态读取edid,则可以不指定显示屏的具体参数。否则需要指定。
这个屏参可以从风火轮科技那里获取。
完成这些修改之后,在kernel目录下面执行编译,得到boot.img。然后烧录到板上
然后注意一下串口的kernel log,这个log说明drm驱动已经能够正常运作,实现vop和edp的绑定
这个log会在第一帧图像输出时打印,说明当前vop的输出分辨率,也就是Encoder的输出分辨率
如果确认上述的log都有,到这里,应该开机,能显示出图像
到这里,kernel部分的修改完成。
RK3568平台Android11或者debian 10以上的sdk对显示的支持已经很完善,不需要过多的修改,用默认配置即可
常见问题分析
1、背光不亮
首先确认背光节点是否存在
ls /sys/class/backlight/backlight_edp
这个背光节点名跟设备树配置的一致,笔者这里是backlight_edp
如果没有存在,检查pwm是否工作正常,执行
dmesg | grep pwm
查看有无报错信息。
如果提示pwm加载失败,存在pinctrl出错,则说明pwm14使用的引脚被其它功能复用了,关闭其它功能即可
然后查看当前亮度
cat /sys/class/backlight/backlight_edp/brightness
如果亮度为0,说明没有配置默认亮度,需要在backlight节点增加如下属性
2、背光亮,没有画面显示
需要一个名为modetest的工具,这个工具专门用于drm框架下显示功能的调试
Android SDK下面已有此工具,默认不安装到系统,使用如下命令编译
mmm external/libdrm/tests/modetest/ -j8
输出目录为out/target/product/(product name)/data/nativetest64/modetest/modetest
将此工具通过U盘/adb等方式放到板上,执行
modetest -c
可以看到如下信息
如果这个status显示为disconnected,说明此时那个edp的节点打开了hpd-gpios,且此时没有检测到热插拔事件,先确认硬件上是否支持,如果不支持,则需要打开force-hpd并关闭hpd-gpios,如果支持,则需要检查硬件连接
然后检查下方的分辨率是否跟屏实际的一致,如果不一致,那么cpu端edp输出的信号无法被屏的逻辑板识别,也是黑屏
部分edp屏不具备edid的功能,也就是必须要在设备树配置分辨率。
如果此时还是不能显示,那就要考虑是不是上层未将正确的显存传递到驱动,这时可以用modetest产生colorbar来测试
注意到Connectors的id为359,分辨率为1920x1080。那么可以使用命令
modetest -s 359:1920x1080
此时屏上会显示出colorbar
3、花屏
首先排查edp的输出参数和屏参是否一致,像素时钟是否正确。edp的像素时钟有上限。
另外有些屏上下电有时序要求,注意规格书上面会说明在屏使能之前还是之后才提供edp数据。如果这个时序不对,会导致屏上面有残影,看起来就是花屏。
4、部分显示不全、闪屏
通常是某个图层工作不正常。这时候会看到类似如下的内核日志
这说明edp绑定的vp的图层带宽不足。像分辨率较高的显示接口,需要分配至少一个ROCKCHIP_VOP2_SMART,同时将它的primary-plane设置为这个SMART图层。可以参考上一章节的VOP配置。
总结
本文以YY3568开发板外接11.6寸edp屏为例介绍了如何在RK3568平台上面调试edp屏幕。同时提供了一些调试过程中遇到的问题的解决方法。目前edp的应用场景越来越广泛,在商显,车载等领域,已有取代LVDS之势。风火轮科技的开发板上面已经具备了这个标准的edp接口,如果有需要在rk3568平台适配各种edp屏的,可以考虑用YY3568开发板来调试。
审核编辑 黄宇
-
嵌入式
+关注
关注
5083文章
19129浏览量
305400 -
接口
+关注
关注
33文章
8610浏览量
151213 -
调试
+关注
关注
7文章
578浏览量
33951 -
开发板
+关注
关注
25文章
5057浏览量
97519 -
RK3568
+关注
关注
4文章
514浏览量
5058
发布评论请先 登录
相关推荐
评论