|
[color=rgba(0, 0, 0, 0.75)]VOP
[color=rgba(0, 0, 0, 0.75)]Rockchip 平臺的L[color=inherit !important]CD Controller 稱為VOP(Video Output Processor),[color=inherit !important]芯片中一般集成1~2 個VOP。只有支持兩個VOP 的芯片,才能支持雙屏異顯。
[color=inherit !important]RK3399 有兩個VOP,分別為VOPB(4096x2160),VOPL(2560x1600),所以對于分辨率大于2560x1600 的應(yīng)用,只能選擇VOPB 作為輸入。
![]()
[color=rgba(0, 0, 0, 0.75)]MIPI-DSI
[color=rgba(0, 0, 0, 0.75)]RK3399 VOP可以接單通道MIPI屏也可以接雙通道MIPI屏。單通道一半對應(yīng)的是4 lanes,雙通道對應(yīng)8 lanes。
1) Single-channel
![]()
2) Dual-channel (RK3288/RK3399)
① 標(biāo)準(zhǔn)的dual-channel 接口MIPI 屏;
![]()
② 分別接一樣的屏,組合成dual-channel 接口MIPI 屏,panel0 顯示左半屏,panel1 顯示右
半屏。
![]()
[color=rgba(0, 0, 0, 0.75)]雙路mipi拼接屏
[color=rgba(0, 0, 0, 0.75)]之所以可以做成雙路mipi拼接顯示,究其原因是RK3399的vop可以支持雙通道m(xù)ipi,借用這個特性,我們才能進行拼接。
我們選擇了兩個1080x1920分辨率的豎屏進行拼接,使用VOP BIG進行輸出。
[color=rgba(0, 0, 0, 0.75)]軟件修改
[color=rgba(0, 0, 0, 0.75)]reset[color=inherit !important]引腳時序控制
[color=rgba(0, 0, 0, 0.75)]![]()
根據(jù)手冊提供的示意圖可知,reset引腳需要先拉高,然后拉低保持tRESW時間,再拉高保持tREST時間,顯示控制芯片就進入Initial Condition,這個時候我們就可以進行寫初始化序列了。一般可以再找F[color=inherit !important]AE確認一下reset的時序要求。
[color=rgba(0, 0, 0, 0.75)]reset引腳控制時序
[color=rgba(0, 0, 0, 0.75)]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);
[color=rgba(0, 0, 0, 0.75)]初始化序列
[color=rgba(0, 0, 0, 0.75)]在設(shè)備樹中配置mipi屏的初始化序列,在dsi節(jié)點中配置panel-init-sequence數(shù)組序列
[color=rgba(0, 0, 0, 0.75)]&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 ]; };};
[color=rgba(0, 0, 0, 0.75)][color=inherit !important]命令解析:
[color=rgba(0, 0, 0, 0.75)]39 10 04 B9 FF 83 99Data [color=inherit !important]Type:0x39 (DCS Long Write)Delay:0x10 (16 ms)Payload Length:0x04 (4 Bytes)Payload:0xB9 0xFF 0x83 0x99
[color=rgba(0, 0, 0, 0.75)]進一步分析,該命令前3個字節(jié)屬于命令格式,后面“B9 FF 83 99”才是要傳輸?shù)闹噶睢?br />
B9是要寫入的命令,“FF 83 99”是該命令后面的3個參數(shù)。
![]()
[color=rgba(0, 0, 0, 0.75)]設(shè)置[color=inherit !important]時鐘參數(shù)
[color=rgba(0, 0, 0, 0.75)]&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>; }; }; };};
[color=rgba(0, 0, 0, 0.75)]設(shè)置完這些,單個屏幕就可以正常點亮顯示了,但這不是我們的目的,我們的目的是雙屏拼接。
[color=rgba(0, 0, 0, 0.75)]dual-channel
[color=rgba(0, 0, 0, 0.75)]使能dsi1節(jié)點,配置“rockchip,dual-channel”、“dsi,lanes”屬性。
將horizontal方向上的顯示參數(shù)增加一倍,并將時鐘頻率調(diào)高一倍。
[color=rgba(0, 0, 0, 0.75)]&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";};
[color=rgba(0, 0, 0, 0.75)]修改完就可以點亮兩塊mipi屏了,效果如下:
![]()
![]()
兩個MIPI使用了VOP BIG,VOP LITTLE還可以再支持一路HDMI顯示。再插入HDMI,顯示效果如下:
![]()
這樣就可以實現(xiàn)瑞芯微教學(xué)視頻中的三屏顯示[color=inherit !important]方案了,通過寫app就可以做出三屏拼接顯示或者三屏異顯的方案。 原文鏈接:https://www.forlinx.com/article_view_687.html
|
|