[I.MX6UL] U-Boot移植(五) LCD 驅動修改

一般修改 LCD 驅動重點注意以下幾點:
①、LCD 所使用的 GPIO,查看 uboot 中 LCD 的 IO 配置是否正確。
②、LCD 背光引腳 GPIO 的配置。
③、LCD 配置參數是否正確。

I.MX6U-ALPHA 開發板 LCD 原理圖和 NXP 官方 I.MX6ULL 開發板一致,也就是 LCD 的 IO 和背光 IO 都一樣的, 所以 IO 部分就不用修改了。 需要修改的之後 LCD 參數,打開文件mx6ull_mybsp_emmc.c,找到如下所示內容:

gedit board/freescale/mx6ull_mybsp_emmc/mx6ull_mybsp_emmc.c

關鍵字:display_info_t const displays
在這裏插入圖片描述
display_info_t 定義在文件 arch/arm/include/asm/imx-common/video.h 中,定義如下:

struct display_info_t { 
	int bus; 
	int addr; 
	int pixfmt; 
	int (*detect)(struct display_info_t const *dev); 
	void    (*enable)(struct display_info_t const *dev); 
	struct  fb_videomode mode; 
};

pixfmt 是像素格式,也就是一個像素點是多少位,如果是 RGB565 的話就是 16 位,如果是 888 的話就是 24 位,一般使用 RGB888。

fb_videomode,定義在文件 include/linux/fb.h 中,定義如下:

struct fb_videomode { 
	const char *name;    /* LCD 名字,要和環境變量中的 panel 相等。 */ 
	u32 refresh;         /*  */ 
	u32 xres;            /* LCD X 軸像素數量。 */ 
	u32 yres;            /* LCD Y 軸像素數量。 */ 
	u32 pixclock;        /* 像素時鐘,每個像素時鐘週期的長度,單位爲皮秒。 */
	u32 left_margin;     /* HBP,水平同步後肩。 */
	u32 right_margin;    /* HFP,水平同步前肩。*/
	u32 upper_margin;     /* VBP,垂直同步後肩。*/ 
	u32 lower_margin;     /* VFP,垂直同步前肩。*/ 
	u32 hsync_len;     /* HSPW,行同步脈寬。  */ 
	u32 vsync_len;     /* VSPW,垂直同步脈寬。  */ 
	u32 sync;     /*  */ 
	u32 vmode;     /* 大多數使用 FB_VMODE_NONINTERLACED,也就是不使用隔行掃描。 */ 
	u32 flag;     /*  */ 
};

唯一不同的像素時鐘 pixclock 的含義不同,以 7 寸 1024*600 分辨率的屏幕(ATK7016)爲例,屏幕要求的像素時鐘爲 51.2MHz,因此:

pixclock=(1/51200000)*10^12=19531

在根據其他的屏幕參數,可以得出 ATK7016 屏幕的配置參數如下:

struct display_info_t const displays[] = {{
	.bus = MX6UL_LCDIF1_BASE_ADDR,
	.addr = 0,
	.pixfmt = 24,
	.detect = NULL,
	.enable	= do_enable_parallel_lcd,
	.mode	= {
		.name		= "TFT7016",
		.xres           = 1024,
		.yres           = 600,
		.pixclock       = 19531,
		.left_margin    = 140,
		.right_margin   = 160,
		.upper_margin   = 20,
		.lower_margin   = 12,
		.hsync_len      = 20,
		.vsync_len      = 3,
		.sync           = 0,
		.vmode          = FB_VMODE_NONINTERLACED
} } };

終端輸入:gedit include/configs/mx6ull_mybsp_emmc.h,打開 mx6ull_mybsp_emmc.h,找到所有如下語句(如果按我的步驟來,這裏之前就已經修改好了):

panel=TFT43AB

將其改爲:

panel=TFT7016
在這裏插入圖片描述

重新編譯uboot

./mx6ull_mybsp_emmc.sh

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_mybsp_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

下載燒錄驗證:

chmod 777 imxdownload  

//給予 imxdownload 可執行權限 
./imxdownload u-boot.bin /dev/sdg 
 
//燒寫 u-boot.bin 到 SD 卡中

燒寫完成以後將 SD 卡插入 I.MX6U-ALPHA 開發板的 TF 卡槽中,最後設置開發板從 SD卡啓動。打開 SecureCRT,設置好開發板所使用的串口並打開,復位開發板,

在SecureCRT 中uboot 的命令模式下輸入如下命令:

setenv panel TFT7016 
saveenv 
reset

此時 LCD 驅動就工作正常了。如果 LCD 還是沒有正常工作的,那就要檢查自己哪裏有沒有改錯,或者還有哪裏沒有修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章