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

最新更新时间: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  驱动调试 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic556798.html

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

推荐阅读

英飞凌推出高压侧栅极驱动器EiceDRIVER™ 2ED2410-EM,为汽车配电系统提供新的线路保护功能
目前,先进的智能汽车普遍搭载了高级驾驶辅助系统(ADAS)。ADAS应用是实现汽车主动安全的关键,必须具备高可用性。相比之下,自动驾驶技术的落地则更具挑战性,因为自动驾驶功能要求在发生故障时亦由车辆自身完成应急操作。这给汽车配电系统提出了更高要求,要求引入安全元件,以确保系统在100微秒内快速实现故障隔离。由于保险丝无法满足这一要求,需要考虑对汽车配电系统进行部分或全面的电气化改造。此外,智能汽车上还会出现越来越多可以提高驾驶员和乘客舒适度的应用。配电系统为这些应用供电,让电能以高度安全和可控的方式从电池或者电机流向汽车中的各种负载。如今,设计师面临的最大挑战之一就是降低线束的成本、长度、重量和复杂性。为了帮助设计师解决这一难题,英
发表于 2022-09-23
英飞凌推出高压侧栅极<font color='red'>驱动</font>器Eice<font color='red'>DR</font>IVER™ 2ED2410-EM,为汽车配电系统提供新的线路保护功能
英飞凌推出高压侧栅极驱动器EiceDRIVER™ 2ED2410-EM
英飞凌推出高压侧栅极驱动器EiceDRIVER™ 2ED2410-EM,为先进汽车配电系统提供新的线路保护功能【2022年9月23日,德国慕尼黑讯】目前,先进的智能汽车普遍搭载了高级驾驶辅助系统(ADAS)。ADAS应用是实现汽车主动安全的关键,必须具备高可用性。相比之下,自动驾驶技术的落地则更具挑战性,因为自动驾驶功能要求在发生故障时亦由车辆自身完成应急操作。这给汽车配电系统提出了更高要求,要求引入安全元件,以确保系统在100微秒内快速实现故障隔离。由于保险丝无法满足这一要求,需要考虑对汽车配电系统进行部分或全面的电气化改造。此外,智能汽车上还会出现越来越多可以提高驾驶员和乘客舒适度的应用。配电系统为这些应用供电,让电能以高度安全
发表于 2022-09-23
英飞凌推出高压侧栅极<font color='red'>驱动</font>器Eice<font color='red'>DR</font>IVER™ 2ED2410-EM
基于51单片机+LCD1602显示
LCD1602介绍LCD1602相关引脚LCD1602写命令、写数据相关操作图根据上面时序图和时序参数图我们可以写出 写命令代码 和写数据代码写命令 代码写命令void write_com(char command){ RS = 0; RW = 0; //高读低写 LCD = command; delay5ms(); //这里延时最低要30纳秒 我们直接给5ms E = 1;//使能拉高 delay5ms(); //最低要求延迟150纳秒 我们直接给5ms E = 0;}写数据 代码写数据void write_data(char data){ RS = 1; RW = 0; LCD = data; delay5ms(); //这里延
发表于 2022-09-21
基于51单片机+<font color='red'>LCD</font>1602显示
OK6410A 开发板 (三) 19 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 driver model
总体简述在 u-boot 中, DM 是 uclass device driver 以及三者相关函数的总体uclass device driver 相关结构体 driver 在定义的时候就根据 其 自身的id成员被 分为了 XXX uclass device 在定义的时候就根据 其 自身的name成员 暗含了 与 driver 绑定的条件函数 初始化 在(initf_dm/initr_dm)的时候,为每一个设备(设备树中的节点/U_BOOT_DEVICE声明的结构体)做以下动作 1. 初始化了 device 结构体 2. device_bind_common 实现driver 、uclass 与该 device 绑定(即三者绑定
发表于 2022-09-21
STM32F103标准库开发---Uart串口通信实验---安装串口驱动和串口调试
串口调试器USB转TTL实物图:接口介绍:串口驱动安装双击串口驱动CH341SER.EXE安装软件点击安装安装成功将串口调试器插入电脑,然后选择设备管理器,成功后的端口驱动如下:串口调试助手串口调试助手:sscom5.13.1界面如下:串口通信调试1. 打开串口调试助手双击sscom5.13.1.exe文件2. 选择端口设备管理器中是COM5串口调试助手中选择COM53. 设置参数数据具体如下:4. 打开串口点击打开串口5. 调试现象我单片机中程序的功能是:每100ms发送一次 工欲善其事,必先利其器。具体现象如下:
发表于 2022-09-21
STM32F103标准库开发---Uart串口通信实验---安装串口<font color='red'>驱动</font>和串口<font color='red'>调试</font>
MSP430FR6989系列教程之LCD
一、LCD段式LCD本质上,它由两个互成 90 度的偏光板(偏振入射到显示屏的 光线)、带通电电极的液晶(两个偏光片之间)和一个反射背板(反射穿过显示屏所有层的光线)组成。当某个特定段的电极不通电时,该段“截止”或呈灰色。 在此正常状态下,液晶具有可以将光偏转 90 度的扭 曲结构。 所以在未通电时,光线首先入射到第一层偏光板上并在偏转后从同一方向射出。 然后,在光线通 过液晶时,液晶使光线偏转 90 度 - 由于此时的光线相对于经过第一层偏光板时发生了偏转,因此光线能够 穿过第二层偏光板。 最后,光线经反射背板反射并经过相同的过程返回。由于光线反射回来,所以该段看 起来是亮的或者灰色的。当某个段的电极通电时,该段“导通”或呈黑色。
发表于 2022-09-20
MSP430FR6989系列教程之<font color='red'>LCD</font>

推荐帖子

STM32网络之SMI接口
01 以太网简介STM32F20X和STM32F21的以太网外设可接受和发送数据按照IEE802.3-2002标准。 以太网提供一个完整的、灵活的外设去满足不同应用和要求。它支持与外部相连(PHY)的两个标准的工业接口:默认情况使用在IEEE802.3规范中定义的独立介质接口(MII)和精简介质独立接口(RMII)。它可以被用于大量的需求,例如开关(交换机)、网络接口卡等等。 以太网满足下列标准: ●IEEE802.3-2002,用于以太网MAC。 ●IEEE1588-200
嵌入式爱好 stm32/stm8
LM3S9B96芯片 建议
网上搜了一下,对于我来说比较有吸引力的有以下几点: 1、内嵌SafeRTOS内核2、8/16/32位独立外设并行总线3、支持SDRAM、SRAM/Flash、FPGA、CPLD4、IEEE1588精密时间协议(PTP)硬件支持的10/100以太网MAC/PHY5、先进的运动控制(这个目前用不到) 这些特性在我用过的pic32mx系列上是没有的(pic32的网口是不带phy的)。 另外LM3S9B96的成本比pic32mx系列有巨大优势,但也不排除有些产品不会考虑成本优势的,如果和stm
arthurli 微控制器 MCU
PHYTEC的imxm8plus开发板开箱
幸运申请到eeworld的开发板测评机会。这次申请到的是德国公司的PHYTEC家的开发板:先看开箱:盒子里是网线和不同的220v的插头,可以根据自己情况更换开发板盒子寄了一个网线看板子实体采用核心板和底板的BTB连接方式,用料扎实,还有一个sd卡已经插在上面,分析是uboot,kernel和根文件系统都放在了sd卡里,方便测试人员更换。开箱到此,下次我们看下开发板资源。 PHYTEC的imxm8plus开发板开箱
yijiu98 东芝光电继电器TLP3547评测
lm3s有谁i2c写过zlg7290的吗?帮我看看这个pdf
本帖最后由paulhyde于2014-9-1509:34编辑lm3s有谁i2c写过zlg7290的吗?帮我看看这个pdf,周立功的,程序不全啊 lm3s有谁i2c写过zlg7290的吗?帮我看看这个pdf
citymoon 电子竞赛
TI ZigBee协议栈中终端设备的状态切换详解
本文主要介绍了TIZigBee协议栈Z-Stack中,关于终端设备EndDevice工作过程中,不同状态之间切换的详细说明,并且通过分析空中交互的数据包进一步了解TIZigBee协议栈Z-Stack的工作流程。 终端设备在协议栈中涉及到的状态 在Z-StackHome1.2.2a协议栈的C:\TexasInstruments\Z-StackHome1.2.2a.44539\Components\stack\zdo\ZDApp.h文件中有定义设备的不同状态,分别如下。
Aguilera 无线连接
wince5.0开始菜单SUSPEND没有反应
我是用S3C2410 WINCE5.0,在开始菜单点击SUSPEND,系统没有挂起,也没有什么异样,从DEBUG信息版本到信息有如下输出: 0x8fae4868:BailingonsavebitsbecausesomeonehasanopenDC! 0x8fae4868:OEMIoControl:UnsupportedCode0x10100f4-device0x0101func61 0x8fae4868:FS:GotPowernotif0x0
hahazhenxin WindowsCE
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved