1、环境介绍
硬件:飞凌OK527
软件:原厂t527-tina5.0-aiot-v1.4 sdk(buildroot、Linux 5.15)
2、前言
本文将记录t527基于drm框架的hdmi调试。t527 hdmi最高分辨率支持4k。关于全志t527的显示接口和显示路由框架理清可以参考:T527 基于DRM框架的显示通路理清
3、T527 HDMI 功能支持表
由于不同 SDK 平台针对的使用场景不同,部分功能虽然硬件支持,但是 SDK 可能没有支持上。请综合考虑以下芯片硬件功能支持表和 SDK 平台功能实现表。


4、HDMI 显示框图

5、HDMI 模块框图

HDMI 模块内部大致分为视频处理模块、音频处理模块、帧打包模块和 PHY 模块:
视频处理模块:对输入的视频进行采样并重新打包。
音频处理模块:对输入的音频进行采样并重新打包。
帧处理模块:对音频和视频数据按照帧数据的方式进行融合打包,并添加相关的 infoframe 信息。
PHY 处理模块:将完整的帧数据按照 TMDS 协议转换为 TMDS Data,并输出到显示端。
6、uboot 设备树配置
hdmi 开启 logo显示。(如果不开,系统启动后不会自动进入weston桌面。不会自动进入weston桌面不代表hdmi无法使用)

7、kernel 设备树配置
以下是sdk出厂时关于hdmi的默认配置,可以直接用。需要修改可以参考《Linux HDMI2.0 DRM 开发指南》。同时需要关闭lvds。(如果不关lvds,系统启动后不会自动进入weston桌面。不会自动进入weston桌面不代表hdmi无法使用):
// &de(de0/de1) -> &vo0 -> &tv0(TCON2_TV0) -> &hdmi
&de {
chn_cfg_mode = <3>;
status = "okay";
};
&vo0 {
status = "okay";
};
&tv0 {
status = "okay";
};
&hdmi {
bldo3-supply = <®_bldo3>;
hdmi_power0 = "bldo3";
hdmi_power_cnt = <1>;
hdmi_hdcp1x_enable = <1>;
hdmi_hdcp2x_enable = <0>;
hdmi_cec_enable = <0>;
inno_phy = <
25000 165000 0x01000102 0x1c1c1c1c 0x00000000 0x00000000
165000 340000 0x01040506 0x1c1c1c1c 0x00000000 0x03030300
340000 600000 0x010f0f0f 0x1c1c1c1c 0x00000000 0x00000000>;
status = "okay";
};
&lvds0 {
status = "disabled"; // 关闭lvds
// dual-channel = <0>;
pinctrl-0 = <&lvds0_pins_a>;
pinctrl-1 = <&lvds0_pins_b>;
pinctrl-names = "active","sleep";
ports {
port@1 {
reg = <1>;
lvds_panel_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&lvds_panel_in>;
};
};
};
};
8、内核配置
如下是内核配置,默认已开启:
Allwinner BSP ‑‑‑>
Device Drivers ‑‑‑>
DRM Drivers ‑‑‑>
<*> DRM Support for Allwinner SoCs
<*> Support Hdmi Output
[*] Support HDMI2.0 Output
9、测试
本次测试将使用1024*600分辨率的7寸hdmi屏。测试需要使用modetest工具,需在buildroot menuconfig中开启:
BR2_PACKAGE_SUNXI_MODETEST=y
9.1、查看log信息
插入1024*600分辨率7寸屏后,有如下log:

buildroot系统启动后会进入weston桌面(前提是配置了logo显示,关闭lvds):

9.2、modetest 介绍
modetest 是 DRM / KMS 框架的用户空间测试工具。可以验证drm驱动是否正常工作,替代图形界面进行底层测试。

9.3、使用modetest工具测试
关闭所有weston服务:
killall weston
查看hdmi connector id和crtcs id:
modetest -M sunxi-drm -c | grep "HDMI" && modetest -M sunxi-drm | grep -A 2 "CRTCs"

查看屏幕支持的分辨率:
modetest -M sunxi-drm -c | grep -A 20 "HDMI" | grep -E "[0-9]+x[0-9]+"

静态彩条测试:
# modetest -M sunxi-drm -s <hdmi_connector_id>@<crtcs_id>:<分辨率> -v
# 该命令会建立显示管道并输出图像
modetest -M sunxi-drm -s 149@100:1024x600


9.4、查看Tx信息
cat /sys/class/hdmi/hdmi/attr/hdmi_source

属性解释参考:《Linux HDMI2.0 DRM 开发指南》
cat /sys/class/hdmi/hdmi/attr/hdmi_sink

属性解释参考:《Linux HDMI2.0 DRM 开发指南》
9.6、更改输入源
目前支持 HDMI 的 frame composer 和 Tcon 的两种输入源替换,用于定位是否 DE 送进的数据有异常。
查看支持输出图片:
cat /sys/class/hdmi/hdmi/attr/pattern

设置输出图片:
# echo <index> > /sys/class/hdmi/hdmi/attr/pattern
# 输出红色图片
echo 1 > /sys/class/hdmi/hdmi/attr/pattern

切换回de输出:
10、总结
参考文章:
《Linux HDMI2.0 DRM 开发指南》
嵌入式Linux学习交流群:424571391
6277

被折叠的 条评论
为什么被折叠?



