全志HDMI显示

在使用全志HDMI时,发现显示无画面。

一、模块功能配置

1、配置HDMI

在menuconfig中,配置打开“DISP Driver Support”和 “HDMI2.0 Driver Support”选项

Allwinner BSP ‑‑‑> 
    Device Drivers ‑‑‑> 
        Video Drivers ‑‑‑> 
            <*> DISP Driver Support(sunxi‑disp2) 
                <*> HDMI Tx Driver Support(sunxi‑disp2) ‑‑‑> 
                    <*> HDMI2.0 Driver Support(sunxi‑disp2) ‑‑‑

2、在 board.dts中,配置hdmi节点的状态为okay

3、显示配置

disp_mode :(0:screen0<screen0,fb0>)

screenx_output_type:(0:none; 1:lcd; 2:tv; 3:hdmi;5:vdpo)

screenx_output_mode:(used for hdmi output, 0:480i 1:576i 2:480p 3:576p 4:720p50 5:720p60 0x5d:720p25 6:1080i50 7:1080i60 8:1080p24 9:1080p50 10:1080p60) 

devX_output_type : (0:none; 1:lcd; 2:tv; 4:hdmi;)

(1)uboot-board.dts

&disp {
        disp_init_enable         = <1>;
        disp_mode                = <0>;

        screen0_output_type      = <4>;
        screen0_output_mode      = <5>;
        screen0_to_lcd_index     = <2>;
        ......
        dev0_output_type         = <4>;
        dev0_output_mode         = <5>;
        dev0_screen_id           = <0>;
        dev0_do_hpd              = <1>;
        ......
    };

(2)board.dts

配置项同uboot保持一致

&disp {
        disp_init_enable         = <1>;
        disp_mode                = <0>;

        screen0_output_type      = <4>;
        screen0_output_mode      = <5>;
        screen0_to_lcd_index     = <2>;
        ......
        dev0_output_type         = <4>;
        dev0_output_mode         = <5>;
        dev0_screen_id           = <0>;
        dev0_do_hpd              = <1>;
        ......
    };

二、调试方式

1、查看HDMI模块加载成功

(1)查看相关sysfs路径

cd /sys/class/hdmi/hdmi/attr

(2)查看相关设备节点

ls /dev/hdmi

上述径存在说明HDMI模块加载成功。反之则HDMI模块加载不成功

(3)显示框架

cat /sys/class/disp/disp/attr/sys,从显示框架上查看显示是否是切换到hdmi输出。

2、获取hdmi相关日志信息

HDMI异常日志信息

root@Longan:/$ dmesg |grep hdmi
[    0.844539] sunxi:hdmi20:[WARN]: [ warn] read hdmi_log_mem array failed!
[    0.844543] sunxi:hdmi20:[INFO]: [ info] Get uboot hdmi log failed, malloc a new buffer...
[    0.844554] sunxi:hdmi20:[INFO]: [ info] aw_hdmi_drv_probe: start.
[    0.844592] sunxi:hdmi20:[ERR]: [error] _aw_hdmi_dts_parse_pin_config: ddc can not get pinctrl
[    0.844623] sunxi:hdmi20:[INFO]: [ info] get hdmi power0: bldo3 is success.
[    0.844786] sunxi:hdmi20:[INFO]: [ info] boot hdmi is on
[    0.844907] sunxi:hdmi20:[INFO]: [ info] _aw_disp_hdmi_set_static_config: start.
[    0.844911] sunxi:hdmi20:[INFO]: [ info] [HDMI receive params]: tv mode: 0x5d format:0x0 data bits:0x0 eotf:0x4 cs:0x101 dvi_hdmi:2 range:2 scan:0 aspect_ratio:8
[    0.844930] sunxi:disp:[WARN]: [DE]: hdmi_set_mode is null
[    0.844933] sunxi:hdmi20:[INFO]: [ info] _aw_disp_hdmi_get_video_timming_info: start.
[    0.845223] sunxi:hdmi20:[INFO]: [ info] aw_hdmi_drv_probe: finish.
[    0.845571] sunxi:hdmi20:[INFO]: [ info] hdmi module init end.

HDMI正常使用日志信息

root@Longan:/$ dmesg |grep hdmi
[    0.844604] sunxi:hdmi20:[WARN]: [ warn] read hdmi_log_mem array failed!
[    0.844608] sunxi:hdmi20:[INFO]: [ info] Get uboot hdmi log failed, malloc a new buffer...
[    0.844620] sunxi:hdmi20:[INFO]: [ info] aw_hdmi_drv_probe: start.
[    0.844659] sunxi:hdmi20:[ERR]: [error] _aw_hdmi_dts_parse_pin_config: ddc can not get pinctrl
[    0.844692] sunxi:hdmi20:[INFO]: [ info] get hdmi power0: bldo3 is success.
[    0.844872] sunxi:hdmi20:[INFO]: [ info] boot hdmi is on
[    0.844976] sunxi:hdmi20:[INFO]: [ info] aw_hdmi_drv_probe: finish.
[    0.845299] sunxi:hdmi20:[INFO]: [ info] hdmi module init end.
[    0.845815] sunxi:hdmi20:[INFO]: [ info] _aw_disp_hdmi_set_static_config: start.
[    0.845819] sunxi:hdmi20:[INFO]: [ info] [HDMI receive params]: tv mode: 0x5d format:0x0 data bits:0x0 eotf:0x4 cs:0x101 dvi_hdmi:2 range:2 scan:0 aspect_ratio:8
[    0.845837] sunxi:disp:[WARN]: [DE]: hdmi_set_mode is null
[    0.845840] sunxi:hdmi20:[INFO]: [ info] _aw_disp_hdmi_get_video_timming_info: start.

[    1.044990] sunxi:hdmi20:[INFO]: [ info] HDMI cable is connected
[    1.045023] sunxi:hdmi20:[ERR]: [error] _i2cm_read8: I2C DDC Read8 extended failed for i2cAddr 0x50 seg 0x30 pointer 0x0 addr 0x0
[    1.110410] sunxi:hdmi20:[WARN]: [ warn] sink do not support this mode: 108

对比日志发现,缺少HDMI连接部分。

万用表测量HDMI部分5V 3.3V供电均正常。

3、查看HDMI连接状态

cat /sys/class/hdmi/hdmi/attr/hdmi_source

在输出日志中找到HPD字样如果打印HPD: 1,表明HDMI检测到插入;如果打印HPD: 0,表明HDMI未检测到插入

4、查看 rxsense状态

在输出日志中找到rxsense字样

如果打印rxsense: 1,表明HDMI检测到rxsense有正常拉高, TMDS数据能正常传输。

如果打印rxsense: 0,表明HDMI检测到rxsense有异常未拉高, TMDS数据不能传输

5、排查硬件特性

使用示波器测量5V,HPD,Tmds相关Pin 是否正常

•如果没有5V,那么需要Tx 端排查硬件电路;

•如果没有HPD但有5V,那么基本定性是Rx 端问题,未能拉高HPD;

•如果TMDS幅值没拉高,那么基本定性是Rx 端问题,未能拉高TMDS;

•测量TMDS CLK Pin的时钟频率,看是否与当前的符合

测量HPD脚

R120电阻,左端为3.8V,右端为0V。拔下HDMI R120左端电压无变化,右端电压为0.8V。

HDMI_HPD 信号是一个热插拔检测信号,其正常工作原理如下:

  • 在 HDMI 未连接到设备时,HDMI_HPD 应为低电平

  • 在 HDMI 插头连接到设备时,HDMI_HPD 信号被拉高到高电平

去掉R120,无作用。

设备树中可配置hpd

不会影响正常的信号识别,但为什么插上无信号?

硬件排查后正常,更换HDMI显示设备后,能正常识别信号。

(注:之前的HDMI设备经过转接头连接,可能导致协议的变化。尽可能保证直接连接,若以后遇到同样问题,可作为排查点之一)

6、显示屏只能输出60FPS

uboot-board.dts中修改显示

修改如下:

@@ -798,7 +798,7 @@
         disp_mode                = <0>;
 
         screen0_output_type      = <4>;
-        screen0_output_mode      = <0x5d>;
+        screen0_output_mode      = <5>;
         screen0_to_lcd_index     = <2>;
 
         screen0_output_format    = <0>;
@@ -817,7 +817,7 @@
 
         dev_num                  = <1>;
         dev0_output_type         = <4>;
-        dev0_output_mode         = <0x5d>;
+        dev0_output_mode         = <5>;
         dev0_screen_id           = <0>;
         dev0_do_hpd              = <1>;

正常显示!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春风从不入睡、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值