RK3588 BT1120 转 3G-SDI 全流程解析:FPGA 硬核输出
概述
本文介绍如何使用 RK3588 的 BT1120 信号配合 FPGA 转换为广播级 3G-SDI 输出。
整体链路
RK3588 -> BT1120_16bit : VOP/DRM BT1120_16bit -> FPGA : 148.5 MHz 同步 FPGA -> 3G_SDI : GTX 2.97 Gb/s 3G_SDI -> Monitor : 1080p60 YUV422 10bit
RK3588 端:3 步点亮 BT1120
软件配置
打开 BT.656/BT.1120
- 对接的设备在发送端不需要软件驱动(即不需要注册 DRM connector 的),这种可以在 dts 文件中的 panel 节点配置:
panel {
bus-format = MEDIA_BUS_FMT_YUYV8_1X16; //或者 MEDIA_BUS_FMT_YUYV8_1X16/ MEDIA_BUS_FMT_UYVY8_1X16
};
- 对接的设备在发送端需要软件驱动(即需要注册 DRM connector 的),这种除了可以参考第一点在 dts 中适配,也可以考虑在对应 connector 驱动的
drm_connector_helper_funcs -> get_modes函数中设定,可以参考drivers/gpu/drm/bridge/sii902x.c中的实现:
static int sii902x_get_modes(struct drm_connector *connector) {
u32 bus_format = MEDIA_BUS_FMT_YUYV8_1X16; //depend on hardware
drm_display_info_set_bus_formats(&connector->display_info, &bus_format, 1);
}
通过第 1/2 点对 bus_format 的配置,VOP 驱动会使能 BT.656/BT.1120,同时配置对应的引脚映射关系。
时序配置
DTS 中配置
对于支持固定分辨率的产品,可以在 DTS panel 中配置好对应的时序:
- P 制时序
timing_1080p: timing-1080p {
clock-frequency = <148500000>; // 148.5 MHz
hactive = <1920>;
vactive = <1080>;
hback-porch = <148>;
hfront-porch = <88>;
vback-porch = <36>;
vfront-porch = <4>;
hsync-len = <44>;
vsync-len = <5>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
硬件连接
BT.656 和 BT.1120 支持以下三种硬件连接,根据不同的连接方式软件在 DTS 文件或者对应的转换芯片驱动中要对 bus_format 做好适配。


