一、概述
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,14430u32 left_margin; // HBPD(horizontal back porch):80u32 right_margin; // HFPD(horizontal front porth):48u32 upper_margin; // VBPD(vertical back porch),15u32 lower_margin; // VFBD(vertical front porch),2u32 hsync_len; // HSPW(horizontal sync pulse width):32u32 vsync_len; // VSPW(vertical sync pulse width):47u32 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=10Msaveenv
其中video = mxcfb0:dev=ldb,LDB-XGA表示選用fb0的ldb驅動
if=RGB666,bpp=16表示16位色彩
設定好後,用printenv查看一下啟動參數:
X6Q SABRELITE U-Boot > printenvbootdelay=3baudrate=115200ipaddr=192.168.1.103serverip=192.168.1.101netmask=255.255.255.0loadaddr=0x10800000rd_loadaddr=0x11000000netdev=eth0ethprime=FEC0bootcmd=booti mmc1ethact=FEC0bootargs=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=10Mstdin=serialstdout=serialstderr=serialEnvironment size: 419/8188 bytesMX6Q SABRELITE U-Boot >
然後用run bootcmd命令啟動開發板,隨後可以在log中看到android啟動的資訊,並可以看到螢幕正常顯示android系統。