李 輝,莊 杰,王佳明
(電子科技大學(xué)通信與信息工程學(xué)院,四川成都611731)
目前很多微處理器芯片都集成了LCD接口控制器,如三星的S3C2440、S3C2410,但是不支持VGA接口。隨著可穿戴技術(shù)的發(fā)展,頭戴式顯示器的應(yīng)用越來越廣泛。由于VGA接口的穩(wěn)定性和可靠性,頭戴式顯示器基本上都是使用的標(biāo)準(zhǔn)VGA接口,同時VGA接口在其他領(lǐng)域也有著廣泛的應(yīng)用。在開發(fā)基于S3C2440的可穿戴便攜式輔助維修系統(tǒng)時,針對在無線通信環(huán)境下使用頭戴顯示器的情況,需要一種適合于可穿戴系統(tǒng)且抗干擾能力強的VGA接口方案。傳統(tǒng)的方案是利用FPGA/CPLD和SDRAM構(gòu)造雙口SRAM[1]。這種方案實時性好,性能高,但是硬件和軟件設(shè)計比較復(fù)雜,應(yīng)用于嵌入式系統(tǒng)相對成本比較高。文獻(xiàn)[2,3]中提到的基于ADV7125、ADV7120的VGA接口方案比較適合嵌入式系統(tǒng),相對成本低,實現(xiàn)簡單,在不使用WIFI的環(huán)境下輸出圖像穩(wěn)定,但是在無線通信環(huán)境下輸出的信號會受到干擾,抗干擾能力達(dá)不到要求,例如廣泛使用的天嵌公司開發(fā)的基于ADV7125的VGA轉(zhuǎn)接板。為了滿足S3C2440在無線通信環(huán)境下的VGA顯示,筆者設(shè)計了一種基于CHRONTEL公司的CH7026芯片的嵌入式VGA接口方案。此方案對提高VGA接口的抗干擾能力具有重要意義。
基于ARM-LINUX的VGA接口方案的總體結(jié)構(gòu)如圖1所示,微處理器S3C2440通過I2C總線對CH7026的各個寄存器進(jìn)行配置,使其為VGA輸出方式;S3C2440輸出的數(shù)字信號經(jīng)過CH7026轉(zhuǎn)換后變成標(biāo)準(zhǔn)的VGA模擬信號,再通過DAC0-2送給VGA接口。微處理器輸出的行、場同步信號經(jīng)過CH7026的調(diào)整后,再通過HSO和VSO管腳送給VGA接口[4]。
圖1 系統(tǒng)總體框架
本方案涉及的硬件主要包括電源芯片、CH7026視頻芯片和LCD控制器。
CH7026是一款高性能的視頻芯片,該設(shè)備內(nèi)的三片10位高速DACs具有靈活的輸出能力,如單、雙或三CVBS輸出,色差端子輸出,RGB輸出和同步CVBS輸出;其內(nèi)嵌的一個16Mbit的SDRAM用作幀緩沖,它可以使圖像在播放時更加流暢;其可編程的24位/18位/16位/12位/8位數(shù)字輸入接口支持各種RGB(RGB565、RGB666、RGB888),YcbCr的多路輸入;在電源管理方面,CH7026可以根據(jù)寄存器的檢測結(jié)果管理DACs的開關(guān)。
CH7026具備強大的圖像處理能力。CH7026嵌入了靈活的向上和向下縮放引擎,具有文本增強功能,支持像素的亮度,對比度,色調(diào),飽和度調(diào)整為每個類型的輸出,為RGB模式輸出時,只支持亮度和對比度的調(diào)整;支持像素水平位置調(diào)整和垂直位置調(diào)整;支持幀速率轉(zhuǎn)換、圖像90/180/270度旋轉(zhuǎn)。該設(shè)備能夠編碼視頻信號并產(chǎn)生同步信號,支持480p、576p、720p和1080i高清格式。
LCD控制器是S3C2440內(nèi)部集成外設(shè),支持TFT、STN兩種類型的LCD[5],而TFT屏是目前嵌入式系統(tǒng)應(yīng)用的主流,以下所講述有關(guān)LCD控制器內(nèi)容均針對TFT屏而言。LCD控制器的管腳分為數(shù)據(jù)端口和時序控制端口。管腳及其含義如表1所示。垂直同步信號VSYNC和水平同步信號HSYNC的詳細(xì)定義參見文獻(xiàn)[6],每發(fā)出一個脈沖都表示新的一行圖像資料開始發(fā)送。
表1 LCD控制器管腳定義
圖2給出了LCD控制器中的主要參數(shù),這些參數(shù)的具體含義參見文獻(xiàn)[7]。在垂直同步和水平同步的頭尾都必須留有回掃時間,也就是圖2中的上、下邊界,左、右邊界,這些參數(shù)是決定圖像輸出效果的主要參數(shù)。
圖2 LCD控制器主要參數(shù)
時序發(fā)生器產(chǎn)生控制信號給LCD驅(qū)動器,例如VSYNC、HSYNC、VCLK、VDEN和LEND信號。這些控制信號決定于REGBANK中LCDCON1/2/3/4/5寄存器。REGBANK中的LCDCON1/2/3/4/5寄存器都可以通過編程來配置,TIMEGEN就是其中的一個,通過編程控制,它可以產(chǎn)生適合不同的LCD驅(qū)動器的控制信號。水平同步信號(HSYNC)和垂直同步信號(VSYNC)可以通過LCD控制寄存器2/3中的HOZVAL字段和LINEVAL字段來配置。其中,HOZVAL字段、LINEVAL字段可以按照如下系列等式由LCD面板大小決定
VCLK信號的頻率取決于LCDCON1寄存器的CLKVAL字段。如下等式定義了VCLK和CLKVAL之間的關(guān)系
幀率就是垂直同步信號的頻率。幀率同VSYNC、VSPW(垂直同步信號的脈寬)、VBPD(垂直同步信號的后肩)、VFPD(垂直同步信號的前肩)、LINEVAL、HSYNC、HBPD(水平同步信號的后肩)、HFPD(水平同步信號的前肩)、HOZVAL、HSPW(水平同步信號的脈寬)和CLKVAL字段有關(guān)。多數(shù)LCD驅(qū)動器需要它們自己適當(dāng)?shù)膸?。具體關(guān)系如下面的系列等式所示
S3C2440中的LCD控制器支持1、2、4或8bpp(位每像素)調(diào)色顯示和16或24bpp無調(diào)色真彩顯示。S3C2440給LCD控制器提供了256色調(diào)色板。調(diào)色板支持的格式有5:6:5和5:5:5:1格式。另外,S3C2440還有電源使能功能。如果設(shè)置S3C2440的電源使能引腳,ENVID就會控制LCD_PWREN引腳的輸出值。
CH7026將LCD控制器輸出的數(shù)字信號轉(zhuǎn)變?yōu)閂GA模擬信號輸出,由于需要在無線移動通信環(huán)境下使用,在電路設(shè)計時特別考慮了電路的抗干擾能力。文獻(xiàn)[2,3]中提到的方案都是直接使用LCD控制器輸出的同步信號作為VGA接口的同步信號。此方案在沒有高頻信號干擾的情況下,能夠正常的工作,但是在微處理器同時使用無線通信的環(huán)境下,LCD控制器輸出的數(shù)字信號會受到高頻信號的干擾,而同步信號又直接由LCD控制器輸出到VGA接口,沒有得到調(diào)整,圖像就會隨著干擾的強度出現(xiàn)不同程度的錯位。CH7026是將LCD控制器輸出的同步信號作為輸入,經(jīng)過調(diào)整后再輸出到VGA接口,其具有調(diào)整同步信號的功能。這使得其具有更好的抗干擾能力,CH7026還支持外加晶振輸入的功能,在電路設(shè)計時給CH7026芯片加了一個獨立的14.318MHZ的晶振,調(diào)整同步信號需要用到該晶振,因此晶振的精度必須在±20%PPM以內(nèi)。CH7026所有的電源管腳接了一個0.1微法的濾波電容,這樣CH7026可以獲得更穩(wěn)定的電源,這在DACs工作時十分重要;另外在PCB設(shè)計時采用了地線敷銅的方式,它能減小底線阻抗,減小信號線的回流面積,提高抗干擾能力,具體電路如圖3所示。
圖3 VGA接口電路
CH7026工作需要3種電壓,1.8V、2.5V、3.3V,分別由3種線性電源提供。在電源輸入和輸出端分別需要接濾波電容,大小電容值最好相差100倍以上,從而能夠較好的濾掉高頻和低頻噪聲。CH7026所有的電源管腳都接了一個0.1微法的電容,這些電容器應(yīng)盡可能接近各自的電源和地引腳,同時使用短而寬的引線來減少引線引入的電感;ISET管腳用來設(shè)置DAC電流。在ISET和AGND_DAC之間應(yīng)該連接一個1.2千歐的電阻,此電阻對于整個系統(tǒng)十分關(guān)鍵,必須保證該電阻的精度在1%以內(nèi)。如果阻值過小,DAC的電流將過大,會導(dǎo)致輸出圖像過亮。如果阻值過大,結(jié)果將相反。同時這個電阻也應(yīng)該盡可能靠近ISET引腳;SPD和SPC是CH7026的串行接口,SPD是雙向數(shù)據(jù)線,SPC是時鐘線。在電路中,SPD和SPC管腳必須接上拉電阻。如果沒有接上拉電阻,CH7026將無法初始化,整個系統(tǒng)都無法工作;AS管腳是CH7026的I2C地址選擇管腳,當(dāng)AS接高電平時,設(shè)備地址為75h。當(dāng)AS接低電平時,設(shè)備地址為76h;ATPG管腳需要通過一個10千歐姆的電阻接地;當(dāng)有未使用的數(shù)據(jù)輸入端口時,可以懸空或者接一個10 k電阻;另外CH7026最高可以接受從數(shù)字視頻端口控制器輸入的24位數(shù)據(jù),三片10位高速DACs提供了靈活的輸出能力,例如單、雙或三CVBS輸出,色差端子輸出,RGB輸出和同步CVBS輸出。需要特別注意的是DAC0-2的3個引腳各需要接一個75歐姆的電阻,將輸出電流轉(zhuǎn)換為電壓,同時起到阻抗匹配的作用。
在軟件設(shè)計時,需要根據(jù)實際需要將來配置LCD控制器參數(shù),來滿足相應(yīng)設(shè)備的刷新頻率。另外一個重要工作是需要編寫CH7026的驅(qū)動程序,使其在VGA模式下工作。
由于目標(biāo)顯示器的分辨率是640×480,刷新頻率為60HZ,因此可以根據(jù)前文所述內(nèi)容和實際需要來配置LCD控制器。對于寄存器LCDCON1,因為HCLK=100MHZ,640×480模式需要的VCLK=800×525×60=25.2MHZ,因此CLKVAL=1。由于LCD控制器的設(shè)置是針對TFT LCD,所以PNRMODE=0x03。選擇BPP模式,BPPMODE=0x1100,即為TFT的16bpp[8];對于寄存器LCDCON2,VBPD=0x05。LINEVAL=480-1,VFPD=35,VSPW=4。對于寄存器LCDCON3,HBPD=50,HOZVAL=640-1,HFPD=80。具體實現(xiàn)方法是對內(nèi)核驅(qū)動程序mach-tq2440.c進(jìn)行修改來。LCD寄存器參數(shù)配置如圖4所示。
圖4 LCD寄存器參數(shù)配置
處理器S3C2440是通過I2C總線接口對CH7026的各個寄存器進(jìn)行控制,CH7026一共有112個寄存器,但是其中大部分的寄存器不需要重新配置,采取默認(rèn)設(shè)置值即可。在對CH7026配置時是調(diào)用內(nèi)核中的I2C驅(qū)動程序[9]來完成數(shù)據(jù)的讀寫,在整個過程中CH7026是作為從設(shè)備,控制器是主設(shè)備。通過I2C總線對CH7026進(jìn)行數(shù)據(jù)讀寫的過程分為以下幾個步驟:當(dāng)進(jìn)行讀操作時,微控制器先寫從設(shè)備的I2C設(shè)備地址,然后寫需要讀取的寄存器的地址,最后再讀取數(shù)據(jù);當(dāng)進(jìn)行寫操作時,先寫從設(shè)備的I2C設(shè)備地址,然后寫需要寫入數(shù)據(jù)的寄存器地址,接下來就是寫入需要寫入的數(shù)據(jù)。其中CH7026的I2C設(shè)備地址由其管腳AS決定,當(dāng)AS管腳為低電平時,ADDR=0x76h;當(dāng)AS管腳為高電平時,ADDR=0x75h。此地址為7位地址,當(dāng)進(jìn)行讀操作時需要將ADDR左移一位然后加1;當(dāng)進(jìn)行寫操作時只需將ADDR左移一位。
CH7026的配置程序流程圖如圖5所示。
在調(diào)用I2C驅(qū)動時主要是對i2c_smbus_ioctl_bus這個結(jié)構(gòu)體進(jìn)行操作,這個是實現(xiàn)數(shù)據(jù)讀寫的基礎(chǔ)。i2c_smbus_ioctl_bus結(jié)構(gòu)體[10]的主要代碼如下:軟件執(zhí)行的具體流程如下:
圖5 CH7026配置程序流程
首先打開I2C驅(qū)動設(shè)備文件,如果打開成功開始檢查I2C從設(shè)備是否為CH7026,具體過程是讀取CH7026的寄存器0x00,然后將讀取的值與CH7026的ID(0x54)進(jìn)行比較,如果相等即為CH7026,否則程序結(jié)束。此模塊的主要代碼如下:
接下來檢查VGA設(shè)備是否連接,具體的實現(xiàn)過程是讀取寄存器0x7Fh的值,然后根據(jù)讀取的值來判斷VGA設(shè)備是否已經(jīng)連接上。寄存器7Fh是制度只讀寄存器,從低位到高位的具體含義為DACAT 0[0]、DACAT 0[1]、DACAT 1[0]、DACAT 1[1]、DACAT2[0]、DACAT 2[1]、Reserved、Reserved。各個DAC返回值的含義如表2所示。
最后是整個配置流程中最為重要的部分,對CH7026的主要寄存器進(jìn)行配置。配置文件先通過數(shù)據(jù)結(jié)構(gòu)定義在頭文件,然后調(diào)用編寫好的I2C寫函數(shù)將配置值寫入到相應(yīng)的寄存器。此過程的主要代碼如下:
表2 LCD控制器管腳定義
在完成硬件和軟件設(shè)計后對整個系統(tǒng)進(jìn)行了測試,測試結(jié)果如圖6、圖7所示,圖6為示波器所測得的水平同步信號和垂直同步信號。信號波形穩(wěn)定,其中水平同步信號為31.0585KHZ,垂直同步信號為59.272HZ,完全符合640×480分辨率的VGA時序要求。圖7(a)是使用天嵌公司開發(fā)的基于ADV7125的VGA轉(zhuǎn)接板在高頻信號干擾下的輸出效果,圖7(b)為基于CH7026的VGA接口輸出效果。對比發(fā)現(xiàn),圖7(a)邊緣有明顯的錯位、殘影,圖像有明顯的抖動波紋,而圖7(b)圖像清晰。測試結(jié)果表明筆者設(shè)計的方案在高頻信號干擾下具有很強的抗干擾能力。
圖6 VGA轉(zhuǎn)接板同步信號時序
筆者所提出的基于ARM-LINUX的VGA接口方案,在軟件設(shè)計上充分利用了Linux內(nèi)核I2C驅(qū)動資源,避免了再次編寫I2C驅(qū)動的重復(fù)工作;在硬件設(shè)計方面該方案有硬件設(shè)計可靠、抗干擾性強、成本低的優(yōu)點。測試結(jié)果表明在進(jìn)行VGA顯示同時使用無線WIFI信號,該方案輸出的圖形清晰、穩(wěn)定。與文獻(xiàn)[2-4]中提到的VGA接口方案相比,該方案解決了S3C2440在進(jìn)行VGA顯示同時使用WIFI時的抗干擾問題。整個系統(tǒng)能夠很好的滿足可穿戴設(shè)備的頭帶顯示器以及其他無線移動通信的VGA顯示需要。
圖7 VGA接口輸出效果對比
[1]WANG Liang,LI Zheng,NING Tingting,et al.VGA display Chinese characters of the FPGA design and implementation of[J].Computer Engineering and Design,2009,30(2):275-277(in Chinese).[王亮,李正,寧婷婷,等.VGA漢字顯示的FPGA設(shè)計與實現(xiàn)[J].計算機(jī)工程與設(shè)計,2009,30(2):275-277.]
[2]FU Zongbao,LIU Xiangyang,XIA Lingen.Based on ADV7120 embedded VGA interface design and implementation[J].Automation and Applications,2012,31(6):42-46(in Chinese).[付宗寶,劉向陽,夏林根.基于ADV7120的嵌入式VGA接口設(shè)計與實現(xiàn)[J].自動化技術(shù)與應(yīng)用,2012,31(6):42-46.]
[3]ZHENG Tianhao,ZH ANG Hongyu,ZHANG Hongbin.Embedded system based on ADV7125 VGA interface design[J].Microcontrollers &Embedded Systems,2011,11(8):37-40(in Chinese).[鄭佃好,張紅雨,張洪斌.基于ADV7125的嵌入式系統(tǒng)VGA接口設(shè)計[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011,11(8):37-40.]
[4]FAN Jinlong,WANG Jingzhong.Based CH7004 VGA interface embedded system design[J].Electronic Design Engineering,2009,17(9):3-6(in Chinese).[范金龍,王景中.基于CH7004的嵌入式系統(tǒng)VGA接口設(shè)計[J].電子設(shè)計工程,2009,17(9):3-6.]
[5]XIE Zhaoli,JIANG Tao,LIU Liang,et al.The VGA interface based on ARM embedded system research and design[J].Journal of LCD to display,2007,22(6):761-764(in Chinese).[謝昭莉,蔣濤,劉亮,等.基于ARM嵌入式系統(tǒng)的VGA接口的研究與設(shè)計[J].液晶與顯示,2007,22(6):761-764.]
[6]CHEN Gui,TIAN Xuelong,CHEN Nanxi.ARM embedded platform VGA interface design[J].Microcontrollers &Embedded Systems,2007(4):25-28(in Chinese).[陳桂,田學(xué)隆,陳南西.ARM嵌入式平臺的VGA接口設(shè)計[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(4):25-28.]
[7]FU Hong,LIU Guifang,LI Chunshan,et al.S3C2440 LCD controller configuration and application[J].Computer Engineering and Design,2010,31(11):2470-2472(in Chinese).[付虹,劉桂方,李春善,等.S3C2440的LCD控制器的配置與應(yīng)用[J].計算機(jī)工程與設(shè)計,2010,31(11):2470-2472.]
[8]ZHU Liting,ZHAO Zhe.S3C2440 embedded VGA interface design[J].Hangzhou University of Electronic Science and Technology,2010,30(5):45-48(in Chinese).[朱麗婷,趙哲.S3C2440的嵌入式VGA接口設(shè)計[J].杭州電子科技大學(xué)學(xué)報,2010,30(5):45-48.]
[9]HE Yajun,DENG Feiqi.Embedded Linux I2C bus driver design[J].Computer Engineering and Design,2008,29(10):2517-2519(in Chinese).[何亞軍,鄧飛其.嵌入式Linux中I2C總線驅(qū)動程序設(shè)計[J].計算機(jī)工程與設(shè)計,2008,29(10):2517-2519.]
[10]DU Bo,F(xiàn)ANG Xiangzhong.The embedded Linux system under the I2C device driver development[J].Microcomputer Information,2006,22(11):21-23(in Chinese).[杜博,方向忠.嵌入式Linux系統(tǒng)下I2C設(shè)備驅(qū)動程序的開發(fā)[J].微計算機(jī)信息,2006,22(11):21-23.]