揭秘RK3568 HDMI IN 实现核心:RK628D芯片的桥接方案

描述

 

前言:

       随着多媒体应用需求的不断升级,越来越多的场景要求设备能够接入外部视频(HDMI-IN)信号,RK3568 不直接支持HDMI-IN接口,SOC有MIPI-CSI功能;需将HDMI-IN转换成MIPI-CSI才能获取视频信息。本文详细介绍了基于RK3568平台,通过视频桥接芯片RK628D将HDMI-IN信号转换为MIPI-CSI信号的调试过程。

 

一、背景介绍

      传统Linux系统普遍作为摄像头数据采集及显示端应用,而 HDMI IN 功能则将系统角色进行了扩展——设备不仅要输出视频,同时还要接收外部高清视频信号。实现这一功能需要硬件、驱动及上层应用的紧密配合。

       在RK3568平台上,可采用 RK628D HDMI 转换芯片实现信号转换,并利用 V4L2 驱动将 HDMI 信号映射为 MIPI CSI 数据,从而在 CameraHal3 框架下实现摄像头数据采集。这一方案不仅支持常见的分辨率(如4K@30、1080P@60、720P@60等),还兼顾了 HDMI 热拔插功能,使得系统在动态接入或断开外部信号时能保持稳定运行。

 

二、核心实现原理
     
 

 2.1  RK628D芯片简介

     RK628D 芯片:RK628是一款多功能视频桥接芯片,支持多种显示接口的转换;其作为 HDMI 转换芯片,主要负责接收 HDMI 信号,并将其转换为 MIPI CSI 数据。

  • 工作原理:

     HDMI RX 接收到外部视频信号后,通过内部处理(包括颜色空间转换、时序解析等),将数据信号输出到 MIPI CSI 接口。

设备模拟:

     系统将转换后的数据模拟为类摄像头设备,通过标准 V4L2 框架对接。

RK628D转换芯片数据流图如下:

 2.2   硬件连接  
RK628D与RK3568的硬件连接,主要有以下几点:

24MHz时钟:时钟信号;

I2C:RK3568与RK628之间的通信控制;

I2S:音频信号传输;

RGB:显示信号源;

其它GPIO:供电、复位

 

 2.3   驱动配置

     RK628驱动有两个版本,一个是SDK系统自带的版本,一个是RK628-for-all版本。本文调试使用的是RK的rk628-for-all v21驱动。将驱动补丁文件添加至 kernel/drivers/misc/rk628/ 目录Media 为 RK628 HDMI IN 通路的驱动代码,将RK628D作为类camera设备使用。

在以下驱动文件中添加编译规则

1.kernel/drivers/misc/Kconfig

  •  

source "drivers/misc/rk628/Kconfig"

2.kernel/drivers/misc/Makefile

  •  

obj-y += rk628/

DTS配置

        dts配置分显示和音频两部分,显示部分在i2c中添加rk628节点,音频部分使用i2s通信。部分核心代码如下:

 

&i2c1 { status = "okay"; clock-frequency = <400000>; rk628: rk628@50 { compatible = "rockchip,rk628"; reg = <0x50>; pinctrl-names = "default"; interrupt-parent = <&gpio1>; interrupts = ; enable-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio3 RK_PC4 GPIO_ACTIVE_LOW>; pinctrl-0 = <&refclk_pins>; assigned-clocks = <&pmucru CLK_WIFI>; assigned-clock-rates = <24000000>; clocks = <&pmucru CLK_WIFI>; clock-names = "soc_24M"; #sound-dai-cells = <0>; rk628,rgb-in; rk628,hdmi-out; mode-sync-pol=<0>; status = "okay"; port { rgb_in_hdmi: endpoint { remote-endpoint = <&rgb_out_hdmi>; }; }; };};
 

    修改完驱动文件,编译内核烧录到RK3568核心板。
 


 

三、运行测试
 

1. 查看media设备:

 

  •  
  •  
  •  

ls /dev/media*
/dev/media0 /dev/media1

2. i2c设备的通用调试命令:查看设备是否挂载到i2c总线下:

  •  

i2cdetect -y 2

3. 查看media节点的拓扑结构命令:

  •  
  •  

media-ctl -d /dev/media0 -pmedia-ctl -p

4. 抓图命令:

  •  

v4l2-ctl  -d   /dev/video0  --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap=3 --stream-skip=100 --stream-to=/oem/NV12.yuv --stream-count=1 --stream-poll

     将电脑Windows端与RK3568的HDMI IN连接,即可把Windows端画面输入给RK3568实现预览;如下是RK3568预览的Windows端画面:芯片

四、调试总结
    
        文章主要目的是为了向大家介绍RK3568即使没有原生HDMI IN功能,也可以使用RK628D桥接芯片实现的思路,只体现了整体实现原理;还有一些细节上的配置:EDID配置、HDMI IN APK适配等未体现;想了解更多细节配置,常用调试FAQ,可参考官方文档或联系我司技术支持工程师。        想了解更多相关技术知识或产品信息,请关注眺望电子公众号并联系我们,我们将竭诚为您服务!

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分