imx6 LCD 参数配置(lvds为例)
目前imx6的BSP開發(fā)中,lvds的參數(shù)配置一般在兩個(gè)地方:?
1. uboot的CMDLINE的參數(shù)設(shè)置,形如:?
video=mxcfb0:dev=ldb,bpp=32?
2. uboot板級(jí)代碼中對(duì)struct display_info_t的配置,形如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
3.kernel中設(shè)備樹對(duì)ldb的配置,形如:
&ldb {lvds-channel@0 {fsl,data-mapping = "spwg";fsl,data-width = <24>;primary;status = "okay";display-timings {native-mode = <&timing0>;timing0: claa080na23 {clock-frequency = <33260000>;hactive = <800>;vactive = <480>;hback-porch = <88>;hfront-porch = <140>;vback-porch = <31>;vfront-porch = <10>;hsync-len = <28>;vsync-len = <4>;};};}; };- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
下面幾篇博客對(duì)lcd基礎(chǔ)以及imx6相關(guān)方面的內(nèi)容講的都十分詳細(xì):?
1.?LCD參數(shù)解釋及計(jì)算?
2.?LCD驅(qū)動(dòng)中pixclock的計(jì)算?
3.?imx6 android4.3 bsp開發(fā)實(shí)錄之一lvds、HDMMI輸出顯示?
4. Kernel源碼中文檔:?
Documentation/devicetree/bindings/video/fsl,ldb.txt?
Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt?
Documentation/devicetree/bindings/video/display-timing.txt
我這里對(duì)以上內(nèi)容進(jìn)行總結(jié),并結(jié)合開發(fā)經(jīng)驗(yàn),對(duì)我們需要進(jìn)行的配置項(xiàng)進(jìn)行下歸納說明:
一. lcd相關(guān)參數(shù)說明:
下圖必不可少:?
?
具體參數(shù)(不同datasheet中定義名稱略有差別):?
1. VBP(vertical back porch):?
表示在一幀圖像開始時(shí),垂直同步信號(hào)以后的無效的行數(shù),?
對(duì)應(yīng)驅(qū)動(dòng)/設(shè)備樹中的upper_margin/vback-porch;?
2. VFP(vertical front porch):?
表示在一幀圖像結(jié)束后,垂直同步信號(hào)以前的無效的行數(shù),?
對(duì)應(yīng)驅(qū)動(dòng)/設(shè)備樹中的lower_margin/vfront-porch;?
3. VSPW(vertical sync pulse width):?
表示垂直同步脈沖的寬度,用行數(shù)計(jì)算,?
對(duì)應(yīng)驅(qū)動(dòng)/設(shè)備樹中的vsync_len/vsync-len;?
4. HBP(horizontal back porch):?
表示從水平同步信號(hào)開始到一行的有效數(shù)據(jù)開始之間的VCLK的個(gè)數(shù),?
對(duì)應(yīng)驅(qū)動(dòng)/設(shè)備樹中的left_margin/hback-porch;?
5. HFP(horizontal front porth):?
表示一行的有效數(shù)據(jù)結(jié)束到下一個(gè)水平同步信號(hào)開始之間的VCLK的個(gè)數(shù),?
對(duì)應(yīng)驅(qū)動(dòng)/設(shè)備樹中的right_margin/hfront-porch;?
6. HSPW(horizontal sync pulse width):?
表示水平同步信號(hào)的寬度,用VCLK計(jì)算,?
對(duì)應(yīng)驅(qū)動(dòng)/設(shè)備樹中的hsync_len/hsync-len;
以上都是無效顯示區(qū)域,下面兩個(gè)是我們lcd正真有效的顯示區(qū)域,即分辨率:?
7. VDP(vertical display period):?
表示垂直顯示有效區(qū)域,對(duì)應(yīng)驅(qū)動(dòng)/設(shè)備樹中的對(duì)應(yīng)yres/hactive?
8. HDP(horizontal display period):?
表示水平顯示有效區(qū)域,對(duì)應(yīng)驅(qū)動(dòng)/設(shè)備樹中的對(duì)應(yīng)xres/vactive
此外還有兩個(gè)時(shí)鐘相關(guān)參數(shù):?
DOTCLK frequency(設(shè)備樹中的clock-frequency)和驅(qū)動(dòng)中的pixclock?
DOTCLK在datasheet中能查閱到,它與pixclock的關(guān)系是:?
pixclock = 1000000 / DOTCLK ,啟動(dòng)DOTCLK單位是MHz,pixclock單位是皮秒,例如:?
若DOTCLK為33.26MHz,pixclock即為30066ps = 30.066ns
關(guān)于以上6個(gè)無效顯示區(qū)域的配置,是根據(jù)datasheet中的Video Signal Timing來設(shè)置的,datasheet中還有兩個(gè)參數(shù)VP和HP,即水平方向總長(zhǎng)和垂直方向總長(zhǎng),他們與上述8個(gè)參數(shù)關(guān)系是:?
VP = VBP + VDP + VFP + VSPW?
HP = HBP + HDP + HFP + HSPW?
若datasheet中沒有這些參數(shù)的type值,而且根據(jù)時(shí)序圖也無法計(jì)算出來,?
就只能在min和max值之間進(jìn)行選擇嘗試,注意:這8個(gè)值都非0,并且一定遵循上述2個(gè)公式?
還有一點(diǎn)需要注意(不是很確定,看到有一個(gè)datasheet是這么定義的):?
VSPW(min) < VSPW < VBP?
HSPW(min) < HSPW < HBP
二. 設(shè)備樹中的配置:
display-timings中的參數(shù)例如clock-frequency ,hactive ,vactive,hback-porch 等等在上面已經(jīng)描述過了,經(jīng)過查閱datasheet和調(diào)試,即可完成
fsl,data-mapping和fsl,data-width的配置:?
fsl,data-mapping: Should be “spwg” or “jeida”.?
This describes how the color bits are laid out in the serialized LVDS signal.?
fsl,data-width: Should be <18> or <24>
data-mapping具體也要根據(jù)datasheet來設(shè)置,”spwg” 和 “jeida”遵循下圖規(guī)則:?
3.mode的選擇:
/** "ldb=spl0/1" -- split mode on DI0/1* "ldb=dul0/1" -- dual mode on DI0/1* "ldb=sin0/1" -- single mode on LVDS0/1* "ldb=sep0/1" -- separate mode begin from LVDS0/1** there are two LVDS channels(LVDS0 and LVDS1) which can transfer video* datas, there two channels can be used as split/dual/single/separate mode.** split mode means display data from DI0 or DI1 will send to both channels* LVDS0+LVDS1.* dual mode means display data from DI0 or DI1 will be duplicated on LVDS0* and LVDS1, it said, LVDS0 and LVDS1 has the same content.* single mode means only work for DI0/DI1->LVDS0 or DI0/DI1->LVDS1.* separate mode means you can make DI0/DI1->LVDS0 and DI0/DI1->LVDS1 work* at the same time.*/- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
根據(jù)如上說明,uboot參數(shù)中可以配置ldb的這四種模式,并且在設(shè)備樹中,對(duì)于單通道和雙通道也有以下配置:?
-?split-mode: Provide this bool property if your board uses LDB split?
mode to drive a high resolution display, say 1080P@60. In this?
mode, two LVDS channels will drive one display.?
-?dual-mode: Provide this bool property if your board uses LDB dual?
mode to drive two displays. In this mode, one display engine will?
drive two displays which have the same timings and display content.
對(duì)于大分辨率雙通道lvds來說,需要配置設(shè)備樹中:?
lvds屬性split-mode,?
并且clock-frequency為datasheet中DCLK×2?
還需要在uboot參數(shù)中添加:?
ldb=spl0/1
我們項(xiàng)目中即將使用分辨率為1920*720的雙通道lvds,待我驗(yàn)證完成以后,會(huì)對(duì)此博客進(jìn)行詳細(xì)說明和補(bǔ)充
總結(jié)
以上是生活随笔為你收集整理的imx6 LCD 参数配置(lvds为例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 内核引导选项简介 *****
- 下一篇: Linux cpuidle framew