|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
[color=rgba(0, 0, 0, 0.75)]VOP( d8 i3 Q; @: ^' Y' q' y
[color=rgba(0, 0, 0, 0.75)]Rockchip 平台的L[color=inherit !important]CD Controller 称为VOP(Video Output Processor),[color=inherit !important]芯片中一般集成1~2 个VOP。只有支持两个VOP 的芯片,才能支持双屏异显。
8 [& B4 w( r1 G* R; t3 w[color=inherit !important]RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。
3 ^7 l9 S! z0 j2 Z' P2 l" X+ `3 Y" ?2 `![]()
" W& _5 S9 k( n9 O D[color=rgba(0, 0, 0, 0.75)]MIPI-DSI8 {" x6 M. |6 I" `; W7 I6 |
[color=rgba(0, 0, 0, 0.75)]RK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。
8 N% m7 v2 S% r# l: U1) Single-channel
! }5 P5 A2 e& i/ m* h3 E! M/ f' @![]()
* z. I4 B( A$ U" j* ]" }/ Q2) Dual-channel (RK3288/RK3399)* X- U, G" K% s: f
① 标准的dual-channel 接口MIPI 屏;
4 o2 n0 t/ Z0 p8 C% ` $ Y, @9 f" ]1 j* c1 w
② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右
9 b _) U6 I5 ]% }半屏。
) U% Q) v. Q" r5 `' ?. K: |0 O4 n![]()
$ D( ^* @" @) {: ~[color=rgba(0, 0, 0, 0.75)]双路mipi拼接屏/ J# |# e9 C4 o
[color=rgba(0, 0, 0, 0.75)]之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。$ c! M, \0 x( l, @( i8 o' _6 V: F
我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。
* W% k# Z0 s. K) Y8 P& P[color=rgba(0, 0, 0, 0.75)]软件修改( ]* a' _% ?8 J$ `9 f
[color=rgba(0, 0, 0, 0.75)]reset[color=inherit !important]引脚时序控制
1 x" L5 L+ y, ^/ _/ J% E! ^[color=rgba(0, 0, 0, 0.75)] ! h( l! g# X+ Q j! d. d$ l
根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找F[color=inherit !important]AE确认一下reset的时序要求。 ; N/ ?$ R Z$ i. r9 {9 r" L
[color=rgba(0, 0, 0, 0.75)]reset引脚控制时序
) d: M+ x% c3 T4 o: V[color=rgba(0, 0, 0, 0.75)]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);
7 Z% P- V0 `7 S! A0 k2 B" N3 ^[color=rgba(0, 0, 0, 0.75)]初始化序列 c6 @3 b9 ]4 F# J0 ?% T
[color=rgba(0, 0, 0, 0.75)]在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列 T4 A; t( Q. V* V( K' z; E$ o
[color=rgba(0, 0, 0, 0.75)]&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 ]; };};2 K3 k1 c" T; ^! b! v
[color=rgba(0, 0, 0, 0.75)][color=inherit !important]命令解析:
1 [! `# A# ?4 v5 K& A) v1 Z[color=rgba(0, 0, 0, 0.75)]39 10 04 B9 FF 83 99Data [color=inherit !important]Type:0x39 (DCS Long Write)Delay:0x10 (16 ms)Payload Length:0x04 (4 Bytes)Payload:0xB9 0xFF 0x83 0x99
! t' E; p3 y& l$ v+ ][color=rgba(0, 0, 0, 0.75)]进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。! q# o% M* ?% h9 `3 n0 Q
B9是要写入的命令,“FF 83 99”是该命令后面的3个参数。5 e: F# y1 l' e6 @& @1 G' f% m& W
![]() 7 k, P: @: t, J! {( U% P- `" I
[color=rgba(0, 0, 0, 0.75)]设置[color=inherit !important]时钟参数( n& N0 ]/ K4 U+ @- J
[color=rgba(0, 0, 0, 0.75)]&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>; }; }; };};7 U6 I( _- M9 P) x# @! o7 ]" M3 r0 @
[color=rgba(0, 0, 0, 0.75)]设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。
5 N* l6 k& a4 s& ~. {[color=rgba(0, 0, 0, 0.75)]dual-channel6 r4 h0 \" x+ E5 k* G8 N
[color=rgba(0, 0, 0, 0.75)]使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。
z: x! g1 R5 z( d2 `+ H将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。
/ g2 Z( h, b- L, i# f! K3 J1 j[color=rgba(0, 0, 0, 0.75)]&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";};
3 _/ T/ W g" U: \* Y1 T[color=rgba(0, 0, 0, 0.75)]修改完就可以点亮两块mipi屏了,效果如下:
' G4 P# }( O+ ^8 T$ A 2 a( E) @) A/ p: {3 d. H
4 P* X8 K8 N, ]$ t( o
两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:# l$ u' v# i6 V* ^0 K
![]()
- ]3 v5 x1 @8 F; l这样就可以实现瑞芯微教学视频中的三屏显示[color=inherit !important]方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。 9 u3 j* n& Q) I1 j
- l% u! {( ~" _
|
|