LCD的结构
TFT-LCD屏幕构造组成原理
Android LCD(一):LCD基本原理篇
LCD: 奇景光电 (hx8399) 、敦泰 (ft8719) 、京东方 、联咏等IC厂商
由于TFT-LCD(TFT Thin Film Transistors 薄膜晶体管)具有体积小,重量轻,低辐射,低耗电量,全彩化等优点,因此在各类显示器材上得到了广泛的应用,一般TFT用WLED来做背光,OLED是自发光的,背光电路由屏上的驱动IC提供。

上偏光片 :        和下偏光片共同配合呈垂直角度
彩色滤光片:     红蓝绿三基色上色作用
液晶:             液晶分子受TFT控制,扭转角度影响光线透过率从而控制像素的亮度,影响灰阶(常用8位控制器)
                        256级灰度控制,RGB三原色就是256X256X256 = 1677216种色彩,国际主要10位控制器
TFT基板:         控制液晶扭转,电压变化控制扭转度数由主要有driver ic控制
下偏光板:      使背光传出光线方向一致传向
LCD背光板:     为屏显提供基本光源

LCD相关参数
LCD主流显示接口介绍
LCD开发常见问题&分析
LCD参数解释及刷新率计算
SM7250(高通5G)平台LCD bringup

Proch是值前后廊,用于描述切屏的数据,一般出现错误和误差的情况会有上、下部分出现亮稳横纹等情况,单位为像素时钟周期,一般datasheet中都有Min Type Max的要求或者标准。

HBP:Horizontal Back Porch = left_margin
水平后沿:在每行或者每列像素数据开始输出时要插入的像素时钟周期。
HFP:Horizontal Front Porch = right_margin
水平前沿:在每行或每列的像素结束到LCD行时钟输出脉冲之间的像素时钟。

VBP:Vertical Back Porch = upper_margin
垂直后沿:在垂直同步周期之后帧开头时的无效行数。
VFP:Vertical Front Porch = lower_margin
垂直前沿:本帧数据输出结束到下一个垂直同步周期开始之前的无效行数。

HSync:Hsync plus width = HPW
行(水平)同步脉宽(单位是时钟周期),VSync同理垂直同步脉宽

BPP = BPP_Format * 8 (bytes/pixel)
HTotal = HActive + HFP + HBP + HSync
VTotal = VActive  + VFP + VBP + VSync
MipiCLK = HTotal * VTotal * FPS * BPP / LaneNumber / 2
PixelCLK = MipiCLK / BPP * LaneNumber * 2 = HTotal * VTotal * FPS (类似与Camera中的FrameLength * LineLength * FPS)

LCD的工作模式主要分为Video 以及Command Mode,两种模式处理的框架亦有差异,上述的概念主要是基于Video模式。
Video Mode 为实时显示数据流通过驱动IC直接显示到lcd上, 类似RGB同步屏幕, Video默认是不使用TE(Tearing effect out line)引脚。

Command Mode为数据先更新到ram中, 再由ram刷新到lcd上, 带有FrameBuffer; ram大小可为一帧的1/2或1/3, 通过平台压缩数据, 较少的数据流输入能减少功耗, 再通过IC解压能实现较高的分辨率; 同时由于RAM的存在,可能是出现显示速度慢于主控写的速度而丢失几行数据的情况,所以区别与Video会使用TE引脚的处理机制,使用TE引脚要注意对照硬件原理图配置GPIO Function为mdp_vsync。

dtsi可通过执行device/qcom/common/display/tools下的perl parser.pl解析xml生产dtsi

qcom,mdss-dsi-display-timings {                                         
                   timing@0 {                                           配置刷新率,支持类似60fps/90fps
                        qcom,mdss-dsi-video-mode;                       video模式                                
                        qcom,mdss-dsi-panel-width = <1080>;             Numberofpixels 1080×RGB×1920 pixels
                        qcom,mdss-dsi-panel-height = <1920>;            datasheet 宽高
                        qcom,mdss-dsi-h-front-porch = <20>;             HFP
                        qcom,mdss-dsi-h-back-porch = <30>;              HBP
                        qcom,mdss-dsi-h-pulse-width = <30>;             HSync
                        qcom,mdss-dsi-h-sync-skew = <0>;                水平同步偏差,默认值为0
                        qcom,mdss-dsi-v-back-porch = <4>;               VBP
                        qcom,mdss-dsi-v-front-porch = <12>;             VFP
                        qcom,mdss-dsi-v-pulse-width = <6>;              VSync
                        qcom,mdss-dsi-panel-framerate = <60>;           刷新率
                        qcom,mdss-dsi-on-command =                      Qcom DSI控制器协议 DCS数据包构成的字节流
                        qcom,mdss-dsi-off-command =                     需要厂商提供的initcode,并转换为command格式
                        qcom,mdss-dsi-on-command-state = "dsi_lp_mode"; 有些面板需要先送一帧数据,在On command之前
                                                                        dsi_lp_mode 就是在第一帧之前先发DCS command
                        qcom,mdss-dsi-off-command-state = "dsi_hs_mode";dsi_hs_mode 就是先送一帧数据再发DCS command
                        qcom,cmd-to-video-mode-post-switch-commands = ; 动态的从cmd mode切换到video mode的command
                        qcom,cmd-to-video-mode-post-switch-commands-state =
                                        "dsi_lp_mode";

MIPI-DSI LP mode命令及格式详解
MIPI LCD屏厂初始化时序转换为 qcom,mdss-dsi-on-command

29h 39h等是Command 模式下的datatype,0Eh 1Eh 2Eh 3Eh是Video 模式下的datatype,主要是在发送qcom,mdss-dsi-on-command后会切换到Video Mode,这也是区分两种模式的方式。LCD模组初始化使用Command 模式来读写寄存器,也是因为在低速下数据不容易出错并且容易测量。

dtsi:

qcom,mdss-dsi-on-command = [
                       39 01 00 00 00 00 04 B9 FF 83 99
                       39 01 00 00 00 00 2F B4 00 FF 04 A4 02 A0 00 00 10 00 00 02 00 24 02 04 0A 21 03 00 00 08 A6 88 04 A4 02 A0 00 00 10 00 00 02 00 24 02 04 0A 00 00 08 A6 00 08 11
                       39 01 00 00 05 00 22 D3 00 00 00 00 00 00 18 18 32 10 09 00 09 32 10 00 00 00 00 00 00 00 00 11 00 02 02 03 00 00 00 0A 40
                       39 01 00 00 00 00 09 D8 0F FF FF E0 0F FF FF E0
                       39 01 00 00 00 00 02 BD 00
                       05 01 00 00 78 00 02 11 00
                       05 01 00 00 14 00 02 29 00
          ];

init code:

{0xB9, 3, {0xFF,0x83,0x99}},
        {0xB4, 44, {0x00,0xFF,0x00,0xAC,0x00,0x9C,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x26,0x02,0x07,0x09,0x21,0x03,0x00,0x00,0x04,0xA4,0x88,0x00,0xAC,0x00,0x9C,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x24,0x02,0x07,0x09,0x00,0x00,0x04,0xA4,0x12}},
        {0xD3, 33, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x10,0x05,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x07,0x07,0x03,0x00,0x00,0x00,0x05,0x40}},
        {0xD8, 8, {0x28,0x2A,0x00,0x2A,0x28,0x02,0xC0,0x2A}},
        {0xBD, 1, {0x00}},            //这是有数据的,区分05无参数,一个参数用15是不是可以
        {REGFLAG_DELAY, 5, {}},
        {0x11, 0, {} },
        {REGFLAG_DELAY, 120, {} },
        {0x29, 0, {} },               //注意这里是没有数据的
        {REGFLAG_DELAY, 20, {} },     //延时

DSI PHY Timing可通过高通提供的表格DSI Timing Parameters User Interactive Spreadsheet (80-NH713-1) 计算

不同平台phy timing计算出来的结果是不同的,控制方式也会不同,使用的DSI PHY 2.0.0计算出的结果是如下

kernel/msm-4.19/techpack/display/msm/dsi/dsi_phy_hw_v2_0.c
查看dtsi中phy-timings的传参过程,个人感觉只用到了以上的CTRL_4 to 8控制寄存器的代码


qcom,mdss-dsi-display-timings {
                timing@0 {
                         qcom,mdss-dsi-panel-phy-timings =           
                                 [23 1E 07 08 05 02 04 a0            //Data0  前五位是excel中计算得出的,ctrl 4 to 8 
                                 23 1E 07 08 05 02 04 a0             //Data1  后三位感觉是hardcode,需要再研究一下
                                 23 1E 07 08 05 02 04 a0             //Data2  
                                 23 1E 07 08 05 02 04 a0             //Data3
                                 23 18 07 08 05 02 04 a0];           //CLK
                         qcom,display-topology = <1 0 1>;
                         qcom,default-topology-index = <0>;
            };

kernel/msm-4.19/techpack/display/msm/dsi/dsi_phy_timing_v2_0.c
phy-timing其中每一位数据所对应的含义如下,如果MIPI测试项中出现错误的,应该就是修改phy-timings中的值

LCD的硬件接口

Display相关的引脚:

MIPI信号时钟线:LCD_D2_P LCD_D2_N LCD_DCK_P DSI接口 ( DSI0_LN2_P DSI接口 )
TE引脚: MDP_VSYNC_P (Video模式不使用 )
复位引脚:LCD_RESET_N GPIO82
供电相关:LCD_VCC_EN GPIO60 LCD_IOVDD_1P8 VREG_L9A_1P8 1.65V to 3.3V
LCD_CONN_AVEE_5P VDISP_P PM1632 3.1V to 5.8V
LCD_CONN_AVDD_5P VDISP_M PM1632 -3.1V to -5.8V
背光正极:LCD_BL_LEDA (Anode阳极,Cathode阴极)
背光负极:LEDK1 LEDK2 接WLED_SINK1 WLED_SINK2 ( 背光物理结构布局为2串并列起来,所以负极有2串 )
背光使能引脚: WLED_EN GPIO6
背光控制引脚:WLED_PWM GPIO8


VDD1 对应原理图中的IOVDD
VSP( Positive source output voloatge ) 对应原理图偏压电源正极
VSN( Negative source output voloatge ) 对应原理图偏压电压负极

sde_dsi: qcom,dsi-display-primary {

vddio-supply = <&L9A>;
                lab-supply = <&lcdb_ldo_vreg>;
                ibb-supply = <&lcdb_ncp_vreg>;
  ...             
qcom,panel-supply-entry@0 {
                        reg = <0>;
                        qcom,supply-name = "vddio";
                        qcom,supply-min-voltage = <1800000>;
                        qcom,supply-max-voltage = <1800000>;
                        qcom,supply-enable-load = <62000>;
                        qcom,supply-disable-load = <80>;
                        qcom,supply-post-on-sleep = <20>;  //ms
                };

qcom,panel-supply-entry@1 {
                        reg = <1>;
                        qcom,supply-name = "lab";
                        qcom,supply-min-voltage = <4600000>;
                        qcom,supply-max-voltage = <6000000>;
                        qcom,supply-enable-load = <100000>;
                        qcom,supply-disable-load = <100>;
                        qcom,supply-pre-on-sleep = <1>;
                };

qcom,panel-supply-entry@2 {
                        reg = <2>;
                        qcom,supply-name = "ibb";
                        qcom,supply-min-voltage = <4600000>;
                        qcom,supply-max-voltage = <6000000>;
                        qcom,supply-enable-load = <100000>;
                        qcom,supply-disable-load = <100>;
                        qcom,supply-post-on-sleep = <20>;
                };

除了供电时序还有可以确认以下配置

dtsi:
    qcom,mdss-dsi-lp11-init; //确保reset 信号拉低时,clock和data都要及时被拉高,某些IC时序有此要求
    
    qcom,mdss-dsi-lane-0-state;
    qcom,mdss-dsi-lane-1-state;
    qcom,mdss-dsi-lane-2-state;// 2lane remove the config
    qcom,mdss-dsi-lane-3-state;// 2lane remove the config
xml:
    <DSILP11AtInit>True</DSILP11AtInit>
    
    <DSILanes>4</DSILanes> // 2lane → 2
————————————————

Android Qcom lcd display 学习(1)相关推荐

  1. Android Qcom lcd display 学习(3)

    Android Display整体架构 Android 图形组件 Android Graphic analyze display:高通display overview MDP(mobile displ ...

  2. Android Qcom lcd display 学习(4)

    DRM Linux DRM(二)基本概念和特性 DRM(Direct Rendering Manager)学习简介 DRM 的诞生就是用来处理多个程序对 Video Card 资源的协同使用问题,通过 ...

  3. Android Qcom USB Driver学习(二)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) BC v1.2充电规范 Battery Charging Specification USB port 如 ...

  4. Android Qcom USB Driver学习(八)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) 因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧 BAT SC ...

  5. Android Qcom USB Driver学习(一)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) USB接口类型 Android终端上常用的USB接口:TypeC(现在的主流),MicroB(以前的设备) ...

  6. Android Qcom USB Driver学习(六)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) 眼图基础知识与详解 10分钟教会你看眼图 USB2.0 HUB眼图调试经验总结 一篇文章教你如何全面了解眼 ...

  7. Android Qcom USB Driver学习(四)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) VID/PID识别USB设备 CDC-ACM驱动介绍   CDC-ACM(Communication De ...

  8. Android Qcom Audio架构学习

    总结: Android Audio不简单呀,一个人摸索入门不容易的,研究了一段时间,感觉还不是很懂,但以下的知识对入门还是有帮助的. Audio架构中的名词 FE(Front End) 提供pcm的设 ...

  9. Android Qcom USB Driver学习(九)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) 高通的某些平台将电源管理移植到了ADSP Subsystem, 分析一下其中比较关心的部分 Archite ...

最新文章

  1. R假设检验之Durbin-Watson检验(Durbin-Watson Test)
  2. 2020年总结以及21年规划
  3. Android开发--实现对话框(AlertDialog)
  4. python人工智能——机器学习——分类算法-k近邻算法——kaggle案例: Facebook V: Predicting Check Ins
  5. 数据建模大数据就业挑战月薪30K
  6. Linux 如何创建新文件、修改文件权限、新文件读写 ?
  7. 细说 ASP.NET Cache 及其高级用法
  8. c#提交事务的两种方法
  9. 【Spring】Bean instantiation via constructor failed nested exception Constructor threw exception
  10. php默认站点,PHP学习之Apache修改默认站点的目录
  11. google map flex
  12. JavaScript实现简易计算器
  13. 尚学堂马士兵Oracle教程 笔记
  14. 基于C#的超市进销存管理系统设计与实现
  15. 树莓派linux声卡设置
  16. latex表格内部自定义换行
  17. linux创建文件内容三行,Linux 文本处理三剑客
  18. pytorch忽略user warning
  19. 认识LTE(六): LTE中的信道特征以及信道估计技术
  20. 《Adobe Photoshop CS6中文版经典教程(彩色版)》—第2课2.7节使用海绵工具调整饱和度...

热门文章

  1. 《汇编语言(第3版) 》王爽著__读书摘要
  2. window.print打印指定div-打印网页指定区域
  3. GitHub开源:4行代码实现《黑客帝国》数字雨特效
  4. Hkey Video Hacker
  5. Python-pandas的dropna()方法-丢弃含空值的行、列
  6. LAN和WAN有什么区别?—Vecloud微云
  7. 印象笔记与有道云笔记
  8. gluPerspective和gluLookAt找不到
  9. Python中的命名规则
  10. 【ZYNQ】QSPI Flash 固化程序全攻略