|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VOP
0 u: G2 g$ m, _' I' `7 QRockchip 平台的LCD Controller 称为VOP(Video Output Processor),芯片中一般集成1~2 个VOP。只有支持两个VOP 的芯片,才能支持双屏异显。 RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。! @* Y* d4 D, p% Y# e- i
![]()
. C$ _7 u! B4 _. g8 }
( J5 R+ d: q& ~, r3 G, ]6 K) ]MIPI-DSI# s$ R) e3 \& F9 T
RK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。 1) Single-channel
: T% I) ^! R8 e+ O![]() 1 v8 t- B8 v. V
2) Dual-channel (RK3288/RK3399) ① 标准的dual-channel 接口MIPI 屏;
, ], K" M/ I9 n2 T* R![]()
E3 Z' Y# u3 m) }4 `② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右 半屏。
" M9 e& Q" c$ l$ j3 @) Q$ }![]() 7 e/ k' R. n; b. m% J
% u3 g, ?; ~( Y% j双路mipi拼接屏
/ F# ?+ b" _1 N( h4 P9 M9 ]9 I之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。 我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。6 y. Y7 v5 t$ F0 y5 i+ z+ x3 u8 p
软件修改) [1 t M# r0 M1 A4 |
reset引脚时序控制/ n7 n8 P3 f |. f5 w8 R& u
0 D9 f# C0 A3 b8 |- J7 a6 V
![]() 1 d5 i+ V! U% _1 N6 D6 V% W
根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找FAE确认一下reset的时序要求。0 D0 [, I n7 v" w% `" I9 c
reset引脚控制时序8 u% h% W- y( b* 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); " o8 a8 q7 l2 m* Y' n* u$ c3 E
初始化序列; }, t4 K; L* ], k* [ \
在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列
3 F! y) r; z4 q: i&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 ]; };}; + a0 v9 ]& m+ f
命令解析:- y5 W$ }6 ^7 |2 w& _8 S
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 ; _- P( k! W, F% k8 J2 t
进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。 B9是要写入的命令,“FF 83 99”是该命令后面的3个参数。
" v% l/ K) ?" V![]() 8 L7 v2 x9 M% v8 ^# v) X: ?. f
- [* y* S1 H! {5 p0 P. R8 G
设置时钟参数
- {2 O0 m, |. p f. }; v&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>; }; }; };}; ; m& e2 H) s v+ N7 L$ h, g, f) h
设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。
: U, |5 @; ?. Fdual-channel; D& b8 ]) [0 E. r
使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。 将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。& Z( o6 U) c' l) f F: [& }
&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";}; 1 Z- u6 J* T! p& n6 w4 g3 N0 F: n
修改完就可以点亮两块mipi屏了,效果如下:' ?' ?$ W4 \2 B, X
![]() 4 @6 }, `9 s( H( @) }3 y* l
![]() 5 {$ t% ^, o4 i$ f+ C' W: ~
两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:5 L, b6 o2 t0 c, w8 f" N- a
![]() ]( J6 q8 G% Z: S" w
这样就可以实现瑞芯微教学视频中的三屏显示方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。
! |& c5 l9 |/ p+ h @. k' e
8 a/ F( A% C! v$ u7 W8 t' N |
|