1. 简介
- HDMI IN功能可以通过桥接芯⽚的⽅式实现,将HDMI信号转换成MIPI信号接收,RK3588芯⽚平台⾃带
HDMI RX模块,可以直接接收HDMI信号。 - 本篇文章主要介绍在RK3588 平台通过HDMI RX模块开发实现HDMI IN功能的⽅法。
2. dts配置
2.1 HDMI RX控制器配置
/* Should work with at least 128MB cma reserved above. */
&hdmirx_ctrler {
status = "okay";
/* Effective level used to trigger HPD: 0-low, 1-high */
hpd-trigger-level = <1>;
hdmirx-det-gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&hdmim1_rx &hdmirx_det>;
};
&pinctrl {
hdmirx {
hdmirx_det: hdmirx-det {
rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
}
2.2 预留内存
RK3588 HDMI RX模块只能使用物理连续内存,需要预留至少128MB的CMA内存:
注:按3840x2160分辨率,RGB888图像格式,4个轮转Buffer计算。
/* If hdmirx node is disabled, delete the reserved-memory node here. */
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
/* Reserve 128MB memory for hdmirx-controller@fdee0000 */
cma {
compatible = "shared-dma-pool";
reusable;
reg = <0x0 (256 * 0x100000) 0x0 (128 * 0x100000)>;
linux,cma-default;
};
};
3. 调试
HDMI-IN 设备在内核中会被注册为 video 设备,生成的节点如:/dev/video20,可以通过 v4l2-ctl 命令来获取设备信息和抓帧。
-
查看所有video节点
ls /dev/video*
-
获取设备信息,查找rk_hdmirx设备对应的是哪个video节点
v4l2-ctl -d /dev/video* -D 例: v4l2-ctl -d /dev/video20 -D
使⽤v4l2-ctl -d参数指定vidoe节点,-D命令查看节点信息,通过Driver name确认哪个是节点是rk_hdmirx 设备:
-
获取外部设备输入的分辨率信息
v4l2-ctl -d /dev/video20 -V
可以看出此时输入源的像素格式为 ’ NV24 ’ 。分辨率为 1920 * 1080抓图:根据输入源的格式和分辨率设置好抓图命令的格式和分辨率: ( 这里像素格式为 ’ NV24 ’ 。分辨率为 1920 * 1080 )
v4l2-ctl -d /dev/video20 --set-fmt-video=width=1920,height=1080,pixelformat=NV24 --stream-mmap=3 --stream-skip=100 --stream-to=/oem/NV24.yuv --stream-count=1 --stream-poll
-
在 PC 端查看抓取到的帧文件
将抓取到的NV24.yuv图片可adb pull到PC端,通过7yuv、YUView等⼯具软件查看:
adb pull /oem/NV24.yuv ./