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

一、概述

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

基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试_第1张图片

     2、目标:

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

分辨率:1280*800

色彩:18位

色彩数:262K

时钟频率:69.3M Hz

     基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试_第2张图片



二 移植过程

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

基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试_第3张图片

基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试_第4张图片


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

我们再看LP101WX1的接口:

基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试_第5张图片

基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试_第6张图片


它共有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中:

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的屏幕参数。

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,},
};

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

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查看一下启动参数:



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系统。


基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试_第7张图片





你可能感兴趣的:(Android)