轉自[LCD顯示異常分析——開機閃現花屏 ](https://blog.csdn.net/hexiaolong2009/article/details/79190789) 最近在工作中,有同事遇到LCD開機瞬間會閃現雪花屏的問題,而這類問題都有個共同點,那就是都發生在帶GRAM的屏上,同樣的問題,在 ...
最近在工作中,有同事遇到LCD開機瞬間會閃現雪花屏的問題,而這類問題都有個共同點,那就是都發生在帶GRAM的屏上,同樣的問題,在休眠喚醒時也會出現。
其實這類問題的原理分析並不難,只是在給別人解釋的時候不太好描述,因此,我特地寫了這篇文章,好讓大家能夠更容易、更直觀的理解這類花屏問題的原因,也希望能夠幫助那些遇到同樣問題的朋友。
環境
- 軟體:Android
- 硬體:帶GRAM的LCD(如SPI屏,DSI CMD屏)
現象
分析
從上面的動態圖可以看出,出現瞬間花屏的問題,主要有兩個原因:
- 背光開啟的時間過早
- 對GRAM的寫速度(W) < 對GRAM的讀速度(R)
其實,只要任意解決其中一個問題,都不會出現開機閃現花屏的現象。開發人員第一次碰到這類問題時,往往第一反應會認為花屏就是在第一幀產生的,但實際從上面的圖中我們可以看到,人眼看到的花屏其實已經是在第二幀了。
對於第一點,其實一開始我也很疑惑,如果說開機閃現花屏是因為uboot中背光開的太早導致,這個結論我能接受。但在進入Android系統後,休眠喚醒時還會有花屏問題,這就有點說不通啊?因為Android的PowerManager框架本身能夠確保在休眠的時候先關背光,後關顯示;在喚醒的時候先開顯示,後開背光,而且我顯示驅動裡面也做了刷背景色的動作,只要GRAM中的數據沒有被填充完,顯示驅動的流程就不會接著往下走,進而也不可能開啟背光。所以一旦背光點亮,說明GRAM已經被初始化了,可為什麼還能看見GRAM中的垃圾數據呢?
這就引出了第二點:因為對GRAM 寫的速度小於讀的速度,哪怕W只比R小那麼一丁點兒,只要它們同時從第一顆像素開始掃描,屏上顯示的第一幀永遠都是垃圾數據。
解決方法
前面已經提到過了,只要任意解決其中一個問題,閃花屏的問題就能解決。
1. 推遲背光開啟的時間
這裡的推遲動作其實是相對的,即你可以:
- 在初始化完GRAM後,等待1個TE信號,再開啟背光
- 或者在給屏幕發送Sleep Out (0x11)、Display On (0x29)指令前,先通過Write Memory Start (0x2C)指令將GRAM初始化好
親測第一種方法簡單粗暴;
2. 提高GRAM的寫速度
即提高主控端匯流排上的送圖速度,比如提高SPI匯流排的時鐘頻率(SPI屏),提高RS/WR的切換速率或擴充DATA匯流排(MCU屏),提高PHY Clock Frequency (MIPI DSI屏)。