摘 要:以EZ-USB FX2作為USB接口芯片設(shè)計(jì)一種數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)應(yīng)用EZ-USB FX2芯片構(gòu)建單片機(jī)和主機(jī)的數(shù)據(jù)管道,接口符合USB2.0協(xié)議。詳細(xì)介紹該系統(tǒng)的硬件組成和軟件設(shè)計(jì),包括FX2的固件設(shè)計(jì)和主機(jī)用戶程序。EZ-USB FX2芯片工作在從屬FIFO方式下,通過適當(dāng)?shù)呐渲每膳c單片機(jī)方便地進(jìn)行連接,單片機(jī)可以像訪問外部存儲(chǔ)器一樣訪問FX2的端點(diǎn)。主機(jī)應(yīng)用程序通過USB接口向設(shè)備發(fā)送相應(yīng)的命令來控制采樣過程。該系統(tǒng)硬件擴(kuò)展方便、編程簡單。
關(guān)鍵詞:FX2;Slave FIFO;USB;數(shù)據(jù)采集
中圖分類號(hào):TP334 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004-373X(2009)04-065-03
Design of Data Acquisition System Based on Single Chip Computer and USB Interface
LI Guozhu
(Xi′an University of Arts and Science,Xi′an,710065,China)
Abstract:A data acquisition system is designed based on the USB interface chip EZ-USB FX2.The system uses EZ-USB FX2 chip to form the data pipeline between microprocessor and computer.The interface conforms to the USB2.0 protocol.EZ-USB FX2 chip works in the slave FIFO way.The chip can be connected with microprocessor conveniently by suitable configure.The microprocessor can access to FX2′s endpoint by the same way as access to external memory.The user′s application program controls the sampling process through USB interface by transmission corresponding command to the equipment.To the system,the expansion of hardware is convenient and the programming is simple.In this paper,both hardware design and software design of the system are discussed in great detail,including the firmware of FX2 and user′s application program of the computer side.
Keywords:FX2;Slave FIFO;USB;data acquisition
在工業(yè)生產(chǎn)和科學(xué)技術(shù)研究中,常利用PC或工控機(jī)對(duì)各種數(shù)據(jù)進(jìn)行采集,以獲得所需要的控制信息和實(shí)驗(yàn)數(shù)據(jù)。傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)多以ISA,EISA或PCI插卡的形式完成數(shù)據(jù)傳輸,這種方式存在安裝麻煩,受計(jì)算機(jī)插槽數(shù)量、地址、中斷資源限制,可擴(kuò)展性差等缺點(diǎn)[1]。由于通用串行總線(Universal Serial Bus,USB)具有自動(dòng)被系統(tǒng)識(shí)別,自動(dòng)安裝驅(qū)動(dòng)程序、自行進(jìn)行系統(tǒng)配置,以及支持不同速率的同步和異步傳輸方式,支持熱插拔和即插即用(Plug and Play,PNP)等優(yōu)點(diǎn),已逐漸成為現(xiàn)代數(shù)據(jù)傳輸?shù)陌l(fā)展趨勢。
目前實(shí)現(xiàn)USB數(shù)據(jù)傳送多采用專用的USB接口芯片,文獻(xiàn)[1,2]采用的PDIUSBD12可支持USB1.1協(xié)議,文獻(xiàn)[3]采用的接口芯片為USB100也僅支持USB1.1協(xié)議,文獻(xiàn)[4]采用CP2102符合USB2.0協(xié)議,其通用的驅(qū)動(dòng)程序可將設(shè)備作為虛擬的COM端口設(shè)備進(jìn)行操作,文獻(xiàn)[5]采用Philips公司ISP1581芯片作為USB2.0的接口芯片。這里采用Cypress公司的CY7C68013作為USB接口芯片,設(shè)計(jì)實(shí)現(xiàn)了基于單片機(jī)和USB2.0的數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)可實(shí)現(xiàn)單通道模擬信號(hào)的采集,主機(jī)應(yīng)用程序負(fù)責(zé)啟動(dòng)和停止采樣,采樣間隔時(shí)間由主機(jī)應(yīng)用程序設(shè)置調(diào)整,采樣數(shù)據(jù)傳給主機(jī)應(yīng)用程序顯示并保存。
1 系統(tǒng)硬件設(shè)計(jì)
1.1 系統(tǒng)硬件組成
整個(gè)系統(tǒng)的硬件結(jié)構(gòu)如圖1所示。AT89C52為主控單片機(jī),負(fù)責(zé)控制A/D轉(zhuǎn)換、上傳采集數(shù)據(jù)、接收并執(zhí)行主機(jī)的命令。CY7C68013為USB接口芯片。A/D轉(zhuǎn)換芯片采用TI公司生產(chǎn)的TLC549,AD780是一款高精度參考電壓芯片,可為TLC549提供2.5 V或者3.0 V的參考電壓。系統(tǒng)+5 V電源由主機(jī)的USB接口提供,CY7C68013所需的電源為+3.3 V,由+5 V電源接穩(wěn)壓芯片AP1117提供,圖中沒有畫出。
1.2 TLC549
TLC549[6]是以8位開關(guān)電容逐次逼近A/D轉(zhuǎn)換器為基礎(chǔ)而構(gòu)造的CMOS A/D轉(zhuǎn)換器,將其設(shè)計(jì)成能通過三態(tài)輸出與微處理器或外圍設(shè)備串行接口。TLC549用輸入/輸出時(shí)鐘(I/O CLOCK)和芯片選擇(CS)輸入作數(shù)據(jù)控制,轉(zhuǎn)換結(jié)果由 DATAOUT 引腳輸出。I/O CLOCK 端的最高頻率可達(dá)1.1 MHz。TLC-549片內(nèi)系統(tǒng)時(shí)鐘工作在4 MHz(不需要外部時(shí)鐘)。片內(nèi)系統(tǒng)時(shí)鐘使內(nèi)部器件的操作獨(dú)立于串行輸入/輸出時(shí)序并允許TLC549像許多軟件和硬件所要求的那樣工作。I/O CLOCK和內(nèi)部系統(tǒng)時(shí)鐘可以實(shí)現(xiàn)高速數(shù)據(jù)傳送,使得TLC549可實(shí)現(xiàn)40 kHz的采樣頻率。TLC549具有通用控制邏輯及自動(dòng)工作或在微處理器控制下工作的片內(nèi)采樣/保持電路,差分高阻抗基準(zhǔn)電壓輸入端,易于實(shí)現(xiàn)比例轉(zhuǎn)換的高速轉(zhuǎn)換器,定標(biāo)及隔離電路。整個(gè)開關(guān)電容逐次逼近轉(zhuǎn)換器電路的設(shè)計(jì)允許在小于17 μs的時(shí)間內(nèi),以最大誤差±0.5為最低有效位的精度實(shí)現(xiàn)轉(zhuǎn)換。
1.3 CY7C68013及其固件程序
EZ-USB FX2系列芯片CY7C68013是業(yè)界第一個(gè)支持USB2.0,同時(shí)向下兼容USB1.1規(guī)范的單片機(jī),為描述方便以下簡稱該芯片為FX2。FX2支持全速傳輸(12 Mb/s)和高速傳輸(480 Mb/s),該芯片將USB2.0收發(fā)器、串行接口引擎SIE、增強(qiáng)的8051內(nèi)核、GPIF等集成于一體。FX2內(nèi)含4 KB的端點(diǎn)緩沖區(qū)FIFO,可以被配置為具有不同大小緩沖區(qū)的IN或OUT端點(diǎn)(EP2,EP4,EP6,EP8),具有USB協(xié)議所規(guī)定的4種傳輸方式,即控制方式、中斷方式、批量傳輸、和同步傳輸方式[7]。Cypress公司為FX2提供了完善的軟件開發(fā)工具包,降低了開難度,加快了開發(fā)進(jìn)度。
FX2可以工作在3種不同的模式下完成USB數(shù)據(jù)的傳輸,即Ports模式、GPIF模式和Slave FIFO模式。Ports模式[8]下其USB數(shù)據(jù)的傳輸主要在FX2的8051內(nèi)核參與下完成,數(shù)據(jù)傳輸通過執(zhí)行指令實(shí)現(xiàn),因此數(shù)據(jù)的傳輸率比較低,對(duì)大批量數(shù)據(jù)傳輸一般采用后兩種方式。GPIF方式,稱為通用可編程接口方式,在此模式下,F(xiàn)X2的FIFO是由內(nèi)部的GPIF控制的,F(xiàn)X2利用由軟件編程輸出讀寫控制波形讀取FIFO標(biāo)志,控制FIFO的選通,并且對(duì)外部設(shè)備提供了用戶專用接口,可以對(duì)許多通用總線接口進(jìn)行訪問,如ASIC,DSP和存儲(chǔ)器等。文獻(xiàn)[9,10]利用FX2的GPIF方式構(gòu)建了USB數(shù)據(jù)傳輸通道。Slave FIFO方式是將FX2的FIFO作為外部控制器(如FPGA或單片機(jī))的從屬FIFO,外部控制器可像普通FIFO操作一樣對(duì)FX2的FIFO進(jìn)行讀寫,而不考慮該包的大小,傳輸速率可明顯提高,文中FX2在Slave FIFO模式下工作。FX2有3種封裝形式:128引腳、100引腳和56引腳,這里選用FX2的56引腳的封裝形式。
FX2芯片在使用時(shí)必須先下載固件程序,固件程序主要負(fù)責(zé)完成芯片初始化,對(duì)芯片進(jìn)行必要的配置、處理設(shè)備請(qǐng)求、進(jìn)行數(shù)據(jù)傳輸?shù)认鄳?yīng)工作。用戶通過編寫適當(dāng)?shù)墓碳绦蛲瓿蓪?duì)FX2的設(shè)置。Cypress公司提供了一個(gè)固件程序開發(fā)框架可以大大簡化FX2芯片固件程序的開發(fā)難度。通過編寫用戶初始化函數(shù)TD_Init(),用戶可以規(guī)定各種端點(diǎn)資源的使用以及配置外圍接口的輸入/輸出等。其主要配置語句如下:
IFCONFIG = 0xCB;//FX2配置為異步Slave FIFO方式,內(nèi)部時(shí)鐘48 MHz
EP2CFG = 0xA0;//EP2,4×512 B,BULK,OUT
EP2FIFOCFG = 0x10; //EP2自動(dòng)OUT,8位
EP6CFG = 0xE0; //EP6,4×512 B,BULK,IN
EP6FIFOCFG = 0x08;//EP6自動(dòng)IN,8位
EP4CFG = 0x20;//EP4無效
EP8CFG = 0x60;//EP8無效
PINFLAGSAB = 0x8E;//FLAGA固定為EP6FF,F(xiàn)LAGB固定為EP2EF
PINFLAGSCD = 0x04;//FLAGC固定為EP2PF
PORTACFG |= 0x40;//PA7引腳配置為SLCS
FIFOPINPOLAR = 0x00;//所有引腳低電平有效
EP2FIFOPFH = 0x00;//FP2端點(diǎn)的整個(gè)FIFO大于等于1時(shí),
FP2的可編程標(biāo)志激活
EP2FIFOPFL = 0x01;
固件程序?qū)X2配置為異步Slave FIFO模式,總線寬度8位,在4個(gè)端點(diǎn)中,EP4和EP8未被使用,EP2和EP6的配置如表1所示。由于采用自動(dòng)輸入/輸出模式,主機(jī)和單片機(jī)通過旁路FX2的CPU直接連接,所有數(shù)據(jù)被直接通過FIFO管道提交,不需固件程序干預(yù)。在FX2的Slave FIFO模式下,F(xiàn)IFOADR[1∶0]引腳作為地址線選擇某個(gè)端點(diǎn),SLCS相當(dāng)于片選信號(hào),SLWR(寫)與單片機(jī)的WR引腳相連,SLRD(讀)和SLOE(輸出使能)與單片機(jī)的RD引腳相連。單片機(jī)通過訪問地址為0x00的外部存儲(chǔ)器的方式就可以實(shí)現(xiàn)對(duì)EP2的訪問,同理可訪問EP6端點(diǎn)。
單片機(jī)通過FX2的3個(gè)標(biāo)志引腳(FALGA,F(xiàn)LAGB,F(xiàn)LAGC)來全面掌握FX2的各端點(diǎn)FIFO的狀況。FLAGA定義為輸入端點(diǎn)EP6的滿標(biāo)志,當(dāng)輸入數(shù)據(jù)滿時(shí)該引腳為低電平;FLAGB被定義為輸出端點(diǎn)EP2的空標(biāo)志,當(dāng)主機(jī)傳來的數(shù)據(jù)被讀空時(shí)該引腳為低電平;FLAGC定義為當(dāng)EP2端點(diǎn)整個(gè)FIFO中的字節(jié)數(shù)大于等于1時(shí)為低電平。假設(shè)當(dāng)前主機(jī)沒有傳送命令,則FLAGC為高電平,當(dāng)主機(jī)發(fā)送命令后,EP2的字節(jié)數(shù)大于等于1,則FLAGC變?yōu)榈碗娖?。這樣在FALGC引腳上產(chǎn)生了一個(gè)下降沿,將此引腳與單片機(jī)的INT0引腳相連,則當(dāng)主機(jī)發(fā)送命令后單片機(jī)會(huì)觸發(fā)INT0中斷,在INT0的中斷處理程序中單片機(jī)讀取并執(zhí)行傳來的命令。
2 系統(tǒng)軟件設(shè)計(jì)
2.1 驅(qū)動(dòng)程序
在EZ-USB FX2開發(fā)包中,提供有通用的驅(qū)動(dòng)程序包,對(duì)該程序包稍加修改就可生成一個(gè)具有下載固件并完成設(shè)備重枚舉功能的設(shè)備驅(qū)動(dòng)程序。文獻(xiàn)[7]對(duì)驅(qū)動(dòng)程序的開發(fā)步驟有詳細(xì)的記述,這里采用的就是這個(gè)通用驅(qū)動(dòng)程序(GPD)。
2.2 主機(jī)應(yīng)用程序
主機(jī)應(yīng)用程序主要實(shí)現(xiàn)向設(shè)備發(fā)送命令數(shù)據(jù)包,接收設(shè)備傳送的數(shù)據(jù)并進(jìn)行顯示,主機(jī)應(yīng)用程序通過通用驅(qū)動(dòng)程序來完成對(duì)設(shè)備的控制和通信。應(yīng)用程序采用VC6.0編寫,與設(shè)備通信時(shí),首先通過調(diào)用Win32函數(shù)CreateFile()來取得訪問設(shè)備驅(qū)動(dòng)程序的句柄。該函數(shù)的語句實(shí)例如下:
HANDLE DeviceHandle;
DeviceHandle = CreateFile("\\\\.\\ezusb-0",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
用戶得到設(shè)備句柄后,就可以使用Win32函數(shù)DeviceIoControl()來向設(shè)備提交相應(yīng)的IOCTL控制碼,進(jìn)行讀寫和控制操作,完成相應(yīng)操作后應(yīng)用程序通過Win32函數(shù)CloseHandle()關(guān)閉設(shè)備句柄結(jié)束1次操作。以下是部分操作的代碼實(shí)例:
//讀操作
BOOL status = FLASE;//執(zhí)行結(jié)果
status = DeviceIoControl (g_hDevice,//輸入設(shè)備句柄
IOCTL_EZUSB_BULK_READ,//批量讀取數(shù)據(jù)的IOCTL控制碼
&bulkControl;,//輸入緩沖區(qū),指向BULK_TRANSFER_CONTROL
//結(jié)構(gòu)的指針,該結(jié)構(gòu)主要用來提供管道號(hào)
sizeof(BULK_TRANSFER_CONTROL),//輸入緩沖區(qū)長度
inBuffer,//保存讀取數(shù)據(jù)的緩沖區(qū)指針
FX2_BufferSize,//USB傳送數(shù)據(jù)的總長度,必須小于64 KB
&BytesReturned;,//實(shí)際返回的字節(jié)數(shù)
NULL);
//寫操作
status = DeviceIoControl (g_hDevice,//輸出設(shè)備句柄
IOCTL_EZUSB_BULK_WRITE,//批量寫數(shù)據(jù)的IOCTL控制碼
&bulkControl;,//輸入緩沖區(qū),指向BULK_TRANSFER_CONTROL結(jié)構(gòu)的指針
sizeof(BULK_TRANSFER_CONTROL),//輸入緩沖區(qū)長度
outBuffer,//保存要寫到設(shè)備的數(shù)據(jù)緩沖區(qū)指針
nBufferSize,//USB傳送數(shù)據(jù)的總長度,必須小于64 KB
&BytesReturned;,//實(shí)際返回的字節(jié)數(shù)
NULL);
//關(guān)閉設(shè)備
CloseHandle(g_hDevice);
應(yīng)用程序中有兩個(gè)線程,輔助線程為采樣線程,采樣線程的流程如圖2所示。
采樣線程負(fù)責(zé)從設(shè)備讀取數(shù)據(jù),并通過消息傳送機(jī)制與主線程通信;主線程負(fù)責(zé)采樣數(shù)據(jù)的顯示、存盤,向設(shè)備發(fā)送命令數(shù)據(jù)包,以及啟動(dòng)/停止采樣線程。當(dāng)執(zhí)行啟動(dòng)采樣命令時(shí),主線程先向設(shè)備發(fā)送啟動(dòng)命令數(shù)據(jù)包,然后啟動(dòng)采樣線程準(zhǔn)備接收數(shù)據(jù);當(dāng)執(zhí)行停止采樣命令時(shí),主線程先向設(shè)備發(fā)送停止命令數(shù)據(jù)包,然后停止采樣線程結(jié)束數(shù)據(jù)的接收。命令數(shù)據(jù)包大小為4 B,包含有命令字和采樣間隔時(shí)間參數(shù)等信息。
2.3 單片機(jī)程序
如上所述,單片機(jī)的INT0中斷一旦觸發(fā),表示主機(jī)有命令數(shù)據(jù)包傳送到。在INT0的中斷處理程序中,單片機(jī)讀取EP2端點(diǎn)的數(shù)據(jù)直到EP2端點(diǎn)為空(FLAGB為低電平),獲得上位機(jī)發(fā)送的命令數(shù)據(jù)包。若接收到啟動(dòng)命令,則根據(jù)命令數(shù)據(jù)包的采樣間隔時(shí)間參數(shù)來設(shè)置計(jì)數(shù)變量和定時(shí)器T0的初值并啟動(dòng)T0;若接收到的命令為停止命令,則停止定時(shí)器T0。在T0的中斷處理程序中若相應(yīng)的計(jì)數(shù)變量達(dá)到設(shè)定值,則完成A/D轉(zhuǎn)換、讀取數(shù)據(jù)以及將數(shù)據(jù)寫入EP6端點(diǎn)的操作。計(jì)數(shù)變量和T0的初值均根據(jù)命令數(shù)據(jù)包的參數(shù)進(jìn)行設(shè)置,因此設(shè)備的采樣間隔時(shí)間可以由主機(jī)程序進(jìn)行調(diào)整。
3 結(jié) 語
工作于Slave FIFO方式下的FX2相當(dāng)于在外部控制和主機(jī)之間構(gòu)造了一個(gè)的數(shù)據(jù)管道。通過對(duì)FX2的FIFO標(biāo)志引腳FLAGA,F(xiàn)ALGB,F(xiàn)LAGC的配置,使該芯片可以方便地與單片機(jī)進(jìn)行連接,單片機(jī)通過外部中斷獲知主機(jī)數(shù)據(jù)的到達(dá),通過其他標(biāo)志引腳獲得端點(diǎn)FIFO的信息,單片機(jī)和主機(jī)通信時(shí),感覺不到FX2的存在?;趩纹瑱C(jī)和FX2的數(shù)據(jù)采集系統(tǒng)擴(kuò)展方便、編程簡單、無需外接電源、采樣間隔時(shí)間由主機(jī)調(diào)整,實(shí)現(xiàn)了數(shù)據(jù)采集系統(tǒng)的小型化和便攜化,在現(xiàn)場信號(hào)采集,教學(xué)實(shí)驗(yàn),儀器儀表等領(lǐng)域具有一定的應(yīng)用前景。
參 考 文 獻(xiàn)
[1]張樹明,方昌林.基于USB總線的數(shù)據(jù)采集系統(tǒng)[J].機(jī)床與液壓,2005(12):132-134.
[2]周興,戴勝華.基于單片機(jī)的USB數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].儀器儀表標(biāo)準(zhǔn)化與計(jì)量,2006(1):25-27.
[3]石曉瑛,許智榜.基于AT90S8515和USB接口數(shù)據(jù)采集系統(tǒng)[J].微計(jì)算機(jī)信息,2005,21(10):90-92.
[4]叢偉波,楊勇,韓清凱.低功耗數(shù)據(jù)采集系統(tǒng)的USB接口設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005(1):25-27.
[5]張建鵬,解國明,李剛.基于ISP1581型接口電路的USB2.0接口設(shè)計(jì)[J].國外電子元器件,2005(9):7-10.
[6]李國厚.串行A/D轉(zhuǎn)換器TLC548/549及其應(yīng)用[J].儀表技術(shù),2001(3):35-36.
[7]錢峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[8]袁衛(wèi),趙小明,張建奇.Ports模式下CY7C68013和FPGA的數(shù)據(jù)通信[J].單片機(jī)與嵌入式應(yīng)用系統(tǒng),2006(7):49-51.
[9]賈寶金,王寶珠,李曉玲.基于USB的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與研究[J].現(xiàn)代電子技術(shù),2007,30(24):187-190.
[10]岳躍平,霍玉晶,何淑芳.基于USB2.0 技術(shù)的高速雙路數(shù)據(jù)采集系統(tǒng)[J].微計(jì)算機(jī)信息,2007,23(7):104-105.
作者簡介 李國柱 男,1976年出生,山西長治人,講師,碩士。研究方向微機(jī)控制。