当前位置: 首页>編程日記>正文

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

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

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

前言

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

产品版本

芯片名称内核版本
RV1109/RV1126/RK356X/RK3588Linux 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):

在这里插入图片描述

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

EAVCODESAVCODE
10XFF 0X00 0X00 0X9D00XFF 0X00 0X00 0X80
30XFF 0X00 0X00 0XB220XFF 0X00 0X00 0XAB
50XFF 0X00 0X00 0XDA40XFF 0X00 0X00 0XC7
70XFF 0X00 0X00 0XF160XFF 0X00 0X00 0XEC

RK 平台支持的情况

SOC 平台是否支持 BT.656是否支持 BT.1120隔行或者逐行
RV1109/RV1126NY只支持逐行扫描
RK3566/RK3568YY支持逐行隔行扫描
RK3588YY支持逐行隔行扫描

硬件连接

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 发送。


https://www.fengoutiyan.com/post/14148.html

相关文章:

  • 开发指南
  • rockchip官网
  • bt656硬件接口
  • bt1120和bt656的区别
  • yzy dsrt bt rock
  • rockchip
  • nginx完全开发指南
  • 全脑开发技术指南
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機