移植NXP官方uboot到ALPHA開發板過程2-LCD驅動

2020-09-21 13:00:33

我買的正點原子7寸1024*600的RGB螢幕,移植跟著正點原子走,很簡單,但這是建立在uboot基本移植成功的基礎上;uboot初始化螢幕主要在mx6ull_xxx_emmc.hmx6ull_xxx_emmc.c 這兩個板級檔案中。後期用其他LCD的時候,有什麼坑再來添。
一般修改 LCD 驅動重點注意以下幾點:

針對NXP imx6ull-14x14-emmc的uboot LCD驅動移植過程

1.初始化LCD引腳

  1. 找到自己的板級檔案,在mx6ull_xxx_emmc.c中的lcd_pads結構體,因為正點原子的螢幕IO基本相容NXP的螢幕IO,所以基本沒有什麼改動,但是沒有復位引腳,只需要把LCD-IO結構體中的復位引註腳釋掉即可,如果自己畫的板子,注意修改;
    在759行左右:
MX6_PAD_SNVS_TAMPER9__GPIO5_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL),

在765行do_enable_parallel_lcd函數中,註釋LCD復位輸出:

void do_enable_parallel_lcd(struct display_info_t const *dev)
{
	enable_lcdif_clock(dev->bus);

	imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));

	/* Reset the LCD */
	//gpio_direction_output(IMX_GPIO_NR(5, 9) , 0);
	//udelay(500);
	//gpio_direction_output(IMX_GPIO_NR(5, 9) , 1);

	/* Set Brightness to high */
	gpio_direction_output(IMX_GPIO_NR(1, 8) , 1);
}

2.LCD 背光引腳 GPIO 的設定

背光IO相容NXP的,不需要改動,如果自己畫的板子,注意修改;

/* Use GPIO for Brightness adjustment, duty cycle = period. */
MX6_PAD_GPIO1_IO08__GPIO1_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* Set Brightness to high */
gpio_direction_output(IMX_GPIO_NR(1, 8) , 1);

3.LCD 設定引數是否正確

mx6ull_xxx_emmc.c中,NXP通過設定LCD引數結構體,有點複雜,其中包括了 LCD 的解析度、素格式等引數,跟微控制器的初始化不一樣;其中的引數去查詢廠商提供的螢幕資料手冊便知道了,這是正點原子的7寸螢幕資料。

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

開啟 include/configs/mx6ull_xxx_emmc.h,搜尋找到所有如下語句:

panel=TFT43AB

將其改為:

panel=TFT7016

這裡可以自己命名。
下載驗證,如果LCD上有個NXP的彩色標誌和uboot版本號(編譯時間),說明移植成功,下一步就是網路驅動的移植了。