LCD 移植的那些坑-LCD屏幕配置常見的問題解決方案

原創(chuàng) 2020-03-07 18:14:00 LCD 移植 LCD屏配置

在使用我們的開發(fā)板過程中,關(guān)于LCD屏幕配置有一些常見的問題

 

問題1,如何修改開機(jī)默認(rèn)的屏幕尺寸?

全平臺(tái)都可以通過uboot的選擇菜單來選擇默認(rèn)的顯示,對(duì)應(yīng)配置方式可以參閱對(duì)應(yīng)平臺(tái)的應(yīng)用手冊(cè)。

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平臺(tái)應(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起來后顯示不正常?

這個(gè)可以通過 cat /proc/cmdline命令來查看uboot傳遞給內(nèi)核的參數(shù)是不是正確。再參考【問題1】方法修改。(參考i.MX6Q啟動(dòng)參數(shù))

 

到內(nèi)核驅(qū)動(dòng)文件drivers/video/fbdev/mxc/mxc_LCDif.c中微調(diào)對(duì)應(yīng)的LCD屏幕配置參數(shù).

 

lvds對(duì)應(yīng)的內(nèi)核驅(qū)動(dòng)文件在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è)置,怎么計(jì)算?

下面闡述一下LCD參數(shù)配置一些知識(shí) 

LCD的一些原理

數(shù)字視頻的概念來自于模擬視頻,在模擬視頻中有像素,掃描顯示方式,幀,前肩,后肩,消影等參數(shù)。

在模擬視頻中像素(pixel)為圖像中的最小的控制單位,整個(gè)圖像是有許多的像素點(diǎn)構(gòu)成。

電子槍控制器控制電子槍從屏幕的左上方,從左到右按照像素單元依次打印出圖像,到行尾再返回下一行開頭從新開始從左到右打印本行像素,直到屏幕最右下方最后一個(gè)像素點(diǎn)。然后再返回屏幕的左上角從新打印下一幀圖像。

掃描槍就像打印機(jī)一樣走“之”字路線。打完一行返回重新打印下一行。那么從一行到新的一行的運(yùn)動(dòng)時(shí)間在模擬視頻中叫水平消影(HBlank).

從右下方最后一個(gè)像素點(diǎn)到最左上方的第一個(gè)像素點(diǎn),即從一幀數(shù)據(jù)切換到另一幀數(shù)據(jù)的時(shí)間叫做垂直消影(VBlank).

在數(shù)字視頻中保留了上述的這些概念。整個(gè)LCD的顯示典型顯示時(shí)序參考下圖:

 

像素(pixel):整個(gè)顯示圖像是由一個(gè)個(gè)的像素組成的。

點(diǎn)時(shí)鐘速率(VCLK/LCD_CLK):視頻硬件在顯示器上繪制像素的速率, 一個(gè) CLK 時(shí)鐘完成一個(gè)像素點(diǎn)的顯示。

垂直同步信號(hào)(VSYNC): 讓LCD控制器知道下面要開始新的一幀圖像

水平同步信號(hào)(HSYNC):讓LCD控制器知道下面要開始新的一行像素.

數(shù)據(jù)使能(DE), 在數(shù)據(jù)使能區(qū)是有效的數(shù)據(jù)

VBP(Vertical back porch): 垂直同步信號(hào)的后肩,表示一幀圖像開始時(shí),垂直同步信號(hào)以后的無效行數(shù)。

VFP(Vertical front porch): 垂直同步信號(hào)的前肩, 表示一幀圖像結(jié)束后,垂直同步信號(hào)以前的無效行數(shù)。

HBP(Horizontal back porch): 水平同步信號(hào)的后肩,表示從水平同步信號(hào)開始到一行的有效數(shù)據(jù)開始之前的VCLK的個(gè)數(shù)。

HFP(Horizontal front proch): 水平同步信號(hào)的前肩,表示從一行的有效數(shù)據(jù)結(jié)束到下一個(gè)水平信號(hào)開始之間的VCLK的個(gè)數(shù)。

要使得VSYNC和HSYNC信號(hào)有效,需要其電平保持一定的時(shí)間,這段時(shí)間被分別稱為:HSPW(水平同步信號(hào)脈寬), VSPW(垂直同步信號(hào)脈寬).

 

LCD手冊(cè)的時(shí)序圖(參考我們目前使用的7寸LCD顯示屏):

藍(lán)色:水平信號(hào)相關(guān)部分標(biāo)注

紅色:垂直信號(hào)相關(guān)部分標(biāo)注

 

內(nèi)核對(duì)LCD的描述

在linux 內(nèi)核中, 在include/linux/fb.h文件中定義的fb_videomode結(jié)構(gòu)體對(duì)LCD進(jìn)行描述。

 

下圖為linux的結(jié)構(gòu)體的示意圖,和結(jié)構(gòu)體屬性一一對(duì)應(yīng):

藍(lán)色:水平信號(hào)相關(guān)部分標(biāo)注

紅色:垂直信號(hào)相關(guān)部分標(biāo)注

 

解釋說明

內(nèi)核對(duì)LCD的解釋是按照LCD的圖像為中心(二維面), 而手冊(cè)上是按照LCD的時(shí)序(一維線性)來解釋。二者解釋的是相同的東西。

對(duì)應(yīng)關(guān)系分別為:

LCD信號(hào)

對(duì)應(yīng)LCD手冊(cè)

對(duì)應(yīng)LCD結(jié)構(gòu)體

VCLK/LCD_CLK

DCLK(dotclock)


DE

DE




Refresh(刷新率)



Pixclock(計(jì)算見下文)

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ù)計(jì)算

參考我們目前使用的7LCD顯示屏:

LCD驅(qū)動(dòng)中的參數(shù),左邊為實(shí)際的參數(shù),右邊為結(jié)構(gòu)體定義

藍(lán)色:水平信號(hào)相關(guān)部分標(biāo)注 紅色:垂直信號(hào)相關(guān)部分標(biāo)注

 

7寸LCD顯示屏手冊(cè):

 

對(duì)應(yīng)值

 

linux結(jié)構(gòu)體名稱

linux結(jié)構(gòu)體數(shù)值

LCD手冊(cè)名稱

LCD手冊(cè)數(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>





計(jì)算pixclock像素時(shí)鐘和幀率

 其中dotclock是視頻硬件在顯示器上繪制像素的速率。

根據(jù)注釋內(nèi)容 dotclock為 27MHz. 所以

pixclock = 1 / (27E6) = 3.7037037037037036e-08, 取整為37037 皮秒

幀率的計(jì)算:

幀率=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è)置偏差的話,可能會(huì)造成屏幕沙點(diǎn),抖動(dòng)現(xiàn)象。

相關(guān)產(chǎn)品 >

  • FETMX6Q-C核心板

    i.MX6Q核心板板層出不窮,要如何選擇?飛凌解讀i.mx6Q芯片強(qiáng)性能為您推薦四核A9架構(gòu)的i.MX6Q產(chǎn)品精選,包含iMX6Q 核心板、i.MX6Q 核心板、iMX6Q工業(yè)級(jí)核心板,歡迎采購。  i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架構(gòu)的i.MX6Q四核處理器設(shè)計(jì),核心板小尺寸核心板搭配獨(dú)特的薄款連接器,讓設(shè)計(jì)隨心所欲!

    了解詳情
    FETMX6Q-C核心板
  • FETMX6DL-S核心板

    飛凌嵌入式iMX6DL系列核心板采用NXP Cortex-A9 雙核 i.MX6DL處理器,主頻 1.2 GHz,郵票孔連接方式,穩(wěn)定性強(qiáng);iMX6DL核心板本身為最小系統(tǒng)板,上電即可使用,方便調(diào)試;iMX6DL核心板目前有工業(yè)級(jí)、商業(yè)級(jí)兩種規(guī)格,選擇性更強(qiáng)。如您想要進(jìn)一步了解iMX6DL核心板詳細(xì)資料,i.MX6DL解決方案,可致電或聯(lián)系在線客服。 了解詳情
    FETMX6DL-S核心板

推薦閱讀 換一批 換一批