在RK3568上驱动MIPI屏幕
在RK3568的display系统中有VP0和VP1
在设备树中,我将HDMI与VP0绑定,MIPI_DSI1(有dis0和dsi1)与VP1绑定
&dsi1 {
status = "okay";
rockchip,lane-rate = <550>;
dsi1_panel: panel@0 {
status = "okay";
compatible = "simple-panel-dsi";
reg = <0>;
backlight = <&backlight1>;
// enable-gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>; //对照原理图
reset-gpios = <&gpio0 23 GPIO_ACTIVE_LOW>; //对照原理图
reset-delay-ms = <10>;
disable-delay-ms = <10>;
init-delay-ms = <10>;
enable-delay-ms = <20>;
prepare-delay-ms = <10>;
unprepare-delay-ms = <10>;
dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
dsi,format = <MIPI_DSI_FMT_RGB888>;
dsi,lanes = <4>;
panel-init-sequence = [
39 00 04 ff 98 81 03
15 00 02 01 00
15 00 02 02 00
15 00 02 03 5d
15 00 02 04 17
15 00 02 05 00
15 00 02 06 0e
15 00 02 07 00
15 00 02 08 00
15 00 02 09 21
15 00 02 0a 21
15 00 02 0b 00
15 00 02 0c 06
15 00 02 0d 06
15 00 02 0e 00
15 00 02 0f 22
15 00 02 10 22
15 00 02 11 00
15 00 02 12 00
15 00 02 13 05
15 00 02 14 00
15 00 02 15 00
15 00 02 16 00
15 00 02 17 00
15 00 02 18 00
15 00 02 19 00
15 00 02 1a 00
15 00 02 1b 00
15 00 02 1c 00
15 00 02 1d 00
15 00 02 1e 40
15 00 02 1f C0
15 00 02 20 0E
15 00 02 21 09
15 00 02 22 0F
15 00 02 23 00
15 00 02 24 8A
15 00 02 25 8A
15 00 02 26 00
15 00 02 27 00
15 00 02 28 77
15 00 02 29 77
15 00 02 2a 00
15 00 02 2b 00
15 00 02 2c 02
15 00 02 2d 02
15 00 02 2e 07
15 00 02 2f 07
15 00 02 30 00
15 00 02 31 00
15 00 02 32 22
15 00 02 33 00
15 00 02 34 00
15 00 02 35 0A
15 00 02 36 00
15 00 02 37 08
15 00 02 38 3C
15 00 02 39 00
15 00 02 3a 00
15 00 02 3b 00
15 00 02 3c 00
15 00 02 3d 00
15 00 02 3e 00
15 00 02 3f 00
15 00 02 40 00
15 00 02 41 00
15 00 02 42 00
15 00 02 43 08
15 00 02 44 00
15 00 02 50 01
15 00 02 51 23
15 00 02 52 45
15 00 02 53 67
15 00 02 54 89
15 00 02 55 ab
15 00 02 56 01
15 00 02 57 23
15 00 02 58 45
15 00 02 59 67
15 00 02 5a 89
15 00 02 5b ab
15 00 02 5c cd
15 00 02 5d ef
15 00 02 5e 00
15 00 02 5f 02
15 00 02 60 02
15 00 02 61 06
15 00 02 62 0f
15 00 02 63 0f
15 00 02 64 13
15 00 02 65 13
15 00 02 66 0e
15 00 02 67 0e
15 00 02 68 12
15 00 02 69 12
15 00 02 6a 0d
15 00 02 6b 0d
15 00 02 6c 11
15 00 02 6d 11
15 00 02 6e 0c
15 00 02 6f 0c
15 00 02 70 10
15 00 02 71 10
15 00 02 72 00
15 00 02 73 16
15 00 02 74 08
15 00 02 75 02
15 00 02 76 02
15 00 02 77 08
15 00 02 78 0f
15 00 02 79 0f
15 00 02 7a 13
15 00 02 7b 13
15 00 02 7c 0e
15 00 02 7d 0e
15 00 02 7e 12
15 00 02 7f 12
15 00 02 80 0d
15 00 02 81 0d
15 00 02 82 11
15 00 02 83 11
15 00 02 84 0c
15 00 02 85 0c
15 00 02 86 10
15 00 02 87 10
15 00 02 88 17
15 00 02 89 01
15 00 02 8a 06
39 00 04 ff 98 81 04
15 00 02 6e 2a
15 00 02 6f 37
15 00 02 3a a4
15 00 02 8d 25
15 00 02 87 ba
15 00 02 b2 d1
15 00 02 88 0b
15 00 02 38 01
15 00 02 39 00
15 00 02 b5 07
15 00 02 31 75
15 00 02 3b 98
/* 15 00 02 2f 01*/
39 00 04 ff 98 81 01
15 00 02 22 0a
15 00 02 31 0a
15 00 02 35 07
15 00 02 52 00
15 00 02 53 73
15 00 02 54 00
15 00 02 55 3D
15 00 02 50 00
15 00 02 51 CB
15 00 02 60 14
15 00 02 62 01
15 00 02 63 01
15 00 02 a0 00
15 00 02 a1 18
15 00 02 a2 28
15 00 02 a3 17
15 00 02 a4 1C
15 00 02 a5 30
15 00 02 a6 24
15 00 02 a7 24
15 00 02 a8 85
15 00 02 a9 1c
15 00 02 aa 26
15 00 02 ab 66
15 00 02 ac 19
15 00 02 ad 18
15 00 02 ae 4F
15 00 02 af 24
15 00 02 b0 2B
15 00 02 b1 4A
15 00 02 b2 59
15 00 02 b3 23
15 00 02 c0 00
15 00 02 c1 18
15 00 02 c2 28
15 00 02 c3 17
15 00 02 c4 1B
15 00 02 c5 2F
15 00 02 c6 22
15 00 02 c7 22
15 00 02 c8 87
15 00 02 c9 1C
15 00 02 ca 27
15 00 02 cb 66
15 00 02 cc 19
15 00 02 cd 1A
15 00 02 ce 4E
15 00 02 cf 24
15 00 02 d0 2A
15 00 02 d1 4c
15 00 02 d2 5A
15 00 02 d3 23
39 00 04 ff 98 81 00
05 c8 01 11
05 14 01 29
];
panel-exit-sequence = [
05 14 01 28
05 78 01 10
];
disp_timings1: display-timings {
native-mode = <&dsi1_timing0>;
dsi1_timing0: timing0 {
clock-frequency = <72000000>;
hactive = <800>;
vactive = <1280>;
hback-porch = <8>;
hfront-porch = <80>;
vback-porch = <12>;
vfront-porch = <20>;
hsync-len = <20>;
vsync-len = <4>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
panel_in_dsi1: endpoint {
remote-endpoint = <&dsi1_out_panel>;
};
};
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <1>;
dsi1_out_panel: endpoint {
remote-endpoint = <&panel_in_dsi1>;
};
};
};
};
/*
* video_phy1 needs to be enabled
* when dsi1 is enabled
*/
&dsi1 {
status = "okay";
};
&dsi1_in_vp0 {
status = "disabled";
};
&dsi1_in_vp1 {
status = "okay";
};
&dsi1_panel {
power-supply = <&vcc3v3_lcd1_n>;
};
&video_phy1 {
status = "okay";
};
在之后的测试中,HDMI可以正常显示,而MIPI只有背光被点亮,没有画面显示
随后我为了排除VP硬件的问题,将HDMI与VP1绑定,MIPI与VP0绑定,发现HDMI是正常的,而MIPI还是没有画面输出,因此可以确定是MIPI_DSI的问题。
之后我查看屏幕手册,给排线的reset、mipi_clk、mipi_data飞线,接示波器测试
正常的MIPI波形应该是下图这样的,蓝色为reset,黄色clk,绿色data
接有问题的屏幕测试波形为
发现有mipi波形输出,但是没有复位信号
通过查看原理图和pcb,测量开发板上reset处的电阻,可以测量到3.3V,示波器处的飞线在转接板上,用电压表测量为0V,随后测试通断发现断开的。随后测试各连接处的通断,最后发现reset处的电阻与MIPI排线卡座是断开的,电阻焊接有问题,重新焊接后,测试连通。重新上电测试,屏幕正常点亮。
在多次的硬件驱动调试过程中,发现硬件的工作调试并不复杂,简言之就是供电、时序和引脚的高低配置,在遇到硬件不正常工作的时候,结合手册很快可以排查到问题所在。