您的位置:首页 > 其它

LCD驱动移植

2017-05-01 19:41 375 查看
*********************************************************************************************************************************************

cpu          : s3c2440(arm9)

开发板    :fl2440开发板

内核版本:linux 3.0

**********************************************************************************************************************************************

   什么是lcd?

    LCD ( Liquid Crystal Display 的简称)液晶显示器。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分普及。按照背光源的不同,LCD可以分为CCFLLED两种。

由于我的开发板的lcd尺寸大小是4.3寸,所以查看一下lcd手册将内核中lcd重要的参数进行修改,参数表如图所示:



TFT工作时序图:



***********************************************************************************************************************************************************************

说明:

VBP(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数,对应驱动中的upper_margin; 

VFB(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应驱动中的lower_margin;

VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算,对应驱动中的vsync_len;

HBP(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数,对应驱动中的left_margin;

HFP(horizontal front porth):表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数,对应驱动中的right_margin;

 HSPW(horizontal sync pulse width):表示水平同步信号的宽度,用VCLK计算,对应驱动中的hsync_len;

*********************************************************************************************************************

1.修改内核代码

[zoulei@CentOS linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.c


218 /* LCD driver info */
219
220 static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
221
222         .lcdcon5        = S3C2410_LCDCON5_FRM565 |
223                           S3C2410_LCDCON5_INVVLINE |
224                           S3C2410_LCDCON5_INVVFRAME |
225                           S3C2410_LCDCON5_PWREN |
226                           S3C2410_LCDCON5_HWSWP,
227
228         .type           = S3C2410_LCDCON1_TFT,
229
230         .width          = 480,/*modify by zoulei 2017.4.18*/
231         .height         = 272,/*modify by zoulei*/
232
233         .pixclock       = 600000, /* HCLK 60 MHz, divisor 10 像素时钟*/
234         .xres           = 480,/*modify by zoulei  水平可见的有效像素*/
235         .yres           = 272,/*modify by zoulei 垂直可见的有效像素*/
236         .bpp            = 16,/*modify by zoulei色位模式*/
237         .left_margin    = 19,/*modify by zoulei行切换,从同步到绘图之间的延迟*/
238         .right_margin   = 10,/*modify by zoulei行切换,从绘图到同步之间的延迟*/
239         .hsync_len
4000
= 30,/*modify by zoulei水平同步的长度*/
240         .upper_margin   = 4,/*modify by zoulei帧切换,从同步到绘图之间的延迟*/
241         .lower_margin   = 2,/*modify by zoulei帧切换,从绘图到同步之间的延迟*/
242         .vsync_len      = 8,/*modify by zoulei垂直同步的长度*/
243 };
......
262         .lpcsel         = 0,//((0xCE6) & ~7) | 1<<4,/*modify by zoulei这个是三星TFT屏参数*/
263 };
**************************************************************************************************************************************************************************

说明:像素时钟pixclock计算:

    DOTCLK = fframe × (X + HBP + HFP+HSPW) × (Y + VBP + VFP+VSPW)  (单位:MHz)

    pixclock = 1012/ DOTCLK=1012/ (fframe × (X + HBP + HFP+HSPW) × (Y + VBP + VFP+VSPW)) (单位:皮秒)

************************************************************************************************************************************

2.配置make menuconfig

[zoulei@CentOS linux-3.0]$ make menuconfig


Device Drivers  ---> Graphics (图像)support  --->

             <*> Support for frame buffer devices  --->

                           [*]   Enable firmware EDID

                           [*]   Enable Video Mode Handling Helpers

                           <*>   S3C2410 LCD framebuffer support

             [*] Backlight & LCD device support  --->

                          <M>   Lowlevel LCD controls

                          <M>   Lowlevel Backlight controls

                          <M>     Generic (aka Sharp Corgi) Backlight Driver

                                        Console display driver support  --->

                                                     <*> Framebuffer Console support

                                                     [*]   Map the console to the primary display device

                                                     [*]   Framebuffer Console Rotation

                                                     [*] Select compiled-in fonts

                                                     [*]   VGA 8x8 font

                                                     [*]   Mini 4x6 font

                                    [*] Bootup logo  ---> 

                                                    [*]   Standard 224-color Linux logo

配置好后make编译,将内核烧入开发板.....

如果要想在开发板的屏幕上看到启动的代码,则因修改如下环境变量,我的是jffs2文件系统,

set bootargs'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0 console=tty1,115200'

set bootargs_jffs2'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0 console=tty1,115200'

***************************************************************************************************************************

说明:我的开发板内核是加载的jffs2文件系统,所以想在开发板屏幕上显示启动信息,在uboot 环境变量里面添加那两段代码

不过主要是添加tty1文本型控制台,也就是对应的putty或者secure crt虚拟控制终端,因此加上控制台参数console=tty1.

********************************************************************************************************************



如果在开发板上看到小企鹅,以及显示信息,ok这样lcd驱动就顺利移植好了......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: