加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

一個(gè)關(guān)于LCD屏顯示出異常亮點(diǎn)的故事(上)

2020/04/01
247
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是 i.MXRT1060 上 LCD 橫向漸變色顯示出亮點(diǎn)問(wèn)題的分析解決經(jīng)驗(yàn)。

痞子衡前段時(shí)間在支持一個(gè) i.MXRT1060 客戶項(xiàng)目時(shí)遇到了 LCD 顯示有異常亮點(diǎn)的問(wèn)題,這個(gè)問(wèn)題的定位和排查花了一點(diǎn)時(shí)間,整個(gè)過(guò)程現(xiàn)在回想起來(lái)仍覺得有意思。做嵌入式(尤其是軟件)這行主要工作除了寫代碼就是解 Bug 了,而且很多時(shí)候往往是寫代碼容易,解 Bug 難,所以解 Bug 能力是衡量一個(gè)工程師是否資深的重要因素。Bug 不僅要解得好,還得解得快,這個(gè)很考驗(yàn)工程師的邏輯思維能力和調(diào)試經(jīng)驗(yàn)。今天痞子衡就給把之前分析解決 LCD 異常亮點(diǎn)問(wèn)題全過(guò)程復(fù)現(xiàn)給大家,希望對(duì)大家今后解 Bug 有所幫助。

本篇是上篇,主要是拋出問(wèn)題,希望大家能夠留言積極回復(fù),給出你解 Bug 的思路,看看誰(shuí)的思路能更勝一籌。

一、問(wèn)題描述

先給大家簡(jiǎn)單描述一下這個(gè) LCD 顯示異常亮點(diǎn)問(wèn)題,客戶使用的是一塊由 ST7701S 驅(qū)動(dòng)的 480x480 分辨率的 RGB 接口 LCD 屏,主控芯片是 i.MXRT1062,客戶在 FlexSPI1 接口上掛了一片 QuadSPI Flash 存放應(yīng)用程序,還在 FlexSPI2 接口上掛了一片 HyperRAM 做顯存。為了驗(yàn)證系統(tǒng)是否正常,客戶設(shè)計(jì)了一個(gè) LCD 顯示測(cè)試程序(即下圖中的 App),這個(gè) App 連同 L2 Boot 一起被燒寫進(jìn) QuadSPI Flash,芯片上電啟動(dòng),BootROM 加載 L2 Boot 運(yùn)行,L2 Boot 完成 HyperRAM 初始化(為什么設(shè)計(jì)二級(jí)啟動(dòng)后面會(huì)解釋)后加載 App 到 HyperRAM 運(yùn)行,App 里構(gòu)造 uint32_t s_frameBuffer[480][480](像素格式是 XRGB8888)內(nèi)容后借助 eLCDIF 模塊驅(qū)動(dòng) LCD 屏顯示,s_frameBuffer 里的內(nèi)容就是簡(jiǎn)單的橫向漸變色,但是漸變色顯示出了問(wèn)題,如下圖中左邊 LCD 示意圖所示,均勻地出現(xiàn)了幾根不明白色縱向線條。

這是客戶的 LCD 顯示測(cè)試代碼(下圖左側(cè)),基于 SDK_2.6.2_EVK-MIMXRT1060boardsevkmimxrt1060driver_exampleselcdifrgb 下的 IAR 工程,代碼僅稍作修改(LCD 驅(qū)動(dòng)部分要增加 ST7701S 初始化,并且相應(yīng)調(diào)整 LCD 寬高參數(shù)),主函數(shù)則相當(dāng)簡(jiǎn)單,s_frameBuffer[][]放在 HyperRAM 里,其內(nèi)容填充由 APP_FillFrameBuffer()函數(shù)完成,實(shí)現(xiàn)紅 / 綠 / 藍(lán)三種顏色的橫向漸變顯示(下圖右側(cè),存在不明亮線條)。

?

核心顯示數(shù)據(jù)填充函數(shù) APP_FillFrameBuffer()再貼一遍,防止大家看不清上圖中的代碼:

#define APP_IMG_HEIGHT 480
#define APP_IMG_WIDTH  480

__no_init   uint32_t s_frameBuffer[APP_IMG_HEIGHT][APP_IMG_WIDTH];

void APP_FillFrameBuffer(void)
{
    uint32_t i = 0, j = 0;
    for (i = 0; i < APP_IMG_HEIGHT / 3; i++)
    {
        for (j = 0; j < APP_IMG_WIDTH; j++)
        {
            uint8_t k = j % 255;
            s_frameBuffer[i][j]                    = APP_MakeLutData(k, 0, 0);
            s_frameBuffer[i+APP_IMG_HEIGHT/3][j]   = APP_MakeLutData(0, k, 0);
            s_frameBuffer[i+APP_IMG_HEIGHT*2/3][j] = APP_MakeLutData(0, 0, k);
        }
    }
}

二、現(xiàn)有條件

一個(gè)實(shí)驗(yàn)室,焊接工具一應(yīng)俱全。

一塊出問(wèn)題的客戶板子(以及客戶測(cè)試程序)。

客戶 LCD 屏廠給的驅(qū)動(dòng)程序(基于 STM32 開發(fā)板,屏廠反饋屏面板本身沒有問(wèn)題)

一塊恩智浦官方 i.MXRT1060-EVK,如下圖所示。

幾片 HyperRAM 芯片(與恩智浦 EVK 上 HyperFlash 同封裝,但型號(hào)與客戶板子上 HyperRAM 不一致)

客戶 LCD 屏 40pin 連接線與恩智浦 EVK 上 LCD 屏 40pin 連接線線序不一致。

?

?

三、你的解 Bug 思路

  

痞子衡列了一些可能出問(wèn)題的地方(不一定全),供大家參考:

客戶 LCD 顯示測(cè)試代碼邏輯是否有問(wèn)題?

客戶 LCD 屏與 i.MXRT1060 連接(線序)是否有問(wèn)題?

客戶 LCD 屏的 ST7701S 驅(qū)動(dòng)移植(從 STM32 到 i.MXRT1060)是否有問(wèn)題?

客戶選用的 HyperRAM 本身質(zhì)量是否有問(wèn)題?

i.MXRT1060 配置的客戶 HyperRAM 時(shí)序參數(shù)是否有問(wèn)題?

i.MXRT1060 的 LCD 顯示模塊 eLCDIF 驅(qū)動(dòng)是否有問(wèn)題?

i.MXRT1060 系統(tǒng)的總線處理(如 Cache、總線競(jìng)爭(zhēng))是否有問(wèn)題?

請(qǐng)留言給出你能想到的其他出問(wèn)題的地方,你解 Bug 的思路(要從解決問(wèn)題的效率出發(fā),看看誰(shuí)的方法能更快的定位問(wèn)題)。

恩智浦

恩智浦

恩智浦半導(dǎo)體創(chuàng)立于2006年,其前身為荷蘭飛利浦公司于1953年成立的半導(dǎo)體事業(yè)部,總部位于荷蘭埃因霍溫。恩智浦2010年在美國(guó)納斯達(dá)克上市。恩智浦2010年在美國(guó)納斯達(dá)克上市。恩智浦半導(dǎo)體致力于打造全球化解決方案,實(shí)現(xiàn)智慧生活,安全連結(jié)。

恩智浦半導(dǎo)體創(chuàng)立于2006年,其前身為荷蘭飛利浦公司于1953年成立的半導(dǎo)體事業(yè)部,總部位于荷蘭埃因霍溫。恩智浦2010年在美國(guó)納斯達(dá)克上市。恩智浦2010年在美國(guó)納斯達(dá)克上市。恩智浦半導(dǎo)體致力于打造全球化解決方案,實(shí)現(xiàn)智慧生活,安全連結(jié)。收起

查看更多

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門,擔(dān)任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會(huì)定期分享嵌入式相關(guān)文章