第十八章:Android LCD(四):LCD驱动调试篇

发布者:Aningmeng最新更新时间:2022-01-12 来源: eefocus关键字:Android  LCD  驱动调试 手机看文章 扫描二维码
随时随地手机看文章

关键词: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.   

[1] [2] [3] [4]
关键字:Android  LCD  驱动调试 引用地址:第十八章:Android LCD(四):LCD驱动调试篇

上一篇:第十七章:Android LCD(三):Samsung LCD接口篇
下一篇:第十九章、TIny4412 U-BOOT移植十九 LCD移植

推荐阅读最新更新时间:2024-11-12 11:12

AVR单片机和LCD液晶模块对信息监控终端的控制设计
目前,随着信息产业的迅猛发展,各类船舶亟需配备更多质优价廉的中小型信息监控终端,用于监控气象状况、获取导航信息以便保证航行安全。以ARM、MIPS等领衔的32位处理器在信息监控终端应用中,显示出极大优势,但是一般以32位处理器构建的嵌入式系统往往需要配置外部FLASH和SDRAM,这样就使得开发和维护整个系统的成本较高,本设计采用高性能低功耗的AVR单片机和LCD液晶模块来设计信息监控终端,具有价格低廉、性能稳定、显示清晰、人机界面良好等优点,能够满足船舶对中小型信息监控终端的需求。 1 总体设计 信息监控终端主要由显示控制板、键盘、通信接口和液晶显示模块构成,具有数据收发、数据显示、人机交互和屏幕亮度调整等功能,其组成如图1
[单片机]
AVR单片机和<font color='red'>LCD</font>液晶模块对信息监控终端的控制设计
欧盟反垄断调查指向 Android,一个开源系统怎么建立垄断?
     欧盟是不打算放过美国的这些科技公司了。 根据路透获取的两份内部文件,欧盟反垄断部门又开始了对 Google 的一项新的调查。 这份文件显示,那个已经给 Google 开出过数笔巨额罚单的欧盟部门,现在要求 Google 停止向智能手机厂商提供预装 Play Store 应用商店的经济鼓励。 同时,欧盟还要求 Google 不再强制智能手机预装其专有应用,以赋予这些智能手机厂商使用基于 Android 系统开发的其他操作系统的自主权。这份长达 150 页的文件还指出,Google 不可以因为智能手机厂商未安装 Google 专有应用而对它们采取惩罚或者威胁措施。 如果 Google 继续这么做,等待它的将是
[手机便携]
L297,L298驱动步进电机原理图proteus仿真+程序 LCD显示速度
L297,L298驱动步进电机的原理图,亲测可用 L297,L298驱动步进电机的51单片机程序如下: #include AT89X51.h int delay(); void inti_lcd(); void show_lcd(int); void cmd_wr(); void ShowState(); void clock(unsigned int Delay) ; void DoSpeed(); //计算速度 //正转值 #define RIGHT_RUN 1 //反转值 #define LEFT_RUN 0 sbit RS=0xA0; sbit RW=0xA1; sbit E=0xA2; char Spe
[单片机]
L297,L298<font color='red'>驱动</font>步进电机原理图proteus仿真+程序 <font color='red'>LCD</font>显示速度
单片机 实时时钟电路(LCD1602、PCF8563)
一、简介 此电路主要有51单片机、LCD1602模块、PCF8563芯片和按键组成组成,通过LCD1062显示当前时间,按键可设置时间。 二、运行效果 三、部分代码 /*想要更多项目私wo!!!*/ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int void init() { uchar num; lcden=0; write_com(0x38); //0011 1000B,功能模式设置,设置为8为数据口,两行显示,5*7点阵 write_com(0x0c)
[单片机]
单片机 实时时钟电路(<font color='red'>LCD</font>1602、PCF8563)
STM32 ILI9341驱动TFTLCD屏(二)
ILI9341集成了240x320x18位图形类型静态RAM,也可称为显存。这个172,800字节的内存允许存储具有18位分辨率(262K-color)的240xRGBx320图像。当同时存在面板显示读操作和对帧内存相同位置的接口读/写操作时,对显示没有异常的可见效果。 移动图像区域可以通过窗口地址函数在内部GRAM中指定。可以有选择地更新指定的窗口区域,这样就可以独立于静止图像区域同时显示移动图像。 ILI9341有很多调节指令集: 从图中表格可以看到指令集的时序和指令码,可以根据需要把指令封装成相对应的功能函数。举例说明一个,如果想要配置软件复位函数,首先找到软件复位相对应的说明。 软件复位的指令码为0x
[单片机]
STM32 ILI9341<font color='red'>驱动</font>TFT<font color='red'>LCD</font>屏(二)
lcd1602显示的单片机子程序 模块化可多次调用
给大家分享一个lcd1602显示的子程序模块化可多次调用,非常方便移植,不改或改一点就可以用到自己的程序中 单片机源程序如下: #include lcd1602.h /*LCD1602忙碌等待*/ void LCD1602Wait() { unsigned char sta;//读取LCD1602状态字 /*读取液晶状态字之前必须将P2口全部拉高*/ LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; LCD1602_EN = 0; do { LCD1602_EN = 1; sta = LCD1602_DB;//读状态字 L
[单片机]
占比高达77% 安卓4.x版本仍稳坐江山
    此前谷歌推出了最新的Android M系统,当然该系统目前仅限于开发者内部测试。不过对于目前安卓各版本系统占比率情况,谷歌最近也给出了一份数据。 安卓系统版本占比情况(图片来自互联网)     从谷歌公布的数据中我们可以看出从安卓2.2-5.1系统版本中,占比最高的为4.4版本为39.3%,而用户可更新的最新5.1系统仅占2.6%,当然最 少的为占比0.3%的2.2版本。从整体来看Android 2.x的占比为4.9%,Android 4.x的占比率高达77%,而 Android 5.x系统为18.1%。   编辑点评:虽然说目前18.1%的占比率比6月初时的 12.4%有着明显的提升(Android 5.x)。
[手机便携]
Android设备使用USB的硬件接口
  最近业界的发展显示,智能手机/便携系统与自动化系统或机械系统之间存在巨大的市场潜力。2011年春季谷歌引入的Android开放访问架构,开启了基于Android操作系统的设备的巨大可能--允许智能手机和平板电脑控制外部硬件。这种开放的附件框架为便携设备能够推动商务,消费和工业环境的自动化进程提供了平台,利用已经广泛采用并为用户所熟悉的操作系统,连接从厨房电器到重型机械的一切设备。   目前获取微处理器和移动设备之间点对点通信电线的最流行的一种方式是使用通用串行总线(USB)接口。由于广泛普及而受到工程师们的青睐(特别是在消费电子和计算机领域)。下面的章节就如何在基于Android的平板和具备USB控制功能的微处理器之间建立这样的
[嵌入式]

推荐帖子

# if OS_CRITICAL_METHOD==3
#ifOS_CRITICAL_METHOD==3OS_CPU_SRCPU_sr;这句的OS_CPU_SRCPU_sr是什么意思?#ifOS_CRITICAL_METHOD==3条件编译,定义了变量,不需要管OS_CPU_SRCPU_sr一般是被#define预定了,比如:#defineOS_CPU_SRCPU_srfunc()那么条件成立,他就会运行func函数#defineOS_CPU_SRCPU_sr(赋值语句)那么条件成立,他就会运行赋值
laidawang 嵌入式系统
TTL 和CMOS 区别的基础
1,TTL电平:输出高电平2.4V,输出低电平0.4V。在室温下,一般输出高电平是3.5V,输出低电平是0.2V。最小输入高电平和低电平:输入高电平=2.0V,输入低电平=0.8V,噪声容限是0.4V。2,CMOS电平:1逻辑电平电压接近于电源电压,0逻辑电平接近于0V。而且具有很宽的噪声容限。3,电平转换电路:因为TTL和COMS的高低电平的值不一样(ttl5v==cmos3.3v),所以互相连接时需要电平的转换:就是用两个电阻
Jacktang 模拟与混合信号
帮忙啊
有哪位好心人把windowsliveid号码借我用一下啊,我要下载个wdk,最近注册了好几次都没有成功,是不是不开放注册了?帮忙啊这个也能借啊。。
adingx 嵌入式系统
[寻求] 飞思卡尔HCS08系列单片机高手
飞思卡尔HCS08系列单片机,需要在CodeWarrior的环境下用C语言编程,单片机需要通过SPI送8位指令给一个IC,然后接受16位数据.3次操作后对所接受的数据进行计算,把得到的结果送到RS232IC.已有部分源程序.并要把初始化数据写到EEPROM或FLASH.如感兴趣并有以上技术和经验,请发邮件联系.fayaw11@gmail.com谢谢.飞思卡尔HCS08系列单片机高手
vwvw00 单片机
【MSP430共享】中英文数据手册全集
F14XF16XF5XXX的中文数据手册,不喜欢看E文的朋友可以下来看看,另外请大家跟帖补充完善,谢谢 【MSP430共享】中英文数据手册全集请大家把数据手册都发到一个帖子里面,方便后面的朋友查找下载谢了,我下来看看今天回复一下昨晚下载了支持~markmark恩挺好的,mark太好了,很有帮助先看看学习学习谢谢了呵呵大财主就是大财主,不错不错,谢了谢了,我下来看看挺好的,mark谢谢,非常有用我也来一个支持一下回复楼主feng
fengzhang2002 微控制器 MCU
邀您参加:ST高压功率MOSFET研讨会(杭州站、深圳站)
诚邀您参加意法半导体高压功率(HV)MOSFET研讨会!了解更多STHVMOSFET技术及产品,助力增强产品,潜力和市场优势。研讨会亮点: 技术深度解析将详细介绍HVMOSFET产品的先进封装技术、宽泛的击穿电压范围(250到1700V)、低电感电感和低导通电阻等特性。同时,应答显示MDmesh高压MOSFET技术如何增强算力处理能力,实现高效解决方案。 应用实例分享将分享HVMOSFET在工业及汽车应用中的成功案例,
eric_wang 电源技术
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved