您的位置:首页 > 移动开发 > Android开发

基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试

2017-04-11 17:48 567 查看
一、概述

      1、 飞思卡尔 imx6的显示屏驱动架构



     2、目标:

     因sabrelite开发板本身已提供LVDS接口,目标屏幕是LG的LP101WX1-SLN2,其主要参数为:

分辨率:1280*800

色彩:18位

色彩数:262K

时钟频率:69.3M Hz

     


二 移植过程

1、首先把屏幕的接口接到sabrelite开发板的lvds接口上。sabrelite开发板提供的lvds接口如下:





如上图所示,lvds共有20个pin,其中有4组数据线,1组时钟线,其他还有背光控制、电源、地等接口。

我们再看LP101WX1的接口:





它共有40个pin口,共有3组数据线,1组时钟线。下面是接线步骤:

1)把LP101WX1的3组数据线和1组时钟线对应接到开发板的lvds接口上:

ORX0-  =>  LVDS0_TX0_N

ORX0+ =>  LVDS0_TX0_P

...

ORXC- =>  LVDS0_CLK_N

ORXC+ => LVDS0_CLK_P

2)把LP101WX1的电源、地等接上:

2 VCC=>3.3V

3 VCC=>3.3V

10 GND=>接地

13  GND=>接地

16  GND=>接地

19  GND=>接地

3)把LP101WX1的背光接上:

31 GND=>接地

35 PWM=>3.3V(背光亮度调节)

36 LED_EN=>背光使能脚,接1个10k电阻,接到3.3V电源

38 VLED=>背光电源,接到5V电源

2、修改Android的内核源码。

1)找到drivers/video/mxc/ldb.c的fb_videomode数组变量,它定义了屏幕的相关参数,fb_videomode结构体的定义在include/Linux/fb.h中:

[cpp] view
plain copy

  

[cpp] view
plain copy

struct fb_videomode {  

    const char *name;    /* 名字 */  

    u32 refresh;         /* 刷新频率 */  

    u32 xres;            //行像素  

    u32 yres;            //列像素  

    u32 pixclock;        //时钟频率,单位ps,14430  

    u32 left_margin;     // HBPD(horizontal back porch):80  

    u32 right_margin;    // HFPD(horizontal front porth):48  

    u32 upper_margin;    // VBPD(vertical back porch),15  

    u32 lower_margin;    // VFBD(vertical front porch),2  

    u32 hsync_len;       // HSPW(horizontal sync pulse width):32  

    u32 vsync_len;       // VSPW(vertical sync pulse width):47  

    u32 sync;  

    u32 vmode;  

    u32 flag;  

};  

2)修改drivers/video/mxc/ldb.c的fb_videomode数组变量,使它的参数适应LP101WX1的屏幕参数。

[cpp] view
plain copy

static struct fb_videomode ldb_modedb[] = {  

    #if 0  

    {  

     "LDB-XGA", 60, 1024, 768, 15385,  

     220, 40,  

     21, 7,  

     60, 10,  

     0,  

     FB_VMODE_NONINTERLACED,  

     FB_MODE_IS_DETAILED,},  

     #endif  

     //add by tonny@2012-06-04 13:43  

     {  

     "LDB-XGA", 60, 1280, 800, 14430,  

     80, 48,  

     15, 2,  

     32, 47,  

     0,  

     FB_VMODE_NONINTERLACED,  

     FB_MODE_IS_DETAILED,},  

    {  

     "LDB-1080P60", 60, 1920, 1080, 7692,  

     100, 40,  

     30, 3,  

     10, 2,  

     0,  

     FB_VMODE_NONINTERLACED,  

     FB_MODE_IS_DETAILED,},  

};  

[cpp] view
plain copy

  

名称:LDB-XGA

刷新频率:60

分辨率:1280*800

时钟:10^12/69300000 = 14430

sync:0

vmode:FB_VMODE_NONINTERLACED

flag:FB_MODE_IS_DETAILED

3)重新编译kernel,生成boot.img,烧录到sabrelite开发板中。

4)启动开发板,进入u-boot,在u-boot命令行中设置启动参数为:

[html] view
plain copy

setenv bootargs console=ttymxc0,115200 androidboot.console=ttymxc0 vmalloc=400M init=/init video=mxcfb0:dev=ldb,LDB-XGA, if=RGB666,bpp=16 video=mxcfb1:off video=mxcfb2:off fbmem=10M  

saveenv  

其中video = mxcfb0:dev=ldb,LDB-XGA表示选用fb0的ldb驱动

if=RGB666,bpp=16表示16位色彩

设置好后,用printenv查看一下启动参数:

[html] view
plain copy

X6Q SABRELITE U-Boot > printenv  

bootdelay=3  

baudrate=115200  

ipaddr=192.168.1.103  

serverip=192.168.1.101  

netmask=255.255.255.0  

loadaddr=0x10800000  

rd_loadaddr=0x11000000  

netdev=eth0  

ethprime=FEC0  

bootcmd=booti mmc1  

ethact=FEC0  

bootargs=console=ttymxc0,115200 androidboot.console=ttymxc0 vmalloc=400M init=/init video=mxcfb0:dev=ldb,LDB-XGA, if=RGB666,bpp=16 video=mxcfb1:off video=mxcfb2:off fbmem=10M  

stdin=serial  

stdout=serial  

stderr=serial  

  

Environment size: 419/8188 bytes  

MX6Q SABRELITE U-Boot >   

然后用run bootcmd命令启动开发板,随后可以在log中看到android启动的信息,并可以看到屏幕正常显示android系统。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  imx6q lvds