|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VOP
9 |3 E* w% p- ^) f6 V. ?Rockchip 平台的LCD Controller 称为VOP(Video Output Processor),芯片中一般集成1~2 个VOP。只有支持两个VOP 的芯片,才能支持双屏异显。 RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。9 W8 |- k7 ~: g' C
![]()
( h) j* {+ [- P
: r4 k5 A N. Q9 a3 {MIPI-DSI8 M8 o4 f5 D6 `+ ]6 `' q4 H
RK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。 1) Single-channel' o/ K( t U2 Q1 ~1 K0 ^
![]() 0 ]/ e' c& I* z9 B
2) Dual-channel (RK3288/RK3399) ① 标准的dual-channel 接口MIPI 屏;& ]* ?+ t* p- p* Q2 c
![]()
) g; E1 s5 f( Q m9 I) a" l② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右 半屏。
. r) P! s9 i1 R0 A+ B8 e. s![]() 8 Q) O3 z0 U; \; @$ K
; V q7 X1 J) v- c
双路mipi拼接屏; B3 ]) E9 {! F" H8 p8 A
之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。 我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。
' T0 D) y+ ~% H2 }( w9 \软件修改9 b1 g& ^5 k s6 M
reset引脚时序控制
- D2 }3 a9 Z+ z) k
1 L8 X b7 Q' d( }1 \![]()
0 E' a7 z) O" N) l3 |8 O根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找FAE确认一下reset的时序要求。' v# Y$ T" q/ T
reset引脚控制时序
0 C& V. }/ G6 P9 l- @7 W4 F1 cfdtdec_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); 8 P& k0 I8 Z6 q# k3 r: Q
初始化序列
& f/ \0 Y1 ^' h- U& A& ?& \在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列
2 \- ]! D5 A" [% [% E; H% e6 J&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 ]; };}; , W0 y3 w' h2 ~' e
命令解析:
" A4 }$ C L! S$ F; t! {" v8 Q& d. J39 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![]()
4 t: ]) S$ \1 U( ]进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。 B9是要写入的命令,“FF 83 99”是该命令后面的3个参数。 A( \- t4 |: a7 h) V7 [& a- Y
![]()
; Z( p. r( X/ F9 m' s# j& d o/ r9 y- ^( U
设置时钟参数, _4 c! Q2 x( L2 ^
&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>; }; }; };}; , ?9 K, h, r8 v! a# B' {: y2 }
设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。
0 y$ n9 A1 c! U" w4 ^dual-channel+ r% _. P& x% G* k5 J
使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。 将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。
4 F( k. T1 G- h9 f/ o5 Q&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";}; / q' b- I( L! ~3 r5 z1 W
修改完就可以点亮两块mipi屏了,效果如下:! x, m# c: K) m0 z/ q p' z4 F
![]()
- g f" w/ u- C% S& ]. U' x![]() " Q8 @, l# B; k7 m$ g& `1 r
两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:
1 c3 G! I6 @+ p2 G, y- { z$ Y$ p![]()
7 Q4 d2 L% P# v$ n这样就可以实现瑞芯微教学视频中的三屏显示方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。 c# I, a0 B4 d+ M! E: w# |
- h6 T4 @8 N- x6 ~
|
|