国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于飛凌iMX8M開發(fā)板的UBOOT添加顯示支持

發(fā)布時(shí)間:2022-5-13 14:27    發(fā)布者:阿里嘎多
關(guān)鍵詞: 嵌入式 , 單片機(jī)
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)添加了

  • 1024x600的7寸屏(MIPI7);

  • 自定義7MIPI顯示(MIPICUSTOM);

  • MIPI轉(zhuǎn)HDMI的1920x1080 (MIPI2HDMI1920x1080);

  • 1280x720 (MIPI2HDMI1280x720);

  • 640x480 (MIPI2HDMI640x480);

  • 10.1寸1280x800LVDS顯示屏(MIPI2HDMI1280x800);

  • 自定義MIPI轉(zhuǎn)LVDS(MIPI2HDMICUSTOM)。


小編截取了MIPI7和MIPI2HDMI_1280x720的完整的顯示參數(shù),分別對(duì)應(yīng)了直接連接MIPI屏和通過(guò)MIPI轉(zhuǎn)LVDS&HDMI模塊連接LVDS或HDMI顯示屏。


struct display_info_t const displays[] = {        {                .bus = LCDIF_BASE_ADDR,                .addr = 0,                .pixfmt = 24,                .detect = NULL,                .enable = do_enable_mipi_led,                .mode   = {                        .name                   = "MIPI7",                        .refresh                = 60,                        .xres                   = 1024 ,                        .yres                   = 600,                        .pixclock               = 22733, /* 43987200 */                        .left_margin    = 48,                        .right_margin   = 40,                        .upper_margin   = 16,                        .lower_margin   = 13,                        .hsync_len              = 48,                        .vsync_len              = 3,                        .sync                   = FB_SYNC_EXT,                        .vmode                  = FB_VMODE_NONINTERLACED                }        },            ...        {                       .bus = LCDIF_BASE_ADDR,                .addr = 0,                .pixfmt = 24,                .detect = NULL,                .enable = do_enable_mipi2hdmi,                .mode   = {                        .name                   = "MIPI2HDMI_1280x720",                        .refresh                = 60,                        .xres                   = 1280,                        .yres                   = 720,                        .pixclock               = 13468, //74250000                        .left_margin    = 220,                        .right_margin   = 110,                        .upper_margin   = 20,                        .lower_margin   = 5,                            .hsync_len              = 40,                        .vsync_len              = 5,                        .sync                   = FB_SYNC_EXT,                        .vmode                  = FB_VMODE_NONINTERLACED                }        },      ...}1、如何選擇顯示參數(shù)UBOOT階段通過(guò)讀取UBOOT的環(huán)境變量panel的值來(lái)判定使用哪一組顯示參數(shù),可以通過(guò)UBOOT命令行或者UBOOT菜單設(shè)置panel的值,方法可以參考[color=inherit !important]飛凌[color=inherit !important]嵌入式提供的用戶手冊(cè)。UBOOT代碼通過(guò)判斷哪組參數(shù)的mode字段的name值和panel的值相等就選擇哪組參數(shù),例如panel的值等于MIPI7,那么就會(huì)選擇MIPI7對(duì)應(yīng)的那組顯示參數(shù),也就是飛凌嵌入式提供的1024x600分辨率的7寸MIPI屏。2、自定義參數(shù)是什么意思我們?cè)谡{(diào)試顯示的時(shí)候需要修改panel對(duì)應(yīng)的顯示參數(shù)結(jié)構(gòu)體內(nèi)的參數(shù),自定義參數(shù)是指可以通過(guò)UBOOT命令行設(shè)置環(huán)境變量來(lái)修改顯示參數(shù)結(jié)構(gòu)體內(nèi)的參數(shù)。自定義參數(shù)的用法是panel的值設(shè)置為MIPI2HDMI_CUSTOM或MIPI_CUSTOM,代碼通過(guò)讀取環(huán)境變量customvideomode,然后解析xres、yres等參數(shù)的值替顯示參數(shù)結(jié)構(gòu)體內(nèi)的xres、yres等參數(shù),其代碼實(shí)現(xià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模塊,能夠正常顯示的條件是:

  • 顯示結(jié)構(gòu)體內(nèi)配置當(dāng)前顯示屏的顯示參數(shù);
  • I2C下發(fā)正確的配置參數(shù)到轉(zhuǎn)接模塊。

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)證修改的是否成功。



...u-boot=> setenv panel MIPI2HDMI_CUSTOM              u-boot=> setenv custom_video_mode xres=1024,yres=768u-boot=> sa                                         Saving Environment to MMC... Writing to MMC(1)... OKu-boot=> reset resetting ......Loading Environment from MMC... OKuse custom mode MIPI2HDMI_CUSTOM: 60, 1024, 768, 12048, 200, 64, 24, 1, 136, 3, 00000004, 00000000 ...

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)證修改的是否成功。


...u-boot=> setenv panel MIPI_CUSTOMu-boot=> setenv custom_video_mode xres=800,yres=600,pixclock=20000,refresh=55u-boot=> saSaving Environment to MMC... Writing to MMC(1)... OKu-boot=> reset resetting ......Loading Environment from MMC... OKuse custom mode MIPI_CUSTOM: 55, 800, 600, 20000, 48, 40, 16, 13, 48, 3, 00000004, 00000000  Display: MIPI_CUSTOM (800x600)Video: 800x600x24...

3、需要配置的MIPI顯示屏

這種顯示屏對(duì)比不需配置的MIPI顯示屏多了一步配置,可以參照原廠提供的RM67191進(jìn)行修改。

首先,添加一組顯示參數(shù),顯示參數(shù)根據(jù)顯示屏修改,修改文件board/freescale/imx8mmevk/imx8mmevk.c。


{        .bus = LCDIF_BASE_ADDR,        .addr = 0,        .pixfmt = 24,        .detect = NULL,        .enable = do_enable_mipi_led,        .mode   = {                        .name                   = "RM67191_OLED",                        .refresh                = 60,                               .xres                   = 1080,                        .yres                   = 1920,                        .pixclock               = 7575, /* 132000000 */                        .left_margin    = 34,                        .right_margin   = 20,                        .upper_margin   = 4,                        .lower_margin   = 10,                        .hsync_len              = 2,                        .vsync_len              = 2,                        .sync                   = FB_SYNC_EXT,                .vmode                  = FB_VMODE_NONINTERLACED                  }  }

然后修改這組參數(shù)的使能函數(shù)


void do_enable_mipi_led(struct display_info_t const *dev){        imx_iomux_v3_setup_multiple_pads(backlight_pads,                                         ARRAY_SIZE(backlight_pads));        gpio_request([color=inherit !important]IMX_[color=inherit !important]GPIO_NR(1, 1), "backlight");        gpio_direction_output(IMX_GPIO_NR(1, 1), 0);        gpio_request(IMX_GPIO_NR(1, 8), "DSI EN");        gpio_direction_output(IMX_GPIO_NR(1, 8), 0);        mdelay(10);        gpio_direction_output(IMX_GPIO_NR(1, 8), 1);        /* enable the dispmix & mipi phy power domain */        call_imx_sip(FSL_SIP_GPC, FSL_SIP_CONFIG_GPC_PM_DOMAIN, DISPMIX, true, 0);        call_imx_sip(FSL_SIP_GPC, FSL_SIP_CONFIG_GPC_PM_DOMAIN, MIPI, true, 0);        /* Put lcdif out of reset */        disp_mix_bus_rstn_reset(imx8mm_mipi_dsim_plat_data.gpr_base, false);        disp_mix_lcdif_clks_enable(imx8mm_mipi_dsim_plat_data.gpr_base, true);        /* Setup mipi dsim */        sec_mipi_dsim_setup(&imx8mm_mipi_dsim_plat_data);                rm67191_init();        rm67191_dev.name = dev->mode.name;                imx_mipi_dsi_bridge_attach(&rm67191_dev); /* attach rm67191 device */}struct mipi_dsi_client_dev rm67191_dev = {        .channel        = 0,        .lanes = 4,        .format  = MIPI_DSI_FMT_RGB888,        .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |                          MIPI_DSI_MODE_EOT_PACKET | MIPI_DSI_MODE_VIDEO_HSE,};

修改顯示屏驅(qū)動(dòng)drivers/video/rm67191.c,在函數(shù)int rm67191lcdsetup(struct mipidsiclientdev *paneldev)添加自己的屏的初始化序列。

修改完成后編譯測(cè)試。

注意:uboot代碼不開源,修改代碼需要聯(lián)系銷售人員https://www.forlinx.com/product/28.html


本文地址:http://m.qingdxww.cn/thread-790315-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 利用SAM E54 Xplained Pro評(píng)估工具包演示CAN轉(zhuǎn)USB橋接器以及基于CAN的主機(jī)和自舉程序應(yīng)用程序
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜网站免费版在线观看 | 狠狠操狠狠操 | 美女的隐私免费看无遮挡 | 一区二区三区在线免费看 | 欧美日韩一区二区三在线 | 男人天堂国产 | 日本a中文字幕 | 国产单男| 日韩在线一 | 欧美日韩第一区 | 欧美日一本 | 白丝美女用脚揉男生的命根 | 天天操天天干视频 | 一区二区国产在线播放 | 国产欧美日韩在线播放 | 色视视频| 国产手机国产手机在线 | 手机国产日韩高清免费看片 | 国产专区视频 | www亚洲成人| 日本视频免费高清一本18 | 久久久久性 | 国产高清视频在线观看69 | 国产成人久久精品激情91 | 97玖玖| 日本在线观看 | 麻豆理论片 | 久久9966e这里只有精品 | 青青青激情视频在线最新 | 天天爽天天爽夜夜爽毛片 | 亚洲日本高清 | 国产精品第一页在线观看 | 日韩精品福利视频一区二区三区 | 亚洲国产天堂久久综合图区 | 中文字幕日本不卡一二三区 | 国产精品国产三级农村妇女 | 麻豆国产 | 99精品视频免费 | 日本高清视频不卡 | 欧洲成人在线视频 | 欧美视频在线观看一区二区 |