摘 要:以EZ-USB FX2作為USB接口芯片設計一種數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)應用EZ-USB FX2芯片構建單片機和主機的數(shù)據(jù)管道,接口符合USB2.0協(xié)議。詳細介紹該系統(tǒng)的硬件組成和軟件設計,包括FX2的固件設計和主機用戶程序。EZ-USB FX2芯片工作在從屬FIFO方式下,通過適當?shù)呐渲每膳c單片機方便地進行連接,單片機可以像訪問外部存儲器一樣訪問FX2的端點。主機應用程序通過USB接口向設備發(fā)送相應的命令來控制采樣過程。該系統(tǒng)硬件擴展方便、編程簡單。
關鍵詞:FX2;Slave FIFO;USB;數(shù)據(jù)采集
中圖分類號:TP334 文獻標識碼:B 文章編號: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)和科學技術研究中,常利用PC或工控機對各種數(shù)據(jù)進行采集,以獲得所需要的控制信息和實驗數(shù)據(jù)。傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)多以ISA,EISA或PCI插卡的形式完成數(shù)據(jù)傳輸,這種方式存在安裝麻煩,受計算機插槽數(shù)量、地址、中斷資源限制,可擴展性差等缺點[1]。由于通用串行總線(Universal Serial Bus,USB)具有自動被系統(tǒng)識別,自動安裝驅(qū)動程序、自行進行系統(tǒng)配置,以及支持不同速率的同步和異步傳輸方式,支持熱插拔和即插即用(Plug and Play,PNP)等優(yōu)點,已逐漸成為現(xiàn)代數(shù)據(jù)傳輸?shù)陌l(fā)展趨勢。
目前實現(xiàn)USB數(shù)據(jù)傳送多采用專用的USB接口芯片,文獻[1,2]采用的PDIUSBD12可支持USB1.1協(xié)議,文獻[3]采用的接口芯片為USB100也僅支持USB1.1協(xié)議,文獻[4]采用CP2102符合USB2.0協(xié)議,其通用的驅(qū)動程序可將設備作為虛擬的COM端口設備進行操作,文獻[5]采用Philips公司ISP1581芯片作為USB2.0的接口芯片。這里采用Cypress公司的CY7C68013作為USB接口芯片,設計實現(xiàn)了基于單片機和USB2.0的數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)可實現(xiàn)單通道模擬信號的采集,主機應用程序負責啟動和停止采樣,采樣間隔時間由主機應用程序設置調(diào)整,采樣數(shù)據(jù)傳給主機應用程序顯示并保存。
1 系統(tǒng)硬件設計
1.1 系統(tǒng)硬件組成
整個系統(tǒng)的硬件結構如圖1所示。AT89C52為主控單片機,負責控制A/D轉(zhuǎn)換、上傳采集數(shù)據(jù)、接收并執(zhí)行主機的命令。CY7C68013為USB接口芯片。A/D轉(zhuǎn)換芯片采用TI公司生產(chǎn)的TLC549,AD780是一款高精度參考電壓芯片,可為TLC549提供2.5 V或者3.0 V的參考電壓。系統(tǒng)+5 V電源由主機的USB接口提供,CY7C68013所需的電源為+3.3 V,由+5 V電源接穩(wěn)壓芯片AP1117提供,圖中沒有畫出。
1.2 TLC549
TLC549[6]是以8位開關電容逐次逼近A/D轉(zhuǎn)換器為基礎而構造的CMOS A/D轉(zhuǎn)換器,將其設計成能通過三態(tài)輸出與微處理器或外圍設備串行接口。TLC549用輸入/輸出時鐘(I/O CLOCK)和芯片選擇(CS)輸入作數(shù)據(jù)控制,轉(zhuǎn)換結果由 DATAOUT 引腳輸出。I/O CLOCK 端的最高頻率可達1.1 MHz。TLC-549片內(nèi)系統(tǒng)時鐘工作在4 MHz(不需要外部時鐘)。片內(nèi)系統(tǒng)時鐘使內(nèi)部器件的操作獨立于串行輸入/輸出時序并允許TLC549像許多軟件和硬件所要求的那樣工作。I/O CLOCK和內(nèi)部系統(tǒng)時鐘可以實現(xiàn)高速數(shù)據(jù)傳送,使得TLC549可實現(xiàn)40 kHz的采樣頻率。TLC549具有通用控制邏輯及自動工作或在微處理器控制下工作的片內(nèi)采樣/保持電路,差分高阻抗基準電壓輸入端,易于實現(xiàn)比例轉(zhuǎn)換的高速轉(zhuǎn)換器,定標及隔離電路。整個開關電容逐次逼近轉(zhuǎn)換器電路的設計允許在小于17 μs的時間內(nèi),以最大誤差±0.5為最低有效位的精度實現(xiàn)轉(zhuǎn)換。

1.3 CY7C68013及其固件程序
EZ-USB FX2系列芯片CY7C68013是業(yè)界第一個支持USB2.0,同時向下兼容USB1.1規(guī)范的單片機,為描述方便以下簡稱該芯片為FX2。FX2支持全速傳輸(12 Mb/s)和高速傳輸(480 Mb/s),該芯片將USB2.0收發(fā)器、串行接口引擎SIE、增強的8051內(nèi)核、GPIF等集成于一體。FX2內(nèi)含4 KB的端點緩沖區(qū)FIFO,可以被配置為具有不同大小緩沖區(qū)的IN或OUT端點(EP2,EP4,EP6,EP8),具有USB協(xié)議所規(guī)定的4種傳輸方式,即控制方式、中斷方式、批量傳輸、和同步傳輸方式[7]。Cypress公司為FX2提供了完善的軟件開發(fā)工具包,降低了開難度,加快了開發(fā)進度。
FX2可以工作在3種不同的模式下完成USB數(shù)據(jù)的傳輸,即Ports模式、GPIF模式和Slave FIFO模式。Ports模式[8]下其USB數(shù)據(jù)的傳輸主要在FX2的8051內(nèi)核參與下完成,數(shù)據(jù)傳輸通過執(zhí)行指令實現(xiàn),因此數(shù)據(jù)的傳輸率比較低,對大批量數(shù)據(jù)傳輸一般采用后兩種方式。GPIF方式,稱為通用可編程接口方式,在此模式下,F(xiàn)X2的FIFO是由內(nèi)部的GPIF控制的,F(xiàn)X2利用由軟件編程輸出讀寫控制波形讀取FIFO標志,控制FIFO的選通,并且對外部設備提供了用戶專用接口,可以對許多通用總線接口進行訪問,如ASIC,DSP和存儲器等。文獻[9,10]利用FX2的GPIF方式構建了USB數(shù)據(jù)傳輸通道。Slave FIFO方式是將FX2的FIFO作為外部控制器(如FPGA或單片機)的從屬FIFO,外部控制器可像普通FIFO操作一樣對FX2的FIFO進行讀寫,而不考慮該包的大小,傳輸速率可明顯提高,文中FX2在Slave FIFO模式下工作。FX2有3種封裝形式:128引腳、100引腳和56引腳,這里選用FX2的56引腳的封裝形式。
FX2芯片在使用時必須先下載固件程序,固件程序主要負責完成芯片初始化,對芯片進行必要的配置、處理設備請求、進行數(shù)據(jù)傳輸?shù)认鄳ぷ?。用戶通過編寫適當?shù)墓碳绦蛲瓿蓪X2的設置。Cypress公司提供了一個固件程序開發(fā)框架可以大大簡化FX2芯片固件程序的開發(fā)難度。通過編寫用戶初始化函數(shù)TD_Init(),用戶可以規(guī)定各種端點資源的使用以及配置外圍接口的輸入/輸出等。其主要配置語句如下:
IFCONFIG = 0xCB;//FX2配置為異步Slave FIFO方式,內(nèi)部時鐘48 MHz
EP2CFG = 0xA0;//EP2,4×512 B,BULK,OUT
EP2FIFOCFG = 0x10; //EP2自動OUT,8位
EP6CFG = 0xE0; //EP6,4×512 B,BULK,IN
EP6FIFOCFG = 0x08;//EP6自動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端點的整個FIFO大于等于1時,
FP2的可編程標志激活
EP2FIFOPFL = 0x01;
固件程序?qū)X2配置為異步Slave FIFO模式,總線寬度8位,在4個端點中,EP4和EP8未被使用,EP2和EP6的配置如表1所示。由于采用自動輸入/輸出模式,主機和單片機通過旁路FX2的CPU直接連接,所有數(shù)據(jù)被直接通過FIFO管道提交,不需固件程序干預。在FX2的Slave FIFO模式下,F(xiàn)IFOADR[1∶0]引腳作為地址線選擇某個端點,SLCS相當于片選信號,SLWR(寫)與單片機的WR引腳相連,SLRD(讀)和SLOE(輸出使能)與單片機的RD引腳相連。單片機通過訪問地址為0x00的外部存儲器的方式就可以實現(xiàn)對EP2的訪問,同理可訪問EP6端點。

單片機通過FX2的3個標志引腳(FALGA,F(xiàn)LAGB,F(xiàn)LAGC)來全面掌握FX2的各端點FIFO的狀況。FLAGA定義為輸入端點EP6的滿標志,當輸入數(shù)據(jù)滿時該引腳為低電平;FLAGB被定義為輸出端點EP2的空標志,當主機傳來的數(shù)據(jù)被讀空時該引腳為低電平;FLAGC定義為當EP2端點整個FIFO中的字節(jié)數(shù)大于等于1時為低電平。假設當前主機沒有傳送命令,則FLAGC為高電平,當主機發(fā)送命令后,EP2的字節(jié)數(shù)大于等于1,則FLAGC變?yōu)榈碗娖健_@樣在FALGC引腳上產(chǎn)生了一個下降沿,將此引腳與單片機的INT0引腳相連,則當主機發(fā)送命令后單片機會觸發(fā)INT0中斷,在INT0的中斷處理程序中單片機讀取并執(zhí)行傳來的命令。
2 系統(tǒng)軟件設計
2.1 驅(qū)動程序
在EZ-USB FX2開發(fā)包中,提供有通用的驅(qū)動程序包,對該程序包稍加修改就可生成一個具有下載固件并完成設備重枚舉功能的設備驅(qū)動程序。文獻[7]對驅(qū)動程序的開發(fā)步驟有詳細的記述,這里采用的就是這個通用驅(qū)動程序(GPD)。
2.2 主機應用程序
主機應用程序主要實現(xiàn)向設備發(fā)送命令數(shù)據(jù)包,接收設備傳送的數(shù)據(jù)并進行顯示,主機應用程序通過通用驅(qū)動程序來完成對設備的控制和通信。應用程序采用VC6.0編寫,與設備通信時,首先通過調(diào)用Win32函數(shù)CreateFile()來取得訪問設備驅(qū)動程序的句柄。該函數(shù)的語句實例如下:
HANDLE DeviceHandle;
DeviceHandle = CreateFile("\\\\.\\ezusb-0",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
用戶得到設備句柄后,就可以使用Win32函數(shù)DeviceIoControl()來向設備提交相應的IOCTL控制碼,進行讀寫和控制操作,完成相應操作后應用程序通過Win32函數(shù)CloseHandle()關閉設備句柄結束1次操作。以下是部分操作的代碼實例:
//讀操作
BOOL status = FLASE;//執(zhí)行結果
status = DeviceIoControl (g_hDevice,//輸入設備句柄
IOCTL_EZUSB_BULK_READ,//批量讀取數(shù)據(jù)的IOCTL控制碼
&bulkControl;,//輸入緩沖區(qū),指向BULK_TRANSFER_CONTROL
//結構的指針,該結構主要用來提供管道號
sizeof(BULK_TRANSFER_CONTROL),//輸入緩沖區(qū)長度
inBuffer,//保存讀取數(shù)據(jù)的緩沖區(qū)指針
FX2_BufferSize,//USB傳送數(shù)據(jù)的總長度,必須小于64 KB
&BytesReturned;,//實際返回的字節(jié)數(shù)
NULL);
//寫操作
status = DeviceIoControl (g_hDevice,//輸出設備句柄
IOCTL_EZUSB_BULK_WRITE,//批量寫數(shù)據(jù)的IOCTL控制碼
&bulkControl;,//輸入緩沖區(qū),指向BULK_TRANSFER_CONTROL結構的指針
sizeof(BULK_TRANSFER_CONTROL),//輸入緩沖區(qū)長度
outBuffer,//保存要寫到設備的數(shù)據(jù)緩沖區(qū)指針
nBufferSize,//USB傳送數(shù)據(jù)的總長度,必須小于64 KB
&BytesReturned;,//實際返回的字節(jié)數(shù)
NULL);
//關閉設備
CloseHandle(g_hDevice);
應用程序中有兩個線程,輔助線程為采樣線程,采樣線程的流程如圖2所示。

采樣線程負責從設備讀取數(shù)據(jù),并通過消息傳送機制與主線程通信;主線程負責采樣數(shù)據(jù)的顯示、存盤,向設備發(fā)送命令數(shù)據(jù)包,以及啟動/停止采樣線程。當執(zhí)行啟動采樣命令時,主線程先向設備發(fā)送啟動命令數(shù)據(jù)包,然后啟動采樣線程準備接收數(shù)據(jù);當執(zhí)行停止采樣命令時,主線程先向設備發(fā)送停止命令數(shù)據(jù)包,然后停止采樣線程結束數(shù)據(jù)的接收。命令數(shù)據(jù)包大小為4 B,包含有命令字和采樣間隔時間參數(shù)等信息。
2.3 單片機程序
如上所述,單片機的INT0中斷一旦觸發(fā),表示主機有命令數(shù)據(jù)包傳送到。在INT0的中斷處理程序中,單片機讀取EP2端點的數(shù)據(jù)直到EP2端點為空(FLAGB為低電平),獲得上位機發(fā)送的命令數(shù)據(jù)包。若接收到啟動命令,則根據(jù)命令數(shù)據(jù)包的采樣間隔時間參數(shù)來設置計數(shù)變量和定時器T0的初值并啟動T0;若接收到的命令為停止命令,則停止定時器T0。在T0的中斷處理程序中若相應的計數(shù)變量達到設定值,則完成A/D轉(zhuǎn)換、讀取數(shù)據(jù)以及將數(shù)據(jù)寫入EP6端點的操作。計數(shù)變量和T0的初值均根據(jù)命令數(shù)據(jù)包的參數(shù)進行設置,因此設備的采樣間隔時間可以由主機程序進行調(diào)整。
3 結 語
工作于Slave FIFO方式下的FX2相當于在外部控制和主機之間構造了一個的數(shù)據(jù)管道。通過對FX2的FIFO標志引腳FLAGA,F(xiàn)ALGB,F(xiàn)LAGC的配置,使該芯片可以方便地與單片機進行連接,單片機通過外部中斷獲知主機數(shù)據(jù)的到達,通過其他標志引腳獲得端點FIFO的信息,單片機和主機通信時,感覺不到FX2的存在。基于單片機和FX2的數(shù)據(jù)采集系統(tǒng)擴展方便、編程簡單、無需外接電源、采樣間隔時間由主機調(diào)整,實現(xiàn)了數(shù)據(jù)采集系統(tǒng)的小型化和便攜化,在現(xiàn)場信號采集,教學實驗,儀器儀表等領域具有一定的應用前景。
參 考 文 獻
[1]張樹明,方昌林.基于USB總線的數(shù)據(jù)采集系統(tǒng)[J].機床與液壓,2005(12):132-134.
[2]周興,戴勝華.基于單片機的USB數(shù)據(jù)采集系統(tǒng)設計[J].儀器儀表標準化與計量,2006(1):25-27.
[3]石曉瑛,許智榜.基于AT90S8515和USB接口數(shù)據(jù)采集系統(tǒng)[J].微計算機信息,2005,21(10):90-92.
[4]叢偉波,楊勇,韓清凱.低功耗數(shù)據(jù)采集系統(tǒng)的USB接口設計[J].單片機與嵌入式系統(tǒng)應用,2005(1):25-27.
[5]張建鵬,解國明,李剛.基于ISP1581型接口電路的USB2.0接口設計[J].國外電子元器件,2005(9):7-10.
[6]李國厚.串行A/D轉(zhuǎn)換器TLC548/549及其應用[J].儀表技術,2001(3):35-36.
[7]錢峰.EZ-USB FX2單片機原理、編程及應用[M].北京:北京航空航天大學出版社,2006.
[8]袁衛(wèi),趙小明,張建奇.Ports模式下CY7C68013和FPGA的數(shù)據(jù)通信[J].單片機與嵌入式應用系統(tǒng),2006(7):49-51.
[9]賈寶金,王寶珠,李曉玲.基于USB的數(shù)據(jù)采集系統(tǒng)的設計與研究[J].現(xiàn)代電子技術,2007,30(24):187-190.
[10]岳躍平,霍玉晶,何淑芳.基于USB2.0 技術的高速雙路數(shù)據(jù)采集系統(tǒng)[J].微計算機信息,2007,23(7):104-105.
作者簡介 李國柱 男,1976年出生,山西長治人,講師,碩士。研究方向微機控制。