|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VOP
$ \ B6 H7 ~! s3 uRockchip 平台的LCD Controller 称为VOP(Video Output Processor),芯片中一般集成1~2 个VOP。只有支持两个VOP 的芯片,才能支持双屏异显。 RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。
9 E2 K, \9 F7 a3 O! p* B7 _: V![]()
2 J# F. X, ]- C! F- v, S! x. _4 H; I4 k. K. O" `" ~$ ]8 C
MIPI-DSI
1 j# |; |4 g' E2 L3 A7 ] l" ORK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。 1) Single-channel/ c9 f1 k7 v7 m6 X' T) n
![]()
& B" x5 `- o, H1 s3 M# F2) Dual-channel (RK3288/RK3399) ① 标准的dual-channel 接口MIPI 屏;
5 J. F8 \; q% g7 }![]() & I( y1 V& `. c) N8 Z {) |6 D
② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右 半屏。 |8 o! s9 ~/ Q* C0 E
![]() 5 c; E7 ]$ M$ z' B b% D2 \
/ N) z/ j7 v6 n# j4 i7 j9 m/ N8 G5 }双路mipi拼接屏3 f& c( f5 k7 e. W; X$ I
之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。 我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。
; u5 z9 e$ V- s6 r# p/ I软件修改
& i; V4 a; ]+ S+ z6 J) {2 ?reset引脚时序控制, \$ Z' A8 u; e7 v5 n& y% `: p" L4 I
# x& M) u, z3 `& d, m![]() & b7 L: k7 {( [5 \
根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找FAE确认一下reset的时序要求。
: s9 r6 Z8 ~/ ]! Y9 X3 x0 ^reset引脚控制时序% W0 t7 \! E+ ~
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); + f" B+ ^# |1 l5 b: ?% G
初始化序列
, p1 o- T) \- b" _在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列
I! p* P! R* h M9 h2 U: Z& O&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 ]; };};![]()
5 H+ b+ l" M& n* v+ @命令解析: @/ |7 d3 [1 C- ^6 n6 Q1 V
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![]()
+ y) F+ N2 |+ L& ]/ B进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。 B9是要写入的命令,“FF 83 99”是该命令后面的3个参数。
0 {# r% A8 j5 @* y& E![]()
9 P1 Z/ i0 H: @7 ~( x! _9 j0 N( W; `
- Q! Z- k6 A, Z设置时钟参数
" R3 j5 a& V$ G" c' h: u* K% P&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>; }; }; };};![]()
) X6 V4 n$ a* R设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。
a" _' C) Z; r7 ?* ~# hdual-channel( R; \5 J: m9 a$ b& G
使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。 将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。; Q6 J8 `: `5 A9 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";};![]()
9 }/ z. _' W3 G/ V8 ^; A修改完就可以点亮两块mipi屏了,效果如下:
& f7 e8 B5 |; H9 E! n![]()
3 t8 p5 ]" o7 F9 q1 h![]()
' o" e5 X0 |& L& b两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:, m; q h' d( |0 X f, V+ a
![]() 2 F" t- y! L) J% J
这样就可以实现瑞芯微教学视频中的三屏显示方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。, O% w5 f: R" A0 s
$ ]; _. L- L& J: }( { |
|