尹凱



摘要:本文介紹了具有LVDS接口的LCD在嵌入式顯示系統中的應用,詳細討論了與ARM處理器的接口電路設計和Linux驅動開發。
關鍵詞:LVDS;LCD;幀緩沖
1.引言
LVDS接口的LCD具有傳輸數據快,功耗低等特點。LCD顯示一幅畫面稱為一幀,對于畫面中的所有RGB像素點,在Linux驅動中會有一段緩沖區與之對應,該緩沖區被稱為幀緩沖。本文主要探討了ARM處理器RGB數據的串行化輸出和Linux幀緩沖驅動的配置操作。
2.硬件電路設計
2.1LCD接口信號定義
本系統使用的是三菱電子的6.5寸LCD模塊AA065VE11,該模塊顯示分辨率為640×480,在接收端采用LVDS接口(使用的接口器件為THC63LVDF84B),支持單路6bit/8bit的RGB數據格式,管腳定義如下表所示。
2.2LVDS接口電路設計
在本設計中,使用的ARM處理器是MARVELL公司的PXA270,PXA270內置的LCD控制器的主要接口信號包括:
lLDD(17:0):數據總線,一次可傳輸4位、8位、16位或18位數據;
lL_PCLK_WR:像素時鐘,主動模式下,像素時鐘連續跳變;
lL_LCLK_A0:行掃描時鐘,主動模式下,它是水平同步信號;
lL_FCLK_RD:幀掃描時鐘,在主動模式下,它是垂直同步信號;
lL_BIAS:AC偏置,主動方式下,它是數據輸出使能信號。
我們這里使用18bpp像素深度的數據格式,顏色模式為RGB666,此時LCD控制器數據總線與RGB信號的對應關系如下圖所示。
對于LCD控制器輸出的TTL電平信號,需要增加一個接口電路,實現TTL信號到LVDS差分信號的轉換。這里使用TI公司的SN75LVDS83B串行器實現,硬件連接如下圖所示。
其中LVDS信號由3組數據差分和1組時鐘差分信號組成,每個數據通道傳輸6位數據。
3.Linux顯示驅動開發
這里使用linux-2.6.35.9內核版本作為軟件開發平臺,該內核版本中已經包含了幀緩沖(Framebuffer)設備驅動的實現代碼,主要由fbmem.c和pxafb.c文件組成。在fbmem.c文件中,實現了提供給上層應用程序調用的設備文件標準操作接口。在pxafb.c文件中,實現了對硬件設備的訪問接口,根據傳遞的硬件參數信息,完成硬件設備的初始化和其他操作。我們只需要根據自己的硬件配置對內核中的現有代碼進行裁剪、修改即可。
3.1LCD硬件參數計算
幀緩沖是Linux為顯示設備提供的一個接口,它對LCD設備在顯示一屏數據過程中的時序劃分如下圖所示。
其中各個參數的含義說明如下:
lxres:每行的像素點數;
lyres:屏幕的行數;
lhsync_len:水平同步信號的寬度,單位是像素時鐘周期;
lleft_margin:水平同步信號結束到一行有效數據開始之間的無效點數;
lright_margin:一行有效數據結束到下一個水平同步信號開始之間的無效點數;
lvsync_len:垂直同步信號的寬度,單位是行數;
lupper_margin:垂直同步信號結束到一幀圖像開始之間的無效行數;
llower_margin:一幀圖像結束到下一個垂直同步信號開始之間的無效行數。
AA065VE11的工作模式為DE(DATA ENABLE)模式,其主要接口時序見下表所示。
1)像素時鐘計算
根據表2中給出的DCLK信息,可以計算得到像素時鐘如下:
pixclock = (1<<12) /((640+160)×(480+45)×60)= 39682;
其中像素時鐘的單位是皮秒,60表示每秒顯示60幀。
2)前后邊沿計算
前后邊沿是給水平、垂直同步信號往屏幕刷新數據所提供的預留時間,如果設置不當會造成顯示圖像的偏移。從表2給出的DENA信息可以得知,LCD設備掃描一行的空白像素點數是160個,掃描一屏的空白行數是45行。因為屏幕上顯示的圖像是連續的,所以可以得到一行總的空白像素點數滿足如下等式:
right_margin + hsync_len + left_margin = 160;
可以得到一屏總的空白行數滿足如下等式:
upper_margin + lower_margin + hsync_len = 45;
在驅動中配置LCD設備的硬件參數時,需要滿足以上兩個等式關系。
1.1Framebuffer驅動配置
a)修改板級文件
在內核目錄arch/arm/mach-pxa/下的板級文件中添加LCD設備的初始化代碼,主要改動如下:
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設備的硬件參數
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) 注冊平臺設備和資源
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)修改內核配置
在內核配置中添加對framebuffer設備的支持。
Graphics support --->
<*>Support for frame buffer devices --->
<*>PXA LCD framebuffer support
Console display driver support --->
<*>Framebuffer Console support
3.2啟動界面測試
系統加電開機后,LCD可以正常顯示啟動界面如下圖所示。整個系統在運行過程中顯示良好,性能穩定。
4.結束語
由于LVDS接口采用了低電壓和低電流驅動方式,因此實現了低噪聲和低功耗,這類接口的LCD適合集成度高以及高速傳輸等嵌入式應用場合。本文所介紹的軟硬件開發方法,具有一定的參考價值。
參考文獻
[1] Marvell Inc.Marvell PXA270 Processor Developers Manual, 2009
[2] Mitsubishi Electric Corp.AA065VE11 Technical Specification, 2011
[3] 王黎明.深入淺出XScale嵌入式系統.北京航空航天大學出版社, 2011