USB數(shù)據(jù)采集系統(tǒng)中DMA數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)
系統(tǒng)中利用GPDMA控制器產(chǎn)生的半滿(mǎn)和全滿(mǎn)中斷信號(hào)協(xié)調(diào)兩個(gè)DMA對(duì)同一個(gè)緩存空間的操作,實(shí)現(xiàn)了LPC2888對(duì)整個(gè)數(shù)據(jù)傳輸過(guò)程的協(xié)調(diào)控制。當(dāng)DMA通道3工作時(shí),采樣數(shù)據(jù)從CPLD傳輸?shù)絙uffer1,同時(shí)USB高速設(shè)備控制器對(duì)buffer2中的數(shù)據(jù)進(jìn)行DMA操作;當(dāng)DMA通道5工作時(shí),采樣數(shù)據(jù)傳輸到buffer2,USB高速設(shè)備控制器對(duì)buffer1中的數(shù)據(jù)進(jìn)行操作。如圖5中LPC2888程序流程所示。
圖5 LPC2888程序流程
3、上位機(jī)軟件設(shè)計(jì)
系統(tǒng)上位機(jī)軟件包括兩個(gè)部分:設(shè)備驅(qū)動(dòng)程序和系統(tǒng)應(yīng)用程序。開(kāi)發(fā)USB設(shè)備的一個(gè)關(guān)鍵問(wèn)題在于設(shè)備驅(qū)動(dòng)程序的編寫(xiě)。傳統(tǒng)的開(kāi)發(fā)工具是微軟公司提供的設(shè)備驅(qū)動(dòng)開(kāi)發(fā)工具包:Windows DDK(Device Driver Kits),以及由第三方公司基于DDK開(kāi)發(fā)的驅(qū)動(dòng)程序開(kāi)發(fā)工具包:WinDriver或DriverWorks。DDK基于匯編語(yǔ)言的編程方式和內(nèi)核模式的調(diào)用,對(duì)于沒(méi)有深厚的操作系統(tǒng)原理和編程水平的人員來(lái)說(shuō),任務(wù)相當(dāng)艱巨。本文使用美國(guó)國(guó)家儀器NI (National Instruments)公司開(kāi)發(fā)的NI-VISA(Virtual Instrument Software Architecture)控制USB設(shè)備,直接配置VISA生成設(shè)備驅(qū)動(dòng)程序,避開(kāi)了以往開(kāi)發(fā)USB設(shè)備驅(qū)動(dòng)程序的復(fù)雜性,同時(shí)直接使用虛擬儀器軟件設(shè)計(jì)平臺(tái)LabWindows CVI開(kāi)發(fā)系統(tǒng)應(yīng)用程序,縮短了開(kāi)發(fā)周期。
3.1 使用NI-VISA開(kāi)發(fā)USB設(shè)備驅(qū)動(dòng)程序
NI-VISA是NI公司開(kāi)發(fā)的一種用來(lái)與各種儀器總線(xiàn)進(jìn)行通信的高級(jí)應(yīng)用編程接口。VISA總線(xiàn)I/O軟件是一個(gè)綜合軟件包,它不受平臺(tái)、總線(xiàn)和環(huán)境的限制,可用來(lái)對(duì)USB、GPIB、串口、PCI、VXI、PXI和以太網(wǎng)系統(tǒng)進(jìn)行配置、編程和調(diào)試。使用VISA可以很容易地實(shí)現(xiàn)計(jì)算機(jī)應(yīng)用程序和USB設(shè)備之間的連接,降低了設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)難度。
VISA提供了兩類(lèi)函數(shù)供應(yīng)用軟件調(diào)用,USB INSTR設(shè)備與USB RAW設(shè)備。USB INSTR設(shè)備是符合USBTMC(USB測(cè)試測(cè)量類(lèi))協(xié)議的USB設(shè)備,可以通過(guò)使用USB INSTR類(lèi)函數(shù)控制,通信時(shí)無(wú)需配置NI-VISA;而USB RAW設(shè)備是指除了明確符合USBTMC規(guī)格的儀器之外的任何USB設(shè)備,通信時(shí)要配置NI-VISA。經(jīng)過(guò)配置后,VISA自動(dòng)創(chuàng)建好設(shè)備驅(qū)動(dòng)文件:inf文件和PNF文件。當(dāng)相應(yīng)的USB設(shè)備連接到計(jì)算機(jī)時(shí),操作系統(tǒng)將自動(dòng)安裝該設(shè)備驅(qū)動(dòng)并識(shí)別該設(shè)備。
3.2 系統(tǒng)應(yīng)用程序設(shè)計(jì)
使用NI-VISA開(kāi)發(fā)的USB設(shè)備可以在LabVIEW和LabWindows CVI中直接調(diào)用,其中有相應(yīng)的VI子節(jié)點(diǎn)和庫(kù)函數(shù)對(duì)設(shè)備進(jìn)行操作。本系統(tǒng)采用LabWindows CVI開(kāi)發(fā)數(shù)據(jù)采集系統(tǒng)應(yīng)用程序。對(duì)設(shè)備的操作遵循下面的原則:首先打開(kāi)設(shè)備,然后可以對(duì)設(shè)備進(jìn)行讀寫(xiě)、設(shè)置設(shè)備屬性等操作,最后要關(guān)閉設(shè)備。目前應(yīng)用程序設(shè)置有兩種工作模式:示波器模式和連續(xù)采集存儲(chǔ)模式。示波器模式每隔一定的時(shí)間間隔啟動(dòng)一次采集,采用模擬電平觸發(fā),采樣長(zhǎng)度固定,采樣結(jié)果波形實(shí)時(shí)顯示。連續(xù)采集存儲(chǔ)模式啟動(dòng)采集后,系統(tǒng)將采樣結(jié)果實(shí)時(shí)地存儲(chǔ)到數(shù)據(jù)文件中。停止采集后,應(yīng)用程序打開(kāi)數(shù)據(jù)文件對(duì)采樣結(jié)果進(jìn)行波形顯示、數(shù)據(jù)處理等操作。系統(tǒng)應(yīng)用程序界面如圖6所示。
4、系統(tǒng)測(cè)試結(jié)果
本文對(duì)該系統(tǒng)主要從以下四個(gè)方面進(jìn)行了測(cè)試。
1)將CPLD內(nèi)部邏輯設(shè)定為傳輸固定數(shù)據(jù),如0xAA55。系統(tǒng)在連續(xù)采集存儲(chǔ)模式下工作,獲得數(shù)據(jù)文件。采用二進(jìn)制文件編輯軟件UltraEdit查看數(shù)據(jù)文件,其中所有采樣點(diǎn)結(jié)果均為0xAA55。驗(yàn)證了數(shù)據(jù)傳輸過(guò)程的正確性。
2)將CPLD內(nèi)部邏輯設(shè)定為傳輸每次增1的數(shù)據(jù),獲得采樣數(shù)據(jù)文件進(jìn)行查看。得到采樣點(diǎn)結(jié)果為遞增的數(shù)據(jù),每次增量為1。驗(yàn)證了數(shù)據(jù)傳輸過(guò)程沒(méi)有丟失采樣點(diǎn),保證了數(shù)據(jù)傳輸過(guò)程的可靠性。
3)將CPLD內(nèi)部邏輯設(shè)定為傳輸AD采樣結(jié)果。系統(tǒng)工作在示波器模式下,實(shí)時(shí)查看采樣結(jié)果波形。調(diào)整輸入模擬信號(hào)幅值、頻率和波形,分別得到相應(yīng)的采樣結(jié)果波形。驗(yàn)證了AD轉(zhuǎn)換環(huán)節(jié)的正確性。圖6所顯示被采樣信號(hào)為250Hz正弦信號(hào),峰峰值5V,采樣速率1MS/s。
圖6 系統(tǒng)應(yīng)用程序界面
4)USB接口數(shù)據(jù)傳輸速度測(cè)試。這里采用總線(xiàn)分析測(cè)試軟件Bus Hound測(cè)試系統(tǒng)的數(shù)據(jù)傳輸速度。該軟件可以觀(guān)察USB設(shè)備的工作情況,讀取當(dāng)前USB設(shè)備輸入輸出數(shù)據(jù)量的大小、數(shù)據(jù)傳輸速度和設(shè)備屬性等信息,并且在運(yùn)行過(guò)程中不會(huì)對(duì)設(shè)備的工作產(chǎn)生影響。測(cè)試時(shí)首先運(yùn)行Bus Hound軟件,啟動(dòng)系統(tǒng)工作在連續(xù)采集存儲(chǔ)模式,然后可以在Bus Hound中得到系統(tǒng)的數(shù)據(jù)傳輸速度。經(jīng)測(cè)試,系統(tǒng)最高數(shù)據(jù)傳輸速度為16MB/s(128Mb/s)。圖7所示為Bus Hound軟件界面和數(shù)據(jù)傳輸速度測(cè)試結(jié)果。
圖7 軟件Bus Hound的界面與速度測(cè)試結(jié)果
5、結(jié)論
本文使用嵌入式微控制器LPC2888和CPLD成功地完成了基于USB高速傳輸?shù)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/數(shù)據(jù)采集系統(tǒng)">數(shù)據(jù)采集系統(tǒng)。系統(tǒng)利用CPLD配合GPDMA控制器實(shí)現(xiàn)了從數(shù)據(jù)采集模塊到LPC2888內(nèi)部緩存的DMA數(shù)據(jù)傳輸,利用USB設(shè)備控制器DMA引擎配合端點(diǎn)批量傳輸實(shí)現(xiàn)了從緩存到計(jì)算機(jī)的DMA傳輸,并通過(guò)中斷對(duì)兩個(gè)環(huán)節(jié)進(jìn)行協(xié)調(diào)實(shí)現(xiàn)了整個(gè)數(shù)據(jù)傳輸過(guò)程的DMA傳輸。經(jīng)測(cè)試,系統(tǒng)有效數(shù)據(jù)傳輸速度達(dá)128Mb/s。
在USB設(shè)備驅(qū)動(dòng)應(yīng)用程序的開(kāi)發(fā)上,本文嘗試了一種新方法。配置NI-VISA生成驅(qū)動(dòng)程序,在LabWindows CVI中進(jìn)行應(yīng)用程序設(shè)計(jì),通過(guò)VISA控制USB設(shè)備。實(shí)踐證明:使用該方法開(kāi)發(fā)的系統(tǒng)穩(wěn)定可靠,不需要開(kāi)發(fā)者了解驅(qū)動(dòng)程序內(nèi)核,開(kāi)發(fā)難度低,是一種簡(jiǎn)單、快速開(kāi)發(fā)USB接口應(yīng)用系統(tǒng)的好方法。
參考文獻(xiàn)
[1] 李華.USB儀器將成測(cè)量?jī)x器主流.國(guó)外電子測(cè)量技術(shù),2005,10:1~5.
[2] 郭云鵬,吳衛(wèi)華,張B捷.虛擬儀器技術(shù)與發(fā)展展望.中國(guó)科技信息,2005,18:92~101.
[3] NXP Semiconductors. LPC2880/LPC2888 data sheet. Version 02,2006,9.
評(píng)論