|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VOP
( H' g8 @/ x# C) B0 ~3 u+ YRockchip 平台的LCD Controller 称为VOP(Video Output Processor),芯片中一般集成1~2 个VOP。只有支持两个VOP 的芯片,才能支持双屏异显。 RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。0 R: [, p& G' {# O
![]() o5 [, c) U# I; |
" z4 u+ X6 H+ l* p
MIPI-DSI
" d, o. u4 _* n6 Y2 O$ b+ E- X6 I0 kRK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。 1) Single-channel% C! u8 X8 s5 @9 y% b( ~
![]()
* C) |& ^$ f' c, \9 N/ i2) Dual-channel (RK3288/RK3399) ① 标准的dual-channel 接口MIPI 屏;- L1 E" z: g+ ~8 Z1 }7 |% N* ^
![]() / ]% ]# U! Z* X9 B4 M; }
② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右 半屏。
8 `1 D+ E$ C4 J& O. ^& o- S' Y$ N![]() & J1 G2 ^ M- J' e$ b4 {& i; t
; ? [9 ^$ h& p7 F5 z# S双路mipi拼接屏- R# f2 P! z$ W3 Y, |
之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。 我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。" X, i2 N3 [: S6 Q* D8 `4 a, k, S
软件修改
6 d( z* H& Q6 P& x7 f( h# Y7 G5 Freset引脚时序控制2 h! @ T3 Q, C# _0 A; ?' `
* z! h# N6 F6 I2 S![]()
l/ f0 u# a7 G/ z/ v0 J根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找FAE确认一下reset的时序要求。; {. V# M) z6 B- R* {% l
reset引脚控制时序% M1 b* M1 l1 u" T" U
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);![]()
6 O7 _. r7 e4 U* g初始化序列; v/ k6 ?* V$ [) _# {1 X( d0 S) m
在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列+ r" k( y/ U# J( w5 N
&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 ]; };};![]()
' S. m' Q" G2 r命令解析:: O9 ?$ P% `* N+ Z5 M* {" k
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![]()
8 P H0 {2 d6 W6 _) p3 d进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。 B9是要写入的命令,“FF 83 99”是该命令后面的3个参数。
8 \: U& Q; T) e6 Y: z![]()
- b# u2 a0 {/ ^6 ^' q" @8 G$ s6 H) |) B
设置时钟参数
0 o2 c1 {; H. C+ ^) K8 c&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>; }; }; };};![]()
( G) Z+ d* V- r+ z% E% T, S设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。8 D9 z- X( L4 `, ?; g
dual-channel( x# _! u- [- N' J1 `5 B% k+ i
使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。 将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。7 p$ s- H: h, N7 d# ?: ?# T
&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";}; ) ~/ B8 N- ^' O- e0 r
修改完就可以点亮两块mipi屏了,效果如下:& e2 `+ @( ~% [8 _) T* V
![]() . y0 c5 z# k8 I1 q5 ?' C5 y4 i0 ^
![]()
4 W5 c8 G" V* Z; F两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:/ A* H( |# p* V# k
![]() {8 P3 x _) L3 N X0 K
这样就可以实现瑞芯微教学视频中的三屏显示方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。
: m$ H' E) ?5 y9 m! m! C8 g, L. k
|
|