尹凱
摘要:本文介紹了具有LVDS接口的LCD在嵌入式顯示系統(tǒng)中的應(yīng)用,詳細(xì)討論了與ARM處理器的接口電路設(shè)計(jì)和Linux驅(qū)動(dòng)開發(fā)。
關(guān)鍵詞:LVDS;LCD;幀緩沖
1.引言
LVDS接口的LCD具有傳輸數(shù)據(jù)快,功耗低等特點(diǎn)。LCD顯示一幅畫面稱為一幀,對(duì)于畫面中的所有RGB像素點(diǎn),在Linux驅(qū)動(dòng)中會(huì)有一段緩沖區(qū)與之對(duì)應(yīng),該緩沖區(qū)被稱為幀緩沖。本文主要探討了ARM處理器RGB數(shù)據(jù)的串行化輸出和Linux幀緩沖驅(qū)動(dòng)的配置操作。
2.硬件電路設(shè)計(jì)
2.1LCD接口信號(hào)定義
本系統(tǒng)使用的是三菱電子的6.5寸LCD模塊AA065VE11,該模塊顯示分辨率為640×480,在接收端采用LVDS接口(使用的接口器件為THC63LVDF84B),支持單路6bit/8bit的RGB數(shù)據(jù)格式,管腳定義如下表所示。
2.2LVDS接口電路設(shè)計(jì)
在本設(shè)計(jì)中,使用的ARM處理器是MARVELL公司的PXA270,PXA270內(nèi)置的LCD控制器的主要接口信號(hào)包括:
lLDD(17:0):數(shù)據(jù)總線,一次可傳輸4位、8位、16位或18位數(shù)據(jù);
lL_PCLK_WR:像素時(shí)鐘,主動(dòng)模式下,像素時(shí)鐘連續(xù)跳變;
lL_LCLK_A0:行掃描時(shí)鐘,主動(dòng)模式下,它是水平同步信號(hào);
lL_FCLK_RD:幀掃描時(shí)鐘,在主動(dòng)模式下,它是垂直同步信號(hào);
lL_BIAS:AC偏置,主動(dòng)方式下,它是數(shù)據(jù)輸出使能信號(hào)。
我們這里使用18bpp像素深度的數(shù)據(jù)格式,顏色模式為RGB666,此時(shí)LCD控制器數(shù)據(jù)總線與RGB信號(hào)的對(duì)應(yīng)關(guān)系如下圖所示。
對(duì)于LCD控制器輸出的TTL電平信號(hào),需要增加一個(gè)接口電路,實(shí)現(xiàn)TTL信號(hào)到LVDS差分信號(hào)的轉(zhuǎn)換。這里使用TI公司的SN75LVDS83B串行器實(shí)現(xiàn),硬件連接如下圖所示。
其中LVDS信號(hào)由3組數(shù)據(jù)差分和1組時(shí)鐘差分信號(hào)組成,每個(gè)數(shù)據(jù)通道傳輸6位數(shù)據(jù)。
3.Linux顯示驅(qū)動(dòng)開發(fā)
這里使用linux-2.6.35.9內(nèi)核版本作為軟件開發(fā)平臺(tái),該內(nèi)核版本中已經(jīng)包含了幀緩沖(Framebuffer)設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)代碼,主要由fbmem.c和pxafb.c文件組成。在fbmem.c文件中,實(shí)現(xiàn)了提供給上層應(yīng)用程序調(diào)用的設(shè)備文件標(biāo)準(zhǔn)操作接口。在pxafb.c文件中,實(shí)現(xiàn)了對(duì)硬件設(shè)備的訪問接口,根據(jù)傳遞的硬件參數(shù)信息,完成硬件設(shè)備的初始化和其他操作。我們只需要根據(jù)自己的硬件配置對(duì)內(nèi)核中的現(xiàn)有代碼進(jìn)行裁剪、修改即可。
3.1LCD硬件參數(shù)計(jì)算
幀緩沖是Linux為顯示設(shè)備提供的一個(gè)接口,它對(duì)LCD設(shè)備在顯示一屏數(shù)據(jù)過程中的時(shí)序劃分如下圖所示。
其中各個(gè)參數(shù)的含義說明如下:
lxres:每行的像素點(diǎn)數(shù);
lyres:屏幕的行數(shù);
lhsync_len:水平同步信號(hào)的寬度,單位是像素時(shí)鐘周期;
lleft_margin:水平同步信號(hào)結(jié)束到一行有效數(shù)據(jù)開始之間的無效點(diǎn)數(shù);
lright_margin:一行有效數(shù)據(jù)結(jié)束到下一個(gè)水平同步信號(hào)開始之間的無效點(diǎn)數(shù);
lvsync_len:垂直同步信號(hào)的寬度,單位是行數(shù);
lupper_margin:垂直同步信號(hào)結(jié)束到一幀圖像開始之間的無效行數(shù);
llower_margin:一幀圖像結(jié)束到下一個(gè)垂直同步信號(hào)開始之間的無效行數(shù)。
AA065VE11的工作模式為DE(DATA ENABLE)模式,其主要接口時(shí)序見下表所示。
1)像素時(shí)鐘計(jì)算
根據(jù)表2中給出的DCLK信息,可以計(jì)算得到像素時(shí)鐘如下:
pixclock = (1<<12) /((640+160)×(480+45)×60)= 39682;
其中像素時(shí)鐘的單位是皮秒,60表示每秒顯示60幀。
2)前后邊沿計(jì)算
前后邊沿是給水平、垂直同步信號(hào)往屏幕刷新數(shù)據(jù)所提供的預(yù)留時(shí)間,如果設(shè)置不當(dāng)會(huì)造成顯示圖像的偏移。從表2給出的DENA信息可以得知,LCD設(shè)備掃描一行的空白像素點(diǎn)數(shù)是160個(gè),掃描一屏的空白行數(shù)是45行。因?yàn)槠聊簧巷@示的圖像是連續(xù)的,所以可以得到一行總的空白像素點(diǎn)數(shù)滿足如下等式:
right_margin + hsync_len + left_margin = 160;
可以得到一屏總的空白行數(shù)滿足如下等式:
upper_margin + lower_margin + hsync_len = 45;
在驅(qū)動(dòng)中配置LCD設(shè)備的硬件參數(shù)時(shí),需要滿足以上兩個(gè)等式關(guān)系。
1.1Framebuffer驅(qū)動(dòng)配置
a)修改板級(jí)文件
在內(nèi)核目錄arch/arm/mach-pxa/下的板級(jí)文件中添加LCD設(shè)備的初始化代碼,主要改動(dòng)如下:
1) 添加LCD控制器的管腳信息
static unsigned long pcm027_lcd_pin_config[] = { GPIO58_LCD_LDD_0, GPIO59_LCD_LDD_1, GPIO60_LCD_LDD_2, GPIO61_LCD_LDD_3, GPIO62_LCD_LDD_4, GPIO63_LCD_LDD_5, GPIO64_LCD_LDD_6, GPIO65_LCD_LDD_7, GPIO66_LCD_LDD_8, GPIO67_LCD_LDD_9, GPIO68_LCD_LDD_10, GPIO69_LCD_LDD_11, GPIO70_LCD_LDD_12, GPIO71_LCD_LDD_13, GPIO72_LCD_LDD_14, GPIO73_LCD_LDD_15, GPIO86_LCD_LDD_16, GPIO87_LCD_LDD_17, GPIO74_LCD_FCLK, //TFT vsync GPIO75_LCD_LCLK, //TFT hsync GPIO76_LCD_PCLK, GPIO77_LCD_BIAS, //TFT output-enable
};
2) 添加LCD設(shè)備的硬件參數(shù)
static struct pxafb_mode_info mitsubishi_aa065ve11_mode = { .pixclock = 39682, //picosecond .xres = 640, .yres = 480, .bpp = 18, .hsync_len = 0, .left_margin = 80, .right_margin = 80, .vsync_len = 0, .upper_margin = 25, .lower_margin = 20, .sync = 0,
};
static struct pxafb_mach_info mitsubishi_aa065ve11_info = { .modes = &mitsubishi_aa065ve11_mode, .num_modes = 1, .lcd_conn = LCD_COLOR_TFT_18BPP,
};
3) 注冊平臺(tái)設(shè)備和資源
static void __init pcm027_init_lcd(void)
{ pxa2xx_mfp_config(ARRAY_AND_SIZE(pcm027_lcd_pin_config)); set_pxa_fb_info(&mitsubishi_aa065ve11_info);
}
b)修改內(nèi)核配置
在內(nèi)核配置中添加對(duì)framebuffer設(shè)備的支持。
Graphics support --->
<*>Support for frame buffer devices --->
<*>PXA LCD framebuffer support
Console display driver support --->
<*>Framebuffer Console support
3.2啟動(dòng)界面測試
系統(tǒng)加電開機(jī)后,LCD可以正常顯示啟動(dòng)界面如下圖所示。整個(gè)系統(tǒng)在運(yùn)行過程中顯示良好,性能穩(wěn)定。
4.結(jié)束語
由于LVDS接口采用了低電壓和低電流驅(qū)動(dòng)方式,因此實(shí)現(xiàn)了低噪聲和低功耗,這類接口的LCD適合集成度高以及高速傳輸?shù)惹度胧綉?yīng)用場合。本文所介紹的軟硬件開發(fā)方法,具有一定的參考價(jià)值。
參考文獻(xiàn)
[1] Marvell Inc.Marvell PXA270 Processor Developers Manual, 2009
[2] Mitsubishi Electric Corp.AA065VE11 Technical Specification, 2011
[3] 王黎明.深入淺出XScale嵌入式系統(tǒng).北京航空航天大學(xué)出版社, 2011