??? 摘 要: 介紹了一種基于USB2.0接口的同步高速數(shù)據(jù)采集的設(shè)計(jì)方案及其軟硬件的設(shè)計(jì)方法,對(duì)Cypress的USB2.0控制芯片CY7C68013和同步數(shù)據(jù)采集芯片AD7862的特性作了簡(jiǎn)要說(shuō)明,,同時(shí)重點(diǎn)介紹GPIF及其驅(qū)動(dòng)軟件的設(shè)計(jì),。
??? 關(guān)鍵詞: USB2.0? EZ-USB FX2? 同步數(shù)據(jù)采集
?
??? 隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,,對(duì)外部總線速度的要求越來(lái)越高。通用串行總線(Universal Serial Bus,即USB總線)憑借其即插即用,、熱插拔以及較高的傳輸速率等優(yōu)點(diǎn),,成為PC機(jī)與外設(shè)" title="外設(shè)">外設(shè)連接的普遍標(biāo)準(zhǔn),。在許多便攜式電腦上,,已經(jīng)找不到RS-232接口。迄今為止,,常用的USB總線標(biāo)準(zhǔn)有1998年發(fā)布的USB1.1版本和2000年發(fā)布的USB2.0版本,。其中1.1版本支持兩種傳輸速率:1.5Mbps和12Mbps,主要應(yīng)用在低速傳輸要求的場(chǎng)合,;而2.0版本面向高數(shù)據(jù)率傳輸?shù)膱?chǎng)合,,支持480Mbps的傳輸速度,并向下完全兼容USB1.1協(xié)議,。在實(shí)際應(yīng)用中,,通常會(huì)遇到一些突發(fā)信號(hào),需要對(duì)其進(jìn)行高速采集,,對(duì)數(shù)據(jù)進(jìn)行高速傳輸,,所以USB2.0標(biāo)準(zhǔn)自然成為首選。以Cypress公司的EZ-USB FX2系列中的CY7C68013芯片作為核心控制器,,設(shè)計(jì)開發(fā)了一套符合USB2.0標(biāo)準(zhǔn)的高速同步數(shù)據(jù)采集器" title="數(shù)據(jù)采集器">數(shù)據(jù)采集器,。
1 CY7C68013芯片
??? Cypress公司的EZ-USB FX2系列中的CY7C68013,是目前市面上比較少的符合USB2.0標(biāo)準(zhǔn)的USB控制器之一。與其它同類芯片相比,,它提供了4KB的FIFO和一個(gè)功能十分強(qiáng)大的GPIF(General Programmable Interface)模塊,。后者相當(dāng)于一個(gè)可編程狀態(tài)機(jī),正是由于它的存在,,使得CY7C68013比其它同類芯片具有強(qiáng)大的互聯(lián)" title="互聯(lián)">互聯(lián)能力,。圖1是CY7C68013芯片的結(jié)構(gòu)示意圖,其主要特點(diǎn)如下:
??? ·CY7C68013內(nèi)部集成了一個(gè)增強(qiáng)型的51內(nèi)核,,其指令集與標(biāo)準(zhǔn)的8051兼容,,并且在多方面有所改進(jìn),。例如:最高工作頻率可達(dá)48MHz,一個(gè)指令周期為4個(gè)時(shí)鐘周期,,兩個(gè)UART接口,,三個(gè)定時(shí)計(jì)數(shù)器,一個(gè)I2C接口引擎等,。
??? ·CY7C68013提供了一個(gè)串行接口引擎(SIE),,負(fù)責(zé)完成大部分USB2.0協(xié)議的處理工作,從而大大減輕了USB協(xié)議處理的工作量,,并且提供了4KB的FIFO保證數(shù)據(jù)高速傳輸?shù)男枰?BR>??? ·為了滿足與各種不同類型外設(shè)的互聯(lián)需要,,芯片中集成了一個(gè)GPIF模塊,讓用戶可以按照外設(shè)的時(shí)序進(jìn)行波形編輯,,而不需要復(fù)雜的程序描述,就可以保證GPIF與內(nèi)部FIFO的協(xié)調(diào)工作,,實(shí)現(xiàn)芯片與高速外圍設(shè)備之間的邏輯連接和高速數(shù)據(jù)傳輸,。這對(duì)于開發(fā)者來(lái)說(shuō)是相當(dāng)友好的。筆者就是利用這一特性,,實(shí)現(xiàn)數(shù)據(jù)的高速同步采集及傳輸,。
?
2 同步高速數(shù)據(jù)采集芯片AD7862
2.1? AD7862的結(jié)構(gòu)
??? AD7862是AD公司推出的高速、低功耗,、雙極性12位的A/D轉(zhuǎn)換芯片,,其中包含了兩個(gè)獨(dú)立的快速ADC模塊(允許同時(shí)采樣和轉(zhuǎn)換兩路信號(hào))、4路模擬輸入信號(hào)(VA1,、VA2,、VB1、VB2),、2.5V的內(nèi)部電壓基準(zhǔn)以及一個(gè)12位的高速并行接口,。芯片正常運(yùn)行時(shí)功耗只有60mW,當(dāng)使用節(jié)電方式時(shí),,只有50μW,,對(duì)于自帶電源的USB設(shè)備這種低功耗無(wú)疑是一種優(yōu)點(diǎn)。該芯片的內(nèi)部結(jié)構(gòu)如圖2所示,。每個(gè)ADC都有一個(gè)兩通道的多路選擇器,,芯片通過(guò)地址信號(hào)A0分別選通VA1、VA2 或 VB1,、VB2,,當(dāng)一個(gè)CONVST信號(hào)到來(lái)時(shí),同時(shí)轉(zhuǎn)換地址A0選中的兩路信號(hào),。
?
2.2? AD7862的控制時(shí)序
??? AD7862的控制時(shí)序如圖3所示,。在USB2.0同步高速數(shù)據(jù)采集器中,,利用GPIF實(shí)現(xiàn)圖3所示的時(shí)序控制。其中CONVST是轉(zhuǎn)換開始啟動(dòng)信號(hào),,下降沿觸發(fā)兩路ADC開始裝換,;BUSY信號(hào)在CONVST信號(hào)觸發(fā)后,變成并保持為高電平狀態(tài),,直到兩路ADC轉(zhuǎn)換完畢,,才又回到低電平;地址A0用于對(duì)兩路模擬信號(hào)的選擇,,CS信號(hào)和RD信號(hào)分別是芯片使能信號(hào)以及讀允許信號(hào),。兩者第一次同為低電平時(shí),讀出第一組ADC轉(zhuǎn)換的數(shù)據(jù),;在第二次為高電平時(shí),,讀出第二組ADC轉(zhuǎn)換的數(shù)據(jù)。使用AD7862值得注意的一點(diǎn)是該芯片提供了電源管理功能,,當(dāng)芯片將第二組數(shù)據(jù)讀出后,,CONVST信號(hào)繼續(xù)保持低電平,芯片進(jìn)入休眠模式,。這時(shí)芯片的功耗只有50μW,。這一點(diǎn)對(duì)于現(xiàn)在的便攜式設(shè)備十分重要。
?
3 同步高速數(shù)據(jù)采集器的硬件設(shè)計(jì)
??? 傳統(tǒng)的高速數(shù)據(jù)采集卡一般都采用PCI總線設(shè)計(jì),,但是筆記本電腦以及大部分便攜式設(shè)備是沒有PCI插槽的,。利用USB2.0技術(shù),不僅保證了較高的數(shù)據(jù)傳輸率(傳輸率最大可以達(dá)到480Mbps),,同時(shí)還具有便攜和無(wú)需外加電源等優(yōu)點(diǎn),。圖4是系統(tǒng)的結(jié)構(gòu)示意圖。它的工作原理是:在GPIF模塊的控制下,,由AD7862對(duì)目標(biāo)進(jìn)行等間隔采樣,,然后將采樣結(jié)果通過(guò)GPIF傳送到CY7C68013的內(nèi)部FIFO中緩存;當(dāng)采集一定量的數(shù)據(jù)后,,CY7C68013自動(dòng)將數(shù)據(jù)打包(不需要8051的介入),,通過(guò)USB總線傳輸?shù)絇C機(jī)中進(jìn)行數(shù)據(jù)處理。由于有GPIF的硬件支持,,CY7C68013中的8051內(nèi)核只是在很少的時(shí)間內(nèi),,對(duì)控制進(jìn)行了輔助處理,大部分工作由GPIF硬件完成,。這樣8051還可以與其他外設(shè)進(jìn)行互聯(lián)等工作,。在高速數(shù)據(jù)采集器上附加了兩路RS-232接口,用于將GPS數(shù)據(jù)和高精度智能測(cè)深儀的數(shù)據(jù)中轉(zhuǎn)到主控計(jì)算機(jī)上,,大大方便了新近推出的筆記本電腦與傳統(tǒng)外設(shè)之間的聯(lián)系,。因?yàn)樾陆瞥龅墓P記本電腦大多不具有RS-232接口,,而那些野外觀測(cè)儀器大多只能通過(guò)RS-232接口進(jìn)行數(shù)據(jù)交換。
?
??? 對(duì)于CY7C68013來(lái)說(shuō),,其配置和固件" title="固件">固件都是軟的,,存儲(chǔ)在外部的E2PROM中,上電時(shí)從I2C總線自動(dòng)裝載到片內(nèi)RAM中,,修改起來(lái)十分方便,,便于固件升級(jí)。由于CY7C68013提供了豐富的I/O口,,所以進(jìn)行功能擴(kuò)展也是很方便的,,例如增加一個(gè)GPIB數(shù)據(jù)口等。
4 軟件設(shè)計(jì)
??? USB 設(shè)備的軟件設(shè)計(jì)包括三方面:固件設(shè)計(jì),、硬件驅(qū)動(dòng)程序設(shè)計(jì)以及高級(jí)應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序的設(shè)計(jì),。
4.1 固件(firmware)設(shè)計(jì)
??? Cypress公司為CY7C68013提供了一個(gè)開發(fā)框架,可以在 KEIL C51環(huán)境下開發(fā),。由于開發(fā)框架的引入,,從而大大縮短了用戶的研發(fā)周期。該框架由以下幾部分組成:
??? (1)FW.C中包含了程序框架的MAIN函數(shù),,管理整個(gè)51內(nèi)核的運(yùn)行,因?yàn)镃ypress對(duì)這個(gè)部分的功能進(jìn)行了精心劃分,,一般是不用改動(dòng)的,。
??? (2)用戶必須將PERIPH.C實(shí)例化,它負(fù)責(zé)系統(tǒng)周邊器件的互聯(lián)。固件的設(shè)計(jì)主要針對(duì)這個(gè)文件,,用戶必須根據(jù)自己系統(tǒng)的需要,,實(shí)例化這個(gè)文件,以實(shí)現(xiàn)自己的功能,。在這個(gè)文件中有幾個(gè)函數(shù)是比較關(guān)鍵的,,在這里做一下特別說(shuō)明:
??? ·TD_Init 函數(shù),負(fù)責(zé)對(duì)USB端點(diǎn)進(jìn)行初始化設(shè)置,。本設(shè)計(jì)中將端點(diǎn)6設(shè)置為1024個(gè)字節(jié),,緩存深度為4級(jí),模式設(shè)為自動(dòng)輸入方式,。
??? ·TD_Poll 函數(shù),,負(fù)責(zé)系統(tǒng)中循環(huán)任務(wù)的處理。它主要是對(duì)各個(gè)端點(diǎn)的狀態(tài)進(jìn)行查詢,,處理各種 OUT或IN端點(diǎn)的交互,。值得說(shuō)明的一點(diǎn)是,這種處理只是輔助性質(zhì)的,,大部分工作由硬件自動(dòng)完成,。
??? ·DR_VendorCmnd 函數(shù),,主要負(fù)責(zé)用戶自定義命令的譯碼工作,用戶請(qǐng)求通過(guò)端點(diǎn)0傳輸給內(nèi)核,。由于CY7C68013上SIE硬件的支持,,用戶只需查詢固定地址單元即可獲得當(dāng)前的命令代碼。
??? ·GPIFINIT.C ,,其中只有一個(gè)GpifInit函數(shù),,它是GPIF模塊的初始化函數(shù),一般在TD_Init 函數(shù)中調(diào)用,。這個(gè)函數(shù)是由Cypress公司提供的一個(gè)GPIF Designer開發(fā)工具根據(jù)用戶設(shè)計(jì)的波形生成的,,用戶不需要自己設(shè)計(jì)波形查詢表,減輕了設(shè)計(jì)者的工作強(qiáng)度,。
??? ·DSCR.A51是描述表文件,負(fù)責(zé)USB設(shè)備的描述工作,CY7C68013在上電后自動(dòng)利用其中的VID和PID取代默認(rèn)的VID和PID,。
??? ·兩個(gè)包含文件EZUSB.LIB和USBJMPTB.OBJ,前者是EZUSB函數(shù)庫(kù)的二進(jìn)制文件,,后者是USB的中斷向量表,。
??? 固件調(diào)試,使用Cypress提供的EZ-USB control panel,,具體的操作讀者可以參考其自帶幫助,。
4.2 驅(qū)動(dòng)程序的設(shè)計(jì)
??? 驅(qū)動(dòng)程序負(fù)責(zé)對(duì)底層硬件的訪問(wèn)。在本設(shè)計(jì)的驅(qū)動(dòng)程序開發(fā)中,,使用的開發(fā)工具是Jungo公司的WinDriver v6.03,,它支持多種操作系統(tǒng)。利用WinDriver開發(fā)的優(yōu)點(diǎn)是用戶不需要了解操作系統(tǒng)內(nèi)部的具體工作機(jī)理,,同時(shí)也不需要了解各個(gè)系統(tǒng)DDK (Developing or Debugging in Kernel)的開發(fā)工具,,用戶只需使用WinDriver提供的開發(fā)平臺(tái),即可完成驅(qū)動(dòng)程序的設(shè)計(jì)工作,,剩下的底層細(xì)節(jié)由WinDriver內(nèi)核統(tǒng)一處理,,從而降低了對(duì)開發(fā)者編程能力的要求,同時(shí)也大大縮短了開發(fā)周期,。下面就使用WinDriver開發(fā)驅(qū)動(dòng)程序的步驟做一個(gè)簡(jiǎn)要說(shuō)明(以在Windows操作系統(tǒng)下的開發(fā)為例):
??? (1)啟動(dòng) WinDriver的DriverWizard工具,;
??? (2)利用 DriverWizard 檢測(cè)硬件是否正常;
??? (3)在DriverWizard 中選擇所使用的開發(fā)環(huán)境,,這里使用VB6.0開發(fā)環(huán)境,,并生成驅(qū)動(dòng)程序代碼;
??? (4)對(duì)生成的代碼進(jìn)行修改,,使其符合系統(tǒng)的需要,;
??? (5)在WinDriver環(huán)境的用戶模式下,調(diào)試驅(qū)動(dòng)程序;
??? (6)如果程序需要內(nèi)核訪問(wèn),,以提高驅(qū)動(dòng)程序的效率,,進(jìn)入內(nèi)核開發(fā)。
4.3? 高級(jí)應(yīng)用程序的設(shè)計(jì)
??? 高級(jí)應(yīng)用程序建立在驅(qū)動(dòng)程序之上,,在本設(shè)計(jì)中,,選用了VB6.0的開發(fā)環(huán)境來(lái)開發(fā)應(yīng)用程序。它以驅(qū)動(dòng)程序?yàn)闃蛄?,?duì)USB設(shè)備進(jìn)行命令控制,,處理USB設(shè)備傳回的數(shù)據(jù),例如波形顯示,、頻譜分析等,。開發(fā)者可以依據(jù)自己的實(shí)際需求,制作一個(gè)USB控制器的控件或數(shù)據(jù)包,,在編寫應(yīng)用程序時(shí)連接或嵌入到應(yīng)用程序中,。
?? ?隨著筆記本電腦的迅速普及,高性能便攜式采集器將會(huì)倍受矚目,,尤其是在RS-232接口已被大多數(shù)筆記本電腦擯棄的今天,,對(duì)USB數(shù)據(jù)采集器的需求就變得更加迫切,并已顯示出了良好的市場(chǎng)前景,。本文所述的基于USB2.0的高速同步數(shù)據(jù)采集器就其功能來(lái)說(shuō)已不僅限于數(shù)據(jù)采集,,應(yīng)該說(shuō)是一個(gè)功能強(qiáng)大的混合信號(hào)處理器。經(jīng)過(guò)在水下機(jī)器人聲納和浙江深水網(wǎng)箱監(jiān)測(cè)設(shè)備中的使用表明數(shù)據(jù)吞吐量大,、性能穩(wěn)定,,達(dá)到了設(shè)計(jì)要求。只要搭配合適的傳感器以及相應(yīng)的信號(hào)調(diào)理電路,,利用本文所述的高性能采集器,就可以對(duì)各種模擬量進(jìn)行采集和分析處理,。如果再能夠配以合適的固件設(shè)計(jì),,則完全可以構(gòu)成一個(gè)多功能控制系統(tǒng)。
參考文獻(xiàn)
1 Cypress Semiconductor Corporation. EZ-USB FX2 Manual?Technical Reference Version 2.1. Copyright (c) 2000, 2001
2 Anchor Chips, Inc. Anchor EZ-USB Frameworks. Copyright?(c) 1998
3 Jungo Ltd. WinDriver v6.03 User's Guide. 2003