频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
【Android】【LCD】LCD开发常见问题&分析
2017-09-13 10:37:00      个评论    来源:sinat_34606064的博客  
收藏   我要投稿

LCD开发常见问题&分析

1.LCD driver的框架(以msm8909为栗子)

\

2.命名规则:

nt35521-720p-video

nt35521-wxga-video

nt35590-qvga-cmd

otm8018b-fwvga-video

ili9806e-fwvga-video_pixi445_tf

hx8379c-tdt-fwvga-video

……

LCD的IC型号 + 该driver下屏的分辨率 + MIPI接口 + 接口下的模式 + 屛厂供应商 + 项目名

以上参数的含义:

?分辨率会有:720p,fwvga,wvga,hd……

?分别指的是:720*1280和856*480,1024*600,1280*720

?供应商:truly,TFT,TDT,BYD……

?LCD的接口一般又分为:dsi,dbi,dpi

其中DSI MIPI接口,MIPI联盟推出的一种高速低耗接口。

\

3.CMD和VDO模式的区别:

Mipi两种应用模式:VDO(video mode)是视频模式,CMD是commond mode命令模式

与传统工作模式RGB接口相似,由于不使用专用的数据信号传输同步,控制信号和RGB数据都以mipi总线传输,主机需要定期刷新显示器,显示器就不需要帧缓冲器。

Dsi虽然不需要帧缓冲器,但主机定期以告诉模式发送dsi视频文报,消耗了大量的能量。

所以一般在选择driver的时候根据项目要求以下情况来选择:

IC型号——MIPI接口——SYNC模式——分辨率——平台——模组厂商

4.MIPI

对于MIPI下的接口,CMD对应MPU接口,而VDO接口是对应的RGB接口。在VDO模式下视频数据只能通过HS mode传输。

MIPI很多参数是需要根据LCD的datasheet来计算的,其中HFP,HBP,VFP,VBF都是以同步信号(HSYNC和VSYNC)为基准计算。在同步信号之前为Front,在之后为Back。需要注意的是,这里并不是以有效像素为基准。

关于DSI bit clock(MIPI)的计算,在dtsi中的参数描述为:qcom,mdss-dsi-panel-clockrate=<>,一般情况该值都不建议修改。因为SRC files文件会根据porch,resolution以及fps来计算。如果由于RF信号干扰或者其他情况需要更改的话,建议是从porch或者fps实现。

LCD的fps一般都上限为60,正常使用时候一般设置为58,因为由于LCD panel range存在刷新率温度漂移情况,所以在dtsi中关键panel-framerate都不建议修改。

 

5.Backlight

LCD的开机在整个开机的时候是使用的是LK的initial code,只有在开机后睡眠唤醒后才会去调用kernel的参数。正常情况背光分为32阶,并且最大亮度设置为255(dtsi),针对背光还需要验证的是在开机关机休眠唤醒的时候,initial code和背光亮起的时候要搭配协调。否者会造成闪屏白屏等现象。

其次,要注意LCD的背光芯片操作背光的方式,一般分为两种模式,一种是GPIO口直接操作的,一种是以PWM的MPP来操作的。对于GPIO操作的配置在mtp。dtsi中可以参考如下:

&pmx_mdss {

qcom,num-grp-pins = <2>;

qcom,pins = <&gp 25>, <&gp 17>;

 

};

&mdss_dsi0 {

qcom,dsi-pref-prim-pan = <&dsi_ili9806e_fwvga_video>;

//qcom,dsi-pref-prim-pan = <&dsi_ili9806e_fwvga_video_tdt>;

pinctrl-names = "mdss_default", "mdss_sleep";

pinctrl-0 = <&mdss_dsi_active &mdss_te_active>;

pinctrl-1 = <&mdss_dsi_suspend &mdss_te_suspend>;

 

// qcom,platform-bklight-en-gpio = <&msm_gpio 37 0>;

qcom,platform-reset-gpio = <&msm_gpio 25 0>;

qcom,platform-blk-ctrl-gpio = <&msm_gpio 17 0>;

//modify by ke.li@tcl.com for LCD is ili9806e ,and the RST&backlight Ctrl had changed [End]--- 2015.8.28

};

而PWM的方式主要配置如下:

mpp@a100 { /* MPP 2 */

/* Backlight PWM */

// qcom,mode = <1>; /* Digital output */

// qcom,invert = <0>; /* Disable invert */

// qcom,src-sel = <4>; /* DTEST1 */

// qcom,vin-sel = <0>; /* VPH_PWR */

// qcom,master-en = <1>; /* Enable MPP */

status = "disabled";

};

而以上具体采用哪一种配置方法的选择是在本身dtsi中如下配置:

qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_gpio";

//qcom,mdss-dsi-bl-pmic-pwm-frequency = <33>;

//qcom,mdss-dsi-bl-pmic-bank-select = <0>;

//qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;

描述硬件的参数是从dtsi中读取的,

6.CABL

说到背光的话,还有一个算法与之有关系,是CABL,在mtk也叫CABA。

平台端的CABL功能算法是用于LCD背光灯相关计算,在更新灰阶前,处理出现不连续不均匀等的状况。当然该算法也可以回导致LCD出现灰阶部分会有波纹以及短暂的不连续的条纹情况。该配置是在system.prop中可以配置。在MTK是需要在perjectconfig中配置MTK_AAL_SUPPORT=Y.

7.Initial code

LCD还有很大的一块是initial code,这块主要是依靠FAE,因为不同的ic有不同的要求,当然有些事通用的,在这块initial code中,我们需要注意的是在集成数据的时候,要保证参数take进入的正确性,否则会造成不亮,蓝屏,白屏等问题。在MTK平台下,initial code是在driver中配置的,在qcom平台下是在dtsi中配置的。

Initial code另外需要我们注意的是最后2个寄存器0x11和0x29。这是点亮屏幕最后的两个参数,正常情况下延迟会在150ms和50ms。其余寄存器写入值可以不需要延时。

在灭屏的时候,通常会去先写0x28再写0x10,延迟应该和亮屏的2911对应。这是通常说的2810的power off模式。

另外亮屏通常用的是lp mode,而灭屏用的是hig mode。

8.Porch

Proch是前后廊,用于描述切屏的数据,一般出现错误和误差的情况会有上、下部分出现亮稳横纹等情况。这是由于LCD显示的时候丢了几行数据造成的,根本原因是在LCD显示速度慢与主控写的熟读,而两者没有使用一个叫Tearing effect out line的机制。

关于porch的计算:

\

HFP:Horizontal Back Porch = left_margin

水平后沿:在每行或者每列像素数据开始输出时要插入的像素时钟周期。

HBP:Horizontal Front Porch = right_margin

水平前沿:在每行或每列的像素结束到LCD行时钟输出脉冲之间的像素时钟。

VBP:Vertical Back Porch = upper_margin

垂直后沿:在垂直同步周期之后帧开头时的无效行数。

VFP:Vertical Front Porch = lower_margin

垂直前沿:本帧数据输出结束到下一个垂直同步周期开始之前的无效行数。

Hsync:Hsync plus width = HPW

行(水平)同步脉宽(单位是时钟周期)

同理Vsync=VPW,垂直时钟周期。


点击复制链接 与好友分享!回本站首页
上一篇:Android网络数据解析之Gson
下一篇:Android 图片的缩放以及滑动
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站