rk3568 点亮HDMI

news2024/12/22 22:47:52

rk3568 Android11/12 适配HDMI

HDMI(High-Definition Multimedia Interface)是一种数字化音视频接口标准,用于连接高清电视、电脑、游戏机、蓝光播放器等设备。它是由HDMI联盟(HDMI Licensing, LLC)制定的,目前已经成为了数字音视频传输的主流标准之一。

HDMI接口支持高清视频、多声道音频和数据传输,可以传输1080p的高清视频和8个声道的高品质音频信号。它采用数字信号传输,避免了模拟信号传输中的信号失真和干扰,保证了高质量的音视频传输效果。

HDMI接口有多种版本,包括HDMI 1.0、HDMI 1.1、HDMI 1.2、HDMI 1.3、HDMI 1.4、HDMI 2.0、HDMI 2.1等。每个版本都有不同的特性和功能,例如支持更高的分辨率、更高的帧率、更多的颜色深度、更高的带宽等。

HDMI接口还支持多种功能,例如CEC(Consumer Electronics Control)控制、ARC(Audio Return Channel)音频回传、Ethernet网络传输等。CEC控制可以让多个设备通过HDMI接口进行互动控制,ARC音频回传可以让电视机通过HDMI接口将音频信号传回音频设备,Ethernet网络传输可以让设备通过HDMI接口进行网络连接。


提示:rk3568 支持HDMI2.0 4K-60fps解码。

文章目录

  • rk3568 Android11/12 适配HDMI
  • 圈重点 看想学
  • 1. rk3568 适配 HDMI
    • 1.1 核查原理图,适配 HDMI
    • 1.2 HDMI显示分辨率调整
    • 1.3 HDMI 色彩设置
    • 1.4 HDMI 设置亮度、对比度、饱和度、色度
    • 1.4 HDMI 调整 DDC
    • 1.5 HDMI工作模式
  • 2 调试过程排查方法
    • 2.1 硬件排查
    • 2.2 软件排查方法
  • Tips
  • 总结


圈重点 看想学

a) rk3568 适配 HDMI
b) rk3568 适配过程异常情况


1. rk3568 适配 HDMI

在这里插入图片描述
仔细核查HDMI的原理图,会发现供电部分 VCC5V_HDMI_TX,VCC_3V3,无额外供电。

1.1 核查原理图,适配 HDMI

在这里插入图片描述
核查SOC HDMI模块,没有复用关系。rk3568一般情况会默认分配 vp0 到HDMI。在rk3568-evb.dtsi中已经默认开启HDMI,且 VCCA1V8_IMAGE VDDA0V9_IMAGE 供电均已配置在rk809PMIC作匹配。 设备树适配如下:

&hdmi {
	status = "okay";
	rockchip,phy-table =
		<92812500  0x8009 0x0000 0x0270>,
		<165000000 0x800b 0x0000 0x026d>,
		<185625000 0x800b 0x0000 0x01ed>,
		<297000000 0x800b 0x0000 0x01ad>,
		<594000000 0x8029 0x0000 0x0088>,
		<000000000 0x0000 0x0000 0x0000>;
};

&hdmi_in_vp0 {
	status = "okay";
};

&hdmi_in_vp1 {
	status = "disabled";
};

&hdmi_sound {
	status = "okay";
};

&route_hdmi {
	status = "okay";
	connect = <&vp0_out_hdmi>;
};
  1. HDMI 信号强度配置
    HDMI 信号强度可通过 dts 的 rockchip.phy-table 属性配置,格式定义: <PIXELCLOCK PHY_CKSYMTXCTRL PHY_TXTERM PHY_VLEVCTRL>
  • PIXELCLOCK 表示该行参数所对应的最大 pixelclock 频率。
  • PHY_CKSYMTXCTRL 寄存器 (0x09) 值用于调整 HDMI 信号的预加重和上升斜率,加大预加重或 sloop
    boost,可以提升 DATA 信号的上升/下降斜率,但会降低信号的上升/下降时间:
    Bit[0]:CLOCK 信号使能。
    Bit[3:1]:DATA 信号预加重。
    Bit[4:5]:DATA 信号sloop boost。
  • PHY_TXTERM 寄存器 (0x19) 值用于调整端接电阻值
    Bit[0:2]:值越大,端接电阻值越大。
  • PHY_VLEVCTRL寄存器 (0x0e) 值用于调整 HDMI 的信号幅度,具体定义如下:Bit[0:4] : tmds_clk +/- 信
    号幅度,值越低,信号幅度越大;
    Bit[5:9]: tmds_data +/- 信号幅度,值越低,信号幅度越大。

以设备树中的第一行参数为例
<74250000 0x8009 0x0004 0x0272> ,表示 pixeclock 为 74.25MHz (720p 分辨率) 以下是
PHY_CKSYMTXCTRL 寄存器值为0x8009;PHY_TXTERM 值为 0x0004; PHY_VLEVCTRL 值为 0x0272。如有单独修改可通过 cat /sys/kernel/debug/dw-hdmi/phy查验是否修改成功。

  1. 需要增加HDMI CEC功能,修改如下:
&hdmi {
	status = "okay";
	rockchip,cec_enable = <1>;
};
  1. 查看CEC状态
cat /sys/kernel/debug/cec/cec0/status 
configured: 0
configuring: 0
phys_addr: f.f.f.f
number of LAs: 0
LA mask: 0x0000
pending transmits: 0
  • configured 表示 cec adapter 是否配置完毕,1 为配置完毕,0 为未完毕。
  • configuring 表示 cec adapter 是否正在配置,1 为正在,0 为配置完毕或未开始配置。
  • phys_addr 表示 cec 的物理地址,未获取物理地址时为 f.f.f.f。
  • number of LAs 表示该 cec 设备的逻辑地址数量,大部分设备为 1,极少数为 2。
  • LA mask 表示当前绑定的逻辑地址,具体取值为(1 << 绑定的逻辑地址)。如:取值为 0x0010
    时,右移 4 位后为 1,则说明当前的逻辑地址为 4,取值为 0x0800 时,右移 11 位后为 1,则说明
    当前的逻辑地址为 11.如未绑定任何逻辑地址时为 0x0000。
  • has CEC follower 表示当前收到的 cec 消息交由上层用户空间处理,in passthrough mode 表示
    kernel 不会处理 cec core message,而是全部上报给上层用户空间处理。
  • pending transmits 表示当前还有多少待发送的 cec 消息

至此 HDMI 内核设备树匹配基本完成,内核相关宏定义默认已经开启无需再处理。

1.2 HDMI显示分辨率调整

rk3568 系统启动后,HDMI正常注册会生成驱动节点/sys/class/drm/card0-HDMI-A-1

ls -l --color
lrwxrwxrwx 1 root root    0 41 13:59 device -> ../../card0
-r--r--r-- 1 root root 4096 41 13:59 dpms
-r--r--r-- 1 root root    0 41 13:59 edid # 连接设备edid
-r--r--r-- 1 root root 4096 41 13:59 enabled # 使能状态
-r--r--r-- 1 root root 4096 41 13:59 modes # HDMI设备支持分辨率列表
drwxr-xr-x 2 root root    0 41 13:59 power
-rw-r--r-- 1 root root 4096 41 13:59 status # 连接状态
lrwxrwxrwx 1 root root    0 41 13:59 subsystem -> ../../../../../../class/drm
-rw-r--r-- 1 root root 4096 41 13:59 ueven

rk3568 内核原因不能在设备树中设置默认分辨率,比较可惜。

&hdmi {
	status = "okay";
	rockchip,defaultmode = <4>;
};

看目录结构不难发现不支持调整 颜色模式、3D模式和输出分辨率调整。实际情况就像那句:某天GOD给你关上一扇窗,但又发现他给你开了一扇门。通过 persist.vendor.resolution.main 以及 persist.vendor.resolution.aux 设置主副屏分辨率,每次设置完更新 vendor.display.timeline (每次加 1)再进行移动鼠标等更新UI 的操作使新分辨率生效。

  • 设置4k60:
setprop persist.vendor.resolution.main 3840x2160@60-3840-4016-4104-4400-
2160-2168-2178-2250-5
setprop vendor.display.timeline 1
  • 设置1080p60:
setprop persist.vendor.resolution.main 1920x1080@60-1920-2008-2052-2200-
1080-1084-1089-1125-5
setprop vendor.display.timeline 2
  • 设置720P60:
setprop persist.vendor.resolution.main 1280x720@60.00-1390-1430-1650-725-
730-750-5
setprop vendor.display.timeline 3
  • 设置480P60:
setprop persist.vendor.resolution.main 720x480@59.94-736-798-858-489-495-
525-a
setprop vendor.display.timeline 4

1.3 HDMI 色彩设置

颜色设置与设置HDMI分辨率相同,通过 persist.vendor.color.main(主) 以及 persist.vendor.color.aux(副) 设置屏颜色,每次设置完更新 vendor.display.timeline (每次加 1) 再进行移动鼠标等更新 UI 的操作使新颜色生效。
persist.vendor.color.main/persist.vendor.color.aux 支持参数:
设置颜色支持 – RGB YUV444 YUV422 YUV420
色深支持 – 8bit 10bit

示例:设置主屏 YUV420(10BIT深度)

setprop persist.vendor.color.main YUV420-8bit
setprop vendor.display.timeline 1

1.4 HDMI 设置亮度、对比度、饱和度、色度

名称有效范围(整形数)默认值对应系统属性
亮度0~10050persist.vendor.brightness.main persist.vendor.brightness.aux
对比度0~10050persist.vendor.contrast.main persist.vendor.contrast.aux
饱和度0~10050persist.vendor.saturation.main persist.vendor.saturation.aux
色度0~10050persist.vendor.hue.main persist.vendor.hue.aux

同样需要每次设置完更新vendor.display.timeline (每次加 1) 再进行移动鼠标等更新 UI 的操作使新参数生效。
设定副屏幕色度80

setprop persist.vendor.hue.aux 80
setprop vendor.display.timeline 1

1.4 HDMI 调整 DDC

HDMI 的 I2C 速率通过 clk 高电平和低电平的时间来调整。

  1. I2C 速率为 50 KHz
    &hdmi {
    ddc-i2c-scl-high-time-ns = <9625>;
    ddc-i2c-scl-low-time-ns = <10000>;
    }
  2. I2C 速率为 100 KHz
    &hdmi {
    ddc-i2c-scl-high-time-ns = <4812>;
    ddc-i2c-scl-low-time-ns = <5000>;
    }

1.5 HDMI工作模式

– 强制势能

echo on > /sys/class/drm/card0-HDMI-A-1/status

–强制关闭

echo off > /sys/class/drm/card0-HDMI-A-1/status

– 恢复热拔插检测

echo detect > /sys/class/drm/card0-HDMI-A-1/status

2 调试过程排查方法

2.1 硬件排查

HDMI 硬件查看无非从如下几点排查问题:

  • 核查供电
    VCCA1V8_IMAGE VDDA0V9_IMAGE VCC5V_HDMI_TX VCC_3V3电压是否正常
  • 核查HPD
    HDMI接入和拔出 HPD 是否有高低电平变化

2.2 软件排查方法

  • 核查 HDMI 连接状态,接入后为 connected,断开后为 disconnected
cat status 
connected
  • 核查 HDMI 使能状态
cat enabled 
enabled
  • 核查 HDMI 分辨率模式
cat modes 
1920x1080
1920x1080
1920x1080
1920x1080i
1920x1080i
1920x1080i
1920x1080
1920x1080i
1600x1200
1680x1050
1400x1050
1600x900
1280x1024
1280x1024
1440x900
1280x960
1152x864
1280x720
1280x720
1280x720
1280x720
1440x576
1440x576
1024x768
1024x768
1024x768
832x624
800x600
800x600
800x600
800x600
720x576
720x576
720x576
720x480
720x480
720x480
720x480
720x480
640x480
640x480
640x480
640x480
640x480
640x480
  • 查看 HDMI 连接状态
cat /sys/kernel/debug/dw-hdmi/status

– HDMI Output Status 表示当前 PHY 状态,只有当 PHY 使能的时候才会有后续打印。
– Pixel Clk 表示当前输出的像素时钟。
– TMDS Clk 表示当前输出 HDMI character rate。
– Color Format 表示输出的颜色格式,取值 RGB、YUV444、YUV422、YUV420。
– Color Depth 表示输出的颜色深度,取值 8bit、10bit、12bit、16bit。
– Colorimery 表示输出的颜色标准,取值 ITU.BT601、ITU.BIT709、ITU.BT2020。
– EOTF 表示输出的 HDR 电光转换曲线方式,有如下取值:

EOTF含义
UnsupportedHDMI不支持发送HDR信息
Not Defined未定义
Off不发送HDR信息
SDR采用SDR曲线
ST2084采用ST2084 EOTF曲线
HLG采用HLG EOTF曲线
  • (x0,y0)、(x1,y1)、(x2,y2)、(white x,white y)、max lum、min lum、max cll、maxfall为静
    态 HDR 描述子信息,只有 EOTF值为 SDR、ST2084、HLG 值时才会存在。
    可通过命令读写 HDMI寄存器
  • 读寄存器
cat /sys/kenrel/debug/dw-hdmi/ctrl
  • 写寄存器,0x1008 寄存器写入 0xED
echo 1000 ed > /sys/kenrel/debug/dw-hdmi/ctrl

Tips

  1. BSP 调试过程始终黑屏
    尝试以上两种软件排查后,发现HDMI接入后可正常检测到且正常识别分辨率;示波器检测有信号输出。尝试降低分辨率和更换HDMI线材,仍然黑屏,这是需要检查硬件。
  2. 黑屏或者花屏,降低分辨后显示正常
    – 软件确认HDMI设备分辨率是否为特殊分辨率,特殊分辨率需要单独添加。
    – 测试HDMI信号质量,调整方法可通过调整 rockchip,phy-table参数。

总结

活学活用,做个合格的搬运工。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

奥威BI数据可视化大屏分享|多场景、多风格

数据可视化大屏一般应用在品牌推广展示、商务交流、数据分析决策、数据监控等场景&#xff0c;由此催生出各种不同风格的BI数据可视化大屏设计。下面就从奥威BI软件的BI报表模板中截取几个有着不同风格&#xff0c;起着不同作用的BI数据可视化大屏报表&#xff0c;一起来了解一…

【Transformer系列(3)】 《Attention Is All You Need》论文超详细解读(翻译+精读)

前言 哒哒~时隔好久终于继续出论文带读了&#xff0c;这次回归当然要出一手王炸呀——没错&#xff0c;今天我们要一起学习的就是传说中的Transformer&#xff01;在2021年Transformer一经论文《Attention is All You Need》提出&#xff0c;就如龙卷风一般震惊学术界&#xf…

关于ROS机器人-文心一言和CatGPT怎么看-

交流截图&#xff1a; 文字版本如下&#xff08;W-文心&#xff1b;C-猿如意&#xff09;&#xff1a; 如何通过蓝桥云课学习ROS机器人&#xff1f; W&#xff1a; 如果你想通过蓝桥云课学习ROS机器人&#xff0c;可以按照以下步骤进行&#xff1a; 确认ROS机器人的版本和教…

【记录】笔记本新加SSD,重装系统win10,再装双系统ubuntu18.04

记录一下&#xff0c;希望下次装系统可以来的晚一点一、前言二、换SSD三、装Windows1.安装系统2.删除多余系统3.遇到问题&#xff1a;无法关机4.改注册表&#xff0c;开不开机&#xff0c;黑屏有鼠标三、装ubuntu1.安装完&#xff0c;设置root2.更新源3.时间设置4.win和ubuntu共…

大语言模型及其应用

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 机器学习 机器学习&#xff08;Machine Learning&#xff0c;ML&#xff09;是指从数据中自动学习规律和模式&#xff0c;并利用这些规律和模式&#xff0c;在新的数据中完成…

nssctf web 入门(6)

这里通过nssctf的题单web安全入门来写&#xff0c;会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列&#xff0c;之后会一直出这个题单的解析&#xff0c;题目一共有28题&#xff0c;打算写10篇。 目录 [SWPUCTF 2021 新生赛]caidao [SWPUCTF 2021 新…

力扣题库刷题笔记64-最小路径和

1、题目如下&#xff1a; 2、个人Python代码实现&#xff1a; 以上代码主要是照抄题解&#xff0c;根据调试bug了解每一步的逻辑&#xff0c;然后注释利于读懂本题&#xff0c;写本篇文章的目的在于初步了解动态规划。 本题的逻辑主要如下&#xff1a; a、列表中每个数字代表当…

【Redis笔记03】Redis运行环境之Cluster集群模式

这篇文章&#xff0c;主要介绍Redis运行环境之Cluster集群模式。 目录 一、Cluster集群模式 1.1、集群模式原理 &#xff08;1&#xff09;普通集群 &#xff08;2&#xff09;什么是分片&#xff1f;&#xff1f;&#xff1f; &#xff08;3&#xff09;如何分片存储&…

基于springboot的音乐网站的设计与实现(带论文)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【OCR】CTC loss原理

1 CTC loss出现的背景 在图像文本识别、语言识别的应用中&#xff0c;所面临的一个问题是神经网络输出与ground truth的长度不一致&#xff0c;这样一来&#xff0c;loss就会很难计算&#xff0c;举个例子来讲&#xff0c;如果网络的输出是”-sst-aa-tt-e’, 而其ground truth…

JVM:并发的可达性分析

当前主流编程语言的垃圾收集器基本上都是依靠可达性分析算法来判定对象是否存活的&#xff0c;可达性分析算法理论上要求全过程都基于一个能保障一致性的快照中才能够进行分析&#xff0c;这意味着必须全程冻结用户线程的运行。 在根节点枚举这个步骤中&#xff0c;由于 GC Ro…

0303Kruskal算法和小结-最小生成树-图-数据结构和算法(Java)

1 算法概述 定义。按照边的权重顺序&#xff08;从小到大&#xff09;&#xff0c;将边加入最小生成树中。加入的边不会与已经加入的边构成环&#xff0c;知道树中含有V-1条边为主。这些黑色的边逐渐由一片森林合并为一棵树&#xff0c;也就是最小生成树。这种计算方法被称为Kr…

Redis Lua沙盒绕过命令执行(CVE-2022-0543)

一、描述 影响范围&#xff1a;Debian系得linux发行版本Ubuntu Debian系得linux发行版本 其并非Redis本身漏洞&#xff0c;形成原因在于系统补丁加载了一些redis源码注释了的代码 揭露时间&#xff1a;2022.3.8 二、原理 redis在用户连接后可以通过eval命令执行Lua脚本&#x…

GAN网络系列博客(三):不受坐标限制的GAN(StyleGAN3)

目录 1. 概述 2. 连续信号分析 2.1 等变网络层 3. 具体实现 3.1 傅里叶特征和基础简化 3.2 根据连续插值进行的步骤重建 4.实验 总结 Reference 关于StyleGAN系列博客的收尾之作&#xff0c;StyleGAN3已经鸽了太久了。说实话&#xff0c;前两篇StyleGAN说的什么内容&#xff0…

Web 攻防之业务安全:账号安全案例总结.

Web 攻防之业务安全&#xff1a;账号安全案例总结 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业务所提供…

[ 应急响应篇基础 ] 日志分析工具Log Parser配合login工具使用详解(附安装教程)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

HCIP-6.5BGP路由聚合原理及配置

HCIP-6.5BGP路由聚合原理及配置1、BGP路由聚合原理1.1、自动汇总1.2、手动聚合1.2.1、利用静态路由进行聚合1.2.2、BGP的专有工具Aggregate1、BGP路由聚合原理 在实际运行的网络中&#xff0c;BGP路由表十分庞大&#xff0c;对于设备而言是很大的负担&#xff0c;同时使发生路…

Flutter Flex(Row Column,Expanded, Stack) 组件

前言 这个Flex 继承自 MultiChildRenderObjectWidget&#xff0c;所以是多子布局组件 class Flex extends MultiChildRenderObjectWidget {} Flex 的子组件就是Row 和 Column , 之间的区别就是Flex 的 direction 设置不同。 它有两个轴&#xff0c;一个是MainAxis 还有一个是交…

ubuntu下Thrift安装

thrift是一种常用rpc框架&#xff0c;工作中经常会用到&#xff0c;本文记录一下其安装过程。 目录 1.下载软件包 1.1thrift下载 1.2libevent下载 1.3boost下载 2.安装&#xff08;注意步骤&#xff09; 2.1安装libevent 2.2安装boost 2.3安装与Python2.7版本对应的py…

Vue+element Upload利用http-request实现第三方地址图片上传

vue第三方地址图片上传后端图片上传接口开发postman测试图片上传 Vue element (el-upload)中的:http-request图片上传java后端上传接口&#xff0c;利用OSS存储图片postman测试图片上传功能及方法 Vueelement Upload利用http-request实现第三方地址图片上传vue第三方地址图片上…