OKMX8MM-[color=inherit !important]C[color=inherit !important]開發(fā)板基于[color=inherit !important]NXP公司的[color=inherit !important]i.MX8MMini 四核64位處理器設(shè)計(jì),采用[color=inherit !important]核心板+底板結(jié)構(gòu),主頻最高1.8GHz,[color=inherit !important]Cortex-A53架構(gòu);2GB DDR4 RAM,支持一個(gè)通用型Cortex®-[color=inherit !important]M4 400MHz內(nèi)核處理器提供多種外設(shè)接口,如MIPI-CSI、MIPI-DSI、USB、PCIe、UA[color=inherit !important]RT 、eC[color=inherit !important]SPI 、IIC和千兆以太網(wǎng)。本文主要講解OKMX8MM-C開發(fā)板平臺(tái)[color=inherit !important]uboot添加新的顯示支持。一、MIPI接口能夠連接的顯示設(shè)備 OKMX8MM-C開發(fā)板只有一個(gè)MIPI DSI[color=inherit !important]顯示接口,這個(gè)接口除了可以連接MIPI顯示屏,還可以通過(guò)MIPI轉(zhuǎn)LVDS模塊,連接LVDS顯示屏或HDMI顯示屏。 其中MIPI顯示屏還分為需要配置和不需要配置的。 1、不需要配置的MIPI屏MIPI接口的顯示屏分為需要DSI進(jìn)入[color=inherit !important]命令模式配置后才能顯示的MIPI屏和不需要配置的MIPI屏。不需要配置的MIPI屏比較簡(jiǎn)單,只要MIPI DSI接口正常輸出信號(hào)就能正常顯示,[color=inherit !important]飛凌嵌入式OKMX8MM-C開發(fā)板提供的1024x600分辨率的7寸MIPI屏就是一塊不需要配置的MIPI屏,它默認(rèn)就工作在4lanes高速模式下,只需要將CPU內(nèi)的顯示相關(guān)的模塊配置好,并讓其開始工作,MIPI屏就能夠正常顯示。 2、需要配置的MIPI屏需要配置的MIPI屏,DSI接口在輸出顯示信號(hào)前需要進(jìn)入命令模式對(duì)顯示屏進(jìn)行配置,配置參數(shù)一般由屏體廠家提供。NXP[color=inherit !important]i.MX8MM 評(píng)估套件使用的OLED屏RM67191,就是一款需要配置的MIPI顯示屏。 3、MIPI轉(zhuǎn)LVDS和HDMI模塊這個(gè)模塊能將MIPI信號(hào)轉(zhuǎn)換為L(zhǎng)VDS或HDMI信號(hào),通過(guò)這個(gè)模塊可以連接LVDS顯示屏或者HDMI顯示屏。MIPI轉(zhuǎn)LVDS&HDMI模塊需要通過(guò)I2C配置轉(zhuǎn)接,將包含對(duì)應(yīng)的顯示屏的顯示參數(shù)等信息配置到[color=inherit !important]芯片內(nèi),然后MIPI接口輸出對(duì)應(yīng)的顯示信號(hào)。 二、UBOOT階段的LOGO顯示OKMX8MM-C開發(fā)板默認(rèn)添加了
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新增顯示調(diào)試UBOOT新增顯示屏?xí)r,先確認(rèn)增加的是哪種類型的顯示屏,下面跟著小編一起對(duì)不同的顯示屏進(jìn)行調(diào)試。1、MIPI轉(zhuǎn)LVDS和HDMI模塊 MIPI轉(zhuǎn)LVDS和HDMI模塊,能夠正常顯示的條件是:
I2C需要下發(fā)的配置參數(shù)是通過(guò)顯示參數(shù)計(jì)算得出,所以當(dāng)連接LVDS或HDMI顯示時(shí),只需要正確配置顯示參數(shù)就能讓UBOOT正常顯示LOGO。飛凌嵌入式提供的代碼已經(jīng)默認(rèn)支持了640x480、1280x720、1920x1080、1280x800四種分辨率,如果選擇這幾種分辨率的顯示屏,直接通過(guò)菜單顯示即可(LVDS接口分辨率最大支持到1280x800)。如果要添加其它分辨率的顯示屏,飛凌嵌入式提供了一組可以自定義顯示的參數(shù),只需要將panel的值設(shè)置為”MIPI2HDMICUSTOM“,然后設(shè)置環(huán)境變量customvideo_mode,修改你需要的xres、yres等值后保存環(huán)境變量,重啟檢測(cè)能否顯示LOGO。在啟動(dòng)的過(guò)程可以看到新設(shè)置的顯示參數(shù),方便驗(yàn)證修改的是否成功。
2、不需配置的MIPI顯示屏 不需配置的MIPI屏,只需要修改顯示參數(shù)即可正常顯示LOGO。飛凌嵌入式開發(fā)板默認(rèn)支持分辨率為1024x600的顯示屏,如需添加新的此類型的顯示屏,飛凌嵌入式提供了一組可以自定義顯示的參數(shù),只需要將panel的值設(shè)置為”MIPICUSTOM“,然后設(shè)置環(huán)境變量customvideo_mode,修改你需要的xres、yres等值后保存環(huán)境變量,重啟檢測(cè)能否顯示LOGO。在啟動(dòng)的過(guò)程可以看到新設(shè)置的顯示參數(shù),方便驗(yàn)證修改的是否成功。
3、需要配置的MIPI顯示屏 這種顯示屏對(duì)比不需配置的MIPI顯示屏多了一步配置,可以參照原廠提供的RM67191進(jìn)行修改。 首先,添加一組顯示參數(shù),顯示參數(shù)根據(jù)顯示屏修改,修改文件board/freescale/imx8mmevk/imx8mmevk.c。
然后修改這組參數(shù)的使能函數(shù)
修改顯示屏驅(qū)動(dòng)drivers/video/rm67191.c,在函數(shù)int rm67191lcdsetup(struct mipidsiclientdev *paneldev)添加自己的屏的初始化序列。 修改完成后編譯測(cè)試。 注意:uboot代碼不開源,修改代碼需要聯(lián)系銷售人員https://www.forlinx.com/product/28.html |