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

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

3天內不再提示

如何在i.MXRT1170上快速點亮一款全新LCD屏?

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 2024-01-05 15:49 ? 次閱讀

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

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

LCD屏型號 LCD分辨率 LCD驅動IC
晶鴻電子 RK055AHD091 720x1280 瑞鼎科技 RM68200
晶鴻電子 RK055MHD091 720x1280 奇景光電 HX8394-F
晶鴻電子 RK055IQH091 540x960 瑞鼎科技 RM68191
定制屏 G1120B0MIPI 390x390 瑞鼎科技 RM67162

一、點屏準備工作

磨刀不誤砍柴工,在開始點屏之前我們需要準備如下材料,這在后續修改和調試 LCD 屏相關代碼時非常重要。其中 LCD 屏數據手冊一般需要向屏廠獲取,有了屏數據手冊我們就能知道其相應驅動 IC,從而下載這個驅動 IC 的數據手冊。

1.LCD屏配套的數據手冊
2.LCD屏內置驅動IC的數據手冊
3.RT1170板卡連接LCD屏的原理圖
4.恩智浦SDK_2_14_0_MIMXRT1170-EVKB
5.能夠訪問github

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

二、點屏標準步驟

2.1 熟悉SDK標準例程

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

SDK_2_14_0_MIMXRT1170-EVKBoardsevkbmimxrt1170driver_exampleselcdif
gbcm7iar
281f9282-ab9e-11ee-8b88-92fbcf53809c.png

這個 elcdif_rgb 例程里沒有看到 G1120B0MIPI 身影,因為小分辨率的圓屏不太適合這個 example,其驅動可在 RT595_SDKoardsevkmimxrt595vglite_examples 里找到。

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

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

2829dd96-ab9e-11ee-8b88-92fbcf53809c.png

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

282d98dc-ab9e-11ee-8b88-92fbcf53809c.png

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

28310dc8-ab9e-11ee-8b88-92fbcf53809c.png

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

staticvoidPANEL_PullResetPin(boolpullUp);
staticvoidPANEL_PullPowerPin(boolpullUp);

2.3 創建LCD驅動IC源文件

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

SDK_2_14_0_MIMXRT1170-EVKBcomponentsvideodisplay
28350a04-ab9e-11ee-8b88-92fbcf53809c.png

2.4 調整屏上電復位延時(Power_en、Reset)

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

283e140a-ab9e-11ee-8b88-92fbcf53809c.png

有了延時數值之后,在 ILI9806E_Init() 函數里做相應設置即可:

status_tILI9806E_Init(display_handle_t*handle,constdisplay_config_t*config)
{
constili9806e_resource_t*resource=(constili9806e_resource_t*)(handle->resource);
/*Onlysupport480*854*/
if(config->resolution!=FSL_VIDEO_RESOLUTION(480,854))
{
returnkStatus_InvalidArgument;
}
/*Poweron.*/
resource->pullPowerPin(true);
ILI9806E_DelayMs(1U);
/*根據屏數據手冊調整復位延時時間.*/
resource->pullResetPin(true);
ILI9806E_DelayMs(10U);
resource->pullResetPin(false);
ILI9806E_DelayMs(10U);
resource->pullResetPin(true);
ILI9806E_DelayMs(120U);

/*代碼省略*/
}

2.5 調整屏顯示相關參數

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

#if(USE_MIPI_PANEL==MIPI_PANEL_KD050FWFIA019)
#defineAPP_PANEL_HEIGHT854
#defineAPP_PANEL_WIDTH480
#defineAPP_HSW4
#defineAPP_HFP18
#defineAPP_HBP30
#defineAPP_VSW4
#defineAPP_VFP20
#defineAPP_VBP30
#endif
#defineAPP_POL_FLAGS
(kELCDIF_DataEnableActiveHigh|kELCDIF_VsyncActiveLow|kELCDIF_HsyncActiveLow|kELCDIF_DriveDataOnFallingClkEdge)

#defineAPP_DATA_BUS24
#defineAPP_LCDIF_DATA_BUSkELCDIF_DataBus24Bit

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

2848e588-ab9e-11ee-8b88-92fbcf53809c.png

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

voidBOARD_InitLcdifClock(void)
{
/*
*Thepixelclockis(height+VSW+VFP+VBP)*(width+HSW+HFP+HBP)*framerate.
*UsePLL_528asclocksource.
*For60Hzframerate,theKD050FWFIA019pixelclockshouldbe29MHz.
*/
constclock_root_config_tlcdifClockConfig={
.clockOff=false,
.mux=4,/*!

2.6 配置LCD驅動芯片

現在到了最難也是最重要的環節了,KD050FWFIA019-C019A 面板主要是由 ILI9806E 芯片驅動的,ILI9806E 本身是個萬能驅動芯片,其支持的接口很多,MIPI DSI 僅是其一,而且 2.5 節里設置的那些關于屏顯示相關參數,我們都需要設置進 ILI9806E 內部寄存器里。

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

28590ec2-ab9e-11ee-8b88-92fbcf53809c.png

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

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

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

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

285d00fe-ab9e-11ee-8b88-92fbcf53809c.png2860ff74-ab9e-11ee-8b88-92fbcf53809c.png28657e5a-ab9e-11ee-8b88-92fbcf53809c.png2869b8e4-ab9e-11ee-8b88-92fbcf53809c.png

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






審核編輯:劉清

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

    關注

    146

    文章

    16130

    瀏覽量

    344848
  • LCD屏
    +關注

    關注

    0

    文章

    118

    瀏覽量

    15158
  • 驅動IC
    +關注

    關注

    9

    文章

    270

    瀏覽量

    33480
  • MIPI
    +關注

    關注

    10

    文章

    280

    瀏覽量

    48022

原文標題:如何在MCU上快速點亮一款LCD屏(MIPI DSI篇)?

文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    i.MXRT1170 的時鐘架構

    目前 i.MXRT1xxx 系列主要分為 i.MX RT10xx 和 i.MXRT11xx 兩大分支。這兩個分支的時鐘系統設計是有一些差異的,不過總體來說,架構差別不大,我們以如下 i.MXRT1170 的時鐘架構為例來具體介紹
    發表于 07-08 17:05 ?894次閱讀

    介紹一下i.MXRT1170上用于保護片內OCRAM1,2的MECC64功能

    今天痞子衡給大家分享的是i.MXRT1170 MECC64功能特點及其保護片內OCRAM1,2之道。
    的頭像 發表于 12-29 16:11 ?683次閱讀
    介紹一下<b class='flag-5'>i.MXRT1170</b>上用于保護片內OCRAM1,2的MECC64功能

    何在Virtex 5LCD顯示些程序?

    何在Virtex 5LCD顯示些程序?以上來自于谷歌翻譯以下為原文How can
    發表于 03-07 10:39

    i.MXRT1170的相關資料分享

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的劃時代新品i.MXRT1170?! ∽?017年開始,每年的6月25日恩智浦都會在北京舉行
    發表于 11-04 08:38

    i.MXRT1170 eFuse空間訪問可靠性的保護策略是什么

    Boot時寫過兩篇,分別是針對RT1050的《eFuse及其燒寫方法》 和針對RT600的《OTP及其燒寫方法》,今天要介紹的i.MXRT1170 eFuse其實是這兩者的融合,在空間組織(尤...
    發表于 12-20 07:56

    用A40i核心板點亮一款3.1寸,屏幕不亮是為什么?

    你好,我用你們A40i核心板點亮一款3.1寸,屏幕不亮,希望能有技術指導 電話*** ,硬件設計完全參考你們開發板,謝謝!
    發表于 01-04 06:28

    i.MXRT1010, 1170型號樣的SNVS GPR寄存器讀寫控制設計資料分享

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1010, 1170型號樣的SNVS GPR寄存器讀寫控制設計?! ∑ψ雍庵皟善恼?《在SBL
    發表于 02-07 07:49

    介紹快速定位i.MXRT600板級設計ISP[2-0]啟動模式引腳上電時序問題的方法

    音頻市場的MCU產品,其也是i.MXRT三位數平臺的第一款型號。這顆MCU已被眾多知名國際大廠客戶選用,在項目中作為協處理器負責音頻相關子功能。不少客戶都已經到了量產階段,最近痞子衡在支持其中個量...
    發表于 02-11 07:49

    求助,如何在沒有互聯網的情況下通過以太網電纜將個簡單的十六進制數從I.MXRT1170板發送到PC?

    我有I.MXRT1170 板。我是這個板的新手,我想通過以太網電纜向我的 PC 發送個簡單的十六進制數字,如 0x12345678 或任何東西。任何人都可以通過告訴我如何去做以及我可以如何做
    發表于 03-17 07:20

    s32k144evb如何與i.MXRT通信?

    你好呀,我正在為 EV Cluster 設計個項目。我計劃將數據從 #S32K144EVB# 發送到 #i.MXRT1170# 以在我的顯示器 #RK055HDMIPI4MAO# 顯示它。我
    發表于 03-29 07:49

    如何確保 i.MXRT1176 從低功耗模式快速恢復?

    我們有個關于 i.MXRT1176 從低功耗模式恢復緩慢的問題引導 ROM 似乎停留在地址 0x223104,大約 15 秒。這似乎是 i.MXRT1170 上調試安全設計的部分,
    發表于 04-06 07:17

    i.MXRT1166在調試期間禁用WFI節能是為什么?如何讓內核保持喚醒狀態以進行調試?

    i.MXRT1160/i.MXRT1170 系列找到類似的東西。在這些芯片執行 WFI 指令期間,如何讓內核保持喚醒狀態以進行調試?
    發表于 06-01 07:22

    痞子衡嵌入式:終于可以放開聊一聊i.MXRT1170這顆劃時代MCU了

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的劃時代新品i.MXRT1170?! ∽?017年開始,每年的6月25日恩智浦都會在北京舉行
    發表于 10-29 10:21 ?2次下載
    痞子衡嵌入式:終于可以放開聊一聊<b class='flag-5'>i.MXRT1170</b>這顆劃時代MCU了

    i.MXRT1170上串行NOR Flash雙程序可交替啟動設計

    與 i.MXRT10xx 一樣,這里要聊的還是在一片掛載在 FlexSPI 上的串行 NOR Flash 里做冗余/雙程序設計,就是下圖中的 image L 和 image H,不涉及 LPSPI 接口 Flash B 里的 image 2。
    的頭像 發表于 04-29 15:23 ?897次閱讀

    i.MXRT1170快速點亮LCD屏的方法與步驟

    有了 fsl_ili9806e.c/h 基本源文件后,現在我們需要根據 ILI9806E 數據手冊來修改代碼。首先是調整屏上電以及復位延時時間,這個延時一般既可以在 KD050FWFIA019-C019A 屏的數據手冊也可以在 ILI9806E 的數據手冊里找到。
    發表于 01-05 15:46 ?423次閱讀
    <b class='flag-5'>i.MXRT1170</b>上<b class='flag-5'>快速</b><b class='flag-5'>點亮</b><b class='flag-5'>LCD</b>屏的方法與步驟
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>