Rockchip RK3568 原生显示接口不支持双通道LVDS屏幕的数据输出,因此需要借助显示转换芯片才能实现双通道LVDS屏幕的驱动。本文介绍使用GM8775C芯片方案,在 RK3568 平台实现单路 MIPI DSI 信号输出来驱动双通道LVDS显示屏。
关于GM8775C
GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单/双通道 LVDS功能,MIPI 支持 1/2/3/4 通道可选,每通道最高支持 1Gbps 速率,最大支持 4Gbps 速率。LVDS时钟频率高达 154MHz,最大支持视频格式为 FULL HD(1920 x 1200)。系统应用图如下:
在软件调试驱动显示屏之前,我们需要阅读显示屏规格书,从规格书中获取屏幕的引脚定义、分辨率、时钟频率、显示参数和信号模式等信息。下面以一个双通道LVDS屏幕为例,说明如何从其规格书中获取点屏所需要的主要参数。
由表格中 Display format 栏可知,此屏幕分辨率为 1920x1080
从通道数据映射表可知,该屏幕信号格式为VESA标准,并结合屏幕线序定义来确认两个LVDS通道的奇偶分布。
从以上描述得知,该屏幕每个颜色有8位,由规格书中的颜色分布表可确认该屏幕颜色格式为RGB888。
以时序表格中间一列典型值作为参考,可以获取到显示屏的扫描窗口参数。在帧率为60Hz的情况下,时钟频率约为147MHz。其中垂直方向,有效显示时钟周期为1080,空白周期为45;水平方向,有效显示周期为 960x2,空白周期为280。
RK3568 具有两路 MIPI DSI ,单 MIPI 模式下支持 1920x1080@60Hz 显示输出。EVB3568 开发板硬件上使用MIPI_DSI_TX0 通道与 GM8775C 芯片连接,实现最大支持 1080P 的双通道 LVDS 显示屏驱动能力。
硬件连接如下图所示:
MIPI_DSI_TX0 在软件上对应于设备树中的 dsi0 节点,我们需要在设备树中将 dsi0 相关的配置开启,并在该节点下填写屏幕的参数。主要参数说明如下:
rockchip,lane-rate -- MIPI单通道带宽(单位Mbps)
power-supply -- 供电regulator
backlight -- 屏幕背光控制节点
dsi,format -- 数据输格式
dsi,lanes -- 通道个数
panel-init-sequence -- 屏幕初始化命令
dsi0_timing0 -- 时序设置
将从屏幕规格书上查阅到的参数填写至dsi0 节点的对于参数位置。
时序及时钟
dis0_timing0 中填写时序前后肩和同步等参数如下:
disp_timings0: display-timings {
native-mode = <&dsi0_timing0>;
dsi0_timing0: timing0 {
clock-frequency = <148500000>;
hactive = <1920>;
vactive = <1080>;
hfront-porch = <140>;
hsync-len = <10>;
hback-porch = <130>;
vfront-porch = <20>;
vsync-len = <10>;
vback-porch = <15>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
其中前后肩和同步参数的总和对应于规格书中的 blanking;
clock-frequency 的计算公式:
clock-frequency = (hactive + hfront + hsync + hback)* (vactive + vsync + vback) * fps
= (1920 + 140 + 10 + 130)*(1080 + 20 + 10 + 15)* 60
= 148500000
通道数
输出信号使用单MIPI 4通道,dsi,lanes设置为 4;
数据格式
数据为每个颜色8bit 24位色,所以dsi,format 设置为 MIPI_DSI_FMT_RGB888 ;
通道带宽
MIPI 单线通道带宽计算公式如下:
lane-rate = (clock-frequency * 1000 * bpp / lanes ) * 10 /9
= ((148500 * 1000 * 24) / 9) * 10 / 9
= 990 000 000
rockchip,lane-rate 参数在缺省的情况下,内核驱动会自动计算。
初始命令
panel-init-sequence 需要填写 MIPI 向 GM8775C 芯片下发的寄存器参数,根据屏幕时序参数和硬件连接情况,此处借助 GM8775C 配套的上位机软件,在软件界面中设置屏幕的参数,即可得到转换好的实际寄存器设置参数。
上图红色框为我们设置的内容,其中 MIPI时钟需要设置为 rockchip,lane-rate 的二分之一;绿色框内为转换得到的寄存器参数列表。最终将其转换为Rockchip 平台的 panel-init-sequence 代码如下:
panel-init-sequence = [
29 00 02 27 AA
29 00 02 48 02
29 00 02 B6 20
29 00 02 01 80
29 00 02 02 38
29 00 02 03 47
29 00 02 04 8C
29 00 02 05 0A
29 00 02 06 82
29 00 02 07 00
29 00 02 08 14
29 00 02 09 0A
29 00 02 0A 0F
29 00 02 0B 82
29 00 02 0C 12
29 00 02 0D 01
29 00 02 0E 80
29 00 02 0F 20
29 00 02 10 20
29 00 02 11 03
29 00 02 12 1B
29 00 02 13 63
29 00 02 14 01
29 00 02 15 23
29 00 02 16 40
29 00 02 17 00
29 00 02 18 01
29 00 02 19 23
29 00 02 1A 40
29 00 02 1B 00
29 00 02 1E 46
29 00 02 51 30
29 00 02 1F 10
29 00 02 2A 01
05 78 01 11
05 14 01 29
];
文章篇幅有限,完整的参数配置可查看IDO-EVB3568开发板Linux SDK 中的 kernel\arch\arm64\boot\dts\rockchip\ido-rk3568-evb3568-dual-lvds.dts 文件。
IDO-EVB3568开发板Linux SDK链接:
https://pan.baidu.com/s/1L3WECV_8q6B-a_PWr3bqvw提取码:yms6
屏幕驱动效果