飛凌嵌入式RK3399系列主板和核心板支持屏幕拼接顯示,即同一內(nèi)容分開(kāi)兩部分在兩個(gè)屏幕上顯示,支持橫屏和豎屏顯示,并支持雙屏觸控。適用于游戲機(jī)、收銀機(jī)、多屏互動(dòng)、智能廣告機(jī)、醫(yī)療健康設(shè)備等應(yīng)用場(chǎng)景。
硬件準(zhǔn)備
■ 飛凌OK3399-C開(kāi)發(fā)板
■ 1個(gè)HDMI顯示屏
PART1.場(chǎng)景實(shí)現(xiàn)前提
VOP
Rockchip 平臺(tái)的LCD Controller 稱為VOP(Video Output Processor),芯片中一般集成1~2 個(gè)VOP。只有支持兩個(gè)VOP 的芯片,才能支持雙屏異顯。
RK3399 有兩個(gè)VOP,分別為VOPB(4096x2160),VOPL(2560x1600),所以對(duì)于分辨率大于2560x1600 的應(yīng)用,只能選擇VOPB 作為輸入。
MIPI-DSI
RK3399 VOP可以接單通道MIPI屏也可以接雙通道MIPI屏。單通道一半對(duì)應(yīng)的是4 lanes,雙通道對(duì)應(yīng)8 lanes。
1) Single-channel
2) Dual-channel (RK3288/RK3399)
① 標(biāo)準(zhǔn)的dual-channel 接口MIPI 屏
② 分別接一樣的屏,組合成dual-channel 接口MIPI 屏,panel0 顯示左半屏,panel1 顯示右半屏。
雙路mipi拼接屏
之所以可以做成雙路mipi拼接顯示,究其原因是RK3399的vop可以支持雙通道m(xù)ipi,借用這個(gè)特性,我們才能進(jìn)行拼接。
我們選擇了兩個(gè)1080x1920分辨率的豎屏進(jìn)行拼接,使用VOP BIG進(jìn)行輸出。
PART2.實(shí)現(xiàn)步驟
軟件修改
① reset引腳時(shí)序控制
根據(jù)手冊(cè)提供的示意圖可知,reset引腳需要先拉高,然后拉低保持tRESW時(shí)間,再拉高保持tREST時(shí)間,顯示控制芯片就進(jìn)入Initial Condition,這個(gè)時(shí)候我們就可以進(jìn)行寫初始化序列了。一般可以再找FAE確認(rèn)一下reset的時(shí)序要求。
reset引腳控制時(shí)序
fdtdec_set_gpio(&panel->reset_gpio, 1);
msleep(panel->delay_init);
fdtdec_set_gpio(&panel->reset_gpio, 0);
msleep(panel->delay_reset);
fdtdec_set_gpio(&panel->reset_gpio, 1);
msleep(panel->delay_enable);
② 初始化序列
在設(shè)備樹(shù)中配置mipi屏的初始化序列,在dsi節(jié)點(diǎn)中配置panel-init-sequence數(shù)組序列
&dsi {
panel@0{
panel-init-sequence = [
39 10 04 B9 FF 83 99
39 10 10 B1 02 04 6D 8D 01 32 33 11 11 5A 5F 56 73 02 02
39 10 0C B2 00 80 80 AE 05 07 5A 11 10 10 00
...
15 10 02 D0 39
15 64 02 11 00
15 64 02 29 00
];
};
};
命令解析:
39 10 04 B9 FF 83 99
Data Type:0x39 (DCS Long Write)
Delay:0x10 (16 ms)
Payload Length:0x04 (4 Bytes)
Payload:0xB9 0xFF 0x83 0x99
進(jìn)一步分析,該命令前3個(gè)字節(jié)屬于命令格式,后面“B9 FF 83 99”才是要傳輸?shù)闹噶睢?/p>
B9是要寫入的命令,“FF 83 99”是該命令后面的3個(gè)參數(shù)。
③ 設(shè)置時(shí)鐘參數(shù)
&dsi {
panel@0{
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <120000000>;
hactive = <1080>;
vactive = <1920>;
hback-porch = <32>;
hfront-porch = <32>;
vback-porch = <10>;
vfront-porch = <8>;
hsync-len = <32>;
vsync-len = <4>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
};
};
設(shè)置完這些,單個(gè)屏幕就可以正常點(diǎn)亮顯示了,但這不是我們的目的,我們的目的是雙屏拼接。
dual-channel
使能dsi1節(jié)點(diǎn),配置“rockchip,dual-channel”、“dsi,lanes”屬性。
將horizontal方向上的顯示參數(shù)增加一倍,并將時(shí)鐘頻率調(diào)高一倍。
&dsi {
status = "okay";
rockchip,dual-channel = <&dsi1>;
panel@0{
dsi,lanes = <8>;
display-timings {
native-mode = <&timing1>;
timing1: timing1 {
clock-frequency = <240000000>;
hactive = <2160>;
vactive = <1920>;
hback-porch = <64>;
hfront-porch = <64>;
vback-porch = <10>;
vfront-porch = <8>;
hsync-len = <64>;
vsync-len = <4>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
};
};
&dsi1 {
status = "okay";
};
修改完就可以點(diǎn)亮兩塊MIPI屏了,效果如下:
兩個(gè)MIPI使用了VOP BIG,VOP LITTLE還可以再支持一路HDMI顯示。再插入HDMI,顯示效果如下:
這樣就可以實(shí)現(xiàn)瑞芯微教學(xué)視頻中的三屏顯示方案了,通過(guò)寫app就可以做出三屏拼接顯示或者三屏異顯的方案。