linux之调试mipi液晶屏

本文详细介绍了如何在px30 Linux平台上设计并配置一块支持ILI9881D 720x1280分辨率的5.0寸液晶屏,包括DSI接口设置、驱动初始化代码编写和时序参数调整,以及DTSI文件的编写和整合过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计了一块嵌入式电路板,运行linux系统,主控CPU为px30,需要适配一块显示驱动IC为ILI9881D的5.0寸液晶屏,分辨率为720*1280。

液晶驱动电路如下:

MIPI通道为4lane,pwm调光驱动为负极性(占空比最小亮度最高)。

液晶屏厂家提供了一份初始化代码文件和一份时序参数文件;

参照Rockchip官方参考文档:Rockchip_DRM_Panel_Porting_Guide_V1.3_20171209.pdf-Linux文档类资源-CSDN下载

第二章MIPI-DSI部分,在px30_linux->kernel->arch->arm64->boot->dts文件夹下新建一个lcd-mipi720x1280-KLD50225HHMB.dtsi文件,加入如下代码:

&dsi_in_vopl {
	status = "disabled";
};

&dsi_in_vopb {
	status = "okay";
};

&route_dsi {
	status = "okay";

};

&mipi_dphy {
        status = "okay";
};

根据厂家提供的初始化代码编辑panel-init-sequence = [],初始化代码如下:

initinal:
{
Generic_Long_Writ_3P(0xFF,0x98,0x81,0x03);

Generic_Short_Write_1P(0x01,0x00);
Generic_Short_Write_1P(0x02,0x00);

Generic_Short_Write_1P(0x03,0x73);

Generic_Short_Write_1P(0x04,0x00);
Generic_Short_Write_1P(0x05,0x00);
Generic_Short_Write_1P(0x06,0x0A);
Generic_Short_Write_1P(0x07,0x00);
Generic_Short_Write_1P(0x08,0x00);
Generic_Short_Write_1P(0x09,0x01);
Generic_Short_Write_1P(0x0a,0x00);
Generic_Short_Write_1P(0x0b,0x00);
Generic_Short_Write_1P(0x0c,0x01);
Generic_Short_Write_1P(0x0d,0x00);
Generic_Short_Write_1P(0x0e,0x00);
Generic_Short_Write_1P(0x0f,0x1D);
Generic_Short_Write_1P(0x10,0x1D);
Generic_Short_Write_1P(0x11,0x00);
Generic_Short_Write_1P(0x12,0x00);
Generic_Short_Write_1P(0x13,0x00);
Generic_Short_Write_1P(0x14,0x00);
Generic_Short_Write_1P(0x15,0x00);
Generic_Short_Write_1P(0x16,0x00);
Generic_Short_Write_1P(0x17,0x00);
Generic_Short_Write_1P(0x18,0x00);
Generic_Short_Write_1P(0x19,0x00);
Generic_Short_Write_1P(0x1a,0x00);
Generic_Short_Write_1P(0x1b,0x00);
Generic_Short_Write_1P(0x1c,0x00);
Generic_Short_Write_1P(0x1d,0x00);
Generic_Short_Write_1P(0x1e,0x40);
Generic_Short_Write_1P(0x1f,0x80);


Generic_Short_Write_1P(0x20,0x06);
Generic_Short_Write_1P(0x21,0x02);
Generic_Short_Write_1P(0x22,0x00);
Generic_Short_Write_1P(0x23,0x00);
Generic_Short_Write_1P(0x24,0x00);
Generic_Short_Write_1P(0x25,0x00);
Generic_Short_Write_1P(0x26,0x00);
Generic_Short_Write_1P(0x27,0x00);
Generic_Short_Write_1P(0x28,0x33);
Generic_Short_Write_1P(0x29,0x03);
Generic_Short_Write_1P(0x2a,0x00);

Generic_Short_Write_1P(0x2b,0x00);
Generic_Short_Write_1P(0x2c,0x00);
Generic_Short_Write_1P(0x2d,0x00);
Generic_Short_Write_1P(0x2e,0x00);
Generic_Short_Write_1P(0x2f,0x00);
Generic_Short_Write_1P(0x30,0x00);
Generic_Short_Write_1P(0x31,0x00);
Generic_Short_Write_1P(0x32,0x00);
Generic_Short_Write_1P(0x33,0x00);
Generic_Short_Write_1P(0x34,0x04);
Generic_Short_Write_1P(0x35,0x00);
Generic_Short_Write_1P(0x36,0x00);
Generic_Short_Write_1P(0x37,0x00);
Generic_Short_Write_1P(0x38,0x3C);
Generic_Short_Write_1P(0x39,0x35);
Generic_Short_Write_1P(0x3a,0x01);
Generic_Short_Write_1P(0x3b,0x40);
Generic_Short_Write_1P(0x3c,0x00);
Generic_Short_Write_1P(0x3d,0x01);
Generic_Short_Write_1P(0x3e,0x00);
Generic_Short_Write_1P(0x3f,0x00);
Generic_Short_Write_1P(0x40,0x00);
Generic_Short_Write_1P(0x41,0x88);
Generic_Short_Write_1P(0x42,0x00);
Generic_Short_Write_1P(0x43,0x00);
Generic_Short_Write_1P(0x44,0x1F);
Generic_Short_Write_1P(0x50,0x01);
Generic_Short_Write_1P(0x51,0x23);
Generic_Short_Write_1P(0x52,0x45);
Generic_Short_Write_1P(0x53,0x67);
Generic_Short_Write_1P(0x54,0x89);
Generic_Short_Write_1P(0x55,0xab);
Generic_Short_Write_1P(0x56,0x01);
Generic_Short_Write_1P(0x57,0x23);
Generic_Short_Write_1P(0x58,0x45);
Generic_Short_Write_1P(0x59,0x67);
Generic_Short_Write_1P(0x5a,0x89);
Generic_Short_Write_1P(0x5b,0xab);
Generic_Short_Write_1P(0x5c,0xcd);
Generic_Short_Write_1P(0x5d,0xef);
Generic_Short_Write_1P(0x5e,0x11);
Generic_Short_Write_1P(0x5f,0x01);
Generic_Short_Write_1P(0x60,0x00);
Generic_Short_Write_1P(0x61,0x15);
Generic_Short_Write_1P(0x62,0x14);
Generic_Short_Write_1P(0x63,0x0E);
Generic_Short_Write_1P(0x64,0x0F);
Generic_Short_Write_1P(0x65,0x0C);
Generic_Short_Write_1P(0x66,0x0D);
Generic_Short_Write_1P(0x67,0x06);
Generic_Short_Write_1P(0x68,0x02);
Generic_Short_Write_1P(0x69,0x07);
Generic_Short_Write_1P(0x6a,0x02);
Generic_Short_Write_1P(0x6b,0x02);
Generic_Short_Write_1P(0x6c,0x02);
Generic_Short_Write_1P(0x6d,0x02);
Generic_Short_Write_1P(0x6e,0x02);
Generic_Short_Write_1P(0x6f,0x02);

Generic_Short_Write_1P(0x70,0x02);
Generic_Short_Write_1P(0x71,0x02);
Generic_Short_Write_1P(0x72,0x02);
Generic_Short_Write_1P(0x73,0x02);
Generic_Short_Write_1P(0x74,0x02);
Generic_Short_Write_1P(0x75,0x01);
Generic_Short_Write_1P(0x76,0x00);
Generic_Short_Write_1P(0x77,0x14);
Generic_Short_Write_1P(0x78,0x15);
Generic_Short_Write_1P(0x79,0x0E);
Generic_Short_Write_1P(0x7a,0x0F);
Generic_Short_Write_1P(0x7b,0x0C);
Generic_Short_Write_1P(0x7c,0x0D);
Generic_Short_Write_1P(0x7d,0x06);
Generic_Short_Write_1P(0x7e,0x02);
Generic_Short_Write_1P(0x7f,0x07);

Generic_Short_Write_1P(0x80,0x02);
Generic_Short_Write_1P(0x81,0x02);
Generic_Short_Write_1P(0x82,0x02);
Generic_Short_Write_1P(0x83,0x02);
Generic_Short_Write_1P(0x84,0x02);
Generic_Short_Write_1P(0x85,0x02);
Generic_Short_Write_1P(0x86,0x02);
Generic_Short_Write_1P(0x87,0x02);
Generic_Short_Write_1P(0x88,0x02);
Generic_Short_Write_1P(0x89,0x02);
Generic_Short_Write_1P(0x8A,0x02);


Generic_Long_Write_3P(0xFF,0x98,0x81,0x04);
//Generic_Short_Write_1P(0x00,0x80);


Generic_Short_Write_1P(0x70,0x00);
Generic_Short_Write_1P(0x71,0x00);
Generic_Short_Write_1P(0x82,0x0F);

Generic_Short_Write_1P(0x84,0x0F);

Generic_Short_Write_1P(0x85,0x0D);
Generic_Short_Write_1P(0x32,0xAC);

Generic_Short_Write_1P(0x8C,0x80);

Generic_Short_Write_1P(0x3C,0xF5);
Generic_Short_Write_1P(0xB5,0x07);

Generic_Short_Write_1P(0x31,0x45);
Generic_Short_Write_1P(0x3A,0x24);
Generic_Short_Write_1P(0x88,0x33);













Generic_Long_Write_3P(0xFF,0x98,0x81,0x01);
Generic_Short_Write_1P(0x22,0x0A);
Generic_Short_Write_1P(0x31,0x00);
Generic_Short_Write_1P(0x53,0x93);  //  8A VCOM1
Generic_Short_Write_1P(0x55,0xA2);   //  A2  VCOM2
Generic_Short_Write_1P(0x50,0x81);
Generic_Short_Write_1P(0x51,0x85);

Generic_Short_Write_1P(0x62,0x0D);



Generic_Long_Write_3P(0xFF,0x98,0x81,0x01);

Generic_Short_Write_1P(0xA0,0x00);
Generic_Short_Write_1P(0xA1,0x1A);
Generic_Short_Write_1P(0xA2,0x28);
Generic_Short_Write_1P(0xA3,0x13);
Generic_Short_Write_1P(0xA4,0x16);
Generic_Short_Write_1P(0xA5,0x29);
Generic_Short_Write_1P(0xA6,0x1D);
Generic_Short_Write_1P(0xA7,0x1E);
Generic_Short_Write_1P(0xA8,0x84);
Generic_Short_Write_1P(0xA9,0x1C);
Generic_Short_Write_1P(0xAA,0x28);
Generic_Short_Write_1P(0xAB,0x75);
Generic_Short_Write_1P(0xAC,0x1A);
Generic_Short_Write_1P(0xAD,0x19);
Generic_Short_Write_1P(0xAE,0x4D);
Generic_Short_Write_1P(0xAF,0x22);
Generic_Short_Write_1P(0xB0,0x28);
Generic_Short_Write_1P(0xB1,0x54);
Generic_Short_Write_1P(0xB2,0x66);
Generic_Short_Write_1P(0xB3,0x39);
Generic_Short_Write_1P(0xC0,0x00);
Generic_Short_Write_1P(0xC1,0x1A);
Generic_Short_Write_1P(0xC2,0x28);
Generic_Short_Write_1P(0xC3,0x13);
Generic_Short_Write_1P(0xC4,0x16);
Generic_Short_Write_1P(0xC5,0x29);
Generic_Short_Write_1P(0xC6,0x1D);
Generic_Short_Write_1P(0xC7,0x1E);
Generic_Short_Write_1P(0xC8,0x84);
Generic_Short_Write_1P(0xC9,0x1C);
Generic_Short_Write_1P(0xCA,0x28);
Generic_Short_Write_1P(0xCB,0x75);
Generic_Short_Write_1P(0xCC,0x1A);
Generic_Short_Write_1P(0xCD,0x19);
Generic_Short_Write_1P(0xCE,0x4D);
Generic_Short_Write_1P(0xCF,0x22);
Generic_Short_Write_1P(0xD0,0x28);
Generic_Short_Write_1P(0xD1,0x54);
Generic_Short_Write_1P(0xD2,0x66);
Generic_Short_Write_1P(0xD3,0x39);

Generic_Long_Write_3P(0xFF,0x98,0x81,0x00);
Generic_Short_Write_1P(0x35,0x00);
//Generic_Short_Write_1P(0x36,0x03);
// Generic_Long_Write_3P(0xFF,0x98,0x81,0x04);  //BIST
//Generic_Short_Write_1P(0x2F,0x01);
               
DCS_Short_Write_NP(0x11);                                        
Delay(120);                                                      
DCS_Short_Write_NP(0x29);                                        
}     





9881d_enter_sleep_code()

{

Generic_Long_Write_3P(0xFF,0x98,0x81,0x00);  //page 0
DCS_Short_Write_NP(0x28);    //display off
delay 10ms  
DCS_Short_Write_NP(0x10);      //sleep in
        
delay 120ms

}

9881d_exit_sleep_code()
{
Generic_Long_Write_3P(0xFF,0x98,0x81,0x00);  //page 0
DCS_Short_Write_NP(0x11);       // sleep out
delay 120ms  
DCS_Short_Write_NP(0x29);       //display on
delay 10ms    
}
                               

根据厂家提供的时序文件编辑display-timings {},时序参数如下:

一些延时相关参数厂家没有提供,如reset、init等,这个可根据官方文档的建议设置,如果不成功再做些调整。

编辑完成的dtsi文件:

/*
 * Copyright (C) 2018 9tripod, Inc.
 * arch/arm/boot/dts/lcd-mipi720x1280-KLD50225HHMB.dtsi
 * lcd model: KLD50225HHMB
 * resolution: 720x1280
 * mipi channel: single 
 */

&dsi {
	status = "okay";
	rockchip,line-rate = <550>;

	panel@0 {
		compatible = "sitronix,ILI9881D", "simple-panel-dsi";
		reg = <0>;
		power-supply = <&vcc3v3_lcd>;
		backlight = <&backlight>;
		//backlight = <&pwm_bl>;
		reset-gpios = <&gpio3 5 GPIO_ACTIVE_LOW>;
		prepare-delay-ms = <100>;
		reset-delay-ms = <220>;
		init-delay-ms = <120>;
		enable-delay-ms = <120>;
		disable-delay-ms = <100>;
		unprepare-delay-ms = <120>;

		width-mm = <62>;
		height-mm = <110>;

		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 73
		15 00 02 04 00
		15 00 02 05 00
		15 00 02 06 0A
		15 00 02 07 00
		15 00 02 08 00
		15 00 02 09 01
		15 00 02 0A 00
		15 00 02 0B 00
		15 00 02 0C 01
		15 00 02 0D 00
		15 00 02 0E 00
		15 00 02 0F 1D
		15 00 02 10 1D
		15 00 02 11 00
		15 00 02 12 00
		15 00 02 13 00
		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 80
		15 00 02 20 06
		15 00 02 21 02
		15 00 02 22 00
		15 00 02 23 00
		15 00 02 24 00
		15 00 02 25 00
		15 00 02 26 00
		15 00 02 27 00
		15 00 02 28 33
		15 00 02 29 03
		15 00 02 2A 00
		15 00 02 2B 00
		15 00 02 2C 00
		15 00 02 2D 00
		15 00 02 2E 00
		15 00 02 2F 00
		15 00 02 30 00
		15 00 02 31 00
		15 00 02 32 00
		15 00 02 33 00
		15 00 02 34 04
		15 00 02 35 00
		15 00 02 36 00
		15 00 02 37 00
		15 00 02 38 3C
		15 00 02 39 35
		15 00 02 3A 01
		15 00 02 3B 40
		15 00 02 3C 00
		15 00 02 3D 01
		15 00 02 3E 00
		15 00 02 3F 00
		15 00 02 40 00
		15 00 02 41 88
		15 00 02 42 00
		15 00 02 43 00
		15 00 02 44 1F
		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 11
		15 00 02 5F 01
		15 00 02 60 00
		15 00 02 61 15
		15 00 02 62 14
		15 00 02 63 0E
		15 00 02 64 0F
		15 00 02 65 0C
		15 00 02 66 0D
		15 00 02 67 06
		15 00 02 68 02
		15 00 02 69 07
		15 00 02 6A 02
		15 00 02 6B 02
		15 00 02 6C 02
		15 00 02 6D 02
		15 00 02 6E 02
		15 00 02 6F 02
		15 00 02 70 02
		15 00 02 71 02
		15 00 02 72 02
		15 00 02 73 02
		15 00 02 74 02
		15 00 02 75 01
		15 00 02 76 00
		15 00 02 77 14
		15 00 02 78 15
		15 00 02 79 0E
		15 00 02 7A 0F
		15 00 02 7B 0C
		15 00 02 7C 0D
		15 00 02 7D 06
		15 00 02 7E 02
		15 00 02 7F 07
		15 00 02 80 02
		15 00 02 81 02
		15 00 02 82 02
		15 00 02 83 02
		15 00 02 84 02
		15 00 02 85 02
		15 00 02 86 02
		15 00 02 87 02
		15 00 02 88 02
		15 00 02 89 02
		15 00 02 8A 02
		39 00 04 FF 98 81 04
		15 00 02 70 00
		15 00 02 71 00
		15 00 02 82 0F
		15 00 02 84 0F
		15 00 02 85 0D
		15 00 02 32 AC
		15 00 02 8C 80
		15 00 02 3C F5
		15 00 02 B5 07
		15 00 02 31 45
		15 00 02 3A 24
		15 00 02 88 33
		39 00 04 FF 98 81 01
		15 00 02 22 0A
		15 00 02 31 00
		15 00 02 53 93
		15 00 02 55 A2
		15 00 02 50 81
		15 00 02 51 85
		15 00 02 62 0D
		39 00 04 FF 98 81 01
		15 00 02 A0 00
		15 00 02 A1 1A
		15 00 02 A2 28
		15 00 02 A3 13
		15 00 02 A4 16
		15 00 02 A5 29
		15 00 02 A6 1D
		15 00 02 A7 1E
		15 00 02 A8 84
		15 00 02 A9 1C
		15 00 02 AA 28
		15 00 02 AB 75
		15 00 02 AC 1A
		15 00 02 AD 19
		15 00 02 AE 4D
		15 00 02 AF 22
		15 00 02 B0 28
		15 00 02 B1 54
		15 00 02 B2 66
		15 00 02 B3 39
		15 00 02 C0 00
		15 00 02 C1 1A
		15 00 02 C2 28
		15 00 02 C3 13
		15 00 02 C4 16
		15 00 02 C5 29
		15 00 02 C6 1D
		15 00 02 C7 1E
		15 00 02 C8 84
		15 00 02 C9 1C
		15 00 02 CA 28
		15 00 02 CB 75
		15 00 02 CC 1A
		15 00 02 CD 19
		15 00 02 CE 4D
		15 00 02 CF 22
		15 00 02 D0 28
		15 00 02 D1 54
		15 00 02 D2 66
		15 00 02 D3 39
		39 00 04 FF 98 81 00
		15 00 02 35 00
/*		39 00 04 FF 98 81 04	*/
/*		15 00 02 2F 01		*/
		05 78 01 11
		05 00 01 29
		];

		panel-exit-sequence = [
		
		];

		display-timings {
			native-mode = <&timing0>;

			timing0: timing0 {
				clock-frequency = <65000000>;
				hactive = <720>;
				vactive = <1280>;
				hfront-porch = <50>;
				hsync-len = <8>;
				hback-porch = <50>;
				vfront-porch = <30>;
				vsync-len = <8>;
				vback-porch = <30>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <0>;
				pixelclk-active = <0>;
				swap-rb = <0>;
				swap-rg = <0>;
				swap-gb = <0>;
			};
		};
	};
};

&dsi_in_vopl {
	status = "disabled";
};

&dsi_in_vopb {
	status = "okay";
};

&route_dsi {
	status = "okay";

};

&mipi_dphy {
        status = "okay";
};

将lcd-mipi720x1280-KLD50225HHMB.dtsi加入x30.dts文件中:

#include "lcd-mipi720x1280-KLD50225HHMB.dtsi"	//5 inch mipi 720*1280

还需在x30.dts文件中加入backlight设置:

	backlight: backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm1 0 25000 1>;
		enable-gpios = <&gpio3 6 GPIO_ACTIVE_HIGH>;
		//pinctrl-names = "default";
		//pinctrl-0 = <&bl_en>;
		brightness-levels = <
			  0   1   2   3   4   5   6   7
			  8   9  10  11  12  13  14  15
			 16  17  18  19  20  21  22  23
			 24  25  26  27  28  29  30  31
			 32  33  34  35  36  37  38  39
			 40  41  42  43  44  45  46  47
			 48  49  50  51  52  53  54  55
			 56  57  58  59  60  61  62  63
			 64  65  66  67  68  69  70  71
			 72  73  74  75  76  77  78  79
			 80  81  82  83  84  85  86  87
			 88  89  90  91  92  93  94  95
			 96  97  98  99 100 101 102 103
			104 105 106 107 108 109 110 111
			112 113 114 115 116 117 118 119
			120 121 122 123 124 125 126 127
			128 129 130 131 132 133 134 135
			136 137 138 139 140 141 142 143
			144 145 146 147 148 149 150 151
			152 153 154 155 156 157 158 159
			160 161 162 163 164 165 166 167
			168 169 170 171 172 173 174 175
			176 177 178 179 180 181 182 183
			184 185 186 187 188 189 190 191
			192 193 194 195 196 197 198 199
			200 201 202 203 204 205 206 207
			208 209 210 211 212 213 214 215
			216 217 218 219 220 221 222 223
			224 225 226 227 228 229 230 231
			232 233 234 235 236 237 238 239
			240 241 242 243 244 245 246 247
			248 249 250 251 252 253 254 255>;
		default-brightness-level = <200>;
	};

pwms 的第4个参数为1表示背光为负极性。

点亮之后的效果如下:

rockchip linux 5.0寸mipi液晶调试完成后的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火柴棍mcu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值