LCD 移植的那些坑-LCD屏幕配置常見的問題解決方案
在使用我們的開發(fā)板過程中,關(guān)于LCD屏幕配置有一些常見的問題
問題1,如何修改開機(jī)默認(rèn)的屏幕尺寸?
全平臺都可以通過uboot的選擇菜單來選擇默認(rèn)的顯示,對應(yīng)配置方式可以參閱對應(yīng)平臺的應(yīng)用手冊。
i.MX6DL/i.MX6Q系列uboot已開源,可以通過直接修改uboot源碼文件include/configs/mx6sabre_common.h(參考linux4.1.15內(nèi)核版本)
如果是客戶自己移植屏幕,可能需要修改uboot源碼arch/arm/i.MX-common/video.c文件。修改默認(rèn)的屏幕配置 setenv("pannel", "SEIKO-WXGA");(參考linux4.1.15內(nèi)核版本)
問題2,如何自己移植LCD屏幕?
可以參考i.MX6x平臺應(yīng)用筆記中【8.0寸LCD屏移植筆記.pdf】一章。
lvds屏幕可參考【LVDS屏幕移植應(yīng)用筆記 .pdf】
問題3,移植LCD屏幕,uboot顯示logo不正常?
參考i.MX6Q linux4.1.15內(nèi)核版本,在uboot源碼board/freescale/mx6sabresd/mx6sabresd.c文件內(nèi)默認(rèn)的LCD 800x480的配置如下。在移植屏幕可以參考此結(jié)構(gòu)體添加新屏幕的參數(shù),參考【問題1】解決辦法選擇uboot默認(rèn)屏幕。
lvds屏可以直接修改下圖中的設(shè)置參數(shù)。
問題4,uboot顯示正常,kernel起來后顯示不正常?
這個可以通過 cat /proc/cmdline命令來查看uboot傳遞給內(nèi)核的參數(shù)是不是正確。再參考【問題1】方法修改。(參考i.MX6Q啟動參數(shù))
到內(nèi)核驅(qū)動文件drivers/video/fbdev/mxc/mxc_LCDif.c中微調(diào)對應(yīng)的LCD屏幕配置參數(shù).
lvds對應(yīng)的內(nèi)核驅(qū)動文件在drivers/video/fbdev/mxc/ldb.c.
在linux4.1.15內(nèi)核版本在可能要在設(shè)備樹修改默認(rèn)的fb0輸出以及LCD的配置.
問題5,LCD移植屏幕不亮?
LCD移植屏幕不亮的原因有很多,大部分的LCD屏幕背光為pwm控制,可以搜索linux Backlight部分,這里不做太多闡述。
問題6,LCD的參數(shù)怎么設(shè)置,怎么計算?
下面闡述一下LCD參數(shù)配置一些知識
LCD的一些原理
數(shù)字視頻的概念來自于模擬視頻,在模擬視頻中有像素,掃描顯示方式,幀,前肩,后肩,消影等參數(shù)。
在模擬視頻中像素(pixel)為圖像中的最小的控制單位,整個圖像是有許多的像素點構(gòu)成。
電子槍控制器控制電子槍從屏幕的左上方,從左到右按照像素單元依次打印出圖像,到行尾再返回下一行開頭從新開始從左到右打印本行像素,直到屏幕最右下方最后一個像素點。然后再返回屏幕的左上角從新打印下一幀圖像。
掃描槍就像打印機(jī)一樣走“之”字路線。打完一行返回重新打印下一行。那么從一行到新的一行的運動時間在模擬視頻中叫水平消影(HBlank).
從右下方最后一個像素點到最左上方的第一個像素點,即從一幀數(shù)據(jù)切換到另一幀數(shù)據(jù)的時間叫做垂直消影(VBlank).
在數(shù)字視頻中保留了上述的這些概念。整個LCD的顯示典型顯示時序參考下圖:
像素(pixel):整個顯示圖像是由一個個的像素組成的。
點時鐘速率(VCLK/LCD_CLK):視頻硬件在顯示器上繪制像素的速率, 一個 CLK 時鐘完成一個像素點的顯示。
垂直同步信號(VSYNC): 讓LCD控制器知道下面要開始新的一幀圖像
水平同步信號(HSYNC):讓LCD控制器知道下面要開始新的一行像素.
數(shù)據(jù)使能(DE), 在數(shù)據(jù)使能區(qū)是有效的數(shù)據(jù)
VBP(Vertical back porch): 垂直同步信號的后肩,表示一幀圖像開始時,垂直同步信號以后的無效行數(shù)。
VFP(Vertical front porch): 垂直同步信號的前肩, 表示一幀圖像結(jié)束后,垂直同步信號以前的無效行數(shù)。
HBP(Horizontal back porch): 水平同步信號的后肩,表示從水平同步信號開始到一行的有效數(shù)據(jù)開始之前的VCLK的個數(shù)。
HFP(Horizontal front proch): 水平同步信號的前肩,表示從一行的有效數(shù)據(jù)結(jié)束到下一個水平信號開始之間的VCLK的個數(shù)。
要使得VSYNC和HSYNC信號有效,需要其電平保持一定的時間,這段時間被分別稱為:HSPW(水平同步信號脈寬), VSPW(垂直同步信號脈寬).
LCD手冊的時序圖(參考我們目前使用的7寸LCD顯示屏):
藍(lán)色:水平信號相關(guān)部分標(biāo)注
紅色:垂直信號相關(guān)部分標(biāo)注
內(nèi)核對LCD的描述
在linux 內(nèi)核中, 在include/linux/fb.h文件中定義的fb_videomode結(jié)構(gòu)體對LCD進(jìn)行描述。
下圖為linux的結(jié)構(gòu)體的示意圖,和結(jié)構(gòu)體屬性一一對應(yīng):
藍(lán)色:水平信號相關(guān)部分標(biāo)注
紅色:垂直信號相關(guān)部分標(biāo)注
解釋說明
內(nèi)核對LCD的解釋是按照LCD的圖像為中心(二維面), 而手冊上是按照LCD的時序(一維線性)來解釋。二者解釋的是相同的東西。
對應(yīng)關(guān)系分別為:
LCD信號 |
對應(yīng)LCD手冊 |
對應(yīng)LCD結(jié)構(gòu)體 |
VCLK/LCD_CLK |
DCLK(dotclock) |
|
DE |
DE |
|
|
|
Refresh(刷新率) |
|
|
Pixclock(計算見下文) |
HSYNC |
HS |
|
|
thd |
xres |
HSPW |
thpw |
hsync_len |
HBP |
thb |
left_margin |
HFP |
thfp |
right_margin |
VSYNC |
VS |
|
|
tvd |
yres |
VSPW |
twpw |
vsync_len |
VBP |
tvb |
upper_margin |
VFP |
tvfp |
lower_margin |
|
|
|
參數(shù)計算
參考我們目前使用的7寸LCD顯示屏:
LCD驅(qū)動中的參數(shù),左邊為實際的參數(shù),右邊為結(jié)構(gòu)體定義
藍(lán)色:水平信號相關(guān)部分標(biāo)注 紅色:垂直信號相關(guān)部分標(biāo)注
7寸LCD顯示屏手冊:
對應(yīng)值
linux結(jié)構(gòu)體名稱 |
linux結(jié)構(gòu)體數(shù)值 |
LCD手冊名稱 |
LCD手冊數(shù)值 |
refresh |
57 |
|
|
xres |
800 |
thd |
800 |
yres |
480 |
tvd |
480 |
pixclock |
37037 |
|
|
left_margin |
40 |
thb |
46 |
right_margin |
60 |
thfp |
<16 - 354> |
upper_margin |
10 |
tvb |
23 |
lower_margin |
10 |
tvfp |
<7 - 147 > |
hsync_len |
20 |
thpw |
<1 - 40> |
vsyn_len |
10 |
twpw |
<7 - 147> |
|
|
|
|
計算pixclock像素時鐘和幀率
其中dotclock是視頻硬件在顯示器上繪制像素的速率。
根據(jù)注釋內(nèi)容 dotclock為 27MHz. 所以
pixclock = 1 / (27E6) = 3.7037037037037036e-08, 取整為37037 皮秒
幀率的計算:
幀率=dotclock / ((xres+left_margin+right_margin+hsync)*(yres+upper_margin+low_margin+vsync))
= (27E6)/( (40 + 800 + 60 + 20) (10 + 480 + 10 + 10))
= 57.54475703324808, 取整為 57Hz。
xres和yres已經(jīng)由硬件固定,一般屏幕的刷新率一般為60Hz,而高于刷新率的幀數(shù)都是無效幀數(shù)。所以可以根據(jù)公式調(diào)整其他參數(shù)以調(diào)整LCD幀率,使其盡量接近60fps. 如果數(shù)值設(shè)置偏差的話,可能會造成屏幕沙點,抖動現(xiàn)象。
相關(guān)產(chǎn)品 >
-
FETMX6Q-C核心板
i.MX6Q核心板板層出不窮,要如何選擇?飛凌解讀i.mx6Q芯片強性能為您推薦四核A9架構(gòu)的i.MX6Q產(chǎn)品精選,包含iMX6Q 核心板、i.MX6Q 核心板、iMX6Q工業(yè)級核心板,歡迎采購。 i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架構(gòu)的i.MX6Q四核處理器設(shè)計,核心板小尺寸核心板搭配獨特的薄款連接器,讓設(shè)計隨心所欲!
了解詳情 -
FETMX6DL-S核心板
飛凌嵌入式iMX6DL系列核心板采用NXP Cortex-A9 雙核 i.MX6DL處理器,主頻 1.2 GHz,郵票孔連接方式,穩(wěn)定性強;iMX6DL核心板本身為最小系統(tǒng)板,上電即可使用,方便調(diào)試;iMX6DL核心板目前有工業(yè)級、商業(yè)級兩種規(guī)格,選擇性更強。如您想要進(jìn)一步了解iMX6DL核心板詳細(xì)資料,i.MX6DL解決方案,可致電或聯(lián)系在線客服。 了解詳情