EDA365电子论坛网

标题: RK3399 双路mipi拼接屏+HDMI 三屏显示 [打印本页]

作者: ningmengzier    时间: 2021-4-25 15:55
标题: RK3399 双路mipi拼接屏+HDMI 三屏显示
VOP6 p* C/ T* d' _& \5 W) s
Rockchip 平台的LCD Controller 称为VOP(Video Output Processor),芯片中一般集成1~2 个VOP。只有支持两个VOP 的芯片,才能支持双屏异显。 RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。
" b" J$ r7 w# E5 j. i: _7 \/ S' l0 E4 R) U5 c- u$ Y: N
0 y( Y- ~: a/ m, V6 S% G
MIPI-DSI( v3 Y0 t+ T& I
RK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。 1) Single-channel
! |& U4 k& }; }6 r
3 |! R2 u" ]1 X0 r2) Dual-channel (RK3288/RK3399) ① 标准的dual-channel 接口MIPI 屏;1 K: `9 M- t" y% X0 K
' f. D& R: l, U" Z! c
② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右 半屏。0 a+ [0 ]. ]" L

* v4 q4 y8 u, I1 B/ n
( G" a) R/ s- M3 [1 f0 j% c  Q7 ~双路mipi拼接屏7 Q" q  s) g6 h- o$ T- ^( q" F
之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。 我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。
- ?- ~, ~: C  R' g. z软件修改1 X5 `. S8 m# V7 P! j
reset引脚时序控制
) [* |6 L: H6 }9 q/ n" p3 k8 y" }/ }
# {$ m. }6 r, ^) C, V, |- k& T, ^- n! m. S  U; F8 p% p; _
根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找FAE确认一下reset的时序要求。
0 Q  W/ R$ J0 O$ b$ W) z; x; Greset引脚控制时序+ ^7 U  d2 [9 @6 A% W9 Q, S
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);1 R5 e" k7 D& k( m6 L$ h- a
初始化序列0 b' z# h0 u  q; r" N
在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列- e% V, }/ F& J* q4 a( Q
&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                ];        };};3 p- m/ R. |9 a2 V# q
命令解析:/ V* y# {- T& C& f3 C' \% I
39 10 04 B9 FF 83 99Data Type:0x39 (DCS Long Write)Delay:0x10 (16 ms)Payload Length:0x04 (4 Bytes)Payload:0xB9 0xFF 0x83 0x99; b5 a( M+ R' W: w! Z, }. j2 a2 B
进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。 B9是要写入的命令,“FF 83 99”是该命令后面的3个参数。" U* K& ^: o6 U8 F6 a+ y
! H% W# l' U1 R2 y2 T, K: Z
9 F2 y) M5 C& ?$ G
设置时钟参数- s! O% b* @: O6 {* B
&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>;                        };                };        };};2 `) @/ @! W3 ?4 [) N8 [" W. q
设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。6 E0 q+ v) Z; f& d2 Q; @) d$ i
dual-channel
( y' j; l- K& ?5 E9 j  h0 |+ G) b使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。 将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。
$ Q  `9 ?* C8 c0 u- d&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";};7 R4 E  A! K- Z4 _7 x
修改完就可以点亮两块mipi屏了,效果如下:
9 n; a  t) R  f) z6 Y
1 k( E: G/ |  x1 C/ J; I( E; S- x+ _% G' n2 S+ n2 }7 g( q
两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:6 H; r7 P$ ?$ X7 O/ q; P0 t

: e" O3 y: b& S; l# f4 y3 r这样就可以实现瑞芯微教学视频中的三屏显示方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。
2 q2 _4 V8 n  T5 F7 v
4 Y; L2 G5 N& Q, c
作者: twel2e    时间: 2021-4-25 16:01
看看,了解一下  
7 u! G2 Q) Y* m
作者: 木瓜贴片一秦先生    时间: 2021-4-25 17:13
双排QFN




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2