如何配置LCD背光和LED,调试方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何配置LCD背光和LED,调试方法相关的知识,希望对你有一定的参考价值。

参考技术A

LCD背光和LED配置文件 

alps/custom/<proj name>lk/cust_leds.c 

alps/custom/<proj name>/kernel/leds/mt65xx/cust_leds.c 

drvgen.exe编辑修改codegen.dws

配置cust_leds.c参数:

static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] =  

"red",                  MT65XX_LED_MODE_NONE, -1,0, 

"green",               MT65XX_LED_MODE_NONE, -1,0, 

"blue",                 MT65XX_LED_MODE_NONE, -1,0, 

"jogball-backlight", MT65XX_LED_MODE_NONE, -1,0, 

"keyboard-backlight",MT65XX_LED_MODE_NONE, -1,0, 

"button-backlight",   MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_BUTTON,0, 

"lcd-backlight",        MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,0, 

;

LCD背光 

MT6589 

使用不同的控制源,配置模式: 

    BL_PWM (BLS_PWM) 

    "lcd-backlight",     MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,0, 

    2.PWM1~PWM7  

    如果是PWM1~4 

    "lcd-backlight",     MT65XX_LED_MODE_PWM, PWM1,0,0,0,0,0, 

    0,0,0,0,0表示src_clk=32k时钟,div=0,HDuration=4; LDuration=4,pmic_pad= 0 

    频率计算:32K/(0+1)/64/4=125Hz 

    如果使用PWM5~7 

    "lcd-backlight",     MT65XX_LED_MODE_PWM, PWM5,1,1,32,32,1, 

    1,1,30,30,1表示src_clk=52M时钟,div=1,HDuration=32; LDuration=32,pmic_pad=1 (PWM5~7在PMIC6320) 

    频率计算:52M/(1+1)/64/32=126.95KHz

    3.GPIO脉冲 

    "lcd-backlight",     MT65XX_LED_MODE_GPIO, (int)Cust_SetBacklight,0, 

    通过实现Cust_SetBacklight(level,div)函数操作GPIO动作

    4.类似OLED屏幕,通过写LCM 寄存器实现 

    "lcd-backlight",     MT65XX_LED_MODE_CUST, (int)Cust_SetBacklight,0, 

    通过实现 

    unsigned int Cust_SetBacklight(int level, int div) 

     

    mtkfb_set_backlight_level(level); 

     

    通过mtkfb_set_backlight_level(level);实现的函数指针将level传到LCM driver 

    在LCM的driver中实现.set_backlight=lcm_setbacklight,

    5.PMIC6320的Isinks 

    MT6320只有3个Isink,应该不能满足要求

    MT6572 

    和Mt6589有区别的: 

    1.PWM1~PWM5 

    "lcd-backlight",     MT65XX_LED_MODE_PWM, PWM1,0,0,0,0,0, 

    0,0,0,0,0表示src_clk=32k时钟,div=0,HDuration=4; LDuration=4,pmic_pad=0 

    频率计算:32K/(0+1)/64/4=125Hz 

    "lcd-backlight",     MT65XX_LED_MODE_PWM, PWM1,1,1,32,32,0, 

    1,1,30,30,0表示src_clk=66M时钟,div=1,HDuration=32; LDuration=32,pmic_pad=0

    频率计算:66M/(1+1)/64/32=161.11KHz

    2.PMIC6323的Isinks 

    MT6323有4个Isink,每路24mA电流,可以double为48mA,可以接8个LED 

    "lcd-backlight",     MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK,0,

Button LED

MT6589

PMIC mt6530有KPD LDO 

"button-backlight",  MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_BUTTON,0, 

MT6572

mt6323没有KPD LDO,一般兼容使用Isink或者PWM 

ISink0和Isink1合并做Button LED 

"button-backlight",  MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK01,0, 

注意:如果需要修改电流等级和double current,请修改leds.c 

brightness_set_pmic()和led_blink_pmic() 

电流等级接口:upmu_set_isinks_chx_step(0x0);//0x0 4mA;0x01 8mA;0x2 12mA;0x03 16mA 0x04 20mA;0x05 24mA 

double current接口:upmu_set_isinks_chx_double_en(0x1);

PWM1~5 

"button-backlight",     MT65XX_LED_MODE_PWM, PWM1,0,0,0,0,0,


LED 

MT6589 

    Pre-charger(PCH_DET) LED 

    主要使用由于关机充电LED,插USB charger点亮,lk阶段关闭 

    如果需要打开PCH_DET: 

    在mt_leds.c(lk)和leds.c 中要打开pre-charger LED 的控制 

    Upmu_chr_chrind_on(1);//开启 

    Upmu_chr_chrind_on(0);//关闭

    2.使用Isink接LED 

    "red",               MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK0,0, 

    "green",             MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK1,0, 

    "blue",              MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK2,0,

    3.使用PWM控制LED 

    "red",               MT65XX_LED_MODE_PWM,PWM5,0,0,0,0,1, 

    "green",             MT65XX_LED_MODE_PWM,PWM6,0,0,0,0,1, 

    "blue",              MT65XX_LED_MODE_PWM,PWM7,0,0,0,0,1, 

    注意:Mt6589上的PWM在sleep的时候没有波形输出的,如果sleep需要闪烁设计,请使用PMIC Mt6320上的PWM(PWM5~PWM7)

    MT6572 

    与Mt6589的区别: 

    1.mt6572没有pre-charger LED的PCH_DET pin

    2.Mt6572的PWM1~5在sleep的时候,都是没有波形输出的,设计请注意

    3.使用Isink设计时,如果1个isink接2路LED,请注意打开double current,或者step调大

Flash light 

文件:alps/mediatek/custom/<proj name>/kernel/flashlight/constant_flashlight/leds_stobe.c 

实现FL_enable()和FL_disable()

MT6589有专门的flash LDO MT6572 没有Flash LDO,可以通过控制PWM,GPIO,ISINK等控制Flash light

上层JNI lib文件 

alps/mediatek/hardware/liblights/lights.c 

如果需要同时打开2个以上的LED,请修改set_speaker_light_locked()里面的逻辑


adb shell调试LCD背光和LED

adb命令查看LED或者backlight的亮度status 

cd /sys/class/leds/xxx/brightness 

(xxx表示的是light的名字,例如green,blue,red分别表示绿灯、蓝灯和红灯,lcd-backlight表示的是lcd背光。)

如果出现LED或Backlight不正常时,可以通过进入到相应的folder执行如下命令去检测是否driver有问题: 

echo brightness_level > brightness  检查是否按照你设置的亮度显示。

对于LED来说brightness_level只要不是0,driver都会让led on。

LCD背光不支持blink,测试LED blink可以执行如下命令: 

cd /sys/class/leds/xxx/ 

echo timer > trigger        这个命令会创建delay_on和delay_off两个文件。 

echo on_time > delay_on 这个命令用于设置LED on的时间 

echo off_time > delay_on 这个命令用于设置LED off的时间(On和off的时间都是以毫秒为单位的。) 

echo timer > trigger        命令清除delay_on和delay_off时间,让led off。 

echo none > trigger        删除delay_on/delay_off 节点

在kernel_log 可以看到leds.s中函数调用的情况 

如 printk("mt65xx_leds_set_cust: set brightness, name:%s, mode:%d, level:%d\\n", cust->name, cust->mode, level);

S5PV210-arm裸机-LCD





LCD : LCD是一种液晶晶体显示器,他本身是不发光的,属于被动发光,而LED显示器,CRT显示器(老式的砖头电脑)是主动发光的。

LCD是被动发光的,自己本身不会发光,我们在液晶面板上给他一个白光,背光。之后在电信号的驱动下,里面的液晶分子就会旋转,会透出不同程度的光。在配合滤光片的滤光,就可以让我们看来有不同颜色的光。因此LCD需要一个背光和滤光片作为辅助才可以。

LCD的接口本质上是TTL电平的。5V表示逻辑1,0V表示逻辑0;

SOC的LCD控制器是TTL电平的,LCD的接口也是TTL电平的。所以这两者之间是可以互接的。但是实际上很多都不是对接的,都是这样的。 SOC(TTL)->  VGA->  LCD(屏幕)(TTL)



LCD的驱动器和控制器:

SOC内部一般都会有一个LCD控制器,而LCD液晶屏幕内部一般都会有一个LCD驱动器。SOC内部的控制器给驱动器一个数字信号,驱动器接受数字信号后,将数字信号转换成模拟信号送给LCD的屏幕控制液晶分子的旋转,投不同程度的光,经过滤光片显示出不同的颜色,所以VGA等的接口就是在SOC内部的LCD控制器和LCD内部的驱动器之间连接的。将LCD控制器发送出来的RGB信息等的数字信号(TTL电平)。VGA接口可以转换TTL为一种抗干扰能力强的信号传输过去,在转换成TTL电平信号给LCD内部的驱动器。

显存(显示内存):

SOC在flash等外存存储设备中,读取一个图像,先将图像解码后,得到图像的数据(像素),放在SOC的内存中去,这个内存我们选择一个区域,这个区域一般我们是可以随便选取的,但是一定要对齐。放到这个内存区域后,我们在把这段内存区域和我们SOC内部的LCD控制器连接起来构成一个映射的关系,这样映射关系建立后,SOC内部的LCD控制器就会自动的从这段内存中把数据取走通过VGA接口等传输到LCD内部的驱动器,驱动器在去把这个数字信号转换成模拟信号一个一个的送到LCD的面板上(像素)去显示。

将来LCD控制器从那块特定的内存中取走图像信息数据(像素)的内存区域,就是我们所说的显示内存,简称显存。

这个关系,LCD控制器和显存建立起映射关系后,我们SOC就不需要参与LCD控制器读取显存的像素数据,在送到LCD驱动器,在送到LCD面板上显示的过程了。我们SOC只需要将在存储设备flash,SD卡中的JPG等格式的图像解码后成为像素的数据后,丢到我们SOC所选的那块显存空间即可。

总结:LCD显示的过程分为两个阶段:第一个阶段:就是SOC初始化LCD控制器,将LCD控制器和我们选择的内存区域建立起来映射关系。第二阶段:在建立这个映射关系后,要显示时,SOC将存储设备中的图像JPG格式等解码成像素的数据放到显存中去。

帧:

一帧,一个图片的显示就是一帧,帧内数据,一帧数据是由多行构成的,每一行又由多个像素点构成。

帧外数据:整个视频是由很多个帧组成的。

在显示图片的时候,SOC

的LCD控制器,将一个像素点送到LCD驱动器,在由驱动器去驱动液晶分子,在LCD液晶屏中去显示这个像素点,相当于串行通信,每一次都是传输一个像素的数据。所以传输的过程中,想要显示一帧数据,也就是一整个图片的数据,就需要一个时间去将这些由许多个像素组成的行,由多行组成的一帧去数据扫描显示出来。

可以认为LCD显示一行的图像分成四个部分: HSPW + HPBD + 有效信息 + HFPD.

其中

HSPW: 是脉冲的宽度(HSYNC 高电平信号持续的时间),LCD控制器先发送这个信号给LCD驱动器,告诉驱动器要

开始发送一帧数据了。

HPBD: 是水平同步信号前肩

HFPD: 是水平同步信号后肩

有效信息:就是要发送的一行的图像数据,就是一帧数据中的一行,一行中的多个像素点。分辨率的行。

LCD显示一帧图像由四部分构成:

VSPW:

VBPD: 垂直同步信号前肩

帧有效信息:就是一行一行的有效信息组成的列有效信息。

VFPD: 垂直同步信号后肩

像素深度(bpp  (bit per pixel)) : 在计算机中,我们用多少个字节数据去描述一个像素,就叫做像素深度。描述

像素数据的位数越多,那么这个像素的颜色深度就会越深,有 1位(单色)、8位(黑白,将黑色到白色之间分成了256份),16位、24位、32位、这些都是彩色的了。



1、LVDS接口概述


LVDS,即Low Voltage Differential Signaling,是一种低压差分信号技术接口。克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。LVDS输出接口利用非常低的电压摆幅(约350mV)在两条PCB走线或一对平衡电缆上通过差分进行数据的传输,即低压差分信号传输。采用LVDS输出接口,可以使得信号在差分PCB线或平衡电缆上以几百Mbit/s的速率传输,由于采用低压和低电流驱动方式,因此,实现了低噪声和低功耗。


2、LVDS接口电路的组成

   在液晶显示器中,LVDS接口电路包括两部分,即主板侧的LVDS输出接口电路(LVDS发送端)和液晶面板侧的LVDS输入接口电路(LVDS接收器)。LVDS发送端将TTL信号转换成LVDS信号,然后通过驱动板与液晶面板之间的柔性电缆(排线)将信号传送到液晶面板侧的LVDS接收端的LVDS解码IC中,LVDS接收器再将串行信号转换为TTL电平的并行信号,送往液晶屏时序控制与行列驱动电路。也就是其实TFT只识别TTL(RGB)信号。这部分我们做samsung的方案中用的比较多,因为samsung芯片没有LVDS输出,所以我们用LVDS接口的TFT-LCD的时候就要加一个(RGB-LVDS)转换芯片,这个后面我们重点说。




1、TTL接口概述


TTL(Transistor Transistor Logic)即晶体管-晶体管逻辑,TTL电平信号由TTL器件产生。TTL器件是数字集成电路的一大门类,它采用双极型工艺制造,具有高速度、低功耗和品种多等特点。


TTL接口属于并行方式传输数据的接口,采用这种接口时,不必在液晶显示器的驱动板端和液晶面板端使用专用的接口电路,而是由驱动板主控芯片输出的TTL数据信号经电缆线直接传送到液晶面板的输人接口。由于TTL接口信号电压高、连线多、传输电缆长,因此,电路的抗干扰能力比较差,而且容易产生电磁干扰(EMI)。在实际应用中,TTL接口电路多用来驱动小尺寸(15in以下)或低分辨率的液晶面板。TTL最高像素时钟只有28MHz。


TTL是信号时TFT-LCD唯一能识别的信号,早期的数字处理芯片都是TTL的,也就是RGB直接输出到TFT-LCD。


2、TTL接口的信号类型















本文出自 “whylinux” 博客,请务必保留此出处http://whylinux.blog.51cto.com/10900429/1898812

以上是关于如何配置LCD背光和LED,调试方法的主要内容,如果未能解决你的问题,请参考以下文章

[Android5.1][RK3288] LCD Mipi 调试方法及问题汇总

[Android5.1][RK3288] LCD Mipi 调试方法及问题汇总

LCD屏背光驱动调试心得---血的教训

IMX8MM-LCD-ILI9806E调试流程

高通平台LCD/TP调试移植步骤

Tina Linux LCD调试指南