▲点击上方“广州天嵌”关注公众号后回复TQ3568获取板卡硬件资料
TQ3568支持lvds,mipi,edp,hdmi 4种不同的显示接口,其中mipi接口又分为mipi0与mipi1。TQ3568支持的显示功能有:(TQ3568-coreA不支持MIPI0显示)
单屏:LVDS、MIPI0、MIPI1、eDP、HDMI
双屏:(LVDS、MIPI1)、(LVDS、HDMI)、(LVDS、eDP)、(MIPI0、MIPI1)、(MIPI1、eDP)、(MIPI1、HDMI)
三屏:(LVDS、MIPI1、eDP)、(LVDS、MIPI1、HDMI)。
用户可以通过2种方法设置分辨率与显示接口,直接在u-boot菜单设置与在源码中设置,只需要选择其一即可,前者修改简单,但每次烧写镜像都要重新设置。如果想直接生成相关镜像,可以直接在源码中进行相应修改。
以下以LVDS为例,讲述如何通过源码修改对应的显示参数。
LVDS(Low Voltage Differential Signaling)是一种低振幅差分信号技术。它使用幅度非常低的信号传输数据。故产生极低的噪声,消耗非常小的功率,甚至不论频率高低功耗都几乎不变。此外,由于LVDS以差分方式传送数据,所以不易受共模噪音影响,是一种常见的显示接口。
相关dts文件
Lvds的参数设置在文件kernel/arch/arm64/boot/dts/rockchip/rk3568-tqcoreX_BaseX_lvds.dtsi 不同的版本命名可能会有不同,具体可以在kernel/arch/arm64/boot/dts/rockchip/里执行grep -inr panel_lvds * 便可以找到对应的文件。
一般相关的属性为:
panel_lvds: panel_lvds {
compatible = "simple-panel";
backlight = <&backlight_lvds>;
//power-supply = <&vcc3v3_lcd1_n>;
enable-delay-ms = <20>;
prepare-delay-ms = <20>;
unprepare-delay-ms = <20>;
disable-delay-ms = <20>;
//MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
//MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, MEDIA_BUS_FMT_RGB666_1X7X3_JEIDA
//格式:6位与8位, JEIDA-日标 SPWG-美标
bus-format =;
width-mm = <217>;
height-mm = <136>;
display-timings {
native-mode = <&timing0_lvds>;
//时序设置
timing0_lvds: timing-lvds@0 {
clock-frequency = <65000000>;
hactive = <1280>;
vactive = <800>;
hback-porch = <80>;
hfront-porch = <60>;
vback-porch = <20>;
vfront-porch = <10>;
hsync-len = <20>;
vsync-len = <8>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
dual-lvds-even-pixels;
panel_in_lvds: endpoint {
remote-endpoint = <&lvds_out_panel>; //与下面两两对应
};
};
};
};
};
&lvds {
status = "okay";
ports {
port@1 {
reg = <1>;
lvds_out_panel: endpoint {
remote-endpoint = <&panel_in_lvds>; //与上面两两对应
};
};
};
};
&dsi0 {
status = "disabled";
};
&video_phy0 {
status = "okay";
};
//通路选择,将lvds打到vp2中
//使能vp2中的lvds,并再打将lvds打到vp2,lvds可以使用vp1,vp2.
//我司将vp1留给mipi1,vp2给lvds
&route_lvds {
status = "okay";
connect = <&vp2_out_lvds>;
};
&lvds_in_vp1 {
status = "disabled";
};
&lvds_in_vp2 {
status = "okay";
};
时序设置
时序相关配置主要修改上面dts中蓝色部分。
一般在屏的手册中会找到类似:
这个屏是1024*600的单路lvds屏。从时序图可以看到它支持de模式也支持sync模式。满足sync也会同满足de格式,满足de不一定同满足sync格式,所以如果有sync则会以sync格式设置。此处我们以sync模式来设置
//时序设置
timing0_lvds: timing-lvds@0 {
clock-frequency = <51200000>; //Dot clk 时钟 51.2M
hactive = <1024>; //行
vactive = <600>; //列
hback-porch = <140>; //H Back Porch 水平后肩
hfront-porch = <160>; //H Front Porch 水平前肩
vback-porch = <20>; //V Back Porch 竖直后肩
vfront-porch = <12>; //V Front Porch 竖直前肩
hsync-len = <20>; //H Pulse Width
vsync-len = <8>; //V Pulse Width
hsync-active = <0>; //水平同步是否要反相,0是不需要
vsync-active = <0>; //竖直同步是否要反相
de-active = <0>; //de信号是否要反相
pixelclk-active = <0>; //时钟是否反相
};
如果没有支持sync模式,则只要满足hback-porch + hfront-porch + hsync-le =H Blank Time就可以了,值可以随意设,但建议不要设置得太极端,不要有0的参数H/V Pulse Width 不宜太大。如上面可以设置成hback-porch = 150, hfront-porch=150, hsync-le=20。
格式设置
Dts中与格式相关的参数是:
panel_lvds: panel_lvds {
...........
unprepare-delay-ms = <20>;
disable-delay-ms = <20>;
//MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
//MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, MEDIA_BUS_FMT_RGB666_1X7X3_JEIDA
//格式:6位与8位, JEIDA-日标 SPWG-美标
bus-format =;
width-mm = <217>;
height-mm = <136>;
.............
常用的格式有:
MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, MEDIA_BUS_FMT_RGB666_1X7X3_JEIDA
对应见下图。
一般芯片手册会有类似的:
通过上表找到对应显示格式的就可以了。
通路设置
Dts中与通路相关的参数有:
//通路选择,将lvds打到vp2中
//使能vp2中的lvds,并再打将lvds打到vp2,lvds可以使用vp1,vp2.
//我司将vp1留给mipi1,vp2给lvds
&route_lvds {
status = "okay";
connect = <&vp2_out_lvds>;
};
&lvds_in_vp1 {
status = "disabled";
};
&lvds_in_vp2 {
status = "okay";
};
Lvds可以连接到vp1或者vp2,设置route_lvds 中的connect ,然后打开/关闭对应的lvds_in_vpx即可,默认vp1连接到mipi,如果要将lvds连到vp1,要先关闭mipi显示。以下是连接vp1的例子:
&route_lvds {
status = "okay";
connect = <&vp1_out_lvds>;
};
&lvds_in_vp1 {
status = "ok";
};
&lvds_in_vp2 {
status = "disabled";
};