|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VOP# A) l; a) @; t; b' `
Rockchip 平台的LCD Controller 称为VOP(Video Output Processor),芯片中一般集成1~2 个VOP。只有支持两个VOP 的芯片,才能支持双屏异显。 RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。- f6 s E% X7 \6 X
![]()
2 Z1 C8 S: M: Y0 Y
1 X2 O' X& r3 S7 h" aMIPI-DSI. E* W/ J. |4 e, @6 Y
RK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。 1) Single-channel. m3 I6 ~4 @" {" M
![]()
& v+ {4 T6 p5 W6 n+ s ?- f8 ?; o) p" b2) Dual-channel (RK3288/RK3399) ① 标准的dual-channel 接口MIPI 屏;
* t3 g4 j2 A0 I8 L6 Z- F. X![]() . S1 i, O7 p& v1 C3 p; A
② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右 半屏。
4 F: S. C. U5 S0 B1 Q![]()
* c( G# t, N/ f0 K5 m; c1 K+ d1 i8 Q
双路mipi拼接屏
. G! b L9 }: f+ T: f之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。 我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。
9 w, ]! b4 ^; s/ u. }软件修改
# M7 `: W* N& ] preset引脚时序控制" T5 u/ L2 `1 _! z" M) E* r
, ?7 H. M5 E! ~3 I
![]() : R2 E' ?: W s6 f, Y& D
根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找FAE确认一下reset的时序要求。; z3 U! f) |' b7 S g
reset引脚控制时序
0 ~ ~9 \ `7 e6 wfdtdec_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); % `$ P+ T. w, E' y! q8 }
初始化序列
I/ G o5 n( x/ E在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列8 h! R1 C$ u: e
&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 ]; };};![]()
$ X8 K7 }0 ^; }: g命令解析:
8 D/ c' i: p. {' Q% P, N39 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![]()
2 c$ I5 W0 h7 e' J* L进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。 B9是要写入的命令,“FF 83 99”是该命令后面的3个参数。
3 f6 `& O' N2 G0 l$ p* p+ A![]() - f6 b4 O+ v* I- n0 ?$ m: T& K+ u
9 {, `# W6 k& Z) O设置时钟参数4 E. d. i- U- D! y4 b, i; Z
&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>; }; }; };};![]()
' s) Q; O4 D. a1 g设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。
: U) d8 O4 {; C3 }) s3 }, bdual-channel
- A( K; ~2 q2 I# T2 b* ]使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。 将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。+ \5 G( _2 z8 Z2 O2 g L- M5 N
&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";}; . p: F+ g' ` H+ \
修改完就可以点亮两块mipi屏了,效果如下:4 i; h6 c2 |+ P1 o& }4 g% P5 g# L6 t
![]()
1 m. ?$ ?( h5 R7 M/ o. `% G![]()
& _) v, S) x8 k/ k l6 T9 G2 x两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:
0 D. N% I7 b" x7 a![]()
3 M; T: ?; k, h6 T这样就可以实现瑞芯微教学视频中的三屏显示方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。
* w( S- [% y1 R& I @: _( O! f, r# k8 u, ^: Z# U8 [
|
|