作者:劉旭暉 Raymond轉載請註明出處
Email:colorant@163.com
BLOG:http://blog.csdn.net/colorant/
首頁:http://sites.google.com/site/rgbbones/
這裡記錄的是在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模組的實際顯示效果很好的匹配,需要做一些局部的調整,但是要保證整體曲線的平滑,否則可能會出現顏色怪異的跳變的現象。