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

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

2013-06-04 17:13 423 查看
一、概述

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

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

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