一,确认屏幕信息
屏幕调试首先要查看屏幕规格书,主要看里面的屏供电电压vdd,背光供电电压,timing参数
部分。
举个例子:
- 屏供电电压
可以看出供电电压为3.3V,过大则会烧屏; - 背光供电电压
屏幕背光电压为12V; - 屏timing参数
全志平台的timming跟其他平台有一些差异,具体公式如下:
lcd_dclk_freq的值,具体公式如下:
lcd_dclk_freq = lcd_ht * lcd_vt * fps(60)
对于一直点不亮的mipi屏,可以适当加大数值,不一定要按照公式算出的准确结果!lcd_hbp = hbp+hspw;
lcd_ht = hbp+hspw+hfp+ht;
lcd_hspw = hspw;
lcd_vbp = vbp+vspw;
lcd_vt = vbp+vspw+vfp+vt;
lcd_vspw = vspw;
二,设备树配置
- 设备树配置,主要配置disp,lcd0这两个节点:
代码路径:longan/device/config/chips/a133/configs/b6/board.dts
disp: disp@06000000 {disp_init_enable = <1>;disp_mode = <0>;screen0_output_type = <1>;screen0_output_mode = <4>;screen1_output_type = <1>;screen1_output_mode = <4>;screen1_output_format = <0>;screen1_output_bits = <0>;screen1_output_eotf = <4>;screen1_output_cs = <257>;screen1_output_dvi_hdmi = <2>;screen1_output_range = <2>;screen1_output_scan = <0>;screen1_output_aspect_ratio = <8>;dev0_output_type = <1>;dev0_output_mode = <4>;dev0_screen_id = <0>;dev0_do_hpd = <0>;dev1_output_type = <4>;dev1_output_mode = <10>;dev1_screen_id = <1>;dev1_do_hpd = <1>;def_output_dev = <0>;hdmi_mode_check = <1>;fb0_format = <0>;fb0_width = <720>;fb0_height = <1280>;fb1_format = <0>;fb1_width = <0>;fb1_height = <0>;chn_cfg_mode = <1>;disp_para_zone = <1>;/*VCC-LCD*/dc1sw-supply = <®_cldo4>;/*VCC-DSI*/cldo1-supply = <®_cldo1>;/*VCC-PD*/dcdc1-supply = <®_cldo3>;};
lcd0: lcd0@01c0c000 {lcd_used = <1>;lcd_driver_name = "K080_IM2HYL802R_800X1280"; //mipi驱动lcd_backlight = <50>;lcd_if = <4>;lcd_x = <720>;lcd_y = <1280>;lcd_width = <150>;lcd_height = <36>;lcd_dclk_freq = <58>;lcd_pwm_used = <1>;lcd_pwm_ch = <0>;lcd_pwm_freq = <50000>;lcd_pwm_pol = <1>;lcd_pwm_max_limit = <255>;lcd_hbp = <30>;lcd_ht = <770>;lcd_hspw = <6>;lcd_vbp = <16>;lcd_vt = <1311>;lcd_vspw = <4>;lcd_frm = <0>;lcd_gamma_en = <0>;lcd_bright_curve_en = <0>;lcd_cmap_en = <0>;deu_mode = <0>;lcdgamma4iep = <22>;smart_color = <90>;lcd_dsi_if = <0>;lcd_dsi_lane = <4>;lcd_dsi_format = <0>;lcd_dsi_te = <0>;lcd_dsi_eotp = <0>;lcd_pin_power = "dcdc1";lcd_power0 = "cldo1";//VCC-MIPI-LCD cldo1 1.8lcd_power1 = "dc1sw";//VCC-LCD cldo4 3.3lcd_gpio_1 = <&pio PD 22 1 0 3 1>;//LCD-RSTlcd_gpio_2 = <&pio PE 9 1 0 3 1>;//LCD0_PWREN_H PE9lcd_gpio_3 = <&r_pio PL 9 1 0 3 1>;//LCD0_PWREN_H_1V8pinctrl-0 = <&dsi4lane_pins_a>;pinctrl-1 = <&dsi4lane_pins_b>;lcd_bl_en = <&pio PH 18 1 1 0 3 1>;lcd_bl_0_percent = <15>;lcd_bl_100_percent = <100>;};
- uboot驱动配置
上面lcd节点中“lcd_driver_name = "K080_IM2HYL802R_800X1280";”
有引用驱动,mipi驱动部分平台已经是已经添加,我们只需要按照要求配置。如果uboot中没有添加驱动,那么连背光都不亮。驱动代码如下:
代码路径:longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/K080_IM2HYL802R_800X1280.c
替换填入初始化代码(一般由屏厂提供,按照格式替换进全志的数组中)
/*add panel initialization below*/static struct LCM_setting_table lcm_init_setting[] = {{0xB9, 3, {0xFF,0x83,0x94} },{0xBA, 6, {0x63,0x03,0x68,0x6B,0xB2,0xC0} },{0xB1, 10, {0x50,0x12,0x72,0x09,0x33,0x54,0x71,0x31,0x70,0x2F} },{0xB2, 6, {0x00,0x80,0x64,0x0E,0x0D,0x2F} },{0xB4, 21, {0x6C,0x6D,0x6C,0x6D,0x6C,0x6D,0x01,0x01,0xFF,0x75,0x00,0x3F,0x6C,0x6D,0x6C,0x6D,0x6C,0x6D,0x01,0x01,0xFF} },{0xB6, 2, {0x73,0x73} },{0xD3, 33, {0x00,0x00,0x07,0x07,0x40,0x07,0x10,0x00,0x08,0x10,0x08,0x00,0x08,0x54,0x15,0x0E,0x05,0x0E,0x02,0x15,0x06,0x05,0x06,0x47,0x44,0x0A,0x0A,0x4B,0x10,0x07,0x07,0x0E,0x40} },{0xD5, 44, {0x1A,0x1A,0x1B,0x1B,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x24,0x25,0x18,0x18,0x26,0x27,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x20,0x21,0x18,0x18,0x18,0x18} },{0xD6, 44, {0x1A,0x1A,0x1B,0x1B,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x21,0x20,0x18,0x18,0x27,0x26,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x25,0x24,0x18,0x18,0x18,0x18} },{0xE0, 58, {0x00,0x0C,0x19,0x20,0x23,0x26,0x29,0x28,0x51,0x61,0x70,0x6F,0x76,0x86,0x89,0x8D,0x99,0x9A,0x95,0xA1,0xB0,0x57,0x55,0x58,0x5C,0x5E,0x64,0x6B,0x7F,0x00,0x0C,0x18,0x20,0x23,0x26,0x29,0x28,0x51,0x61,0x70,0x6F,0x76,0x86,0x89,0x8D,0x99,0x9A,0x95,0xA1,0xB0,0x57,0x55,0x58,0x5C,0x5E,0x64,0x6B,0x7F} },{0xC0, 2, {0x1F,0x31} },{0xCC, 1, {0x0B} },{0xD4, 1, {0x02} },{0xBD, 1, {0x02} },{0xD8, 12, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF} },{0xBD, 1, {0x00} },{0xBD, 1, {0x01} },{0xB1, 1, {0x60} },{0xBD, 1, {0x00} },{0xBF, 7, {0x40,0x81,0x50,0x00,0x1A,0xFC,0x01} },//SLP OUT{0x11, 1, {0x00} }, // SLPOUT{REGFLAG_DELAY, REGFLAG_DELAY, {120} },//DISP ON{0x29, 1, {0x00} }, // DSPON{REGFLAG_DELAY, REGFLAG_DELAY, {5} },{REGFLAG_END_OF_TABLE, REGFLAG_END_OF_TABLE, {} }
};
LCD_panel_init函数用于初始化 LCD 面板,通过 DSI(Display Serial Interface)发送初始化命令序列。
static void LCD_panel_init(u32 sel)
{__u32 i;sunxi_lcd_dsi_clk_enable(sel);sunxi_lcd_delay_ms(20);sunxi_lcd_dsi_dcs_write_0para(sel, DSI_DCS_SOFT_RESET);sunxi_lcd_delay_ms(10);print_dsi_cmd(lcm_init_setting); //打印mipi屏初始化参数for (i = 0; ; i++) {if (lcm_init_setting[i].count == REGFLAG_END_OF_TABLE)break;else if (lcm_init_setting[i].count == REGFLAG_DELAY)sunxi_lcd_delay_ms(lcm_init_setting[i].para_list[0]);
#ifdef SUPPORT_DSIelsedsi_dcs_wr(sel, lcm_init_setting[i].cmd, lcm_init_setting[i].para_list, lcm_init_setting[i].count);
#endif//break;}return;
}
一般情况下,按照如上步骤适配,基本都可以正常点亮屏幕。