基于飞凌iMX8M开发板的UBOOT添加显示支持
OKMX8MM-[color=inherit !important]C[color=inherit !important]开发板基于[color=inherit !important]NXP公司的[color=inherit !important]i.MX8MMini 四核64位处理器设计,采用[color=inherit !important]核心板+底板结构,主频最高1.8GHz,[color=inherit !important]Cortex-A53架构;2GB DDR4 RAM,支持一个通用型Cortex®-[color=inherit !important]M4 400MHz内核处理器提供多种外设接口,如MIPI-CSI、MIPI-DSI、USB、PCIe、UA[color=inherit !important]RT 、eC[color=inherit !important]SPI 、IIC和千兆以太网。本文主要讲解OKMX8MM-C开发板平台[color=inherit !important]uboot添加新的显示支持。一、MIPI接口能够连接的显示设备 OKMX8MM-C开发板只有一个MIPI DSI[color=inherit !important]显示接口,这个接口除了可以连接MIPI显示屏,还可以通过MIPI转LVDS模块,连接LVDS显示屏或HDMI显示屏。 其中MIPI显示屏还分为需要配置和不需要配置的。 1、不需要配置的MIPI屏MIPI接口的显示屏分为需要DSI进入[color=inherit !important]命令模式配置后才能显示的MIPI屏和不需要配置的MIPI屏。不需要配置的MIPI屏比较简单,只要MIPI DSI接口正常输出信号就能正常显示,[color=inherit !important]飞凌嵌入式OKMX8MM-C开发板提供的1024x600分辨率的7寸MIPI屏就是一块不需要配置的MIPI屏,它默认就工作在4lanes高速模式下,只需要将CPU内的显示相关的模块配置好,并让其开始工作,MIPI屏就能够正常显示。 2、需要配置的MIPI屏需要配置的MIPI屏,DSI接口在输出显示信号前需要进入命令模式对显示屏进行配置,配置参数一般由屏体厂家提供。NXP[color=inherit !important]i.MX8MM 评估套件使用的OLED屏RM67191,就是一款需要配置的MIPI显示屏。 3、MIPI转LVDS和HDMI模块这个模块能将MIPI信号转换为LVDS或HDMI信号,通过这个模块可以连接LVDS显示屏或者HDMI显示屏。MIPI转LVDS&HDMI模块需要通过I2C配置转接,将包含对应的显示屏的显示参数等信息配置到[color=inherit !important]芯片内,然后MIPI接口输出对应的显示信号。 二、UBOOT阶段的LOGO显示OKMX8MM-C开发板默认添加了
int board_video_skip(void){ int i; int ret = 0; char const *panel = env_get("panel"); if (!panel) { ... } else { for (i = 0; i < display_count; i++) { if (!strcmp(panel, displays.mode.name)) break; } } if (i < display_count) { if(!strcmp(panel, "MIPI_CUSTOM") || !strcmp(panel, "MIPI2HDMI_CUSTOM")) { char const* options = env_get("custom_video_mode"); char *opt = strdup(options); get_mode_frome_env(&displays, opt); } ... static void get_mode_frome_env(struct display_info_t *dev, char *options){ char *opt; while ((opt = strsep(&options, ",")) != NULL) { if (!*opt) continue; if (!strncmp(opt, "xres=", 5)) { dev->mode.xres = simple_strtoul(opt + 5, NULL, 0); } else if (!strncmp(opt, "yres=", 5)) { dev->mode.yres = simple_strtoul(opt + 5, NULL, 0); } else if (!strncmp(opt, "pixclock=", 9)) { dev->mode.pixclock = simple_strtoul(opt + 9, NULL, 0); } else if (!strncmp(opt, "left_margin=", 12)) { dev->mode.left_margin = simple_strtoul(opt + 12, NULL, 0); } else if (!strncmp(opt, "right_margin=", 13)) { dev->mode.right_margin = simple_strtoul(opt + 13, NULL, 0); } else if (!strncmp(opt, "upper_margin=", 13)) { dev->mode.upper_margin = simple_strtoul(opt + 13, NULL, 0); } else if (!strncmp(opt, "lower_margin=", 13)) { dev->mode.lower_margin = simple_strtoul(opt + 13, NULL, 0); } else if (!strncmp(opt, "hsync_len=", 10)) { dev->mode.hsync_len = simple_strtoul(opt + 10, NULL, 0); } else if (!strncmp(opt, "vsync_len=", 10)) { dev->mode.vsync_len = simple_strtoul(opt + 10, NULL, 0); } else if (!strncmp(opt, "sync=", 5)) { dev->mode.sync = simple_strtoul(opt + 5, NULL, 0); } else if (!strncmp(opt, "vmode=", 6)) { dev->mode.vmode = simple_strtoul(opt + 6, NULL, 0); } else if (!strncmp(opt, "refresh=", 8)) { dev->mode.refresh = simple_strtoul(opt + 8 , NULL, 0); } } printf("use custom mode %s: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %08X, %08X \n ", \ dev->mode.name,dev->mode.refresh, dev->mode.xres, dev->mode.yres, dev->mode.pixclock, \ dev->mode.left_margin, dev->mode.right_margin, dev->mode.upper_margin, dev->mode.lower_margin, \ dev->mode.hsync_len, dev->mode.vsync_len, dev->mode.sync, dev->mode.vmode);} 三、UBOOT新增显示调试UBOOT新增显示屏时,先确认增加的是哪种类型的显示屏,下面跟着小编一起对不同的显示屏进行调试。1、MIPI转LVDS和HDMI模块 MIPI转LVDS和HDMI模块,能够正常显示的条件是:
I2C需要下发的配置参数是通过显示参数计算得出,所以当连接LVDS或HDMI显示时,只需要正确配置显示参数就能让UBOOT正常显示LOGO。飞凌嵌入式提供的代码已经默认支持了640x480、1280x720、1920x1080、1280x800四种分辨率,如果选择这几种分辨率的显示屏,直接通过菜单显示即可(LVDS接口分辨率最大支持到1280x800)。如果要添加其它分辨率的显示屏,飞凌嵌入式提供了一组可以自定义显示的参数,只需要将panel的值设置为”MIPI2HDMICUSTOM“,然后设置环境变量customvideo_mode,修改你需要的xres、yres等值后保存环境变量,重启检测能否显示LOGO。在启动的过程可以看到新设置的显示参数,方便验证修改的是否成功。
2、不需配置的MIPI显示屏 不需配置的MIPI屏,只需要修改显示参数即可正常显示LOGO。飞凌嵌入式开发板默认支持分辨率为1024x600的显示屏,如需添加新的此类型的显示屏,飞凌嵌入式提供了一组可以自定义显示的参数,只需要将panel的值设置为”MIPICUSTOM“,然后设置环境变量customvideo_mode,修改你需要的xres、yres等值后保存环境变量,重启检测能否显示LOGO。在启动的过程可以看到新设置的显示参数,方便验证修改的是否成功。
3、需要配置的MIPI显示屏 这种显示屏对比不需配置的MIPI显示屏多了一步配置,可以参照原厂提供的RM67191进行修改。 首先,添加一组显示参数,显示参数根据显示屏修改,修改文件board/freescale/imx8mmevk/imx8mmevk.c。
然后修改这组参数的使能函数
修改显示屏驱动drivers/video/rm67191.c,在函数int rm67191lcdsetup(struct mipidsiclientdev *paneldev)添加自己的屏的初始化序列。 修改完成后编译测试。 注意:uboot代码不开源,修改代码需要联系销售人员https://www.forlinx.com/product/28.html |
网友评论