天嵌A40i核心板,天嵌科技出品的又一款工业级核心板,采用4核ARM Cortex-A7处理器设计,每核主频高达1.2GHz。
注:本文所调试屏的参数是适配天嵌10.1寸电容触摸屏的,其他的mipi屏需要参考MIPI原厂给的参数参考本文的调试方法修改。
1.相关说明和介绍
MIPI屏不管尺寸和分辨率只要是单通道MIPI的,理论上都可以在天嵌A40I核心板上调试点亮,天嵌A40I核心板硬件上只有一个通道MIPI接口,最大支持4lane;
2.天嵌A40I核心板MIPI接口硬件如下图所示:
MIPI_DSI_CKP:MIPI接口时钟信号正极
MIPI_DSI_CKN:MIPI接口时钟信号负极
MIPI_DSI_D0P:MIPI接口数据0 lane正极
MIPI_DSI_D0N:MIPI接口数据0 lane负极
MIPI_DSI_D1P:MIPI接口数据1 lane正极
MIPI_DSI_D1N:MIPI接口数据1 lane负极
MIPI_DSI_D2P:MIPI接口数据2 lane正极
MIPI_DSI_D2N:MIPI接口数据2 lane负极
MIPI_DSI_D3P:MIPI接口数据3 lane正极
MIPI_DSI_D3N:MIPI接口数据3 lane负极
市面上大部分MIPI屏的pin脚数量和定义都会不同,而天嵌A40I核心板带MIPI屏的开发底板MIPI屏FPC座子是统一30pin标准的,需要通过驱动板或转接板来硬件适配,如下图:
其中SYS_CRL_5V电源和VCC_3V3电源由硬件直接上电,无须驱动去控制,I2C接口,TP_INT,TP_RST用于触摸屏的,可以不用管,主要看DSI_RST复位脚,BL_EN背光使能脚,BL_PWM背光亮度调节脚以及MIPI接口相关脚(这些是标准的MIPI接口),每款屏支持的lane数不一样,有2lane或者3lane和4lane的,具体看屏规格书上面有写,根据实际情况填写A40I MIPI屏相关配置参数:
lichee/tools/pack/chips/sun8iw11p1/configs/a40-p1/sys_config.fex
主要修改的地方如上图红框内的部分,具体说明如下:
lcd_driver_name:调用驱动的文件名称,比如当前配置的是tft720x1280,调用的uboot驱动路径是:
brandy/u-boot-2014.07/drivers/video/sunxi/disp2/disp/lcd/tft720x1280.c
调用的kernel驱动路径是:
linux-3.10/drivers/video/sunxi/disp2/disp/lcd/tft720x1280.c
lcd_if:需要配置成4 (dsi即mipi接口),具体lcd_if说明: 0:hv(sync+de); 1:8080; 2:ttl; 3:lvds; 4:dsi; 5:edp; 6:extend dsi
lcd_x,lcd_y:mipi屏分辨率宽高,参考屏规格书填写
lcd_dclk_freq:mipi屏时钟频率,单位MHZ,参考屏规格填写
lcd_hbp,lcd_ht,lcd_hspw:mipi屏水平方向参数,参考屏规格书填写,lcd_ht = lcd_hbp+lcd_hfp+lcd_hspw+lcd_x,必须通过此公式计算出lcd_ht,否则会导致系统卡在uboot阶段起不来,之前调试遇到这种莫名其妙的起不来问题,就是因为lcd_ht不是按照公式计算出来的
lcd_vbp,lcd_vt,lcd_vspw:mipi屏垂直方向参数,参考屏规格书填写,lcd_vt = lcd_vbp+lcd_vfp+lcd_vspw+lcd_y,必须通过此公式计算出lcd_vt,否则会导致系统卡在uboot阶段起不来,之前调试遇到这种莫名其妙的起不来问题,就是因为lcd_vt不是按照公式计算出来的
lcd_dsi_if:默认设0即可
lcd_dsi_lane:mipi屏支持的lane数,根据屏规格书实际填写
lcd_dsi_format:mipi屏支持的显示数据格式,一般为RGB 24位传输,具体lcd_dsi_format说明:
0:LCD_DSI_FORMAT_RGB888,
1:LCD_DSI_FORMAT_RGB666,
2:LCD_DSI_FORMAT_RGB666P,
3:LCD_DSI_FORMAT_RGB565
具体需要询问mipi供应商提供,一般规格书上面不会说明,屏厂会给一个屏参和屏初始化寄存器参数txt文件
lcd_dsi_te:看mipi屏是否支持TE功能,如支持设1,不支持设0或者不配置该项
lcd_dsi_eotp:看mipi屏是否支持EOTP功能,如支持设1,不支持设0或者不配置该项
lcd_bl_en:mipi屏背光使能脚,根据原理图BL_EN所连GPIO口配置即可,默认开机需要置高,才能使能背光
lcd_gpio_0:mipi屏背光亮度调节脚,当前接到PB3_PWM1脚,因为直连到mipi屏上,默认设置
port:PB3<1><1>
backlight_mipi {
compatible = "pwm-backlight";
brightness-levels = <25 50 75 100 125 150 175 200 225 250>;
polarity = <1>; //0-not invert, 1-invert
dft_brightness = <0x9>;//0~9范围值,9为最亮,0为最暗
pwm-id= <1>; //pwm组别
period_ns=<10000>;
status = "ok";
};
lichee/tools/pack/chips/sun8iw11p1/configs/a40-p1/sys_config.fex里面有设置pwm1功能需要关闭,如下
;----------------------------------------------------------------------------------
;pwm config
;----------------------------------------------------------------------------------
[pwm1]
pwm_used = 0
pwm_positive = port:PB3<3><0>
[pwm1_suspend]
pwm_positive = port:PB3<7><0>
lcd_reset:mipi屏复位脚,根据原理图上DSI_RST所接gpio口配置,默认置高,复位信号是先拉高延时100ms,再拉低延时100ms,最后再拉高延时100ms就可以初始化mipi屏寄存器参数,一般mipi都需要复位才能正常初始化屏;
驱动通过mipi接口下发mipi屏寄存器初始化参数,由于全志平台没有将这些初始化参数通过dtsi设备树文件解析传给驱动,所以无法在dtsi设备树文件里面配置mipi屏寄存器初始化参数,只能在对应mipi屏驱动里面改,当前配置的是tft720x1280,所以我们需要修改
brandy/u-boot-2014.07/drivers/video/sunxi/disp2/disp/lcd/tft720x1280.c驱动,而kernel下的驱动
linux-3.10/drivers/video/sunxi/disp2/disp/lcd/tft720x1280.c
跟uboot下驱动完全一样,只是打印信息函数不一样,uboot阶段驱动需要用printf来打印,而kernel阶段驱动用printk来打印,要注意下,否则会出现编译出错的情况,屏厂给的mipi屏寄存器初始化参数文件大致一样,具体我们以视维达5寸mipi屏
TSCE_Project__ILI9881C_HSD5.0_720x1280_3Lanes_2018-01-24.txt初始化寄存器参数文件为例说明:
里面一般是测试架嵌入式驱动点亮mipi屏的代码,有上电时序,mipi屏初始化寄存器参数列表,进入休眠模式命令,下电时序;
主要说明屏初始化寄存器参数列表怎么看:
LCM_Write(Gen,0,4,0xFF,0x98,0x81,0x03); //接口是通过mipi接口写4个参数到mipi屏,其中0xFF是mipi屏寄存器地址,0x98,0x81,0x03为数据;
LCM_Write(Gen,0,2,0x01,0x00); //接口是通过mipi接口写2个参数到mipi屏,其中0x01是mipi屏寄存器地址,0x00为数据,以此类推,将所有寄存器初始化参数全部一一对应写到mipi屏;
天嵌A40I核心板mipi屏驱动里面也要添加复位脚控制和下发mipi屏初始化寄存器参数,以tft720x1280.c mipi屏驱动为例说明:
第1个红框内是mipi下发接口,根据实际写数据参数不同选用;
第2个红框内是获取解析到sys_config.fex的lcd0配置下的lcd_reset脚,然后做相应复位操作,具体看屏厂给的文件如何复位mipi屏;
第3个红框内就是下发所有mipi屏寄存器初始化参数,比如dsi_dcs_wr_3para(sel,0xFF,0x98,0x81,0x03); 就是根据屏厂给的mipi屏初始化寄存器参数文件里的
LCM_Write(Gen,0,4,0xFF,0x98,0x81,0x03);来设的;后面所有参数都需要一一对应到tft720x1280.c驱动的tft7201280_init函数里面,否则漏掉一个都会导致mipi屏点不亮。