Rockchip BT.656 TX 和 BT.1120 TX 开发指南

前言

文本主要介绍 ROCKCHIP 平台 BT.656 BT.1120 接口调试指南

产品版本

芯片名称 内核版本
RV1109/RV1126/RK356X/RK3588 Linux kernel 4.19 及以上内核

目录

文章目录

  • Rockchip BT.656 TX 和 BT.1120 TX 开发指南
    • @[toc]
    • 基础概念
      • P 制扫描时序
      • I 制扫描时序
      • 定位基准码
    • RK 平台支持的情况
    • 硬件连接
    • 软件配置
      • 打开 BT.656/BT.1120
      • 时序配置
    • 常见问题
      • BT.656 和 BT.1120 输出的是 Full range 还是 Limited range
      • 怎么确认此时主控已经被配置为 BT.656 和 BT.1120 输出
      • RK 平台输出的 BT.656 和 BT.1120 信号是否标准
      • 单沿触发还是双沿触发
      • DTS 配置可以参考哪些文件
      • 第三方转换芯片如何驱动
      • RK628 中 BT.1120 如何使用
      • 和 Camera 的 BT.656/BT.1120 是什么关系
      • BT.656/BT.1120 和 VOP 什么关系
      • BT.656/BT.1120 和 RGB 什么关系
      • HSYNC/VSYNC/DEN 信号是否有引到外部 IO
      • 消隐期数据

基础概念

BT.656 和 BT.1120 分别定义了 SDTV 和 HDTV 的接口协议,通过在消隐期传输 EAV、SAV 的定位基准码作为嵌入式同步信号,传输的数据格式为 YCbCr 4 : 2 : 2。BT.656 和 BT.1120 在一些文档和手册上也会被称为视频信号或者 YUV 信号,目前 RK 平台输出的 BT.656/BT.1120 图像数据和定位基准码的位深均为 8bit。

下面介绍一些 BT.656 和 BT.1120 的基础概念和协议,详细的信息可以参考文档《Rec. ITU-R BT.1120》和《Rec. ITU-R BT.656》。

P 制扫描时序

I 制扫描时序

定位基准码

地位基准码前三个 word 固定为:0xFF, 0x00, 0x00,第四个 word 由不同的扫描位置决定:

  • Bit9: 固定为1

  • Bit8(F):F=0 表示为偶场,F=1 表示为奇场

  • Bit7(V):V=0 表示该行包含有效视频数据,V=1 表示该行没有有效视频数据

  • Bit6(H):H=0 表示为 SAV,H=1 表示为 EAV

  • Bit[5, 2] (P3,P2,P1,P0):由 Bit8~Bit6 计算得来,其中:

    Bit5 = V XOR H

    Bit4 = F XOR H

    Bit3 = F XOR V

    Bit2 = F XOR V XOR H

  • Bit[1, 0]: 固定为0,对于 RK 平台,位深为 8 BIT,可以认为没有这 2 个 Bit;

下面的表格根据不同的 EAV/SAV (F,V,H) 算好了对应的保护位的值(P3,P2,P1,P0):

结合以上信息,可以得到各个消隐期对应的定位基准码为:

EAV CODE SAV CODE
1 0XFF 0X00 0X00 0X9D 0 0XFF 0X00 0X00 0X80
3 0XFF 0X00 0X00 0XB2 2 0XFF 0X00 0X00 0XAB
5 0XFF 0X00 0X00 0XDA 4 0XFF 0X00 0X00 0XC7
7 0XFF 0X00 0X00 0XF1 6 0XFF 0X00 0X00 0XEC

RK 平台支持的情况

SOC 平台 是否支持 BT.656 是否支持 BT.1120 隔行或者逐行
RV1109/RV1126 N Y 只支持逐行扫描
RK3566/RK3568 Y Y 支持逐行隔行扫描
RK3588 Y Y 支持逐行隔行扫描

硬件连接

BT.656 和 BT.1120 支持以下三种硬件连接,根据不同的连接方式软件在 DTS 文件或者对应的转换芯片驱动中要对 bus_format 做对应的适配。

软件配置

打开 BT.656/BT.1120

  1. 对接的设备在发送端不需要软件驱动(即不需要注册 DRM connector 的),这种可以在 dts 文件中的 panel 节点配置:
panel {……bus-format = MEDIA_BUS_FMT_YUYV8_1X16; //or MEDIA_BUS_FMT_YUYV8_1X16/MEDIA_BUS_FMT_UYVY8_1X16……
}
  1. 对接的设备在发送端需要软件驱动(即需要注册 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,同时配置对应的引脚映射关系。

时序配置

时序的配置有以下三种方法:

  1. DTS 中配置

对于支持固定的分辨率的产品,可以在 DTS panel中配置好对应的时序:

  • P 制时序
timing_1080p: timing-1080p {clock-frequency = <148500000>;hactive = <1920>;vactive = <1080>;hback-porch = <100>;hfront-porch = <200>;vback-porch = <10>;vfront-porch = <10>;hsync-len = <20>;vsync-len = <20>;hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;
};
  • I 制时序
timing_ntsc: timing-ntsc {clock-frequency = <13500000>;hactive = <720>;vactive = <480>;hback-porch = <43>;hfront-porch = <33>;vback-porch = <36>;vfront-porch = <3>;hsync-len = <62>;vsync-len = <6>;hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;interlaced;doubleclk; //only NTSC(480i60) mode and PAL(576i50) mode need this property
};
  1. 读 EDID

对于显示设备支持多个分辨率输入同时有 EDID 信息的,可以参考 sii902x 的驱动,通过 DDC/I2C 读取 EDID 信息获取显示设备支持的分辨率:

//dts
&i2c3 {clock-frequency = <400000>;status = "okay";sii9022: sii9022@39 {compatible = "sil,sii9022";reg = <0x39>;pinctrl-names = "default";……ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;sii9022_in_rgb: endpoint {remote-endpoint = <&rgb_out_sii9022>;};};};};
};&rgb {status = "okay";……ports {port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;rgb_out_sii9022: endpoint@0 {reg = <0>;remote-endpoint = <&sii9022_in_rgb>;};};};
};//drivers/gpu/drm/bridge/sii902x.c
static int sii902x_probe(struct i2c_client *client, const struct i2c_device_id *id)
{……i2c_set_clientdata(client, sii902x);sii902x->i2cmux =i2c_mux_alloc(client->adapter, dev, 1, 0, I2C_MUX_GATE, sii902x_i2c_bypass_select, sii902x_i2c_bypass_deselect);if (!sii902x->i2cmux)return -ENOMEM;sii902x->i2cmux->priv = sii902x;return i2c_mux_add_adapter(sii902x->i2cmux, 0, 0, 0);……
}static int sii902x_get_modes(struct drm_connector *connector)
{struct sii902x *sii902x = connector_to_sii902x(connector);edid = drm_get_edid(connector, sii902x->i2cmux->adapter[0]);drm_connector_update_edid_property(connector, edid);if (edid) {if (drm_detect_hdmi_monitor(edid))output_mode = SII902X_SYS_CTRL_OUTPUT_HDMI;num = drm_add_edid_modes(connector, edid);kfree(edid);}
}
  1. connector 驱动中写好

这种一般是在调试过程中为了方便或者没有I2C/DDC 通道读取EDID信息但是又需要支持多个分辨率的,可以直接在 connector 驱动中写好对应的分辨率,可以参考 sii902x.c 驱动中的实现:

static int sii902x_get_modes(struct drm_connector *connector)
{struct sii902x *sii902x = connector_to_sii902x(connector);……for (i = 0; i < ARRAY_SIZE(sii902x_default_modes); i++) {const struct drm_display_mode *ptr = &sii902x_default_modes[i];mode = drm_mode_duplicate(connector->dev, ptr);if (mode) {if (!i)mode->type = DRM_MODE_TYPE_PREFERRED;drm_mode_probed_add(connector, mode);ret++;}}……
}

常见问题

BT.656 和 BT.1120 输出的是 Full range 还是 Limited range

:Limited range,即有效图像数据范围是 [16,235], 只有定位基准码才可能出现 0xFF, 0x00 的数据。

怎么确认此时主控已经被配置为 BT.656 和 BT.1120 输出

:通过 cat /sys/kernel/debug/dri/0/summary 可以看到对应 VOP/VP 节点下的 bus_format 值,和本文第3点中的表格对应:

cat /sys/kernel/debug/dri/0/summaryVideo Port0: ACTIVE……bus_format[2025]: YUV8_1X24……

RK 平台输出的 BT.656 和 BT.1120 信号是否标准

:是的,基于《Rec. ITU-R BT.656》和《Rec. ITU-R BT.1120》标准设计。

单沿触发还是双沿触发

:单沿触发,默认配置 clock 的上升沿在数据中间,如果接收端希望下降沿在数据中间,可以将 dts 中的 pixelclk-active 设定为1。

DTS 配置可以参考哪些文件

:可以参考下面这两个配置文件:

BT.656: arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk630-bt656-to-cvbs.dts

BT.1120: arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10-bt1120-to-hdmi.dts

第三方转换芯片如何驱动

:分以下两种情况:

  • 如果第三方转换芯片不需要单独配置寄存器,只需要上电就能正常使用的,这种只要在 dts 文件的 panel 节点中配置要对应的 GPIO、电源,确保转换芯片有正常供电,不需要编写额外的驱动,rockchip_rgb.c 文件会完成向 DRM 驱动框架注册 encoder 和 connector。
  • 如果第三方转换芯片需要单独配置寄存器,这种除了要在 dts 中正确配置 GPIO、电源,确保转换芯片有正常供电外,还需要编写转换芯片对应的驱动,此时 rockchip_rgb.c 会完成向 DRM 驱动框架注册 encoder,转换芯片的驱动完成向 DRM 驱动框架注册 connector,并通过 DRM bridge 桥接起来,具体可以参考内核代码:drivers/gpu/drm/bridge/sii902x.c 中的实现。

RK628 中 BT.1120 如何使用

:RK628 BT.1120 的使用方法请参考文档《Rockchip_DRM_RK628_Porting_Guide_CN》中的说明。

和 Camera 的 BT.656/BT.1120 是什么关系

:这边介绍的是 BT.656 TX 和 BT.1120 TX,是一种并行输出接口,而 Camera 对应的是 BT.656 RX 和 BT.1120 RX,是一种并行输入接口,两则在协议上是一致的,有关 BT.656 RX 和 BT.1120 RX 的开发文档,请从我司 FAE 窗口/ ISP 部门获取。

BT.656/BT.1120 和 VOP 什么关系

:BT.656 和 BT.1120 是一种嵌入式同步信号的并行输出接口,VOP 将多个图层[多块 buffer] 合成好的数据通过 BT.656/BT.1120 输出。

BT.656/BT.1120 和 RGB 什么关系

:BT.656 和 BT.1120 是嵌入式同步信号的并行输出接口,RGB 是有独立同步信号 [HSYNC/VSYNC/DEN] 的并行输出接口,他们都是独立的显示接口,在显示通路上没有直接关系,可能在 IO 上有复用关系。

HSYNC/VSYNC/DEN 信号是否有引到外部 IO

: RV1126/RV1109 的 BT.1120 这几个同步信号有引到外部 IO 上,但是 Data 会比 DEN 晚一个 cycle,RK356X 这几个同步信号没有引到外部 IO。

消隐期数据

:BT.656 消隐期数据为 0x80 0x10 0x80 0x10,BT.1120 Y 通道和 UV 通道也都是按 0x80 0x10 0x80 0x10 发送。

Rockchip BT.656 TX 和 BT.1120 TX 开发指南相关推荐

  1. ITU-R BT.656和ITU-R BT.601

    H264版其实就是一种视频编码格式.它是MPEG-4 标准所定义的最新格式 SDTV:standard Definition Television    标准清晰度电视 HDTV:High Defin ...

  2. BT.601与BT.656

    ITU-R Recommendation BT.601,简称Rec.601或者BT.601(或者它的前身,CCIR601),是1982年由ITU-R发布的一个标准,用于将各行数位视讯讯号进行数位化.旧 ...

  3. 视频图像传输与显示(4)——数字电视信号标准ITU-R BT.601和ITU-R BT.656简介

    数字视频信号标准ITU-R BT.601和ITU-R BT.656简介 说明: ITU =   International Telecommunication Union  (联合国)国际电信联盟 R ...

  4. ITU-R BT.656 协议

    ITU-R BT.601和ITU-R BT.656国际电信联盟(International Telecommunication Union)无线通信部门(ITU-R)制定的标准.严格来说,ITU-R ...

  5. 标准BT.656并行数据结构

    本文转自:http://www.xaaf.cn/2010/tech/201003/05/tech498.html 感谢原作者! ------------------------------------ ...

  6. BT.656、PAL、NTSC标准并行数据结构

    (1)BT.656 BT.656并行接口除了传输4:2:2的YCbCr视频数据流外,还有行.列同步所用的控制信号.如图3所示,一帧图像数据由一个625行.每行1 728字节的数据块组        成 ...

  7. 隔行的BT.656标准信号

    标准的 8bit BT656(4:2:2)YCbCr SDTV(标清) 数字视频信号格式,每秒25帧,时钟是27MHZ. 电视使用的PAL-D制采用的是隔行扫描方式,隔行扫描时电子束首先从左到右.从上 ...

  8. BT.656标准简介-内同步并口-以及波形测量

    BT.656标准简介-以及波形测量 1.定义 2.协议 2.1. 帧的概念(Frame) 2.2. 场的概念(field) 2.3. 每一行的组成(Lines) 2.4. EAV和SAV 3 波形测量 ...

  9. BT.656协议讲解与解码

    BT.656支持不同位数和分辨率的视频,本文以标准分辨率为720*576i 8bit BT.656(4:2:2)YCbCr SDTV 数字视频信号格式讲解协议和解码方法:采集图像的时候使用隔行扫描,每 ...

  10. yuv,ycbcr,ypbpr,yiq itu-r bt.656 itu-r bt.601

    YUV,是一种颜色编码方法. YUV是编译true-color颜色空间(color space)的种类,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠. " ...

最新文章

  1. 深入Java调试体系之JDWP协议及实现
  2. 关于c++中的Debug以及runtime_error之segment_fault
  3. 奔驰又召回了!“方便进出”功能翻车
  4. 蓝牙:CRC原理详解(附crc16校验代码)
  5. windows系统腾讯qq自带截图工具自动滚动截长图方法
  6. python简单操作excel
  7. 2022餐饮加盟3大核心,让赚钱变得简单
  8. 半角和全角的区别 java_全角和半角区别
  9. 4款一眼万年的精品软件,免费又好用,可惜很多人不知道
  10. 【计算机网络】数据链路层的差错控制 - 循环冗余校验(CRC)
  11. 上学期c语言作业答案,C语言作业答案4
  12. 计算机网络--自顶向下方法 学习笔记之计算机网络和因特网
  13. 红外图像非均匀矫正——一点矫正
  14. 解决 XXX cannot be resolved or is not a field 问题
  15. 【百度群面】2017年春招-实习产品经理-群面复盘
  16. Python项目外星人入侵(一):实现宇宙飞船
  17. Java Web 七 会话技术 八 Cookie 九 Session
  18. snakerflow 多人_工作流-轻量级工作流引擎Snaker学习笔记
  19. 网站性能优化工具大全
  20. SQL:查询重复次数最多的名字和id

热门文章

  1. 宝峰c1对讲机写频软件_宝峰对讲机写频软件
  2. 写给准备看CCNA题库的朋友们 希望有些帮助
  3. 如何在Linux里面安装Java的运行环境(详细过程)
  4. 常见的数据结构及其特征
  5. 计算机文化基础的重点,计算机文化基础重点知识(1)
  6. linux下Cacti网络监控之监控华为quidway s2000交换机
  7. 【个人博客网页模板】
  8. [张国荣][21CD][1998-2002][APE+CUE][8.00G][115][sqhhj0622#HD2PT]
  9. Photoshop CS3 Dreamwaver教程集合
  10. 手机html己停用怎么办,iphone手机出现已停用请五分钟再试怎么办