[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

扫描二维码关注公众号,回复: 11243924 查看本文章

将其改为:

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 还是没有正常工作的,那就要检查自己哪里有没有改错,或者还有哪里没有修改。

猜你喜欢

转载自blog.csdn.net/qq_29246181/article/details/106252867
今日推荐