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

 

一、概述

      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的电源、地等接上:

2VCC=>3.3V

3VCC=>3.3V

10GND=>接地

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中:

 

  1. struct fb_videomode {  
  2.     const char *name;    /* 名字 */  
  3.     u32 refresh;         /* 刷新频率 */  
  4.     u32 xres;            //行像素  
  5.     u32 yres;            //列像素  
  6.     u32 pixclock;        //时钟频率,单位ps,14430  
  7.     u32 left_margin;     // HBPD(horizontal back porch):80  
  8.     u32 right_margin;    // HFPD(horizontal front porth):48  
  9.     u32 upper_margin;    // VBPD(vertical back porch),15  
  10.     u32 lower_margin;    // VFBD(vertical front porch),2  
  11.     u32 hsync_len;       // HSPW(horizontal sync pulse width):32  
  12.     u32 vsync_len;       // VSPW(vertical sync pulse width):47  
  13.     u32 sync;  
  14.     u32 vmode;  
  15.     u32 flag;  
  16. };  


 

 

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

 

  1. static struct fb_videomode ldb_modedb[] = {  
  2.     #if 0  
  3.     {  
  4.      "LDB-XGA", 60, 1024, 768, 15385,  
  5.      220, 40,  
  6.      21, 7,  
  7.      60, 10,  
  8.      0,  
  9.      FB_VMODE_NONINTERLACED,  
  10.      FB_MODE_IS_DETAILED,},  
  11.      #endif  
  12.      //add by tonny@2012-06-04 13:43  
  13.      {  
  14.      "LDB-XGA", 60, 1280, 800, 14430,  
  15.      80, 48,  
  16.      15, 2,  
  17.      32, 47,  
  18.      0,  
  19.      FB_VMODE_NONINTERLACED,  
  20.      FB_MODE_IS_DETAILED,},  
  21.     {  
  22.      "LDB-1080P60", 60, 1920, 1080, 7692,  
  23.      100, 40,  
  24.      30, 3,  
  25.      10, 2,  
  26.      0,  
  27.      FB_VMODE_NONINTERLACED,  
  28.      FB_MODE_IS_DETAILED,},  
  29. };  

 

 

名称: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命令行中设置启动参数为:

 

  1. 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  
  2. saveenv  

 

 

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

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

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

 

 

 

 

  1. X6Q SABRELITE U-Boot > printenv  
  2. bootdelay=3  
  3. baudrate=115200  
  4. ipaddr=192.168.1.103  
  5. serverip=192.168.1.101  
  6. netmask=255.255.255.0  
  7. loadaddr=0x10800000  
  8. rd_loadaddr=0x11000000  
  9. netdev=eth0  
  10. ethprime=FEC0  
  11. bootcmd=booti mmc1  
  12. ethact=FEC0  
  13. 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  
  14. stdin=serial  
  15. stdout=serial  
  16. stderr=serial  
  17.   
  18. Environment size: 419/8188 bytes  
  19. MX6Q SABRELITE U-Boot >   

 

 

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

 

 



 

 http://blog.csdn.net/xnwyd/article/details/9023273

 

    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()