- 浏览: 1577929 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (289)
- java 语法基础 (51)
- spring (8)
- mvc struct /Ant --build.xml (8)
- SOA (0)
- oracle 9i/10g (23)
- sql server 2000-2005 (3)
- 数据库基础知识 (6)
- 设计模式与软件架构 (10)
- Hibernate 持久化 (9)
- J2SE/J2EE/J2ME/AJAX 技术 (8)
- JSF 技术 (3)
- JAVA 图形化 (0)
- JMS (40)
- Eclipse 3.2 IDE 开发技巧 (13)
- 项目处理方法集合 (2)
- html/jsp/javascript (2)
- Unix/Linux (9)
- j2me/ARM/windriver/嵌入式 (4)
- 电信科学 (8)
- jsp (1)
- c/c++ (1)
- LZW压缩算法(java) (2)
- Android (77)
- 版本管理git/svn (2)
最新评论
-
huihai:
有demo吗?
NamingStrategy实现动态表名映射 -
cangbaotu:
推荐给大家一些有用的爬虫源码:https://github.c ...
网络爬虫(源代码参考) -
tuspark:
除了.classpath文件以外,.project文件也应该了 ...
Eclipse .classpath文件浅谈 -
tuspark:
造成eclipse自动关闭的原因有很多,这里有很多介绍:ecl ...
eclipse 自动关闭 解决方案 -
DEMONU:
网上都是这些,这种文章。。。
ActiveMQ中的消息持久性
LCD 原理和移植总结
图1. LCD子系统结构 Framebuffer:是linux的framebuffer驱动在内存开辟的一块显存,存放一帧图像数据。 IPU:是mx51的图像处理单元,里面包含DMA控制器和DI显示接口等。 LCD Driver :是一块和LCD屏幕整合在一起的驱动芯片,接收IPU传过来的数据和时序信号,转化为有规律的LCD驱动电压。 一幅图像的显示过程是这样的:用户打开/dev/fbx设备,使用mmap()系统调用映射framebuffer内存空间到用户空间,用户直接用 memcpy()复制图像数据到framebuffer,DMA探测到framebuffer数据发生变动,启动DMA传输图像数据到IPUI,PU再根 据framebuffer驱动设置的处理模式对像素数据进行一系列处理,比如framebuffer使用了overlay framebuffer那就启动overlay处理单元混合两个framebuffer的数据,另外IPU还会packing像素数据,比如 framebuffer里像素格式为RGB565,IPU会把他packing成RGB666的格式,以配合LCD模块的接口。IPU处理完数据后,送到 DI,在DI时序模块产生的时序信号同步下,一起输出到LCD驱动芯片。 移植LCD驱动的第一步,是确保IPU输出给LCD Driver的时序、数据、供电信号是对的。 时序信号一般是根据LCD的datasheet上的参数,填写fb_videomode这个结构体: struct fb_videomode { const char *name; /* optional */ u32 refresh; /* optional */ u32 xres; // x分辨率 u32 yres; // y分辨率 u32 pixclock; // 像素时钟频率,即每个时钟周期显示一个像素点 u32 left_margin; // 行扫描开始脉冲到一行像素数据开始输出的延迟 hsync<==>DEN u32 right_margin; // 一行像素数据输出完毕到下一行的行扫描开始脉冲间的延迟 DEN <==>hsync u32 upper_margin; // 帧扫描开始脉冲到第一行像素数据开始输出的延迟 vsync<==>DEN(1st line) u32 lower_margin; // 最后一行像素数据输出结束到下一帧的那帧扫描开始脉冲间的延迟DEN(last line)<==>vsync u32 hsync_len; // 行扫描脉冲宽度,单位为pixclock u32 vsync_len; // 帧扫描脉冲宽度,单位为line u32 sync; // 各同步信号的极性定义,如hsync、vsync、DEN的极性等。 u32 vmode; // 显示模式,逐行还是隔行扫描 u32 flag; // 一般为0 }; 这个结构体定义完之后,对于一般的LCD,在连线正确的情况下,系统启动后应该就出来图像了,此时图像可能是上下跳动或者左右有偏移,这就需要再调整一下 fb_videomode中left/right/upper/lower margin参数。如果上电后没有图像,则首先用示波器检测hsync, vsync,DEN,pclk等波形是否正确,使用双踪示波器通过hsync、vsync与DEN的比对查看left/right/upper /lower margin是否合适。如果这些信号都没有问题,那么说明LCD需要通过spi总线发送命令对其进行初始化。初始化代码一般由LCD厂商提供,不过很多厂 商提供的初始化代码都有问题,会导致LCD白屏或者其他不正常的现象。 TFT LCD的原理: 图2. TFT LCD截面图 TFT LCD主要由两个透明电极,中间的液晶分子和一个有色玻璃组成。在没有通电的情况下,液晶分子呈无规则排列,背光无法透过液晶层。当有外加电场时,液晶分 子顺着电场的方向有序排列,背光可以通过,并且由于有色玻璃的滤光,呈现红,绿,蓝色调,不过,背光的透过率只有10%,这是LCD的一个缺点。 以上是一个像素中的一个RGB分量的产生过程。接下来看看如何整合这个基本单元,组成一个LCD屏幕。 图3. LCD平面图 这个图比上面多出来的是2种长条和一种MOS晶体管。这3个东西的作用是在一定的时序下给各显示电极充电。横向的长条和LCD驱动芯片的Gate Driver连接的,用于打开各行的MOSFET。纵向的长条和LCD驱动芯片的Source Driver连接,代表RGB数据。整个过程大致是这样的:首先第一行的Gate线产生一个充电脉冲,使第一行的MOS管导通,同时Source线那边经 过数模转换后的RGB电压也已经就绪,于是通过MOS管对显示电极充电,每个pixel clock充电一个像素,即3根Source线完成充电。对于320x480的屏,一共有480根Gate线,320x3=960根Source线,则经 过320个pclk后,第一行充电完成,显示出相应的画面。然后,第二行的Gate线产生一个充电脉冲,一次类推,直到最后一行,又从第一行开 始..... 图4. LCD基本结构
图5. LCD基本单元图 图6. LCD阵列图 图7. LCD信号图 图8. LCD整体框图 LCD点屏步骤: 1.参考LCD datasheet修改fb_videomode结构体的参数。 2.配置GPIO,点亮LCD背光。 3.参考LCD datasheet看这个LCD是否需要spi总线发送命令进行初始化,一般厂商给datasheet时也会给一份初始化代码,不过有些参数是错误的,需要调整,发送不正确的命令会导致LCD白屏。 4.用示波器测试从LCD控制器出来的Hsync, Vsync, DE, PCLK是否正确,用万用表测量Vio, Vci是否正常。 5.有的LCD Driver需要LCD控制器发出一个CS片选使能信号。 6.用万用表测量LCD的栅压是否正常,一般为9.2V。 7.如果上述步骤后还出不来,再检查LCD初始化命令是否正确,spi时序是否符合。 图像异常处理: 1.驱动问题 上下抖动,左右没对齐:调整left/right/upper/lower margin值 2.LCD初始化命令问题 有纹波:调整VDD/AVDD/VGL/VGH电压 色彩失真:看LCD的RGB模式设置和LCD控制器出来的RGB模式是否一致 |
发表评论
-
APN(default、mms、supl、dun、hipri接入点类型的区别)
2013-10-10 19:31 45585设置APN上网时,大家可能经常遇到这个问题:为什么有时要填写 ... -
AMR音频编码器概述及文件格式分析
2013-10-10 19:29 3910全称Adaptive Multi-Rate,自适应多速率编码 ... -
pad 强制加载 Hdpi资源 (2.3 dpi < 240)
2012-07-16 16:47 0pad 强制加载 Hdpi资源 (2.3 dpi < ... -
android 设计模式-享元模式
2011-12-16 23:01 2151享元(FlyWeight)模式,原意是“轻量级”模式,它用来解 ... -
statusbar 2.3
2011-11-08 16:04 1242以前我的文章分析过Stat ... -
android 输入法默认设置
2011-07-07 14:00 7145设置默认输入法 在 frameworks\base\co ... -
Android Media Scanner Process
2011-06-06 22:58 3352下面是系统图 Medi ... -
handler与多线程消息处理
2011-06-04 13:42 8237在Android下面也有多线程的概念,在C/C++中,子线程可 ... -
android light
2011-03-24 16:15 3374背光设置是在:设置->声音和显示->亮度,通过进度 ... -
PowerManagerService sensor
2011-03-22 20:06 2631默认分类 2010-12-24 14:34:55 阅读144 ... -
android 单例
2011-02-15 09:26 41861. Framework层的代码: A ... -
Android 开发之 Services 服务
2010-11-02 18:21 4190Service Service ... -
深入学习android之AlarmManager
2010-11-01 16:50 34678对应AlarmManage有一个Alarm ... -
eclipse+android+ddms+adt
2010-09-14 10:30 8385用eclipse + ADT作为android ... -
Menus
2010-09-05 19:01 1753Android Menus 文章分类:移动开发 1.O ... -
Android开机自启动应用开发
2010-08-28 10:07 4550目前需要开发一个开机自启动的GTD应用程序来提醒用户的 ... -
Android2.1_Launcher学习笔记
2010-08-11 13:40 3803文章分类:移动开发 好么,2.0的源码没看几天,2.1的 ... -
Browsing Android Source in Eclipse
2010-08-09 16:00 3388Google’s Android SDK includes ... -
android 编译
2010-08-07 16:31 24891 我的系统是Ubuntu 8.04 * 2 系统上 ... -
Ubuntu linux 右键添加"以管理员身份打开","在终端中打开"
2010-08-02 15:04 4552Ubuntu linux 右键添加"以管理员身份打开 ...
相关推荐
展锐LCD移植介绍V1.2-nowatermark
AM335X LCD驱动移植 AM335x 在Uboot增加自定义的命令控制LCD功能
S3C2440_uboot2010.06_LCD驱动移植手册
介绍MTK feature phone中LCD的移植
基于STM32的LCD移植,可在keil4中完美运行,根据其中的作图函数,可在LCD上画出相应的图像
MCU和另一种类型的LCD组装在一起。本 指南通过将嵌入式艺术家的EA1788(带有 片上LCD控制器)BSP移植到Keil的 MCB1700(无片上LCD控制器)板,逐步 说明了如何做到这一点。本应用笔记说明 了如何将现有的emWin BSP...
Linux的LCD驱动源码分析及移植
linux-2.6.28在mini2440上的移植之lcd驱动的移植porting lcd driver to linux-2.6.28 for mini2440 board
高通MSM8953平台LCM模组移植步骤,教程和多媒体指南截图。
ecos+stm32f207+lcd320x240移植
stm32f103c8t6串行驱动LCD12864, stm32f103c8t6程序移植51单片机 串行驱动LCD12864, stm32f103c8t6程序移植51单片机LCD12864显示屏
S3C2410下LCD驱动程序移植,内容很详细。
S3C2410下LCD驱动程序移植及GUI程序编写.pdf
为了对LCD显示屏幕的支持,首先移植LCD驱动,这个文档是Linux2.6.24&LCD;。
本人的UBI文件系统移植总结,希望对大家有用。
ucos II 的教程,包括移植方法等。
本程序是基于51单片机的C语言程序,是LCD12864的基本指令及解释,可方便的移植到其他工程中,程序独立性较高,适合初学者直接用LCD12864的功能!
本资源是基于s3c2440开发板,对u-boot移植过程中的每一步都讲解透彻
兼容正点原子精英版,多款屏幕和触摸芯片兼容