在驱动LCD屏前,了解一下LCD的必备知识。
LCD的接口有多种,分类很细。主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般有这么几种:MCU模式,RGB模式,SPI模式,VSYNC模式,MDDI模式,DSI模式。MCU模式(也写成MPU模式的)。只有TFT模块才有RGB接口。
彩色TFT液晶屏主要有2种接口:TTL接口(RGB颜色接口), LVDS接口(将RGB颜色打包成差分信号传输)。TTL接口主要用于12.1寸一下的小尺寸TFT屏,LVDS接口主要用于8寸以上的大尺寸TFT屏。TTL接口线多,传输距离短;LVDS接口传输距离长,线的数量少。大屏采用较多的模式,控制脚是VSYNC,HSYNC,VDEN,VCLK,数据脚是VD[23-0]。
CPU或显卡发出的图像数据是TTL信号(0-5V、0-3.3V、0-2.5V、或0-1.8V),LCD本身接收的也是TTL信号,由于TTL信号在高速率的长距离传输时性能不佳,抗干扰能力比较差,后来又提出了多种传输模式,比如LVDS、TDMS、GVIF、P&D、DVI和DFP等。他们实际上只是将CPU或显卡发出的TTL信号编码成各种信号以传输,在LCD那边将接收到的信号进行解码得到TTL信号。但是不管采用何种传输模式,本质的TTL信号是一样的。
注意:TTL/LVDS分别是两种信号的传输模式,TTL是高电平表示1,低电平表示0的模式,LVDS是正负两个对应波形,用两个波形的差值来表示当前是1还是0
从LCD屏厂拿来一块屏,首先根据屏的说明书,给屏搭建良好的外围环境,然后再相应地接口类型、传输模式、分辨率等配置好对应的软件参数。再细调外围参数,达到较好的显示效果。
以下的屏的一些软件配置参数:
/* Base */
#define OUT_TYPE SCREEN_RGB//SCREEN_LVDS //接口类型
#define OUT_FORMAT LVDS_8BIT_2
#define OUT_FACE OUT_P888//OUT_D888_P666
#define OUT_CLK 65000000 // LCD _DCLK
#define LCDC_ACLK 500000000//312000000 //29 lcdc axi DMA 频率
/* Timing */
#define H_PW 10 //同步信号宽度
#define H_BP 150//160 //同步信号后消隐
#define H_VD 1024 //可视区域
#define H_FP 160 //同步信号前清隐
#define V_PW 10
#define V_BP 13//25
#define V_VD 768
#define V_FP 15
#define LCD_WIDTH 162 //LCD可视区域物理宽度(mm)
#define LCD_HEIGHT 121 //LCD可视区域物理高度(mm)
...
#define S_DCLK_POL 0 //双屏时 DCLK反向
/* Other */
#define DCLK_POL 0 // LCD DCLK 反向
#define SWAP_RB 0 // LCD 红绿颜色交换