在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OKMX8MM-C開發板UBOOT添加新的顯示支持

飛凌嵌入式 ? 2022-01-07 16:09 ? 次閱讀

OKMX8MM-C開發板基于NXP公司的i.MX8MMini 四核64位處理器設計,采用核心板+底板結構,主頻最高1.8GHz,Cortex-A53架構;2GB DDR4 RAM,支持一個通用型Cortex-M4 400MHz內核處理器提供多種外設接口,如MIPI-CSI、MIPI-DSIUSB、PCIe、UART 、eCSPI 、IIC和千兆以太網。本文主要講解OKMX8MM-C開發板平臺uboot添加新的顯示支持。

一、MIPI接口能夠連接的顯示設備

OKMX8MM-C開發板只有一個MIPI DSI顯示接口,這個接口除了可以連接MIPI顯示屏,還可以通過MIPI轉LVDS模塊,連接LVDS顯示屏或HDMI顯示屏。

其中MIPI顯示屏還分為需要配置和不需要配置的。

1、不需要配置的MIPI屏

MIPI接口的顯示屏分為需要DSI進入命令模式配置后才能顯示的MIPI屏和不需要配置的MIPI屏。不需要配置的MIPI屏比較簡單,只要MIPI DSI接口正常輸出信號就能正常顯示,飛凌嵌入式OKMX8MM-C開發板提供的1024x600分辨率的7寸MIPI屏就是一塊不需要配置的MIPI屏,它默認就工作在4lanes高速模式下,只需要將CPU內的顯示相關的模塊配置好,并讓其開始工作,MIPI屏就能夠正常顯示。

2、需要配置的MIPI屏

需要配置的MIPI屏,DSI接口在輸出顯示信號前需要進入命令模式對顯示屏進行配置,配置參數一般由屏體廠家提供。NXP i.MX8MM 評估套件使用的OLED屏RM67191,就是一款需要配置的MIPI顯示屏。

3、MIPI轉LVDS和HDMI模塊

這個模塊能將MIPI信號轉換為LVDS或HDMI信號,通過這個模塊可以連接LVDS顯示屏或者HDMI顯示屏。MIPI轉LVDS&HDMI模塊需要通過I2C配置轉接,將包含對應的顯示屏的顯示參數等信息配置到芯片內,然后MIPI接口輸出對應的顯示信號。

二、UBOOT階段的LOGO顯示

OKMX8MM-C開發板默認添加了
  • 1024x600的7寸屏MIPI7

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

  • MIPI轉HDMI的1920x1080 (MIPI2HDMI1920x1080

  • 1280x720 (MIPI2HDMI1280x720

  • 640x480 (MIPI2HDMI640x480

  • 10.1寸1280x800LVDS顯示屏(MIPI2HDMI1280x800

  • 自定義MIPI轉LVDS(MIPI2HDMICUSTOM)。

小編截取了MIPI7和MIPI2HDMI_1280x720的完整的顯示參數,分別對應了直接連接MIPI屏和通過MIPI轉LVDS&HDMI模塊連接LVDS或HDMI顯示屏。

  1. structdisplay_info_tconst displays[] = {

  2. {

  3. .bus = LCDIF_BASE_ADDR,

  4. .addr = 0,

  5. .pixfmt = 24,

  6. .detect = NULL,

  7. .enable = do_enable_mipi_led,

  8. .mode = {

  9. .name = "MIPI7",

  10. .refresh = 60,

  11. .xres = 1024,

  12. .yres = 600,

  13. .pixclock = 22733, /* 43987200 */

  14. .left_margin = 48,

  15. .right_margin = 40,

  16. .upper_margin = 16,

  17. .lower_margin = 13,

  18. .hsync_len = 48,

  19. .vsync_len = 3,

  20. .sync = FB_SYNC_EXT,

  21. .vmode = FB_VMODE_NONINTERLACED

  22. }

  23. },

  24. ...

  25. {

  26. .bus = LCDIF_BASE_ADDR,

  27. .addr = 0,

  28. .pixfmt = 24,

  29. .detect = NULL,

  30. .enable = do_enable_mipi2hdmi,

  31. .mode = {

  32. .name = "MIPI2HDMI_1280x720",

  33. .refresh = 60,

  34. .xres = 1280,

  35. .yres = 720,

  36. .pixclock = 13468, //74250000

  37. .left_margin = 220,

  38. .right_margin = 110,

  39. .upper_margin = 20,

  40. .lower_margin = 5,

  41. .hsync_len = 40,

  42. .vsync_len = 5,

  43. .sync = FB_SYNC_EXT,

  44. .vmode = FB_VMODE_NONINTERLACED

  45. }

  46. },

  47. ...

  48. }

1、如何選擇顯示參數

UBOOT階段通過讀取UBOOT的環境變量panel的值來判定使用哪一組顯示參數,可以通過UBOOT命令行或者UBOOT菜單設置panel的值,方法可以參考飛凌嵌入式提供的用戶手冊UBOOT代碼通過判斷哪組參數的mode字段的name值和panel的值相等就選擇哪組參數,例如panel的值等于MIPI7,那么就會選擇MIPI7對應的那組顯示參數,也就是飛凌嵌入式提供的1024x600分辨率的7寸MIPI屏。

2、自定義參數是什么意思

我們在調試顯示的時候需要修改panel對應的顯示參數結構體內的參數,自定義參數是指可以通過UBOOT命令行設置環境變量來修改顯示參數結構體內的參數。自定義參數的用法是panel的值設置為MIPI2HDMI_CUSTOM或MIPI_CUSTOM,代碼通過讀取環境變量customvideomode,然后解析xres、yres等參數的值替顯示參數結構體內的xres、yres等參數,其代碼實現如下。

  1. int board_video_skip(void)

  2. {

  3. int i;

  4. int ret = 0;

  5. charconst*panel = env_get("panel");

  6. if(!panel) {

  7. ...

  8. } else{

  9. for(i = 0; i < display_count; i++) {

  10. if(!strcmp(panel, displays[i].mode.name))

  11. break;

  12. }

  13. }

  14. if(i < display_count) {

  15. if(!strcmp(panel, "MIPI_CUSTOM") || !strcmp(panel, "MIPI2HDMI_CUSTOM")) {

  16. charconst* options = env_get("custom_video_mode");

  17. char*opt = strdup(options);

  18. get_mode_frome_env(&displays[i], opt);

  19. }

  20. ...


  1. staticvoid get_mode_frome_env(structdisplay_info_t*dev, char*options)

  2. {

  3. char*opt;

  4. while((opt = strsep(&options, ",")) != NULL) {

  5. if(!*opt)

  6. continue;

  7. if(!strncmp(opt, "xres=", 5)) {

  8. dev->mode.xres = simple_strtoul(opt + 5, NULL, 0);

  9. } elseif(!strncmp(opt, "yres=", 5)) {

  10. dev->mode.yres = simple_strtoul(opt + 5, NULL, 0);

  11. } elseif(!strncmp(opt, "pixclock=", 9)) {

  12. dev->mode.pixclock = simple_strtoul(opt + 9, NULL, 0);

  13. } elseif(!strncmp(opt, "left_margin=", 12)) {

  14. dev->mode.left_margin = simple_strtoul(opt + 12, NULL, 0);

  15. } elseif(!strncmp(opt, "right_margin=", 13)) {

  16. dev->mode.right_margin = simple_strtoul(opt + 13, NULL, 0);

  17. } elseif(!strncmp(opt, "upper_margin=", 13)) {

  18. dev->mode.upper_margin = simple_strtoul(opt + 13, NULL, 0);

  19. } elseif(!strncmp(opt, "lower_margin=", 13)) {

  20. dev->mode.lower_margin = simple_strtoul(opt + 13, NULL, 0);

  21. } elseif(!strncmp(opt, "hsync_len=", 10)) {

  22. dev->mode.hsync_len = simple_strtoul(opt + 10, NULL, 0);

  23. } elseif(!strncmp(opt, "vsync_len=", 10)) {

  24. dev->mode.vsync_len = simple_strtoul(opt + 10, NULL, 0);

  25. } elseif(!strncmp(opt, "sync=", 5)) {

  26. dev->mode.sync = simple_strtoul(opt + 5, NULL, 0);

  27. } elseif(!strncmp(opt, "vmode=", 6)) {

  28. dev->mode.vmode = simple_strtoul(opt + 6, NULL, 0);

  29. } elseif(!strncmp(opt, "refresh=", 8)) {

  30. dev->mode.refresh = simple_strtoul(opt + 8, NULL, 0);

  31. }

  32. }

  33. printf("use custom mode %s: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %08X, %08X \n ", \

  34. dev->mode.name,dev->mode.refresh, dev->mode.xres, dev->mode.yres, dev->mode.pixclock, \

  35. dev->mode.left_margin, dev->mode.right_margin, dev->mode.upper_margin, dev->mode.lower_margin, \

  36. dev->mode.hsync_len, dev->mode.vsync_len, dev->mode.sync, dev->mode.vmode);

  37. }

三、UBOOT新增顯示調試

UBOOT新增顯示屏時,先確認增加的是哪種類型的顯示屏,下面跟著小編一起對不同的顯示屏進行調試。

1、MIPI轉LVDS和HDMI模塊

MIPI轉LVDS和HDMI模塊,能夠正常顯示的條件是:

  • 顯示結構體內配置當前顯示屏的顯示參數;
  • I2C下發正確的配置參數到轉接模塊。
I2C需要下發的配置參數是通過顯示參數計算得出,所以當連接LVDS或HDMI顯示時,只需要正確配置顯示參數就能讓UBOOT正常顯示LOGO。飛凌嵌入式提供的代碼已經默認支持了640x480、1280x720、1920x1080、1280x800四種分辨,如果選擇這幾種分辨率的顯示屏,直接通過菜單顯示即可(LVDS接口分辨率最大支持到1280x800)。如果要添加其它分辨率的顯示屏,飛凌嵌入式提供了一組可以自定義顯示的參數,只需要將panel的值設置為”MIPI2HDMICUSTOM“,然后設置環境變量customvideo_mode,修改你需要的xres、yres等值后保存環境變量,重啟檢測能否顯示LOGO。在啟動的過程可以看到新設置的顯示參數,方便驗證修改的是否成功。

  1. ...

  2. u-boot=> setenv panel MIPI2HDMI_CUSTOM

  3. u-boot=> setenv custom_video_mode xres=1024,yres=768

  4. u-boot=> sa

  5. SavingEnvironment to MMC... Writing to MMC(1)... OK

  6. u-boot=> reset

  7. resetting ...

  8. ...

  9. LoadingEnvironment from MMC... OK

  10. use custom mode MIPI2HDMI_CUSTOM: 60, 1024, 768, 12048, 200, 64, 24, 1, 136, 3, 00000004, 00000000

  11. ...

2、不需配置的MIPI顯示屏

不需配置的MIPI屏,只需要修改顯示參數即可正常顯示LOGO。飛凌嵌入式開發板默認支持分辨率為1024x600的顯示屏,如需添加新的此類型的顯示屏,飛凌嵌入式提供了一組可以自定義顯示的參數,只需要將panel的值設置為”MIPICUSTOM“,然后設置環境變量customvideo_mode,修改你需要的xres、yres等值后保存環境變量,重啟檢測能否顯示LOGO。在啟動的過程可以看到新設置的顯示參數,方便驗證修改是否成功。

  1. ...

  2. u-boot=> setenv panel MIPI_CUSTOM

  3. u-boot=> setenv custom_video_mode xres=800,yres=600,pixclock=20000,refresh=55

  4. u-boot=> sa

  5. SavingEnvironment to MMC... Writing to MMC(1)... OK

  6. u-boot=> reset

  7. resetting ...

  8. ...

  9. LoadingEnvironment from MMC... OK

  10. use custom mode MIPI_CUSTOM: 55, 800, 600, 20000, 48, 40, 16, 13, 48, 3, 00000004, 00000000

  11. Display: MIPI_CUSTOM (800x600)

  12. Video: 800x600x24

  13. ...

3、需要配置的MIPI顯示屏

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

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


  1. {

  2. .bus = LCDIF_BASE_ADDR,

  3. .addr = 0,

  4. .pixfmt = 24,

  5. .detect = NULL,

  6. .enable = do_enable_mipi_led,

  7. .mode = {

  8. .name = "RM67191_OLED",

  9. .refresh = 60,

  10. .xres = 1080,

  11. .yres = 1920,

  12. .pixclock = 7575, /* 132000000 */

  13. .left_margin = 34,

  14. .right_margin = 20,

  15. .upper_margin = 4,

  16. .lower_margin = 10,

  17. .hsync_len = 2,

  18. .vsync_len = 2,

  19. .sync = FB_SYNC_EXT,

  20. .vmode = FB_VMODE_NONINTERLACED

  21. }

  22. }

然后修改這組參數的使能函數


  1. void do_enable_mipi_led(structdisplay_info_tconst*dev)

  2. {

  3. imx_iomux_v3_setup_multiple_pads(backlight_pads,

  4. ARRAY_SIZE(backlight_pads));

  5. gpio_request(IMX_GPIO_NR(1, 1), "backlight");

  6. gpio_direction_output(IMX_GPIO_NR(1, 1), 0);

  7. gpio_request(IMX_GPIO_NR(1, 8), "DSI EN");

  8. gpio_direction_output(IMX_GPIO_NR(1, 8), 0);

  9. mdelay(10);

  10. gpio_direction_output(IMX_GPIO_NR(1, 8), 1);

  11. /* enable the dispmix & mipi phy power domain */

  12. call_imx_sip(FSL_SIP_GPC, FSL_SIP_CONFIG_GPC_PM_DOMAIN, DISPMIX, true, 0);

  13. call_imx_sip(FSL_SIP_GPC, FSL_SIP_CONFIG_GPC_PM_DOMAIN, MIPI, true, 0);

  14. /* Put lcdif out of reset */

  15. disp_mix_bus_rstn_reset(imx8mm_mipi_dsim_plat_data.gpr_base, false);

  16. disp_mix_lcdif_clks_enable(imx8mm_mipi_dsim_plat_data.gpr_base, true);

  17. /* Setup mipi dsim */

  18. sec_mipi_dsim_setup(&imx8mm_mipi_dsim_plat_data);

  19. rm67191_init();

  20. rm67191_dev.name = dev->mode.name;

  21. imx_mipi_dsi_bridge_attach(&rm67191_dev); /* attach rm67191 device */

  22. }


  1. struct mipi_dsi_client_dev rm67191_dev = {

  2. .channel = 0,

  3. .lanes = 4,

  4. .format = MIPI_DSI_FMT_RGB888,

  5. .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |

  6. MIPI_DSI_MODE_EOT_PACKET | MIPI_DSI_MODE_VIDEO_HSE,

  7. };

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

修改完成后編譯測試。

注意:uboot代碼不開源,修改代碼需要聯系銷售人員

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發板
    +關注

    關注

    25

    文章

    5096

    瀏覽量

    97825
收藏 人收藏

    評論

    相關推薦

    迅為RK3576開發板Android?多屏顯示

    迅為RK3576開發板Android?多屏顯示
    的頭像 發表于 01-16 16:58 ?94次閱讀
    迅為RK3576<b class='flag-5'>開發板</b>Android?多屏<b class='flag-5'>顯示</b>

    【米爾RK3576開發板評測】+項目名稱值得購買的米爾RK3576開發板

    接口,風扇接口 兩個40Pin排針]接口,一共80個引腳。 板載AP6256 Wi-Fi模塊,支持Wi-Fi 5,藍牙5.2 往上是LED燈,五個按鈕,Type-C Debug接口,12V DC接口,官方配了12V3A電源 總的來說,這塊
    發表于 01-08 22:59

    【RA8D1試用活動】RA8D1B-CPKCOR開發板移植linux

    【RA8D1試用活動】RA8D1B-CPKCOR開發板移植linux
    的頭像 發表于 11-16 01:02 ?279次閱讀
    【RA<b class='flag-5'>8</b>D1試用活動】RA<b class='flag-5'>8</b>D1B-CPKCOR<b class='flag-5'>開發板</b>移植linux

    基于哪吒開發板部署YOLOv8模型

    2024英特爾 “走近開發者”互動活動-哪吒開發套件免費試 用 AI 創新計劃:哪吒開發板是專為支持入門級邊緣 AI 應用程序和設備而設計,能夠滿足人工智能學習、
    的頭像 發表于 11-15 14:13 ?344次閱讀
    基于哪吒<b class='flag-5'>開發板</b>部署YOLOv<b class='flag-5'>8</b>模型

    設計用于TMS320C203評估的TMS320C203 DSP開發板

    電子發燒友網站提供《設計用于TMS320C203評估的TMS320C203 DSP開發板.pdf》資料免費下載
    發表于 10-28 10:23 ?0次下載
    設計用于TMS320<b class='flag-5'>C</b>203評估的TMS320<b class='flag-5'>C</b>203 DSP<b class='flag-5'>開發板</b>

    設計TMS320C548/9 DSP開發板

    電子發燒友網站提供《設計TMS320C548/9 DSP開發板.pdf》資料免費下載
    發表于 10-26 10:13 ?0次下載
    設計TMS320<b class='flag-5'>C</b>548/9 DSP<b class='flag-5'>開發板</b>

    NXP FRDM-MCXC444開發板在RT-Thread環境下的上手過程

    NXP FRDM-MCXC444開發板是一款基于MCX C444 MCU的高性能開發板,它集成了豐富的硬件資源和接口,支持快速原型設計。本文將為讀者提供一份詳細的RT-Thread上手
    的頭像 發表于 10-12 11:51 ?440次閱讀
    NXP FRDM-MCXC444<b class='flag-5'>開發板</b>在RT-Thread環境下的上手過程

    linux開發板和單片機開發的區別

    、PIC等,處理能力和內存容量相對較低。 操作系統 Linux開發板通常使用Linux操作系統,具有豐富的軟件資源和開發工具。單片機開發則通常使用嵌入式操作系統或無操作系統,軟件資源和開發
    的頭像 發表于 08-30 15:30 ?1072次閱讀

    【米爾-國產瑞芯微RK3568開發板試用體驗】燒寫Debian鏡像以及顯示設置

    【感謝】 感謝電子發燒友論壇,米爾科技提供了米爾-國產瑞芯微RK3568開發板試用機會。收到開發板有幾天了,今天分享一下如何獲取資料以及燒友Debain鏡像以及顯示設置。 【開發板介紹
    發表于 08-22 20:35

    RK3568開發板支持AMP雙系統

    RK3568開發板支持AMP雙系統
    的頭像 發表于 06-04 15:33 ?774次閱讀
    RK3568<b class='flag-5'>開發板</b><b class='flag-5'>支持</b>AMP雙系統

    飛凌嵌入式i.MX 8M Plus開發板的OTA遠程升級方案

    的方式,可升級系統內核、文件系統和應用。接下來,將以飛凌嵌入式OKMX8MP-C開發板為例,基于Linux 5.4.70版本內核,展示升級前后的切換效果。 切換前,系統啟動讀取系統的boot.0
    的頭像 發表于 06-03 17:59 ?768次閱讀
    飛凌嵌入式i.MX <b class='flag-5'>8</b>M Plus<b class='flag-5'>開發板</b>的OTA遠程升級方案

    利用i.MX8MM開發板制作開機動畫

    的 psplash 和 psplash-write 文件拷貝到開發板出廠文件系統/usr/bin 目錄下。 okmx8mm login:root Last login: Thu Jun 20
    發表于 05-30 16:26

    WT99C262 LoRa開發板 搭配WT32-ETH0X實現LoRa/WiFi/藍牙轉以太網

    WT99C262-SG系列開發板是啟明云端推出的一款基于WTLRC262-SG系列模組的開發板上搭載的模組支持Wi-Fi+BLE+LoR
    的頭像 發表于 04-23 08:03 ?497次閱讀
    WT99<b class='flag-5'>C</b>262  LoRa<b class='flag-5'>開發板</b>  搭配WT32-ETH0X實現LoRa/WiFi/藍牙轉以太網

    【活動】4款AI開發板任你選,緊跟人工智能的風口

    CZ3456 OK3588-C[/url]——————————OKMX8MP-C開發板優惠券 [url=58?OHPSWJuB30y? https://m.tb.cn/h.gao5Njo CZ3458
    發表于 04-19 13:31

    fpga開發板與linux開發板區別

    FPGA開發板與Linux開發板是兩種不同的硬件開發平臺,各自具有不同的特點和應用場景。在以下的文章中,我將詳細介紹FPGA開發板和Linux開發板
    的頭像 發表于 02-01 17:09 ?2360次閱讀
    主站蜘蛛池模板: 美女涩涩网站| 欧美人成一本免费观看视频| 夜夜夜久久久| 天天cao在线| 久久夜视频| swag系列国产精品| a级黄视频| 特黄特黄一级高清免费大片| 久热久操| 性xxxx奶大欧美高清| 亚洲一区小说区中文字幕| 狠狠狠狠干| 特级做a爰片毛片免费看| 亚洲综合在线观看一区www| 亚洲色图27p| 最色成人网| 免看一级a毛片一片成人不卡| 男人j桶女人j免费视频| 性中国videosex国产孕妇| 8050午夜一级| 欧美满足你的丝袜高跟ol| 伊人精品成人久久综合欧美 | 日本理论在线| 激情免费视频| 午夜香蕉视频| jlzzjlzzjlzz日本亚洲| 国产小视频在线免费| 免费黄色大片视频| 中文字幕在线观看一区二区三区| 同性同男小说肉黄| 四虎在线永久视频观看| 久久综合97色综合网| 在线观看午夜| 成人精品福利| 欧美性xxxx极品高清| 久久成人国产精品免费| 色欧美在线视频| 大象焦伊人久久综合网色视| 欧美大片国产在线永久播放| 亚洲一区中文字幕在线| 桃色婷婷|