您的位置:首页 > 其它

移植LCD驱动

2007-10-31 15:52 323 查看
一.关于硬件。
从LCD的型号来来看,与s3c2410兼容得比较好的LCD是Sumsung自己产的LTS系列,如LTS350Q1PD1,LTS350Q1PE1。但是这类型号现在已停产,基本上无法买到。代替的型号是LTV系列,如LTV350QVF04,LTV350QVF05。
我使用的是LTV350QVF05。这是一款3.5寸,由TFT LCD,背光电路,触摸屏,内置驱动四部分组成的LCD模块。由于内置了驱动电路,因此它可以和s3c2410之间可以直接相连,硬件设计简单。少量购买的价格在300左右。
LTV350QVF05通过一个60pin的软平线接口和外面相连,其中除了和s3c2410相连接的信号外,最重要的是它的几个电源信号,包括背光部分的电源。调试硬件,首先要保证它的几个电源信号满足要求。Max1779芯片提供三路电源输出,能很好地满足需求。另外需要提供一个Vcom信号。该信号用于LCD的行翻转,是一个低电平0V,高电平3.3V左右的方波信号。LCD模块内部提供一个M信号,只需要将该信号取反就可以得到Vcom信号。通常会搭一个可调的运放电路来实现,调整放大倍数和偏移可以改变屏的亮度和对比度。
在调试好几个电源信号后,上电,应该可以把屏点亮。起初应该是白屏。
下面介绍驱动的移植。

二.关于驱动移植。
网上可以找到代码s3c2410fb.c,基本上可以直接使用。移植的基本步骤是:
1. 添加s3c2410fb.c到drivers/video目录下。
2. 在s3c2410fb.c中添加适当的LCD初始化代码。LTV350QV接口中有一个spi接口用来启动LCD,设计中可以采用gpio口来模拟spi口输出控制信号。编写一个初始化函数,然后在s3c2410fb_init函数中调用即可。
3. 修改video目录的Kconfig和Makefile,保证s3c2410fb.c被编译进内核。
4. 在arch/arm/mach-s3c2410/mach-smdk2410.c中添加static struct s3c2410fb_mach_info smdk2410_lcd_platdata结构。该结构的参数用于设置s3c2410的LCD控制寄存器,需要认真根据自己的LCD参数来设置。包括分辨率、帧频、图像格式等参数。
5. 在arch/arm/mach-s3c2410/mach-smdk2410.c函数smdk2410_map_io中添加代码:
set_s3c2410fb_info(&smdk2410_lcd_platdata)
6. 在arch/arm/mach-s3c2410/devs.c中添加以下代码:
static struct s3c2410fb_mach_info s3c2410fb_info;
void __init set_s3c2410fb_info(struct s3c2410fb_mach_info *hard_s3c2410fb_info)
{
memcpy(&s3c2410fb_info,hard_s3c2410fb_info,sizeof(struct s3c2410fb_mach_info));
s3c_device_lcd.dev.platform_data = &s3c2410fb_info;
}
EXPORT_SYMBOL(set_s3c2410fb_info);
7. 配置内核,添加对LCD的支持,包括启动logo(小企鹅)的支持。

  如果启动后可以看见小企鹅,说明LCD驱动移植成功。
  可能的问题:
1. smdk2410_lcd_platdata结构中帧频(Vsync的频率)的设置不能高于LCD的最高帧频,可以增大lcdcon1中clkval的值Vclk,进而降低Vsync。
2. 图像深度最好设为16bpp,我用过24bpp,结果无法显示企鹅,可能是内核驱动本身不支持。
3. 如果过几分钟后,图像没了。注释掉drivers/char/vt.c中的blank_screen_t()函数内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: