RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在i.MXRT1170上快速點(diǎn)亮一款全新LCD屏?

痞子衡嵌入式 ? 來(lái)源:痞子衡嵌入式 ? 2024-01-05 15:49 ? 次閱讀

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

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

LCD屏型號(hào) LCD分辨率 LCD驅(qū)動(dòng)IC
晶鴻電子 RK055AHD091 720x1280 瑞鼎科技 RM68200
晶鴻電子 RK055MHD091 720x1280 奇景光電 HX8394-F
晶鴻電子 RK055IQH091 540x960 瑞鼎科技 RM68191
定制屏 G1120B0MIPI 390x390 瑞鼎科技 RM67162

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

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

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

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

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

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

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

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

這個(gè) elcdif_rgb 例程里沒(méi)有看到 G1120B0MIPI 身影,因?yàn)樾》直媛实膱A屏不太適合這個(gè) example,其驅(qū)動(dòng)可在 RT595_SDKoardsevkmimxrt595vglite_examples 里找到。

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

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

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

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

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

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

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

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

staticvoidPANEL_PullResetPin(boolpullUp);
staticvoidPANEL_PullPowerPin(boolpullUp);

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

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

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

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

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

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

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

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);
/*根據(jù)屏數(shù)據(jù)手冊(cè)調(diào)整復(fù)位延時(shí)時(shí)間.*/
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ù)手冊(cè)修改如下定義包含:屏分辨率、六個(gè)行列掃描參數(shù)、四個(gè)信號(hào)極性(APP_POL_FLAGS)、數(shù)據(jù)位寬,這些都是屏本身的特性。

#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

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

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

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

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驅(qū)動(dòng)芯片

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

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

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

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

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

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

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

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

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






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17123

    瀏覽量

    350978
  • LCD屏
    +關(guān)注

    關(guān)注

    0

    文章

    122

    瀏覽量

    15421
  • 驅(qū)動(dòng)IC
    +關(guān)注

    關(guān)注

    9

    文章

    302

    瀏覽量

    33812
  • MIPI
    +關(guān)注

    關(guān)注

    11

    文章

    310

    瀏覽量

    48613

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

文章出處:【微信號(hào):pzh_mcu,微信公眾號(hào):痞子衡嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    i.MXRT1170 的時(shí)鐘架構(gòu)

    目前 i.MXRT1xxx 系列主要分為 i.MX RT10xx 和 i.MXRT11xx 兩大分支。這兩個(gè)分支的時(shí)鐘系統(tǒng)設(shè)計(jì)是有些差異的,不過(guò)總體來(lái)說(shuō),架構(gòu)差別不大,我們以如下
    發(fā)表于 07-08 17:05 ?1024次閱讀

    介紹i.MXRT1170用于保護(hù)片內(nèi)OCRAM1,2的MECC64功能

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

    i.MXRT1170的相關(guān)資料分享

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

    i.MXRT1170 eFuse空間訪問(wèn)可靠性的保護(hù)策略是什么

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

    i.MXRT1010, 1170型號(hào)樣的SNVS GPR寄存器讀寫(xiě)控制設(shè)計(jì)資料分享

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT1010, 1170型號(hào)樣的SNVS GPR寄存器讀寫(xiě)控制設(shè)計(jì)。  痞子衡之前兩篇文章 《在SBL
    發(fā)表于 02-07 07:49

    求助,如何在沒(méi)有互聯(lián)網(wǎng)的情況下通過(guò)以太網(wǎng)電纜將個(gè)簡(jiǎn)單的十六進(jìn)制數(shù)從I.MXRT1170板發(fā)送到PC?

    我有I.MXRT1170 板。我是這個(gè)板的新手,我想通過(guò)以太網(wǎng)電纜向我的 PC 發(fā)送個(gè)簡(jiǎn)單的十六進(jìn)制數(shù)字,如 0x12345678 或任何東西。任何人都可以通過(guò)告訴我如何去做以及我可以如何做
    發(fā)表于 03-17 07:20

    s32k144evb如何與i.MXRT通信?

    你好呀,我正在為 EV Cluster 設(shè)計(jì)個(gè)項(xiàng)目。我計(jì)劃將數(shù)據(jù)從 #S32K144EVB# 發(fā)送到 #i.MXRT1170# 以在我的顯示器 #RK055HDMIPI4MAO# 顯示它。我
    發(fā)表于 03-29 07:49

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

    我們有個(gè)關(guān)于 i.MXRT1176 從低功耗模式恢復(fù)緩慢的問(wèn)題引導(dǎo) ROM 似乎停留在地址 0x223104,大約 15 秒。這似乎是 i.MXRT1170 上調(diào)試安全設(shè)計(jì)的部分,
    發(fā)表于 04-06 07:17

    i.MXRT1166在調(diào)試期間禁用WFI節(jié)能是為什么?如何讓內(nèi)核保持喚醒狀態(tài)以進(jìn)行調(diào)試?

    i.MXRT1160/i.MXRT1170 系列找到類(lèi)似的東西。在這些芯片執(zhí)行 WFI 指令期間,如何讓內(nèi)核保持喚醒狀態(tài)以進(jìn)行調(diào)試?
    發(fā)表于 06-01 07:22

    痞子衡嵌入式:終于可以放開(kāi)聊i.MXRT1170這顆劃時(shí)代MCU了

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

    "痞子衡嵌入式:i.MXRT1010, 1170型號(hào)樣的SNVS GPR寄存器讀寫(xiě)控制設(shè)計(jì)"

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT1010 1170型號(hào)樣的SNVS GPR寄存器讀寫(xiě)控制設(shè)計(jì)?! ∑ψ雍庵皟善恼?《在SBL項(xiàng)
    發(fā)表于 12-04 11:36 ?0次下載
    "痞子衡嵌入式:<b class='flag-5'>i.MXRT</b>1010, <b class='flag-5'>1170</b>型號(hào)<b class='flag-5'>上</b>不<b class='flag-5'>一</b>樣的SNVS GPR寄存器讀寫(xiě)控制設(shè)計(jì)"

    i.MXRT1170串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)

    i.MXRT10xx 樣,這里要聊的還是在片掛載在 FlexSPI 的串行 NOR Flash 里做冗余/雙程序設(shè)計(jì),就是下圖中的 image L 和 image H,不涉及
    的頭像 發(fā)表于 04-29 15:23 ?1040次閱讀

    i.MXRT1060和RT1170使用高效神經(jīng)網(wǎng)絡(luò)進(jìn)行多人檢測(cè)

    電子發(fā)燒友網(wǎng)站提供《在i.MXRT1060和RT1170使用高效神經(jīng)網(wǎng)絡(luò)進(jìn)行多人檢測(cè).pdf》資料免費(fèi)下載
    發(fā)表于 08-17 10:46 ?0次下載
    在<b class='flag-5'>i.MXRT</b>1060和RT<b class='flag-5'>1170</b><b class='flag-5'>上</b>使用高效神經(jīng)網(wǎng)絡(luò)進(jìn)行多人檢測(cè)

    i.MXRT1170快速點(diǎn)亮LCD的方法與步驟

    有了 fsl_ili9806e.c/h 基本源文件后,現(xiàn)在我們需要根據(jù) ILI9806E 數(shù)據(jù)手冊(cè)來(lái)修改代碼。首先是調(diào)整電以及復(fù)位延時(shí)時(shí)間,這個(gè)延時(shí)般既可以在 KD050FWFIA019-C019A
    發(fā)表于 01-05 15:46 ?861次閱讀
    <b class='flag-5'>i.MXRT1170</b><b class='flag-5'>上</b><b class='flag-5'>快速</b><b class='flag-5'>點(diǎn)亮</b><b class='flag-5'>LCD</b><b class='flag-5'>屏</b>的方法與步驟

    不同J-Link版本對(duì)于i.MXRT1170連接復(fù)位后處理行為

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是不同J-Link版本對(duì)于i.MXRT1170連接復(fù)位后處理行為。
    的頭像 發(fā)表于 08-08 15:29 ?421次閱讀
    不同J-Link版本對(duì)于<b class='flag-5'>i.MXRT1170</b>連接復(fù)位后處理行為
    RM新时代网站-首页