我买的正点原子7寸1024*600的RGB屏幕,移植跟着正点原子走,很简单,但这是建立在uboot基本移植成功的基础上;uboot初始化屏幕主要在mx6ull_xxx_emmc.h 和 mx6ull_xxx_emmc.c 这两个板级文件中。后期用其他LCD的时候,有什么坑再来添。
一般修改 LCD 驱动重点注意以下几点:
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);
}
背光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);
在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
} } };
随便找到函数checkboard(),命名自己的板子;
int checkboard(void)
{
puts("Board: MX6ULL XXX EMMC\n");
return 0;
}
打开 include/configs/mx6ull_xxx_emmc.h,搜索找到所有如下语句:
为LCD命名
panel=TFT43AB
将其改为:
panel=TFT7016
下载验证,如果LCD上有个NXP的彩色标志和uboot版本号(编译时间),说明移植成功,下一步就是网络驱动的移植了。