1. 程式人生 > >LCD驅動除錯中部分常見問題的分析及解決辦法

LCD驅動除錯中部分常見問題的分析及解決辦法

點選開啟連結 http://blog.csdn.net/colorant/article/details/2782568

LCD點不亮——無法正確完成初始化:

       LCD點不亮問題的原因有很多,但出現這個問題後,首先應該判斷LCD是否正確完成初始化。最簡單的判斷方法就是測量LCM的FPC上的電容兩端電壓。(具體的值可以和模組供應商溝通)

       如果經過上一步,檢測出沒有正確完成初始化,接下來首先和模組、IC一起確認初始化程式碼是否有問題。

       確認好程式碼以後還是點不亮,說明是模組無法進行初始化,而不是初始化出錯。重新理一遍流程:上電->初始化。上電這個步驟一般不會有問題,如果沒有遵循正確的上電時序和RESET的流程的話也比較好排查。

       那麼還能存在哪些問題呢?

       在上電成功以後,BB會通過LCD序列匯流排傳送LCD的初始化資料,如果這個環節出現問題,那肯定初始化不能成功。在這個過程中能出現問題的就只有SPI的通訊控制這一塊了,(通常LCD的通訊介面有CPU和序列匯流排介面等,手機中較常用的就是序列匯流排介面,序列匯流排介面又以SPI介面居多),其實造成SPI通訊不符合LCD模組驅動晶片的要求的原因也是多種多樣的:

1、  雖然都是SPI介面,但是,不同的LCD模組,在控制訊號的要求上往往都會有細小的不同,有時候,CPU的SPI介面甚至都無法產生LCD模組所要求的特定波形時序。有些LCD模組可能還會有特定的勢能訊號來控制SPI介面工作與否。

2、  多數LCD驅動晶片其實都是具有讀取暫存器和ID號的功能的,但是很多模組在封裝的時候往往沒有吧晶片的SPI介面的SDO訊號線引出來。導致無法通過讀取暫存器和ID的方式來判斷SPI總線上的通訊協議是否正確。

那麼,如果確定了是SPI通訊控制不滿足要求的話,就可以通過修改SPI的讀寫控制來適配LCD模組IC的要求。

如果CPU所提供SPI介面實在沒有辦法配置到完全和LCD模組要求的時序波形相同,可以採用CPIO口模擬SPI訊號的方式來初始化LCD。

最後,如果模組能夠將SDO引出就儘量引出,不僅方便除錯,而且可以很方便的做不同IC的LCD自適應的相容。

初始化成功,LCD點不亮

       有的時候LCD點不亮,通過上面講的方法,測量LCM的FPC上的電容的電壓確認初始化正常。即有時候初始化已經成功了,但是LCD還是沒有被點亮。這個時候就要仔細的對照LCD模組的規格書來檢查了,是否是一些非常規的原因,例如串列埠和RGB資料介面相互影響或者別的什麼原因。

       見過別人講的一個案例:某廠商的一款LCD驅動晶片,初始化成功了以後LCD還是點不亮,經查發現,在RGB介面上寫入資料前,要通過串列埠對某一暫存器寫入特殊值,但實際上在初始化的程式碼中已經包含了對該暫存器寫值,即使寫入這一特殊值以後RGB資料口上仍然寫入不了資料。最後發現,對暖氣修改以後,不能再寫其它的暫存器,否則就會出現問題。當然這也是極個別的現象,不過當你在除錯過程中遇到此類問題無法解決的時候,不妨在這個方向上進行檢查。

LCD影象錯位

       LCD顯示在水平方向發生位移,或者在上面或底部有一條几個畫素的彩色、白色或黑色條紋。一般來說,出現這種情況,都是因為初始化引數設定不對,和行同步或者場同步訊號有關。

       顯示位置有位移或者錯位,就檢查LCD模組和CPU上的LCD控制器的行同步與場同步訊號的寬度、前後延時、極性的匹配。最可能的就是回掃的前後延時時間不匹配。

       另外,這種情況通常錯位不會很多,如果出現錯位了一半的影象之類的情況,通常就是別的原因造成的了。而且有時候,有的LCD的行訊號、場訊號的設定還和LCD驅動晶片的部分電壓引數的取值設定有關。

LCD大片圖片錯位、疊加、重複

       LCD顯示上大範圍的影象出現錯位、疊加或者重複,出現這種情況一般不會是行同步或者場同步訊號的延時引起的,基本可以排除這方面的影響。可以間檢查下抽樣等功能的引數是否正常,還有就是因為LCD的硬體平臺不同,而在時序或者時鐘頻率上存在差異引起的。碰見這種情況首先應該做的就是先仔細計算DMA傳輸引數。其它的情況要具體問題具體分析。

UBOOT過程中LCD不顯示

       開機的時候在UBOOT過程中LOGO不顯示,只有背光亮。這種情況出現的時候如果其它都正常,不妨檢查下FLASH的配置。我碰見這個問題的原因最後是FLASH的MCP沒有設定正確。FLASH換小以後MCP只有CS0這一片封裝,而在配置檔案裡還是沿用以前的CS0和CS1兩片的配置,從而可能會引起各種意想不到的問題。

開機LCD亮的瞬間有花屏

       出現這種問題,一般都是由於LCD在初始化完成後重新整理第一副影象未完全準備好的時候背光已經亮了。解決的辦法就是在UBOOT時候背光亮之前的延時相應的加長一點。

    這裡記錄的是在TFT型別的LCD驅動的除錯中我所遇到過的一些問題,因為具體硬體平臺和環境不同,有些問題,現象和原因可能不一定與你的實際情況相同,僅供參考。 

無法正確完成初始化

  • 症狀
    往LCD的序列匯流排傳送初始化資料後,LCD模組沒有任何反應
  • 分析
    通常在嵌入式領域中使用的中小型LCD模組都會需要在上電後進行初始化設定,而後才能正常工作。常見的通訊介面有CPU介面和序列匯流排介面,而序列匯流排介面又以SPI介面居多。     導致無法初始化的原因通常是兩方面:     沒有遵循正確的上電RESET流程     SPI通訊控制不符合LCD模組驅動晶片SPEC的要求     造成後者的原因也是多種多樣的     首先,雖然都是SPI介面,但是,不同的LCD模組,在控制訊號的要求上往往都會有細小的不同,有時候,CPU的SPI介面甚至都無法產生LCD模組所需要的特定波形時序。有些LCD模組可能還會有特定的使能訊號線控制SPI介面的工作與否。     其次,多數LCD驅動晶片其實都是具有讀取暫存器和ID號的功能的,但是很多模組在封裝的時候往往沒有把晶片SPI介面的SDO訊號線引出來,導致無法通過讀取暫存器和ID號的方式判斷SPI匯流排的通訊協議是否正確。增大了除錯的難度。
  • 解決
    首先當然是要保證上電順尋,RESET,使能訊號等的正確,而後,如果CPU所提供的SPI介面無法配置到完全和LCD模組要求的時序波形相同,可以採用GPIO口模擬SPI訊號的方式來初始化LCD,畢竟初始化地工作量並不多,也不需要經常做,所以通過GPIO模擬,對CPU佔用率幾乎沒有影響。     最後,如果能夠將SDO口引出,儘量引出,能給前期除錯帶來很大方便,也有利於將來自動判斷LCD型別,根據不通模組自動載入不同驅動。

影象錯位

  • 症狀
    常見的症狀如影象左右位移幾個畫素,上方或下方有一條彩色條紋,或黑色條紋等等
  • 分析
    毫無疑問,這種現象肯定是初始化引數設定不對,位置錯位,和場同步型號或行同步訊號有關,不外乎就是LCD模組和CPU上的LCD控制器的行場同步訊號的寬度,前後延遲時間,極性等屬性的匹配。這其中,對於影象錯位,又以行場前後延遲時間的不匹配可能性最高。     另外,這種情況,通常錯位的畫素數不會太大,如果出現錯位了1/2屏之類的情況,通常就是由別的原因照成的了。
  • 解決
    精確適配行場訊號,有時候,有些LCD的行場訊號的設定還和LCD驅動晶片的部分電壓引數的取值設定相關。要協同修改。


工作一段時間後,部分螢幕資料顯示錯位,花屏

  • 症狀
    某個型號的LCD使用一段時間後,螢幕下方會出現部分螢幕上方的資料類似隔行的疊加顯示出來,而且隨著時間的推移,從開始底部的幾行慢慢向上拓展越來越多,越來越嚴重。有時候很長一段時間不用,突然又好了。
  • 分析
    不確定的問題最麻煩了,偏色,錯位資料混亂花屏等,常常可能是LCD的connector接觸的問題。但是這次,反覆確認connector的良好接觸也無濟於事。經過仔細除錯,最終發現這次的問題和硬體的初始化順序有關,需要先將CPU這端的LCD控制器相關的暫存器設定正常以後,再初始化LCD模組內部的暫存器,否則,當LCD屏初始化完成開始工作後,再修改CPU端的控制暫存器,會對這個型號的LCD模組照成不可預知的影響。這個例子中,麻煩的就是這個影響並沒有馬上體現出來,而是在經過一段時間後才出現,這點比較奇怪。
  • 解決
    修改初始化順序後,問題再也沒有出現。


初始化完成後,顯示資料無法寫入LCD

  • 症狀
    某廠商的一款LCD驅動晶片,初始化完成後無法寫入顯示資料
  • 分析
    仔細研究spec,發現在RGB介面上寫入資料前,需要先通過序列介面在某暫存器地址上寫入一特殊值,但是實際上初始化程式碼中已經包含了該暫存器的設定,即使寫入該值以後RGB資料口上依然寫入不了資料。最後發現,對該暫存器修改以後,不能再寫其它的暫存器,否則就會出現上訴問題。     理論上通訊串列埠和RGB資料介面是不應該互相影響的,而且其它廠商的LCD驅動晶片根本就不存在這種需要先寫入特殊指令的問題,只能說這款晶片真的很特殊了。
  • 解決
    把對該暫存器的設定放在初始化程式碼的最後。


大範圍的影象錯位,疊加,重複等

  • 症狀
    通常的症狀包括一幅影象在LCD上顯示時顯示為水平或垂直方向的重複,同時可能伴隨著這些方向上的壓縮,抽行等現象。
  • 分析
    這種現象通常是由於用於LCD資料傳輸的DMA控制器的引數設定不對造成的。     但是有一次,我遇上一個很奇怪的現象,某個型號的LCD驅動晶片,上半部分顯示的影象是並排的兩幅縮小的影象,而下半部分,是上一次初始化的時候送進去的影象的下半部分。最後,在系統關閉前的一瞬間,影象能夠正確顯示。     首先,不像時序的問題,因為這種現象和場掃描,行掃描訊號不匹配所會表現的現象影象偏移翻滾錯位等現象完全不吻合。     其次,該款晶片提供了抽樣等功能,但是仔細察看程式也沒有錯誤的設定這些引數,而且,抽樣應該是發生在資料從CPU到LCD快取的傳輸儲存過程中,該例中快取中的資料應該是正確無誤的,所以也排除這方面的設定錯誤的可能     最終發現在該驅動晶片工作在RGB介面模式的時候,有一個設定高速寫入模式的暫存器設定需要修改,廠家提供的初始化程式碼裡沒有設定這個暫存器,廠家自己測試也能正常工作,應該是因為用於驅動LCD的硬體平臺不同,在時序和時鐘頻率上有一些區別。
  • 解決
    仔細計算DMA傳輸引數,通常都能解決問題。其它問題要具體情況具體分析解決。

影象偏灰,顏色細節丟失等等

  • 症狀
    通常的症狀包括影象顏色的細節變化丟失,整體影象偏暗偏灰等情況。
  • 分析
    一般來說,LCD模組內部都有一系列的暫存器用於控制各個灰階的電壓水平,也會有一些暫存器用來控制整體的電壓偏置範圍。調節這些暫存器也就是調節我們所謂的顏色飽和度,對比度等。這些暫存器相對容易調整,但對影象顏色細節影響最大的,通常是Gamma曲線相關的暫存器,實際就是通過控制前面所說的各個灰階的偏置電壓水平來實現。
  • 解決
    對於Gamma曲線,要計算Gamma曲線相關取樣點上的數值,設定相應的暫存器,有一點需要注意,通常理論計算的Gamma曲線引數並不能和實際LCD模組的實際顯示效果很好的匹配,需要做一些區域性的調整,但是要保證整體曲線的平滑,否則可能會出現顏色怪異的跳變的現象。