1. 程式人生 > >LCD顯示異常分析——撕裂(tear effect)【轉】

LCD顯示異常分析——撕裂(tear effect)【轉】

工程 情況 開啟 image 了解 發生 str control 數據

轉自:LCD顯示異常分析——撕裂(tear effect)

概述

在上一篇《LCD顯示異常分析——開機閃現花屏》中,我們一起分析了開機花屏的問題,在這一篇中,我將對LCD撕裂(tear effect)問題進行詳細分析,以及給出這類問題的常用解決方法。

本文適用範圍:

  • 對象:LCD驅動調試人員
  • 硬件:帶GRAM的LCD (如SPI/MCU/DSI CMD屏)
  • 軟件:所有嵌入式操作系統

現象

首先貼一張動態圖,讓大家能直觀的感受撕裂形成的過程:

技術分享圖片

分析

從上面的動態圖我們可以看到,在第二幀出現了新舊畫面各顯示一部分的現象,該現象即為撕裂,英文又叫tear effect。tear effect的根本原因是對GRAM的讀、寫速度不一致,導致在一幀之內,GRAM的讀指針(R)與寫指針(W)發生了重疊導致。

這個現象其實包含2個信息:

  1. W和R指針重疊了
  2. 指針重疊後的畫面在屏上靜止不動保持了整整1幀的時間(60fps的話就是16.7ms),這個時間是足以被人眼察覺到的

有經驗的開發人員都知道,出現這類問題往往都是因為有個2倍關系沒有調整好。何為“2倍關系”?即必須保證W:R > 1:2(這裏的W、R都指的是速率),否則勢必會出現撕裂的現象(如上面的W:R=1:3)。

理想情況

為什麽是2倍?請看下圖(W:R=1:2):

技術分享圖片

因為W < R,所以R指針跑在前面,因此讀出來的數據都是舊數據,屏幕第1幀顯示的還是上一幀的圖像,直到第2幀才將GRAM中的圖像完整的顯示出來。如果R再稍微快那麽一點,那麽在第2幀R指針就又會趕上W指針,這樣就會再次出現tear effect現象。所以W:R=1:2是撕裂發生的臨界值。

同理,那如果對於W > R的情況,是否也存在這個2倍關系?

回答這個問題前,我們先來看看下面這兩幅圖:

技術分享圖片

圖1 (W:R=3:1)

技術分享圖片

圖2 (W:R=2:1)

從上面的圖中我們可以看到,對於W > R這中情況,確實也存在2倍關系。但是這種由於W > R而造成的撕裂現象一般是不可能發生的,因為大部分顯示驅動都是等到TE信號到來時才開始刷圖的,所以只要R指針還沒有掃描完當前幀的畫面,W指針是不可能立即去GRAM中刷畫面“B”的,一定會等到畫面“A”徹底顯示完畢後才開始繪制,所以上面的圖1、圖2兩種情況都不會發生。

因此為了防止撕裂的發生,只需要保證W > R/2 (這裏指速率)即可。

實際情況

前面分析的現象都是基於一個前提條件的,那就是:

指針W和R都是基於同一個時間點、同一個GRAM起始位置開始掃描的

只要上面的2點有一個不滿足,那麽2倍關系就不成立了。

因為對於這類帶GRAM的LCD ,驅動軟件或LCD Controller硬件都會做成等待TE信號到來時才會開始刷圖,所以對於第1點這裏不做詳細描述,只針對第2點進行講解。在LCD的實際顯示過程中,其實是有消隱區的(即Porch區域),而且一般屏廠會將TE信號默認放在內部DriverIC的VSYNC階段送出,這就導致了指針W無法滿足和R從同一GRAM起始位置開始掃描,具體過程如下圖:

技術分享圖片

從上圖我們可以看到,雖然W:R=2:3,滿足W > R/2的條件,但是由於它們不是從GRAM的同一起始位置開始掃描,所以仍然會出現W和R指針碰頭的情況,最終導致撕裂的現象。

那麽對於上述這種情況,有什麽方法可以解決嗎?是時候召喚出TE Output Line了!

TE Output Line

LCD DriverIC廠商還是很貼心的,為了解決上述問題,工程師們專門預留了一個TE Output Line寄存器,該寄存器的作用就是用來調節TE信號(又叫FMARK信號)的輸出位置。默認情況下,該寄存器的值為0,即DriverIC內部刷新時的VSYNC期間。那麽對於上述情況,我們只需要將TE Output Line的值設置為VSYNC+VBP的值即可。

  • 對於主控端,Vporch往往由VSYNC+VBP+VFP構成;
  • 對於LCD DriverIC廠商,他們定義的VBP其實往往是包含VSYNC的;

如下圖:

技術分享圖片

結論

撕裂的本質:

  1. 在1幀時間內,W和R重疊了
  2. 撕裂的畫面停留了1幀的時間,被人眼所覺察

解決方法:

  • W > R/2 (這裏指速率)
  • 開啟TE同步信號
  • 調整TE Output Line

LCD顯示異常分析——撕裂(tear effect)【轉】