历史上的今天
返回首页

历史上的今天

今天是:2024年12月07日(星期六)

2021年12月07日 | 第十八章:Android LCD(四):LCD驱动调试篇

2021-12-07 来源:eefocus

关键词:android LCD TFTSN75LVDS83B  TTL-LVDS LCD电压背光电压
平台信息:
内核:linux2.6/linux3.0
系统:android/android4.0 
平台:samsung exynos 4210、exynos 4412 、exynos 5250


这篇我们以一个实例来说明,Samsung Exynos4412搭配TTL转LVDS芯片SN75LVDS83B、LVDS接口LCD为例说明。从硬件接口、驱动配置、背光PWM调节三部分说明。


一、LCD接口原理以及硬件电路
Samsung Exynos4412、SN75LVDS83B、LVDS接口LCD(24bit)为例说明,三者的关系如下:



如上图所示,我们在应用中我,主控(Exynos4412)输出RGB信号到TFT-LCD大体经过三部分:
(1)、标号1部分,主控(Exynos4412)输出TTL信号;
(2)、标号2部分,TTL(RGB)-LVDS转换芯片SN75LVDS83B,把TTL信号转换成LVDS信号,传输到显示器的LVDS接收端;这部分有SN75LVDS83B编码芯片自动完成,所以我们不需要程序控制;
(3)、标号3部分,分两个小部分,LVDS转换成TTL,TFT-LCD显示部分;我们前面说过,TFT-LCD其实只识别TTL信号,所以要有一个转换的过程,先把LVDS信号转换、解码成TTL信号,在TFT-LCD上显示。


有上面的过程,其实我们关心调试的部分只有标号1部分到标号2部分,后面标号2到标号3的部分是自动完成的,不需要我们程序上控制,把标号2部分、标号3部分合并:



标号二部分可以理解为一个TTL(RGB)接口的LCD,如下图所示,标号一部分就是主控信号输出端,简化图如下所示:



其实最简单的做法就是找个TTL接口的TFT-LCD,这样直接接上就可以。下面我们看下硬件上的电路连接:这个和我们上篇用的相同。



有上面图可以看出:硬件连接

网络标号

说明

管脚

XvVD[0:23]

XvVDEN

XvVSYNC

XvHSYNC

XvVCLK

RGB数据、使能、行场同步、时钟信号

 这是TTL信号输出

LCD_PWM

调节背光

XpwmTOUT1/LCD_PWM/GPD0_1

LCD_LED_EN

LCD电压(TFT电压)使能

GPC1_2

LED_BL_EN

LED背光使能

GPL2_4

上面可分为几部分,电路连接部分分析:

(1)、TTL数据部分
这张图有木有烂掉呀,哈哈,就是这些数据了。还有有木有想起来摄像头的数据(ITU接口)也是这样的??其实视频这种信号的原理是通用的,所以LCD通了,摄像头也就知道怎么回事了。



(2)、PWM背光调节
 PWM其实也是芯片的一个功能模块,看到他的管脚就是一个复用脚XpwmTOUT1/LCD_PWM/GPD0_1。上一篇我们粗略的了解了PWM,就是用到这里。但是有一个疑问,PWM是调节背光电压的,背光电压一般都是12V以上的,我们PWM只有0-3V的样子,Exynos4412的IO只有1.8V。怎么调节电压???



其实这个PWM只是给LCD上PWM控制部分,真正的电压还是通过LCD控制板上的电路实现。


( 3 )、 LED 背光、 LCD 电压控制a 、背光:LED+
我们可以看到这个升压电路,通过 SY7208 把 VBATT 升压到 18V ,供给 LED 背光。 SY7208 最大升压 26V 。这个电压是提供给我们前面讲的背光的,也就是 CCFL 灯管或者 LED 背光组的电压。




b、LCD电压
这个电压也就是给你我们TFT阵列组用的,控制LCD液晶元素。
这部分电路分析完成,我们就有比较清晰的思路出,要一个LCD工作,要完成两部分内容:LCD上电控制,背光、LCD电压;信号输出。

二、LCD 驱动部分调试
 LCD这部分,像上篇我们说的frambuffer这些部分一般平台都是可以用的,除非你是芯片厂的要写这部分。一般公司拿到的demo板子这部分都是通的,只是针对自己的lCD换一些参数。


下面我们针对三星平台我们调试LCD的时时候程序方面的改动:
1、屏参数的配置
/kernel/drivers/video/Samsung/s3cfb_wa101s.c


  1. static struct s3cfb_lcd wa101 = {  

  2.       

  3.     .width  = 1280,//LCD 分辨率宽1280  

  4.     .height = 800, //LCD 分辨率高 800  

  5.     .bpp    = 24,//CLD 数据位 24bit  

  6.     .freq   = 60,//LCD 像素时钟 60MHz  

  7.     .timing = {//LCD porch无效值  

  8.         .h_fp   = 70,  

  9.         .h_bp   = 70,  

  10.         .h_sw   = 20,  

  11.       

  12.         .v_fp   = 10,  

  13.         .v_fpe  = 0,  

  14.         .v_bp   = 10,  

  15.         .v_bpe  = 0,  

  16.         .v_sw   = 3,  

  17.     },  

  18.   

  19.     .polarity = {//时钟、行场的极性;  

  20.         .rise_vclk  = 1,  

  21.         .inv_hsync  = 1,  

  22.         .inv_vsync  = 1,  

  23.         .inv_vden   = 0,  

  24.     },  

  25. };  

  26. /* name should be fixed as 's3cfb_set_lcd_info' */  

  27. void s3cfb_set_lcd_info(struct s3cfb_global *ctrl)//初始化结构体  

  28. {  

  29.     wa101.init_ldi = NULL;  

  30.     ctrl->lcd = &wa101;  

  31. #endif  

  32. }  

还能想起上一篇的如何阅读规格书中的那些参数不,把这些填入就可以。


2、数据管脚初始化



kernel/arch/arm/mach-exynos/setup-fb-s5p.c


  1. void s3cfb_cfg_gpio(struct platform_device *pdev)  

  2. {  

  3.     s3cfb_gpio_setup_24bpp(EXYNOS4_GPF0(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV4);  

  4.     s3cfb_gpio_setup_24bpp(EXYNOS4_GPF1(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV4);  

  5.     s3cfb_gpio_setup_24bpp(EXYNOS4_GPF2(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV4);  

  6.     s3cfb_gpio_setup_24bpp(EXYNOS4_GPF3(0), 4, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV4);  

  7. }  

LCD  数据脚初始化,驱动能力设为最高 S5P_GPIO_DRVSTR_LV4 ;管脚驱动能力, S5P_GPIO_DRVSTR_LV1-4 四个等级选择。3、 时钟控制部分
kernel/arch/arm/mach-exynos/setup-fb-s5p.c


  1. int s3cfb_clk_on(struct platform_device *pdev, struct clk **s3cfb_clk)  

  2. {  

  3.     struct clk *sclk = NULL;  

  4.     struct clk *mout_mpll = NULL;  

  5.     struct clk *lcd_clk = NULL;  

  6.   

  7.     u32 rate = 0;  

  8.     int ret = 0;  

  9.   

  10.     lcd_clk = clk_get(&pdev->dev, "lcd");  

  11.     if (IS_ERR(lcd_clk)) {  

  12.         dev_err(&pdev->dev, "failed to get operation clk for fimdn");  

  13.         goto err_clk0;  

  14.     }  

  15.   

  16.     ret = clk_enable(lcd_clk);  

  17.     if (ret < 0) {  

  18.         dev_err(&pdev->dev, "failed to clk_enable of lcd clk for fimdn");  

  19.         goto err_clk0;  

  20.     }  

  21.     clk_put(lcd_clk);  

  22.   

  23.     sclk = clk_get(&pdev->dev, "sclk_fimd");  

  24.     if (IS_ERR(sclk)) {  

  25.         dev_err(&pdev->dev, "failed to get sclk for fimdn");  

  26.         goto err_clk1;  

  27.     }  

  28.   

  29.     if (soc_is_exynos4210())  

  30.         mout_mpll = clk_get(&pdev->dev, "mout_mpll");  

  31.     else  

  32.         mout_mpll = clk_get(&pdev->dev, "mout_mpll_user");  

  33.   

  34.     if (IS_ERR(mout_mpll)) {  

  35.         dev_err(&pdev->dev, "failed to get mout_mpll for fimdn");  

  36.         goto err_clk2;  

  37.     }  

  38.   

  39.     ret = clk_set_parent(sclk, mout_mpll);  

  40.     if (ret < 0) {  

  41.         dev_err(&pdev->dev, "failed to clk_set_parent for fimdn");  

  42.         goto err_clk2;  

  43.     }  

  44.   

  45.     if ((soc_is_exynos4412()) && (samsung_rev() >= EXYNOS4412_REV_2_0))  

  46.         ret = clk_set_rate(sclk, 880000000);  

  47.     else  

  48.         ret = clk_set_rate(sclk, 800000000);  

  49.     if (ret < 0) {  

  50.         dev_err(&pdev->dev, "failed to clk_set_rate of sclk for fimdn");  

  51.         goto err_clk2;  

  52.     }  

  53.     dev_dbg(&pdev->dev, "set fimd sclk rate to %dn", rate);  

  54.   

  55.     clk_put(mout_mpll);  

  56.   

  57.     ret = clk_enable(sclk);  

  58.     if (ret < 0) {  

  59.         dev_err(&pdev->dev, "failed to clk_enable of sclk for fimdn");  

  60.         goto err_clk2;  

  61.     }  

  62.   

  63.     *s3cfb_clk = sclk;  

  64.   

  65.     return 0;  

  66.   

  67. err_clk2:  

  68.     clk_put(mout_mpll);  

  69. err_clk1:  

  70.     clk_put(sclk);  

  71. err_clk0:  

  72.     clk_put(lcd_clk);  

  73.   

推荐阅读

史海拾趣

DZUS公司的发展小趣事

随着公司实力的增强,DZUS公司开始拓展国际市场。通过参加国际展览、与海外客户建立合作关系等方式,公司逐渐打开了国际市场的大门。同时,公司还针对不同国家和地区的市场需求,推出了定制化的产品和服务。这些举措使DZUS公司的品牌知名度和市场份额不断提升。

C&K Components公司的发展小趣事

到了90年代,随着电子产品的普及和技术的进步,开关市场的竞争愈发激烈。然而,C&K凭借多年的技术积累和市场经验,已经成为世界领先的开关制造商之一。公司不断推出创新产品,满足市场的多样化需求,同时加强与国际知名企业的合作,进一步巩固了其在行业内的领先地位。

南晶电子(DGNJDZ)公司的发展小趣事

随着人工智能、物联网等技术的快速发展,南晶电子意识到传统半导体器件已无法满足市场需求。公司决定进行转型升级,向智能穿戴设备、智能家居、汽车电子等领域拓展。通过引进先进技术和设备,加强研发团队建设,南晶电子成功推出了一系列智能化产品,实现了从传统制造业向智能制造的转型。

艾迈斯(AMASS)公司的发展小趣事

随着电子行业的快速发展,艾迈斯(AMASS)公司意识到只有不断创新才能保持领先地位。为此,公司加大了对研发的投入,引进了一批高素质的研发人才,并建立了完善的研发体系。经过多年的努力,艾迈斯成功研发出了多款具有创新性的连接器产品,其中包括高性能、高安全性的智能设备动力连接器。这些产品的推出不仅提升了公司的技术实力和市场竞争力,也为整个行业的发展带来了积极的影响。

Delta Electronics公司的发展小趣事

Delta Electronics成立于1971年,最初只是台湾一家小型电子制造公司。随着技术的不断进步和市场的扩大,公司逐渐开始拓展其业务范围。上世纪90年代初,Delta在中国大陆设立了生产基地,这标志着公司全球扩展战略的重要一步。随后,公司陆续在美国、欧洲、亚洲等地建立了研发中心和生产基地,为全球客户提供优质的电子产品和解决方案。

Bomar Interconnect公司的发展小趣事

在供应链管理方面,Bomar Interconnect公司也进行了一系列优化措施。公司与供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量可控。同时,公司还加强了对供应链的监控和管理,通过信息化手段提高了供应链的透明度和效率。这些努力不仅降低了公司的采购成本,也提高了供应链的响应速度和灵活性。

问答坊 | AI 解惑

测试一下你的大脑

1.看出顺时针旋转的是感情很丰富,     2.看出逆时针旋转的是逻辑思维很强,     3.看出摇摆的说明这个人智商超高;     4.能够轻松改变顺逆时针表明左右脑切换思考很快。 一般男性先看到的是逆时针的多,女性先 ...…

查看全部问答>

请教一个Verilog实现VGA的问题

新手请教verilog实现VGA显示移动小球的问题:使用ALTER公司的QuartusII软件开发,小弟现在想要实现一个用字模实现的小球,在屏幕上斜线移动的问题,但球会逐行显示又逐行消失,若只横向移动,则能一直显示,希望大家不吝赐教,部分代码如下: modu ...…

查看全部问答>

tl16c554

请问高手,两片tl16c554如何和DSP 连接呢?…

查看全部问答>

ARM LCD控制寄存器问题

根据时序要求,我们设定VM/VDEN信号作LCD的ENAB信号,VCLK信号作LCD的NCLK信号。要想得到合适的VM和VCLK波形,就要正确设定寄存器的值,根据寄存器的值与VM和VCLK波形的关系,我们设定了如下关键寄存器的值: HSPW=10;HBPD=100;HFPD=47; VSPW=1;VBPD=37 ...…

查看全部问答>

关于三菱FX2n-1PG的问题!

1PG的#18#17位置设置(1)的设置范围是“0到正负999999”,如果我的伺服驱动器设定每转输入100000个脉冲,那么我能让电机旋转的圈数最多只有9圈多?比如我要电机转15圈,那么每转脉冲数乘以旋转圈数(100000*15=1500000)就超出了设定范围了!如果 ...…

查看全部问答>

求购 触摸板和EXP430FR5739实验板

求购 触摸板和EXP430FR5739实验板  价格不讨太贵。…

查看全部问答>

mega128 HC595 驱动四位一体数码管

这是我的程序#include #define SS                                0 #define SCK                    &n ...…

查看全部问答>

我的C2000 LaunchPad DIY计划

一、做个电子负载 板子早就打好了,这10块板一直在睡着,没有动 这次准备使用C2000 LaunchPad把它做起来。 二、做个数字电源 原来使用F28035做的BUCK部分,性能不错。这次使用F28027来做,只做BUCK型降压的电源。 PCB还没有做,或者使用试 ...…

查看全部问答>

智能引领未来

智能家居涉及到家居内部的安全问题,很多开发板虽然功能很强大,但在安全稳定性 方面还是有一定的缺陷,而瑞萨开发板多用于汽车内,其稳定性也比其他的好很多。 瑞萨RL78/G13的MCU运作 电流为70μA/MHz(以32MHz进行基本操作),一般作业的待机电流 ...…

查看全部问答>

f28335的epwm疑问,求大神解答

EPwm1Regs.TBPRD = 5000;    EPwm1Regs.TBPHS.half.TBPHS = 0;    EPwm1Regs.TBCTR = 0;    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;   &n ...…

查看全部问答>