|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VOP
8 i; A6 Y4 T3 t/ n1 W! h/ ]4 ARockchip 平台的LCD Controller 称为VOP(Video Output Processor),芯片中一般集成1~2 个VOP。只有支持两个VOP 的芯片,才能支持双屏异显。 RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。
^) E) o. {) o6 i* A2 Z![]()
7 e8 d' `) V. N5 [% o
; a9 ]: O0 p1 QMIPI-DSI0 \) d0 V+ x& K
RK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。 1) Single-channel0 l" O9 j4 z0 ~7 B. ~6 ]. x
![]() ; H6 c# u+ b/ Y) t/ Z$ E
2) Dual-channel (RK3288/RK3399) ① 标准的dual-channel 接口MIPI 屏;
, Q) ]. O" o- ?5 d; e- b! U![]()
~- }4 z0 E+ ?: I9 [1 p F② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右 半屏。3 a6 r8 }& a% w' S) A
![]()
! ?/ j2 F* n- S! C3 T0 a* J; z8 }- n5 [! t1 A
双路mipi拼接屏
% M7 |. S' j* Y; u之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。 我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。
3 E5 c. v" h) n! V. V- @; C软件修改- `' V5 S9 H0 l. F
reset引脚时序控制
8 W; K6 m. k5 U `2 @- |: p
" a7 V9 {7 Y2 n4 A![]() 2 c1 ~! ~/ N1 |: y
根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找FAE确认一下reset的时序要求。- Q4 W: O' o0 Q! l; n6 I
reset引脚控制时序
' W& J- x( r2 Y; @. o" v# qfdtdec_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);![]()
) J' b' u5 ?* o0 Y6 @' `" R7 ?初始化序列+ \* G2 c" x5 M0 d
在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列; H2 i* f8 r/ Y
&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 ]; };};![]()
e' n3 u1 G' z; `4 X$ o* Q% |6 f命令解析:; h) Q' j$ z$ R
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![]()
; O1 q* g! a* ?4 M0 \; g进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。 B9是要写入的命令,“FF 83 99”是该命令后面的3个参数。3 o, |. B' [; y( j# g/ Y* t6 B9 [( I
![]() 3 m8 L& L7 M" a3 B
f3 N/ j0 S! J7 d# W' |2 D z设置时钟参数
! ^: O- o; j5 ~. `# S0 G- D&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>; }; }; };}; % k' [" X! |# [' M5 p% g9 X0 n- q
设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。" k$ R" j3 E. L1 E; D8 Z. r
dual-channel! K+ [6 I0 Z+ k% r0 s9 _! @ R9 }
使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。 将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。
4 }2 s# \, ]/ o+ k* v& `/ P&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 W" p3 L# j. Y' X修改完就可以点亮两块mipi屏了,效果如下:
; `2 U$ c% g7 G, q3 S* `, T![]() , q7 ^* f+ O ~" d: {7 S
![]() 3 L/ F5 u5 O% H9 @2 N% ]& X4 \
两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:
/ @0 \' C+ h3 `![]() , Q* _7 Q0 T$ v3 R. e) \* T' d
这样就可以实现瑞芯微教学视频中的三屏显示方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。
) r3 I% E: M5 n5 ~4 t$ i4 W1 o! c; m% ~: ~
|
|