国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

痞子衡嵌入式:在i.MXRT1170上快速點(diǎn)亮一款全新LCD屏的方法與步驟(MIPI DSI接口)

這篇具有很好參考價值的文章主要介紹了痞子衡嵌入式:在i.MXRT1170上快速點(diǎn)亮一款全新LCD屏的方法與步驟(MIPI DSI接口)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


  大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是在i.MXRT1170上快速點(diǎn)亮一款全新LCD屏的方法與步驟。

  我們知道 LCD 屏的接口有很多:DPI-RGB、MIPI DSI、DBI/MCU(I8080)、LVDS、SPI 等等,接口不同,對應(yīng)的軟件驅(qū)動也不同。RT1170 片內(nèi)外設(shè)對以上接口都能很好地支持,今天我們主要聊最近比較火的 MIPI DSI 接口。

  在恩智浦官方 SDK (v2.14) 里目前支持的 MIPI DSI 接口的 LCD 屏主要有如下四款,但客戶在實(shí)際應(yīng)用中選擇的屏五花八門(生產(chǎn) MIPI DSI 接口的 LCD 廠商非常多),如果我們拿到一款全新 LCD 屏,該如何快速點(diǎn)亮它呢?今天痞子衡教你方法:

LCD屏型號 LCD分辨率
width * height
LCD驅(qū)動IC
晶鴻電子 RK055AHD091 720x1280 瑞鼎科技 RM68200
晶鴻電子 RK055MHD091 720x1280 奇景光電 HX8394-F
晶鴻電子 RK055IQH091 540x960 瑞鼎科技 RM68191
定制屏 G1120B0MIPI 400x392 瑞鼎科技 RM67162

一、點(diǎn)屏準(zhǔn)備工作

  磨刀不誤砍柴工,在開始點(diǎn)屏之前我們需要準(zhǔn)備如下材料,這在后續(xù)修改和調(diào)試 LCD 屏相關(guān)代碼時非常重要。其中 LCD 屏數(shù)據(jù)手冊一般需要向屏廠獲取,有了屏數(shù)據(jù)手冊我們就能知道其相應(yīng)驅(qū)動 IC,從而下載這個驅(qū)動 IC 的數(shù)據(jù)手冊。

1. LCD 屏配套的數(shù)據(jù)手冊
2. LCD 屏內(nèi)置驅(qū)動 IC 的數(shù)據(jù)手冊
3. RT1170 板卡連接 LCD 屏的原理圖
4. 恩智浦 SDK_2_14_0_MIMXRT1170-EVKB
5. 能夠訪問 github

  痞子衡就以深圳柯達(dá)科電子生產(chǎn)的 KD050FWFIA019-C019A 屏為例,這款 MIPI DSI 屏分辨率是 480x854,其驅(qū)動 IC 是來自奕力科技的 ILI9806E。

二、點(diǎn)屏標(biāo)準(zhǔn)步驟

2.1 熟悉SDK標(biāo)準(zhǔn)例程

  恩智浦 SDK 里的 elcdif_rgb 例程是一個很好的基礎(chǔ)工程,我們可以基于這個工程來修改代碼做調(diào)試。工程里我們主要關(guān)注 elcdif_support.c/h 文件,在這個文件里,恩智浦已經(jīng)把不同屏之間的差異做了抽離處理,你搜索 MIPI_PANEL_ 宏就能找到那些差異,這些差異的地方就是我們需要改動的地方。

\SDK_2_14_0_MIMXRT1170-EVKB\boards\evkbmimxrt1170\driver_examples\elcdif\rgb\cm7\iar

  這個 elcdif_rgb 例程里沒有看到 G1120B0MIPI 身影,因?yàn)樾》直媛实膱A屏不太適合這個 example,其驅(qū)動可在 RT595_SDK\boards\evkmimxrt595\vglite_examples 里找到。

2.2 調(diào)整屏控制I/O腳(Power_en、Reset、Backlight)

  先來關(guān)注硬件上需要注意的改動,RT1170 上 MIPI DSI 這個外設(shè)不同于其它外設(shè)有很多 pinmux 選項(xiàng),其就一組固定的引腳(并且是專用的),所以這組引腳我們不需要做任何代碼上的配置。

  • Note: DN/P 信號對一共兩組,即 RT1170 支持的是 MIPI-DSI 2 lane。

  但是 LCD 屏除了 MIPI DSI 相關(guān)信號以及電源、地之外,通常還有三個控制信號,即 Power_en(電源使能-可選)、Reset(硬復(fù)位)、Backlight(背光控制),這三個信號一般是通過普通 GPIO 來控制的。

  所以我們需要打開板卡原理圖,找到 LCD 相關(guān)連接把這三個信號所用的 GPIO 找出來,并在代碼里如下地方做相應(yīng)改動:

  elcdif_rgb 例程會在共享函數(shù) BOARD_InitLcdPanel() 里操作 BOARD_MIPI_PANEL_BL 宏所指向的 GPIO 來打開背光。此外 BOARD_MIPI_PANEL_RST 和 BOARD_MIPI_PANEL_POWER 宏所指向的 GPIO 操作已經(jīng)被封裝在如下函數(shù)里,這個函數(shù)被進(jìn)一步封裝進(jìn) display_handle_t 里供后續(xù)驅(qū)動靈活使用:

static void PANEL_PullResetPin(bool pullUp);
static void PANEL_PullPowerPin(bool pullUp);

2.3 創(chuàng)建LCD驅(qū)動IC源文件

  現(xiàn)在我們需要在如下目錄下,創(chuàng)建 ILI9806E 的驅(qū)動文件,可以先直接拷貝 hx8394 文件夾下的文件并將其改名后添加進(jìn)工程,并且在 elcdif_support.c/h 里也復(fù)制添加相應(yīng)代碼保證編譯通過(后續(xù)再參考 ILI9806E 數(shù)據(jù)手冊修改代碼)。

\SDK_2_14_0_MIMXRT1170-EVKB\components\video\display

2.4 調(diào)整屏上電復(fù)位延時(Power_en、Reset)

  有了 fsl_ili9806e.c/h 基本源文件后,現(xiàn)在我們需要根據(jù) ILI9806E 數(shù)據(jù)手冊來修改代碼。首先是調(diào)整屏上電以及復(fù)位延時時間,這個延時一般既可以在 KD050FWFIA019-C019A 屏的數(shù)據(jù)手冊也可以在 ILI9806E 的數(shù)據(jù)手冊里找到。

  有了延時數(shù)值之后,在 ILI9806E_Init() 函數(shù)里做相應(yīng)設(shè)置即可:

status_t ILI9806E_Init(display_handle_t *handle, const display_config_t *config)
{
    const ili9806e_resource_t *resource = (const ili9806e_resource_t *)(handle->resource);
    /* Only support 480 * 854 */
    if (config->resolution != FSL_VIDEO_RESOLUTION(480, 854))
    {
        return kStatus_InvalidArgument;
    }
    /* Power on. */
    resource->pullPowerPin(true);
    ILI9806E_DelayMs(1U);
    /* 根據(jù)屏數(shù)據(jù)手冊調(diào)整復(fù)位延時時間. */
    resource->pullResetPin(true);
    ILI9806E_DelayMs(10U);
    resource->pullResetPin(false);
    ILI9806E_DelayMs(10U);
    resource->pullResetPin(true);
    ILI9806E_DelayMs(120U);
    
    /* 代碼省略 */
}

2.5 調(diào)整屏顯示相關(guān)參數(shù)

  現(xiàn)在我們需要在 elcdif_support.h 里根據(jù) KD050FWFIA019-C019A 屏的數(shù)據(jù)手冊修改如下定義包含:屏分辨率、六個行列掃描參數(shù)、四個信號極性(APP_POL_FLAGS)、數(shù)據(jù)位寬,這些都是屏本身的特性。

#if (USE_MIPI_PANEL == MIPI_PANEL_KD050FWFIA019)
#define APP_PANEL_HEIGHT 854
#define APP_PANEL_WIDTH  480
#define APP_HSW          4
#define APP_HFP          18
#define APP_HBP          30
#define APP_VSW          4
#define APP_VFP          20
#define APP_VBP          30
#endif
#define APP_POL_FLAGS \
    (kELCDIF_DataEnableActiveHigh | kELCDIF_VsyncActiveLow | kELCDIF_HsyncActiveLow | kELCDIF_DriveDataOnFallingClkEdge)

#define APP_DATA_BUS       24
#define APP_LCDIF_DATA_BUS kELCDIF_DataBus24Bit

  關(guān)于六個行列掃描參數(shù)(HSW/HFP/HBP/VSW/VFP/VBP)稍稍科普一下,這些信號是以行列同步信號(VSYNC/HSYNC)為時間起點(diǎn)來做的延時,相當(dāng)于在實(shí)際顯示的圖像寬高基礎(chǔ)上做了外圍擴(kuò)大,從而提高圖像有效區(qū)域顯示的可靠性(實(shí)際上是等待面板做好每行數(shù)據(jù)刷新前的準(zhǔn)備工作)。

  分辨率和行列掃描參數(shù)均設(shè)置正確了之后,別忘了根據(jù)想要的刷新率(比如 60Hz)計(jì)算得出所需的 pixel clock,在 BOARD_InitLcdifClock() 函數(shù)里做相應(yīng)設(shè)置。

void BOARD_InitLcdifClock(void)
{
    /*
     * The pixel clock is (height + VSW + VFP + VBP) * (width + HSW + HFP + HBP) * frame rate.
     * Use PLL_528 as clock source.
     * For 60Hz frame rate, the KD050FWFIA019 pixel clock should be 29MHz.
     */
    const clock_root_config_t lcdifClockConfig = {
        .clockOff = false,
        .mux      = 4, /*!< PLL_528. */
#if (USE_MIPI_PANEL == MIPI_PANEL_RK055AHD091) || (USE_MIPI_PANEL == MIPI_PANEL_RK055MHD091)
        .div = 9,
#elif (USE_MIPI_PANEL == MIPI_PANEL_RK055IQH091)
        .div = 15,
#elif (USE_MIPI_PANEL == MIPI_PANEL_KD050FWFIA019)
        // 我們需要設(shè)置 29MHz 的 pixel clock
        .div = 18,
#endif
    };
    CLOCK_SetRootClock(kCLOCK_Root_Lcdif, &lcdifClockConfig);
    mipiDsiDpiClkFreq_Hz = CLOCK_GetRootClockFreq(kCLOCK_Root_Lcdif);
}

2.6 配置LCD驅(qū)動芯片

  現(xiàn)在到了最難也是最重要的環(huán)節(jié)了,KD050FWFIA019-C019A 面板主要是由 ILI9806E 芯片驅(qū)動的,ILI9806E 本身是個萬能驅(qū)動芯片,其支持的接口很多,MIPI DSI 僅是其一,而且 2.5 節(jié)里設(shè)置的那些關(guān)于屏顯示相關(guān)參數(shù),我們都需要設(shè)置進(jìn) ILI9806E 內(nèi)部寄存器里。

  打開 ILI9806E 數(shù)據(jù)手冊(V097版),一共 328 頁,寄存器一大堆,我們難道要看著數(shù)據(jù)手冊一個個去設(shè)置嗎?當(dāng)然不是!這時候需要打開萬能的 github,搜索跟 ili9806e 相關(guān)的代碼,看看前人有沒有調(diào)試好的現(xiàn)成代碼。

  其實(shí)關(guān)于屏的支持,Linux 里做得比較多,痞子衡找了個 RaspberryPI 移植的分支,里面有 ili9806e 參數(shù)初始化表,注意這個表不一定完全適用 KD050FWFIA019-C019A(因?yàn)橛?ILI9806E 芯片驅(qū)動的面板非常多),我們需要在這個參數(shù)表基礎(chǔ)之上做一些調(diào)整。

https://github.com/raspberrypi/linux/blob/rpi-6.1.y/drivers/gpu/drm/panel/panel-ilitek-ili9806e.c

  把 RaspberryPI 倉庫里的參數(shù)表移植進(jìn)我們的 fsl_ili9806e.c 文件里后,粗粗看了一下注釋,其配置的是 480x800 的屏,極性設(shè)置相關(guān)也都和 KD050FWFIA019-C019A 有差異。

  最后我們再對照 ILI9806E 數(shù)據(jù)手冊里的寄存器定義做一些參數(shù)上的微調(diào),如下四個寄存器需要重點(diǎn)關(guān)注。這些微調(diào)做完之后,把代碼下載進(jìn)板卡運(yùn)行,這時候你應(yīng)該能看到屏開始正常工作了。

  至此,在i.MXRT1170上快速點(diǎn)亮一款全新LCD屏的方法與步驟痞子衡便介紹完畢了,掌聲在哪里~~~

歡迎訂閱

文章會同時發(fā)布到我的 博客園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。

微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機(jī)上第一時間看了哦。文章來源地址http://www.zghlxwxcb.cn/news/detail-777035.html

到了這里,關(guān)于痞子衡嵌入式:在i.MXRT1170上快速點(diǎn)亮一款全新LCD屏的方法與步驟(MIPI DSI接口)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 痞子衡嵌入式:借助i.MXRT10xx系列INIT_VTOR功能可以縮短程序熱重啟時間

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是 借助i.MXRT10xx系列INIT_VTOR功能可以縮短程序熱重啟時間 。 最近痞子衡寫了篇文章 《i.MXRT從Serial NAND啟動時間測量》,這篇文章詳細(xì)測試了不同長度的 Non-XIP 程序在不同 NAND 訪問速度下由 BootROM 加載啟動所

    2024年02月14日
    瀏覽(25)
  • 痞子衡嵌入式:使能i.MXRT1050,1060 Hab簽名或加密啟動時App鏈接在片內(nèi)SRAM的限制

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 使能i.MXRT1050, 1060 Hab簽名或加密啟動時App鏈接在片內(nèi)SRAM的限制 。 最近有客戶反饋,在 RT1060 上測試 Non-XIP 程序啟動,如果程序體部分鏈接進(jìn) 0x20280000 地址之后的片內(nèi) OCRAM 區(qū)域(這部分是由 FlexRAM 分配出

    2024年04月12日
    瀏覽(35)
  • 痞子衡嵌入式:i.MXRT1xxx系列GPIO提早供電會影響上電時序?qū)е聝?nèi)部DCDC啟動失敗

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 i.MXRT1xxx系列GPIO提早供電會影響上電時序?qū)е聝?nèi)部DCDC啟動失敗 。 最近有一個 RW612 產(chǎn)品線的同事在設(shè)計(jì)一個雙 MCU 系統(tǒng) Demo 時發(fā)現(xiàn),當(dāng) RW612 板卡和 RT1060 板卡通過 UART 對接時,如果 RW612 板卡提前上電,

    2024年03月27日
    瀏覽(17)
  • 痞子衡嵌入式:如果i.MXRT1xxx離線無法啟動,請先查看SRC_SBMRx寄存器

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 SRC_SBMRx寄存器對于定位i.MXRT1xxx離線無法啟動問題的意義 。 最近有一位開源社區(qū)大佬在使能 RT1050 BEE 加密過程中遇到無法啟動問題,折騰到一度崩潰,甚至想要棄坑。痞子衡哪能讓這位“老鄉(xiāng)”跑掉,連

    2024年02月19日
    瀏覽(19)
  • 痞子衡嵌入式:在i.MXRT1xxx系列上用NAND型啟動設(shè)備時可用兩級設(shè)計(jì)縮短啟動時間

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是 在i.MXRT1xxx系列上用NAND型啟動設(shè)備時可用兩級設(shè)計(jì)縮短啟動時間 。 去年痞子衡寫過一篇騷操作文章 《借助i.MXRT10xx系列INIT_VTOR功能可以縮短程序熱重啟時間》,這對于 NAND 型啟動設(shè)備上程序熱重啟時間的

    2024年04月22日
    瀏覽(20)
  • 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(10.A)- FlexSPI NAND啟動時間(RT1170)

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 恩智浦i.MX RT1170 FlexSPI NAND啟動時間 。 本篇是 i.MXRT1170 啟動時間評測第四彈,前三篇分別給大家評測了 Raw NAND 啟動時間(基于 MIMXRT1170-EVK_Rev.B)、Serial NOR 啟動時間(基于 MIMXRT1170-EVB_Rev.A2)、1bit SPI NO

    2024年02月15日
    瀏覽(61)
  • 痞子衡嵌入式:使用恩智浦GUI Guider快速創(chuàng)建全新LCD屏示例工程的步驟

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是 使用恩智浦GUI Guider快速創(chuàng)建全新LCD屏示例工程的步驟 。 在痞子衡舊文 《在i.MXRT1170上快速點(diǎn)亮一款全新LCD屏的方法與步驟》 里,痞子衡介紹了在官方 SDK 裸機(jī)驅(qū)動 elcdif 示例工程基礎(chǔ)上做修改以支持一

    2024年03月13日
    瀏覽(24)
  • 《痞子衡嵌入式半月刊》 第 81 期

    這里分享嵌入式領(lǐng)域有用有趣的項(xiàng)目/工具以及一些熱點(diǎn)新聞,農(nóng)歷年分二十四節(jié)氣,希望在每個交節(jié)之日準(zhǔn)時發(fā)布一期。 本期刊是開源項(xiàng)目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 :《痞子衡嵌入式半月刊: 第 80 期》

    2024年02月08日
    瀏覽(90)
  • 《痞子衡嵌入式半月刊》 第 89 期

    這里分享嵌入式領(lǐng)域有用有趣的項(xiàng)目/工具以及一些熱點(diǎn)新聞,農(nóng)歷年分二十四節(jié)氣,希望在每個交節(jié)之日準(zhǔn)時發(fā)布一期。 本期刊是開源項(xiàng)目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 :《痞子衡嵌入式半月刊: 第 88 期》

    2024年02月02日
    瀏覽(61)
  • 《痞子衡嵌入式半月刊》 第 93 期

    這里分享嵌入式領(lǐng)域有用有趣的項(xiàng)目/工具以及一些熱點(diǎn)新聞,農(nóng)歷年分二十四節(jié)氣,希望在每個交節(jié)之日準(zhǔn)時發(fā)布一期。 本期刊是開源項(xiàng)目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 :《痞子衡嵌入式半月刊: 第 92 期》

    2024年03月09日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包