|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
[color=rgba(0, 0, 0, 0.75)]VOP
2 D* B& z, y8 D8 ]! v3 q/ F/ W[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 的芯片,才能支持双屏异显。/ v# k1 D# Z4 T8 X: z" T3 L( l8 f
[color=inherit !important]RK3399 有两个VOP,分别为VOPB(4096x2160),VOPL(2560x1600),所以对于分辨率大于2560x1600 的应用,只能选择VOPB 作为输入。 t# H, _/ X+ t: |% ~% x: `. F! H
![]()
, D' q) r' T% @; u- r[color=rgba(0, 0, 0, 0.75)]MIPI-DSI
- V7 V) T% i; R. A" t[color=rgba(0, 0, 0, 0.75)]RK3399 VOP可以接单通道MIPI屏也可以接双通道MIPI屏。单通道一半对应的是4 lanes,双通道对应8 lanes。
. G' U3 K2 m& f, A/ {4 T1) Single-channel4 w( H3 H' |' F2 g8 f
7 r$ S& t% G/ d
2) Dual-channel (RK3288/RK3399)
1 F3 r. h5 G2 v% B① 标准的dual-channel 接口MIPI 屏;2 U* x D3 T; s) o2 [/ t* _
& W4 D8 w9 g* L- `& ?% ?& ?
② 分别接一样的屏,组合成dual-channel 接口MIPI 屏,panel0 显示左半屏,panel1 显示右+ d: }& j+ M4 p: r6 u" m
半屏。, x1 F& `) K3 s) ~4 R
![]() 2 C; `, p, S" W A' m! w. |
[color=rgba(0, 0, 0, 0.75)]双路mipi拼接屏8 |, U1 u# ]8 _" |' p
[color=rgba(0, 0, 0, 0.75)]之所以可以做成双路mipi拼接显示,究其原因是RK3399的vop可以支持双通道mipi,借用这个特性,我们才能进行拼接。/ j# n4 Y) q5 J' ]% C
我们选择了两个1080x1920分辨率的竖屏进行拼接,使用VOP BIG进行输出。 2 c& I# Y8 W8 ^9 D+ g0 W
[color=rgba(0, 0, 0, 0.75)]软件修改
7 c- q0 h3 ?; e& y5 g7 |[color=rgba(0, 0, 0, 0.75)]reset[color=inherit !important]引脚时序控制: u) f4 J g# X3 z' u" h0 w
[color=rgba(0, 0, 0, 0.75)]![]()
9 F& c0 x H6 M; w2 {根据手册提供的示意图可知,reset引脚需要先拉高,然后拉低保持tRESW时间,再拉高保持tREST时间,显示控制芯片就进入Initial Condition,这个时候我们就可以进行写初始化序列了。一般可以再找F[color=inherit !important]AE确认一下reset的时序要求。
8 @: v' Q6 y) d0 H2 J[color=rgba(0, 0, 0, 0.75)]reset引脚控制时序
# `- g6 A1 @' R[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 q! D. w+ E6 j: h/ p+ t
[color=rgba(0, 0, 0, 0.75)]初始化序列
% N$ D: S, t" r d[color=rgba(0, 0, 0, 0.75)]在设备树中配置mipi屏的初始化序列,在dsi节点中配置panel-init-sequence数组序列
) `# H& y/ b, o' \( E; m0 B[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 u! a+ p( j+ f3 M[color=rgba(0, 0, 0, 0.75)][color=inherit !important]命令解析:
: U* i3 ~/ M0 g0 Y) C+ u[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
" Z- p5 A% S. D) `( o! q[color=rgba(0, 0, 0, 0.75)]进一步分析,该命令前3个字节属于命令格式,后面“B9 FF 83 99”才是要传输的指令。
; N+ e; k$ a0 P) |4 y jB9是要写入的命令,“FF 83 99”是该命令后面的3个参数。
. g, s R; c, N% Q![]()
( t6 @5 e! g4 y3 C2 b/ y[color=rgba(0, 0, 0, 0.75)]设置[color=inherit !important]时钟参数$ L6 ?, c- I) c# g1 b" H
[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>; }; }; };};
0 S9 I- V2 z8 ]: k$ l' F' D* J \3 A[color=rgba(0, 0, 0, 0.75)]设置完这些,单个屏幕就可以正常点亮显示了,但这不是我们的目的,我们的目的是双屏拼接。
5 Z; L* X1 h' M7 c9 l[color=rgba(0, 0, 0, 0.75)]dual-channel$ ~# L) \4 |1 ?5 f& m9 P7 X! C
[color=rgba(0, 0, 0, 0.75)]使能dsi1节点,配置“rockchip,dual-channel”、“dsi,lanes”属性。
% D7 |# W: H' f8 C) V将horizontal方向上的显示参数增加一倍,并将时钟频率调高一倍。 1 ?2 n- m; f: h3 @ e) j2 k# M- K
[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 S) `1 J0 B2 ^) y; z/ R: @9 y: v[color=rgba(0, 0, 0, 0.75)]修改完就可以点亮两块mipi屏了,效果如下:+ u6 ^3 f. o+ f' O6 r: Y
/ h c/ z! a* J4 j/ j8 d. D; e: I
{. c# q' X$ n7 j( a
两个MIPI使用了VOP BIG,VOP LITTLE还可以再支持一路HDMI显示。再插入HDMI,显示效果如下:
. R* b; p6 e9 N5 B; W" x8 C8 E2 z![]()
8 |0 I: X `3 C) p+ \, b这样就可以实现瑞芯微教学视频中的三屏显示[color=inherit !important]方案了,通过写app就可以做出三屏拼接显示或者三屏异显的方案。 ' r# E' t% V8 S2 n! C( T9 }* A3 a
- W: Z3 ^/ K' b; p' j4 L# n
|
|