目录
一、基本概念
二、添加新屏流程
三、调试FAQ
1.MIPI
MIPI(Mobile Industry Processor Interface,移动工业处理器接口)是2003年由ARM、Nokia、ST 等公司成立联盟并为移动应用处理器制定的一个开放标准, 旨在将各个模块标准化以降低设计的复杂度和兼容性。
2.DBI
DBI(Display Bus Interface,显示总线接口),也称MCU接口或者80/8080接口;
DBI接口最大的特点就是LCM自带framebuffer,存储Host端发过来的数据,并由内部的控制IC不断重复的刷到LCD上,也就是说其内部实现了自刷新,Host只要发送一次数据即可,这帧数据会一直显示在屏幕上;
由于不需要Host端自刷新,对Host处理器的要求很低,没有时钟线,Host和LCM可以是简单的GPIO相连,这也是叫MCU接口的原因,典型的可以和51单片机相连,只要满足时序要求即可;
DBI接口根据数据传输又分为串行和并行两种。
3.DPI
DPI(Display Pixel Interface,显示像素接口),也称RGB接口,之所以叫像素接口,是因为数据采用并口在一个时钟周期就传输一个像素的数据,所以时钟一般设置像素时钟而不是bit时钟;
与DBI不同的是,LCM端没有framebuffer,转移到Host端,所以为了维持画面能够持续显示在屏幕上,Host要持续发送数据过去,并且为保证数据的同步,引入VSYNC/HSYNC等功能。
4.DSI
DSI(Display Serial Interface,显示串行接口),兼容DPI(显示像素接口,Display Pixel Interface)、DBI(显示总线接口,Display Bus Interface)和DCS(显示命令集,Display Command Set),以串行的方式发送像素信息或指令给外设;
DSI接口以差分对形式进行时钟和数据的传输。一般有1对时钟差分线,再加1-4对数据差分线;
有两种sync 模式:video mode和command mode,其中video mode是BB端一直刷数据到LCM,cmd mode是在有数 据更新时刷数据到LCM GRAM中)和DSI command mode相比,video mode 是需要实时传输image data到lcm端;
DSI的refresh rate决定了lcm的refresh rate;
DSI具备高速模式和低速模式两种工作模式,全部数据通道都可以用于单向的高速传输,但只有第一个数据通道才可用于低速双向传输。
参考平台:MT6762平台androidQ
1.添加驱动代码
两个路径:
lk:alps/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/
kernel:kernel-4.9/drivers/misc/mediatek/lcm/
2.引用新屏驱动
修改以下三个文件:
lk:alps/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/mt65xx_lcm_list.c
kernel:alps/kernel-4.9/drivers/misc/mediatek/lcm/mt65xx_lcm_list.c
kernel:alps/kernel-4.9/drivers/misc/mediatek/lcm/mt65xx_lcm_list.h
类似如下修改:
+extern LCM_DRIVER ST7797_320x385_dsi_vdo_lcm_drv;
+#if defined(ST7797_320X385_DSI_VDO)
+ &ST7797_320x385_dsi_vdo_lcm_drv,
+#endif
3.在项目中配置新屏
1)修改alps/vendor/mediatek/proprietary/bootable/bootloader/lk/project/k62v1_64_bsp.mk
CUSTOM_LK_LCM="ST7797_320x385_dsi_vdo"
2)修改alps/kernel-4.9/arch/arm64/configs/k62v1_64_bsp_debug_defconfig
CONFIG_CUSTOM_KERNEL_LCM="ST7797_320x385_dsi_vdo"
CONFIG_LCM_HEIGHT="400"
CONFIG_LCM_WIDTH="400"
3.修改alps/device/mediateksample/k62v1_64_bsp/ProjectConfig.mk
LCM_HEIGHT = 400
LCM_WIDTH = 400
4.修改dws,配置lcm的相关引脚的gpio模式和状态,如下三个路径的dws文件都需要修改
pl:alps/vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/k62v1_64_bsp/dct/dct/codegen.dws
lk:alps/vendor/mediatek/proprietary/bootable/bootloader/lk/target/k62v1_64_bsp/dct/dct/codegen.dws
kernel:alps/kernel-4.9/drivers/misc/mediatek/dws/mt6765/k62v1_64_bsp.dws
5.修改kernel-4.9/arch/arm64/boot/dts/mediatek/k62v1_64_bsp.dts
//根据lcm使用的背光控制方式修改对应的模式
led6:led@6 {
compatible = "mediatek,lcd-backlight";
led_mode = <5>;
data = <1>;
pwm_config = <0 0 0 0 0>;
};
1.调整Display消耗的BW(bandwidth带宽)方法
MIPI的clock 尽量低,建议60fps;
对于DSI Video mode,建议不要使用burst mode(比较能吃BW);
Video mode的时序,blank 区间(如VBP/VFP/HBP/HFP)尽量少,当然也需要满足LCM的spec。
2.lcm尺寸参数计算
1)已知屏幕尺寸和长宽比,求长宽
x^2 + (a * x)^2 = (physical * 25.4)^2,其中x为屏幕的宽度,a为屏幕的长宽比(例如16/9),physical为屏幕的物理尺寸(例如6英寸,5.5英寸),目前已经算过的尺寸如下:
6.0英寸的为(单位:mm)
params->physical_width = 75;
params->physical_height = 133;
5.0英寸的为
params->physical_width = 63;
params->physical_height = 110;
2)已知实际宽高(单位:um)
#define LCM_PHYSICAL_WIDTH (63940)
#define LCM_PHYSICAL_HEIGHT (136560)
params->physical_width = LCM_PHYSICAL_WIDTH/1000;
params->physical_height = LCM_PHYSICAL_HEIGHT/1000;
params->physical_width_um = LCM_PHYSICAL_WIDTH;
params->physical_height_um = LCM_PHYSICAL_HEIGHT;
3.降低屏幕背光亮度
修改alps/frameworks/base/core/res/res/values/config.xml
10
255
102
4.clock配置方法
lcm driver中配置clock有不同的方式,曾经使用过的配置方法有如下几种:
类型1:配置倍频与分频参数:dsi.pll_div1(倍频), dsi.pll_div2(分频)--- (适用于75/77等之前的平台)
类型2:配置倍频与分频参数:dsi.pll_fbk_div(倍频), dsi.pll_div1 & dsi.pll_div2 (分频)---(适用于89/72等前期版本)
类型3:直接配置clock lane频率:dsi.PLL_CLOCK(前期配置成枚举值,后期将直接配置成对应的频率常数值)----(适用于89/72/82...)
FPS计算方法:
BRPL(Bit Rate Per Lane) = FL(Frame length) * FPS/ LN (Lane Number)
类型1:BRPL = fref(26M)*(div1+1) * / (2*div2_real)
类型2:BRPL = fref(26M) X (fbk_div+1)2/(div1_realdiv2_real)
--------- div1=0,1,23 div1_real=1,2,4,4
类型3:BRPL = PLL_CLOCK * 2
Video Mode:
Frame Length(FL) = (Hsync+HBP+Hadr+HFP) * (Vsync+VBP+Vadr+VFP) * BPP
Command Mode:
Frame Length(FL) = Width * height * Bpp * (1 + overhead)
其中Overhead = (Tlpx + Ths_prep + Ths_zero + Ths_trail +8) /(packet Size/LN) (一般经验值取0.2)
5.开机第一帧花屏
背光加一定的延时(比如200ms)就好了(只对开机第一帧有效)
6.屏倒置问题处理
jd9161屏倒置180度,改寄存器0xb4 (0x02,0x04,0x00);
格科(0x17,0x14);0xc0倒置180;
其他的大多为0x36(2和 c0)。
7.修改lcm初始化参数
//展频幅度4%
params->dsi.ssc_range = 4;
//关闭展频
params->dsi.ssc_disable = 0;
//修改刷屏速率
params->dsi.PLL_CLOCK = 200;