調試前的參考文檔:
1)調試lcd背光,背光主要分為PMIC自帶的和單獨的DCDC,如果為PMIC自帶的背光,一般平台廠商已經做好,直接調用接口即可,如果為單獨的DCDC驅動,則需要用GPIO控制DCDC的EN端
2)確認lcd的模擬電,io電是否正常
3)根據lcd的分辨率,RGB/CPU/MIPI等不同的接口,配置控制寄存器接口
4)根據lcd spec配置PCLK的頻率,配置PCLK,VSYNC,HSYNC,DE等控制線的極性
5)使用示波器測試所有clk的波形,確認頻率,極性是否符合要求
6)使用示波器測試data線,看是否有數據輸出,bpp的設置是否正確
7)如果lcd需要初始化,配置spi的接口,一般分為cpu自帶的spi控制器,和gpio模擬的spi。
8)根據lcd spec中的初始化代碼進行lcd的初始化
9)用示波器測量lcd的spi clk及數據線,確認是否正常輸出
10)正常情況下,此時lcd應該可以點亮。如果沒有點亮,按照上述步驟1到9,逐項進行檢查測試,重點檢查第5項,clk的極性
11)如果lcd點亮,但是花屏。則需要先確認數據格式是否正確,然後確認fb裡的數據是否正常,有以下幾種方法確認fb裡的數據
i)cat /dev/graphics/fb0 > /sdcard/fb0,然後將/sdcard/fb0 >到另一台相同分辨率及相同格式的手機上,看圖片顯示是否正常 ii)使用irfanview軟件顯示cat /dev/graphics/fb0出來的raw數據,注意要正確設置分辨率及格式,否則顯示花屏 iii)如果adb連接正常,可以使用豌豆莢等軟件,查看fb中的數據是否正常
通過以上三種途徑,如果確認fb中的數據正常顯示,則很可能為lcd初始化代碼的問題,或者clk極性的問題,如果fb數據不正常,則可能為lcd控制寄存器配置不正常導致。
LCD調試注意事項 tips:
1 lcd接口的數據位數一定要匹對,否則會出現花屏。
2 TE_ON根據平台需要打開,否則會出現開機界面卡掉,一直停在logo區。
3 lcd配置一定要正確,在u-boot(開機logo需要)和kernel配置都要注意,整個工程配置更加需要注意。
4.各種主要的lcd寄存器需要主要設置正確,主要包括各種電壓配置,data format,interfacepixel format,te_on,madctl。。。否則會出現各種問題。
5. Pix clock是否在規定的范圍內。
6. Pclk是否極性正確。上升沿還是下降沿。
7. 變頻引起的閃屏問題。可以通過鎖定頻率來試驗是否是變頻引起。
上周調試**-**的lcd,將廠商提供的初始化代碼加入到工程中,簡單修改後,然後修改z7_wvga_hs_af.mak中lcd模組配置,編譯生成燒寫文件,燒如到主板,出現花屏,且停留在開機logo處…第一次調屏就這麼的糾結…
經老大初步檢查,lcd屏幕接口數據位數不對,而且TE_ON必須打開,應該改為十六位。。。
修改源碼,編譯生成燒寫文件,燒機….
問題依舊….
仔細檢查源碼,TE_ON是否打開,VCOM設置,MADCTL設置是否正常,仔細閱讀其提供的官方LCD DataSheet,開始懷疑各種設置電壓是否正確…
重復修改源碼,編譯,燒機,驗證的步驟,情況還是依舊…
到晚上還是沒搞定,思考如何獲取u-boot驅動log,分析一下,或許可以找到答案,於是焊接RX(綠色),TX(白色),GND(黑色),在Ubuntu下正確設置minicom獲取u-boot啟動log…
[ 18.162000] registered taskstats version 1
[ 18.166000] rtc-sprd rtc-sprd.0: settingsystem clock to 2013-01-01 00:08:00 UTC (1356998880)
[ 18.177000] serial_open tty addr =0xcf36f800, filp = 0xcf0b7440, port = 0xc4ac2d08
[ 18.182000] Freeing init memory: 144K
[ 18.209000] Failed to execute /init
[ 18.209000] Failed to execute /init. Attempting defaults...
[ 18.219000] Kernel panic - not syncing: Noinit found. Try passing init= option tokernel. See Linux Documentation/init.txt for guidance.
[ 18.231000] [<c45330e0>](unwind_backtrace+0x0/0xfc) from [<c48e7714>] (panic+0x60/0xe4)
[ 18.231000] [<c48e7714>](panic+0x60/0xe4) from [<c452c514>] (init_post+0x88/0xdc)
[ 18.246000] [<c452c514>](init_post+0x88/0xdc) from [<c4508414>] (kernel_init+0x124/0x168)
[ 18.246000] unwind: Unknown symbol addressc4508414
[ 18.250000] unwind: Index not found c4508414
經老大分析發現是RAM各種地址偏移不正常,仔細發現z7_wvga_hs_af.mak中配置平台為4+4,而這台機器是4+2平台,各種偏移不正常導致kernel死掉,修改編譯,燒機,發現開機log正常了,系統啟動正常。
….
曲折而又突然,lcd調試就基本成功了!
經測試發現幀率偏大,修改Frame Rate寄存器,這個讓我在DataSheet中找了很久,居然就是我之前早看到過的那個寄存器,糾結,修改正常後,經老大發現有細微橫紋出現,修改VCOM即可,也順利搞定!