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

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

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

什么是定位LCD花屏顯示問題的第一大法

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-10-30 14:49 ? 次閱讀

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是 i.MXRT1170 上 LCD 花屏顯示問題的分析解決經(jīng)驗(yàn)。

痞子衡最近這段時(shí)間在參與一個(gè)基于 i.MXRT1170 的大項(xiàng)目(先保個(gè)密),需要做一個(gè)開機(jī)動(dòng)畫功能,板子連接的 LCD 屏分辨率是 1280x480,因?yàn)殚_機(jī)動(dòng)畫要求達(dá)到 30fps,并且要畫質(zhì)清晰,如果是從 SD 卡里讀 mp4 或者 jpeg 去解碼,這么高分辨率的圖像(暫不考慮低分辨率的圖片再用 PXP 模塊去拉伸的方案)解碼耗時(shí)比較長(zhǎng),恐怕難以達(dá)成 30fps,所以痞子衡打算直接把圖片的裸 rgb 數(shù)據(jù)事先存在 Flash 里,然后 LCD 模塊直接去刷 Flash 里的數(shù)據(jù)去顯示。

板子上的 SPI NOR Flash 有兩種,默認(rèn)是八線 DDR 高性能 Flash,還有一個(gè)可選的四線 SDR 普通 Flash,痞子衡做好的代碼在默認(rèn)高性能 Flash 上跑得沒問題,換到另一塊 rework 為普通四線 Flash 上就出問題了,顯示完全是花屏,沒有一點(diǎn)圖片的影子,到底是怎么回事?跟著痞子衡一起去發(fā)現(xiàn)答案吧。

一、項(xiàng)目板卡簡(jiǎn)圖

先來看一下這個(gè)項(xiàng)目板卡簡(jiǎn)圖,簡(jiǎn)圖里只示意了痞子衡今天要分享的 LCD 問題相關(guān)的器件,顯示屏是 TM103XDKP13 控制器驅(qū)動(dòng)的 LVDS 接口屏,跟 i.MXRT 連接的話需要有一個(gè) RGB2LVDS 轉(zhuǎn)接。Flash 都是選的旺宏的,一個(gè)是 MX25UW51345(200MHz,8bit,DDR),還有一個(gè)是 MX25U25645(133MHz,4bit,SDR)。此外還有兩個(gè) 16bit 的 W9825G6KH 組成的 32bit SDRAM 做顯存,總?cè)萘渴?64MB。

二、在 Flash 中準(zhǔn)備好圖片裸數(shù)據(jù)

首先我們需要在 Flash 中存入圖片數(shù)據(jù),1280x480-24bpp (rgb888)圖片一張的裸數(shù)據(jù)大小是 1800KB,32MB 的 Flash 最大可以存 18 張圖片,為了給程序存儲(chǔ)留點(diǎn)空間,我們就存 17 張,從 Flash 偏移 0x100000 處開始存圖片。

2.1 截取一段 mp4 視頻

痞子衡本地有一個(gè) NXP 十周年宣傳視頻(MP4 格式),原始分辨率是 1920x1080,可以先用 ffmpeg 或者格式工廠將其轉(zhuǎn)換成 1280x480,然后可以直接用 Windows 自帶的圖片軟件里的 Trim 功能截取其中一段,30fps 幀率的視頻截取 1 秒就夠了。

2.2 使用 ScreenToGif 軟件分離出圖片

這時(shí)候可以用非常好用的 GIF 制作軟件 ScreenToGif 打開這個(gè) 1 秒的 MP4,可以看到一共有 31 張圖片,可以刪掉其中一些留下 17 張,然后將其保存為圖片(當(dāng)前版本僅能保存為 png 格式),可以再用格式工廠軟件將圖片格式轉(zhuǎn)為 jpg,存在 D:/nxp_logo 文件夾下。

2.3 Python 腳本轉(zhuǎn)成 rgb888 裸數(shù)據(jù)

有了 17 張 jpg 圖片,這時(shí)候?qū)懸粋€(gè) Python 腳本(jpg2rgb.py),借助 Image 庫(kù)將 17 張 jpg 圖片中的 rgb 數(shù)據(jù)全部抽取出來保存在一個(gè) bin 文件中,下面腳本使用命令為 python jpg2rgb.py D:/nxp_logo/ -o startup_video_white_rgb888_17f.bin 。

importsys,os importargparse importImage parser=argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument("-o","--output",required=True,metavar="PATH",type=argparse.FileType('wb')) parser.add_argument("input",help="JPEGImagefolder.") args=parser.parse_args() imgFiles=[] #獲取指定文件夾中所有 jpg 圖片路徑 imgFolder=os.path.abspath(args.input) inputFiles=os.listdir(imgFolder) foridxinrange(len(inputFiles)): imgFiles.append(os.path.join(imgFolder,inputFiles[idx])) foridxinrange(len(imgFiles)): #使用 Image 庫(kù)打開 jpg 圖片 imgObj=Image.open(imgFiles[idx]) pixelBuf=imgObj.getdata() #抽取 rgb 裸數(shù)據(jù)寫入 bin 文件 foriinrange(len(pixelBuf)): forjinrange(len(pixelBuf[i])): args.output.write(chr(pixelBuf[i][len(pixelBuf[i])-j-1])) args.output.close()

2.4 將圖片裸數(shù)據(jù) bin 文件下載進(jìn) Flash

現(xiàn)在可以借助 MCUBootUtility 的通用編程器功能將 startup_video_white_rgb888_17f.bin 文件燒錄進(jìn) Flash 里 0x100000 處偏移的地方。至此,準(zhǔn)備工作已經(jīng)就緒。

三、引出 LCD 花屏顯示問題

現(xiàn)在讓我們開始設(shè)計(jì)開機(jī)動(dòng)畫程序,可以基于 /SDK_2.x.x_MIMXRT1170-EVK/boards/evkmimxrt1170/jpeg_examples/sd_jpeg 例程,將其中的 LCD 配置,Pinmux 配置稍微改一下,適配這個(gè)項(xiàng)目的板子,然后主函數(shù)可以精簡(jiǎn)如下(sd 卡讀,libjpeg 解碼函數(shù)全部去掉):

#defineAPP_FB_HEIGHT480 #defineAPP_FB_WIDTH1280 /*LCDframebufferbyteperpixel,RGB888format,24-bit.*/ #defineAPP_FB_BPP3 constuint32_ts_imagePics=17; constuint32_ts_imageStartAddr=0x30100000; intmain(void) { uint8_t*imageAddr=(uint8_t*)s_imageStartAddr; uint32_timageBytes=APP_FB_HEIGHT*APP_FB_WIDTH*APP_FB_BPP; BOARD_ConfigMPU(); BOARD_InitBootPins(); BOARD_BootClockRUN(); BOARD_ResetDisplayMix(); APP_InitDisplay(); while(1) { /*Waitfortheprevioussetframebufferactive.*/ while(s_newFrameShown==false); /*Nownewframeisready,passittoLCDIF.*/ s_newFrameShown=false; g_dc.ops->setFrameBuffer(&g_dc,0,imageAddr); imageAddr+=imageBytes; if((uint32_t)imageAddr>=(s_imageStartAddr+imageBytes*s_imagePics)) { break; } } } staticvoidAPP_BufferSwitchOffCallback(void*param,void*switchOffBuffer) { s_newFrameShown=true; }

這時(shí)候把代碼下載進(jìn)高性能 DDR Flash 的那塊板子,我們的代碼可以鏈接到 TCM 里執(zhí)行,這樣不占用運(yùn)行時(shí) Flash 訪問帶寬,不與 LCD 搶帶寬。斷電重啟可以看到在 60Hz 的 LCD 刷新率下,開機(jī)動(dòng)畫效果顯示杠杠的。

現(xiàn)在把代碼下載進(jìn)普通 SDR Flash 的板子試試,可以看到 LCD 顯示花屏了,完全沒有圖像的影子,這時(shí)候該怎么定位問題?

四、嘗試降低 LCD 刷新率

在嘗試降低 LCD 刷新率之前,痞子衡額外做了一些 debug 工作來確認(rèn)是不是 Flash 焊接的問題,首先是調(diào)試器掛上去查看 PC 指針停在哪里,經(jīng)調(diào)試發(fā)現(xiàn),PC 指針是在 TCM 里,根據(jù)工程 map 文件可以查到其地址對(duì)應(yīng)的是程序的結(jié)尾,說明代碼正常跑完了,這至少證明芯片能夠正常從 Flash 啟動(dòng)。

然后痞子衡又對(duì)程序作了一些改動(dòng),將 Flash 中的圖片數(shù)據(jù)拷貝到 SDRAM 中,讓 LCD 模塊去刷 SDRAM,這時(shí)候圖像顯示是正常的,這幾乎就可以定位問題了,是普通 SDR Flash 帶寬不夠,F(xiàn)lash 訪問速度撐不起 60Hz 刷新率。

#defineDEMO_HSW(1U) #defineDEMO_HBP(48U) #defineDEMO_HFP(16U) #defineDEMO_VSW(1U) #defineDEMO_VBP(3U) #defineDEMO_VFP(5U) staticvoidBOARD_InitLcdifClock(void) { /* *Thepixelclockis(height+VSW+VFP+VBP)*(width+HSW+HFP+HBP)*framerate. * *For60Hzframerate,theTM103XDKP13pixelclockshouldbe40MHz. * */ constclock_root_config_tlcdifv2ClockConfig={ .clockOff=false, .mfn=0, .mfd=0, .mux=4,/*!

讓我們嘗試降低 LCD 刷新率來驗(yàn)證是不是 Flash 帶寬的問題,在 BOARD_InitLcdifClock()函數(shù)中修改 lcdifv2ClockConfig.div 的值,慢慢增大該值,經(jīng)痞子衡測(cè)試,當(dāng) div 設(shè)為 22 時(shí)(即對(duì)應(yīng) LCD 刷新率為 33.9Hz),終于能夠正常顯示開機(jī)動(dòng)畫了。

五、關(guān)于帶寬的分析

現(xiàn)在給出痞子衡的觀點(diǎn),對(duì)于一個(gè)新項(xiàng)目,如果首次測(cè)試 LCD 顯示,建議先從低刷新率開始,只有低刷新率調(diào)試通過,再逐漸增大刷新率,否則會(huì)因?yàn)閹拞栴}浪費(fèi)不少時(shí)間。

最后再讓我們通過理論公式來推算這款普通 SDR Flash 能支持最大的刷新率,計(jì)算公式其實(shí)很簡(jiǎn)單:

LCD 最大刷新率 = (Flash 時(shí)鐘頻率 * Flash 數(shù)據(jù)位) / 圖片大小 = 133MHz * 4bit / (1280 * 480 * 24bit) = 36.08Hz

理論計(jì)算值 36.08Hz 跟我們實(shí)測(cè)值 33.9Hz 很接近,那點(diǎn)差值應(yīng)該是 FLEXSPI 和 eLCDIF 模塊的開銷。

至此,i.MXRT1170 上 LCD 花屏顯示問題的分析解決經(jīng)驗(yàn)痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯 黃昊宇

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

    關(guān)注

    34

    文章

    4363

    瀏覽量

    166202
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    手機(jī)將在2013年成為第一大閃存芯片消耗者

    市場(chǎng)調(diào)研公司IHS iSuppli近日發(fā)布報(bào)告稱,手機(jī)將在2013年成為第一大閃存芯片消耗者。
    發(fā)表于 02-03 14:16 ?945次閱讀

    PCB之家,中國(guó)PCB行業(yè)第一大論壇開通啦

    PCB之家,中國(guó)PCB行業(yè)第一大論壇,為您提供最及時(shí)的PCB行業(yè)咨詢信息、最新的PCB行業(yè)技術(shù)資料、以及最專業(yè)的PCB人才信息交流,同時(shí)還為您提供方便的在線商務(wù)交流平臺(tái),為您的產(chǎn)品提供個(gè)網(wǎng)絡(luò)展示平臺(tái),PCB之家竭誠(chéng)為您服務(wù)  http://www.pcbhom
    發(fā)表于 09-30 17:59

    “金三角”撐起2010年電子元器件第一大

    “金三角”撐起2010年電子元器件第一大展 有數(shù)據(jù)顯示,2009年前三季度,中國(guó)電子元件、器件行業(yè)銷售額與去年相比,分別下降2.8%和2.1%,但多數(shù)電子元器件三季度
    發(fā)表于 01-13 09:23 ?966次閱讀

    騰訊增持至21.25%京東股成第一大股東

    截至8月17日,騰訊持有京東股票比例從2014年5月的17.6%升至21.25%,超過劉強(qiáng)東(微博),成為京東第一大股東。
    發(fā)表于 08-20 11:47 ?1090次閱讀

    全球第一大廣告巨頭WPP下調(diào)營(yíng)收預(yù)期 引發(fā)拋售慘案

    全球第一大廣告巨頭WPP在二季報(bào)中下調(diào)年度營(yíng)收預(yù)期,引發(fā)投資者大量拋售其股票,股價(jià)跌超10%。
    發(fā)表于 08-24 10:16 ?1089次閱讀

    Canalys的最新報(bào)告顯示:小米取代了三星成為印度第一大智能手機(jī)廠商

    根據(jù)來自新加坡市場(chǎng)研究公司Canalys的最新報(bào)告顯示,在去年12月拿下印度27%的出貨量份額之后,小米取代了三星成為印度第一大智能手機(jī)廠商。
    的頭像 發(fā)表于 01-27 09:52 ?3523次閱讀

    阿里巴巴已經(jīng)成為中國(guó)第一大AI智能音箱廠商

    天貓精靈官方宣布,天貓精靈系列AI智能音箱目前累計(jì)銷量已經(jīng)突破1000萬臺(tái)。這也意味著,阿里巴巴已經(jīng)成為中國(guó)第一大AI智能音箱廠商。
    發(fā)表于 03-08 09:31 ?844次閱讀

    科創(chuàng)板 | 頂著“中國(guó)第一大硅晶圓廠”光環(huán)的它成色幾何?

    上交所公布最新批科創(chuàng)板受理名單,其中擁有“中國(guó)第一大硅晶圓廠”稱號(hào)的上海硅產(chǎn)業(yè)集團(tuán)也出現(xiàn)在列。
    的頭像 發(fā)表于 05-06 11:28 ?3961次閱讀

    報(bào)告顯示:德國(guó)2021年有望成為全球第一大電動(dòng)汽車市場(chǎng)

    3月6日消息,據(jù)國(guó)外媒體報(bào)道,管理咨詢公司麥肯錫發(fā)布的報(bào)告顯示,汽車生產(chǎn)大國(guó)德國(guó)明年有望生產(chǎn)超過170萬輛電動(dòng)汽車,并成為全球第一大電動(dòng)汽車市場(chǎng)。
    的頭像 發(fā)表于 03-06 15:36 ?2582次閱讀

    lcd顯示屏出現(xiàn)花屏如何處理

    任何產(chǎn)品在使用過程中都有可能會(huì)發(fā)生這樣或那樣的問題,lcd顯示屏屬于易碎品在使用中也要特別小心,經(jīng)常有朋友都會(huì)遇到關(guān)于lcd顯示花屏的問題
    發(fā)表于 06-24 10:22 ?5653次閱讀

    超越美國(guó)!中國(guó)首次成為歐盟第一大貿(mào)易伙伴

    據(jù)商務(wù)部官微商務(wù)微新聞消息顯示,今年前7個(gè)月,中歐雙邊貿(mào)易額達(dá)到了3827億歐元(約2.63萬億人民幣),同比增加了2.6%,中國(guó)首次成為歐盟第一大貿(mào)易伙伴,超過歐美貿(mào)易額52億歐元。同時(shí),中國(guó)保持歐盟第一大進(jìn)口來源地、第三大出
    的頭像 發(fā)表于 09-25 15:21 ?1981次閱讀

    蘇州超越上海成為中國(guó)第一大工業(yè)城市

    其工業(yè)實(shí)力的強(qiáng)勁。 、蘇州超越上海成為中國(guó)第一大工業(yè)城市 蘇州工業(yè)依靠的是什么功力再次獨(dú)占鰲頭呢?數(shù)據(jù)顯示: 1、支柱性行業(yè)穩(wěn)定增長(zhǎng):電子信息、電氣機(jī)械、鋼鐵、專用設(shè)備制造業(yè)產(chǎn)值分別增長(zhǎng)2.9%、4.9%、6.7%和4.8%,
    的頭像 發(fā)表于 10-23 10:04 ?4043次閱讀

    特斯拉在美國(guó)加州Firebaugh啟用全球第一大超級(jí)充電站

    經(jīng)過數(shù)月建設(shè),日前,特斯拉在美國(guó)加州Firebaugh啟用了全球第一大超級(jí)充電站。
    的頭像 發(fā)表于 11-16 10:07 ?1753次閱讀

    LG化學(xué)全球第一大電池廠商正式成立

    12月1日,LG化學(xué)宣布,全球第一大電池廠商LG Energy Solution(LG能源解決方案)正式成立,同時(shí),這也將是韓國(guó)首家純電池制造公司。
    的頭像 發(fā)表于 12-02 10:16 ?2944次閱讀

    瑞士第一大移動(dòng)網(wǎng)絡(luò)運(yùn)營(yíng)商Sunrise將裁員6.14%

    瑞士第一大移動(dòng)網(wǎng)絡(luò)運(yùn)營(yíng)商Sunrise將裁員6.14% 瑞士第一大移動(dòng)網(wǎng)絡(luò)運(yùn)營(yíng)商Sunrise目前全職員工總數(shù)有2703名;Sunrise計(jì)劃2024年3月底裁員166 人;約占6.14%。 Sunrise希望通過裁員來實(shí)現(xiàn)更精簡(jiǎn)的公司結(jié)構(gòu)的目的。
    發(fā)表于 01-17 18:51 ?769次閱讀