rk3568 适配 BT656/BT1120
BT.656 TX 和 BT.1120 TX,是一种并行输出接口,而 Camera 对应的是 BT.656 RX和 BT.1120 RX,是一种并行输入接口,两则在协议上是一致的。与同为并口的RGB非常像,在rk3568 芯片上RGB和BT656/BT1120恰好存在GPIO复用关系。BT.656 和 BT.1120 是嵌入式同步信号的并行输出接口,RGB 是有独立同步信号[HSYNC/VSYNC/DEN] 的并行输出接口。为了弥补没有同步信号,BT.656 消隐期数据为 0x80 0x10 0x80 0x10,BT.1120 消隐期数为0x80 0x10 0x80 0x10,使用Y 通道和 UV 通道发送相同数据消隐。早期机顶盒或者电视盒子cvbs和YUV传输音视频信号,BT.656可转换为cvbs,BT.1120 可转为YUV和后期的HDMI。
提示:rk3568 BT656经常用作转cvbs,BT.1220用作转HDMI。
文章目录
- rk3568 适配 BT656/BT1120
- 圈重点 看想学
- 1. BT656/BT1120
- 2. 核查硬件,适配BT656
- 2.1 BT656转cvbs
- 3. 核查硬件,适配BT1120
- 3.1 BT1120转HDMI
- Tips
- 总结
圈重点 看想学
a) rk3568适配BT656
b) rk3568适配BT1120
1. BT656/BT1120
BT.656 和 BT.1120 分别定义了 SDTV 和 HDTV 的接口协议,通过在消隐期传输 EAV、SAV 的定位基准码作为嵌入式同步信号,传输的数据格式为 YCbCr 4 : 2 : 2。BT.656 和 BT.1120 在一些文档和手册上也会被称为视频信号或者 YUV 信号,目前 RK 平台输出的 BT.656/BT.1120 图像数据和定位基准码的位深均为 8bit。
- 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 |
BT.656 和 BT.1120 支持以下三种硬件连接,根据不同的连接方式软件在 DTS 文件或者对应的转换芯片
驱动中要对 bus_format 做对应的适配。
2. 核查硬件,适配BT656
RK630是瑞芯微扩展接口类芯片,将BT.656协议的视频信号转换为cvbs。
2.1 BT656转cvbs
&i2c3 {
status = "okay";
clock-frequency = <100000>;
rk630: rk630@50 {
compatible = "rockchip,rk630";
reg = <0x50>;
reset-gpios = <&gpio2 RK_PC7 GPIO_ACTIVE_LOW>;
status = "okay";
rk630_tve: rk630-tve {
compatible = "rockchip,rk630-tve";
status = "okay";
ports {
port {
rk630_tve_in_rgb: endpoint {
remote-endpoint = <&rgb_out_rk630_tve>;
};
};
};
};
};
};
&rgb {
pinctrl-names = "default";
pinctrl-0 = <&bt656m0_pins>; /* bt656m0_pins or bt656m1_pins */
status = "okay";
ports {
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
rgb_out_rk630_tve: endpoint@0 {
reg = <0>;
remote-endpoint = <&rk630_tve_in_rgb>;
};
};
};
};
&rgb_in_vp2 {
status = "okay";
};
&route_rgb {
status = "okay";
};
3. 核查硬件,适配BT1120
rk628则是瑞芯微近两年推出的扩展接口类芯片,支持多种协议之间的信号转换。当然也包含即将用到的BT1220转HDMI,受到通信带宽限制,只支持到1080P/60fps。rk628用到的GPIO本文直接跳过,需要同学可自行核对。
3.1 BT1120转HDMI
&i2c3 {
clock-frequency = <400000>;
status = "okay";
rk628: rk628@50 {
reg = <0x50>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PA0 IRQ_TYPE_LEVEL_HIGH>;
enable-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>;
status = "okay";
};
};
#include <arm/rk628.dtsi>
&rk628_hdmi {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
hdmi_in_post_process: endpoint {
remote-endpoint = <&post_process_out_hdmi>;
};
};
};
};
&rk628_post_process {
pinctrl-names = "default";
pinctrl-0 = <&rk628_vop_pins>;
status = "okay";
mode-sync-pol = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
post_process_in_bt1120: endpoint {
remote-endpoint = <&bt1120_out_post_process>;
};
};
port@1 {
reg = <1>;
post_process_out_hdmi: endpoint {
remote-endpoint = <&hdmi_in_post_process>;
};
};
};
};
&rk628_bt1120_rx {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
bt1120_in_rgb: endpoint {
remote-endpoint = <&rgb_out_bt1120>;
};
};
port@1 {
reg = <1>;
bt1120_out_post_process: endpoint {
remote-endpoint = <&post_process_in_bt1120>;
};
};
};
};
&rgb {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&bt1120_pins>;
ports {
port@1 {
reg = <1>;
rgb_out_bt1120: endpoint {
remote-endpoint = <&bt1120_in_rgb>;
};
};
};
};
&rgb_in_vp2 {
status = "okay";
};
Tips
- rk630 响芯片不工作,可从时钟信号和供电核查硬件。
- rk628 时钟信号可取自rk3568,可减少始终不同步引起相关问题。
总结
活学活用,做个合格的搬运工。