基于USB和DSP的數(shù)據(jù)采集系統(tǒng)的設計
摘 要:介紹了一種利用USB2.0的高速傳輸特性,基于USB和DSP的數(shù)據(jù)采集系統(tǒng)。詳細論述了系統(tǒng)的總體結(jié)構(gòu)、部分硬件設計,并簡要敘述了相應固件程序的實現(xiàn)。
關鍵詞:USB DSP FPGA 高速傳輸
測量儀器一般由數(shù)據(jù)采集、數(shù)據(jù)分析和顯示三部分組成,而數(shù)據(jù)分析和顯示可以由PC機的軟件來完成,因此只要額外提供一定的數(shù)據(jù)采集硬件就可以和PC機組成測量儀器。這種基于PC機的測量儀器被稱為虛擬儀器[1]。而在一些數(shù)據(jù)量比較大、采集時間比較長的場合,就需要采用高速的數(shù)據(jù)傳輸通道。基于虛擬儀器的思想和高速傳輸通道的要求,設計了一種基于DSP和USB2.0的高速數(shù)據(jù)傳輸接口。
1 數(shù)據(jù)采集系統(tǒng)硬件
數(shù)據(jù)采集系統(tǒng)由A/D數(shù)據(jù)采集單元、USB從接口單元、U盤讀寫單元組成。硬件原理圖如圖1所示。被測信號經(jīng)A/D轉(zhuǎn)換后寫入FIFO中;當FIFO數(shù)據(jù)半滿后,產(chǎn)生中斷,通知DSP進行數(shù)據(jù)壓縮處理;DSP把壓縮好的數(shù)據(jù)依次寫入USB接口芯片的4個從FIFO中,4個從FIFO對應USB的4個端點,DSP一邊寫入數(shù)據(jù),已寫滿的從FIFO就一邊通過相應端點由SIE把數(shù)據(jù)發(fā)送到上位機,上位機一邊把收到的數(shù)據(jù)通過多線程存儲到硬盤中,一邊把數(shù)據(jù)解壓并把波形實時顯示出來。對于少量的數(shù)據(jù),可以存儲到U盤,送回PC機進行分析顯示。
1.1 A/D采集模塊
作為單通道輸入的MAX1189,主要控制信號有CS、R/C(Read/Conversion)、EOC(End of Conversion)。圖2為MAX1189的時序圖[2]。如圖2所示,每個采樣周期長達CS信號的三個周期。在第一個CS信號的下降沿,如果R/C為低電平,也就進入了應答模式,這是開始采樣前必須的準備工作。為了適應不同的輸入極性要求,MAX1189的內(nèi)部參考電壓可以在每次轉(zhuǎn)換結(jié)束后進行設置,這是通過在第二個CS下降沿時,R/C的高低電平變化來控制的,非常簡便。低電平時,ADC內(nèi)部參考電壓無需進行轉(zhuǎn)換,這樣在開始下一個周期的轉(zhuǎn)換時無需等待電壓的變化。高電平時,內(nèi)部參考電壓會進行調(diào)變,這樣在開始下一周期的轉(zhuǎn)換時需要等待大約12?滋s的時間。在CS信號的第三個下降沿,EOC信號變?yōu)榈碗娖剑硎静蓸咏Y(jié)束,此時R/C信號為高電平,會把采樣數(shù)據(jù)放到總線上,這樣就完成了一個周期的采樣。采樣模塊的控制信號是由FPGA控制的。
1.2 DSP與FIFO的連接
主處理器DSP既要控制采集,又要完成數(shù)據(jù)的處理和傳輸,因此數(shù)據(jù)采集模塊采集來的數(shù)據(jù)不能直接傳送給DSP,這會極大影響DSP的處理效率。解決辦法是利用數(shù)據(jù)緩沖器如雙口RAM、FIFO等,對數(shù)據(jù)進行適度緩存,當緩存的數(shù)據(jù)量達到一個設定值時,可以通知CPU進行一次高速數(shù)據(jù)傳輸,將緩存的數(shù)據(jù)一次性地讀入。在設計中采用了緩沖,較好地解決了采集端與處理端的速度匹配問題。
FIFO的讀寫由各自的控制時鐘FIFOR和FIFOW控制,寫時鐘與采樣時鐘同步,讀時鐘與DSP處理數(shù)據(jù)的時序有關。當FIFO半滿后,FPGA會根據(jù)FIFOHF、FIFOE/F、FIFOPAFE的相應位判斷FIFO是否半滿,F(xiàn)PGA便向DSP發(fā)出中斷請求。本設計中采用外部中斷的EXTINT3來作為FIFO緩沖數(shù)據(jù)的DMA傳輸觸發(fā)事件。DSP響應FPGA中斷請求,讀取數(shù)據(jù)進行數(shù)據(jù)壓縮。當DSP數(shù)據(jù)處理速度跟不上采集數(shù)據(jù)速度時,F(xiàn)IFO就會全滿,F(xiàn)PGA根據(jù)FIFOHF、FIFOE/F、FIFOPAFE相應位狀態(tài)判斷到FIFO已全滿,于是向USB接口芯片單片機發(fā)出最高級中斷請求,通知系統(tǒng)數(shù)據(jù)己溢出,采集發(fā)生嚴重錯誤。
1.3 USB從接口電路
USB從接口單元采用CYPRESS的CY7C68013芯片。如圖3所示,USB接口芯片CY7C68013由3.3V電源供電。PAO/INTO#選擇INTO工作方式,其中斷級別最高,當FIFO全滿造成數(shù)據(jù)溢出導致數(shù)據(jù)采集發(fā)生嚴重錯誤時,該中斷請求發(fā)生,系統(tǒng)通知數(shù)據(jù)溢出錯誤,并停止數(shù)據(jù)采集。RESET#為USB接口芯片復位輸入。
USB的FDO~FDl5與DSP的I/O數(shù)據(jù)線相連,用于DSP與USB從FIFO通信,SLWR為寫控制時鐘。FLAGB、FLAGC用于輸出2,4,6,8相應端點從FIFO的空滿狀態(tài),以便DSP寫USB從FIFO時獲取空滿狀態(tài)。
FIFOADRO、FIFOADR1用于DSP尋址2,4,6,8相應端點USB從FIFO,F(xiàn)IFOADRO及FIFOADR1功能真值表如表1所示。FIFOADRO、FIFOADR1的初值為00,對應DSP寫端點2的從FIFO, FPGA對寫USB從FIFO的控制時鐘SLWR計數(shù),當達到512次時,表示端點2己寫滿,計數(shù)器清零,F(xiàn)IFOADRO和FIFOADR1的值自加一次變?yōu)?1,對應DSP寫端點4的從FIFO。以此類推,DSP依次寫2,4,6,8端點數(shù)據(jù),當FIFOADRO和FIFOADR1的值為11時,再自加一次,F(xiàn)IFOADRO和FIFOADR1的值又變?yōu)?0,因此,DSP可循環(huán)寫2,4,6,8端點。需要說明的是,當DSP開始寫一新端點的從FIFO之前,DSP要讀一次FLAGB、FLAGC標志位,若該端點不空,則等待;若空,則進行寫數(shù)據(jù)操作[3]。
1.4 U盤讀寫單元
此電路單元采用USB主控芯片CH375。CH375 是一USB總線的通用接口芯片,支持USB-HOST主機方式和USB-DEVICE/SLAVE設備方式。此系統(tǒng)中只采用USB的主功能,用來讀寫U盤[4]。
CH375 芯片的RD#和WR#引腳分別連接DSP的讀選通輸出引腳和寫選通輸出引腳。CS#由地址譯碼電路驅(qū)動。INT#輸出的中斷請求是低電平有效,可以連接到DSP的中斷輸入引腳。當WR#為高電平并且CS#和RD#及A0都為低電平時,CH375中的數(shù)據(jù)通過D7~D0 輸出;當RD#為高電平并且CS#和WR#及A0都為低電平時,D7~D0上的數(shù)據(jù)被寫入CH375芯片中;當RD#為高電平并且CS#和WR#都為低電平而A0 為高電平時,D7~D0上的數(shù)據(jù)被作為命令碼寫入CH375芯片中。CH375內(nèi)置了處理Mass-Storage 海量存儲設備的專用通訊協(xié)議的固件,DSP可以直接以扇區(qū)為基本單位讀寫常用的USB 存儲設備(包括USB硬盤/USB閃存盤/U 盤)。
2 軟件設計
本設計的軟件主要由兩大部分組成:USB芯片軟件及DSP通信軟件。其中,USB芯片軟件的設計是關鍵,它又包括固化程序、驅(qū)動程序、PC機端應用程序[5]以及DSP端通信接口程序。
2.1 固化程序
USB芯片的固化程序主要負責:
(1) 寄存器初始化工作,設置一些特殊功能寄存器的初值以實現(xiàn)所需的屬性或者功能;
(2) 輔助硬件完成設備的枚舉過程,對主機的設備請求作出適當?shù)捻憫?BR>(3) 完成中斷處理、數(shù)據(jù)接收及發(fā)送以及對外圍電路的控制。
2.2 驅(qū)動程序
開發(fā)USB設備驅(qū)動程序可采用Jungo公司的WinDriverv6.03,并以VC++6.0作為輔助開發(fā)環(huán)境。利用WinDriver提供的開發(fā)平臺,用戶即可完成驅(qū)動程序的設計工作,剩下的底層細節(jié)由WinDriver內(nèi)核統(tǒng)一處理,從而降低了對開發(fā)者編程能力的要求,同時也大大縮短了開發(fā)周期。下面對使用WinDriver開發(fā)驅(qū)動程序的步驟作一個簡要說明:
(1) 啟動WinDriver的DriverWizard工具;
(2) 利用DriverWizard檢測硬件是否正常;
(3) 在DriverWizard中選擇所使用的開發(fā)環(huán)境,這里使用VC6.0開發(fā)環(huán)境,并生成驅(qū)動程序代碼;
(4) 對生成的代碼進行修改,使其符合系統(tǒng)的需要;
(5) 在WinDriver環(huán)境的用戶模式下調(diào)試驅(qū)動程序。
2.3 PC端應用程序
USB主機應用程序是計算機中完成特定功能的程序,其關鍵是實現(xiàn)從USB 外設讀取或發(fā)送特定數(shù)量的數(shù)據(jù)、USB標準設備請求和特定的命令等。另外,可以對數(shù)據(jù)做進一步的處理,如:存儲、顯示、快速傅立葉變換等。
主機應用程序的編寫使用VC編譯環(huán)境中的API函數(shù)實現(xiàn)。應用程序的編程方法與串口編程類似。首先必須查找設備,調(diào)用WIN32函數(shù)CreateFilea( )打開設備的句柄;然后調(diào)用WIN32函數(shù)DeviceIoControl( )就可以進行數(shù)據(jù)讀寫和控制操作;最后關閉設備句柄。
2.4 DSP端通信接口程序
在本設計中,DSP處于主控地位,通過INT中斷決定什么時候接收USB送來的數(shù)據(jù),并把接收來的數(shù)據(jù)做簡單的壓縮運算,決定何時往USB發(fā)送這些數(shù)據(jù)。在讀數(shù)據(jù)時,應首先判斷FX2的FIFO2是否為空,如果不為空則將數(shù)據(jù)讀進來,一次讀進一個16位數(shù)。在寫數(shù)據(jù)時,首先判斷要寫的數(shù)據(jù)個數(shù)是否為512字節(jié)的整倍數(shù)。
由于開發(fā)此系統(tǒng)涉及到USB驅(qū)動開發(fā)以及應用程序的設計,比較繁瑣,嘗試利用Mass Storage協(xié)議開發(fā)虛擬設備,把數(shù)據(jù)采集卡當作一個Windows的外圍設備,采用文件系統(tǒng)格式直接以文件形式存儲數(shù)據(jù)。這部分主要是修改CY7C68013的固件程序,如設備描述符、端點描述符,主機會把采集卡認為是一Mass Storage設備,然后利用SCSI協(xié)議以及文件系統(tǒng)就可以直接存儲由DSP傳過來的數(shù)據(jù),這樣就省去了復雜的驅(qū)動和應用程序設計。
本文介紹了基于USB2.0的16bit數(shù)據(jù)采集系統(tǒng),采用數(shù)據(jù)壓縮算法完成了數(shù)據(jù)量的壓縮以及高速數(shù)據(jù)傳輸[6]。由于USB的即插即用特性,彌補了傳統(tǒng)數(shù)據(jù)采集卡插拔困難的缺點,相信隨著技術的進步,USB技術必將得到更廣泛的應用。
參考文獻
[1] 覃章健,黃洪全,葛良全.基于USB2.0的實時數(shù)據(jù)采集系統(tǒng)研究.中國測試技術,2005,31(5).
[2] 美國美信公司. MAX-1189 DataSheet.pdf. 2004.1.
[3] EZ-USB FX2 Manual technical reference. Cypress Semiconductor, 2002.1.
[4] 南京沁恒電子有限公司.USB總線接口芯片CH375[DB/OL].http://www.winchiphead.com/product/ch375detail.htm,
2005-05-10.
[5] 鄧鵬飛,李小波,張劍云.USB2.0在DSP與計算機通信中的應用[J].計算機數(shù)字與工程[J],2005,(6):99-103.
[6] 曹軍軍,陳小勤.基于USB2.0的數(shù)據(jù)采集卡的設計與實現(xiàn)[J],儀器與儀表,2006,(1):37-38.
[7] 陶峻,潘亞濤,陳健.基于DSP的USB傳輸系統(tǒng)的實現(xiàn)[J].電子技術,2002,(3):56-59.
評論