《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于EZ-USB FX2的實時數(shù)據(jù)傳輸?shù)膶崿F(xiàn)
基于EZ-USB FX2的實時數(shù)據(jù)傳輸?shù)膶崿F(xiàn)
來源:電子技術(shù)應(yīng)用2010年第9期
惠 蘭, 裴東興
中北大學 儀器科學與動態(tài)測試教育部重點實驗室, 山西 太原030051
摘要: 設(shè)計了一個以FPGA作為數(shù)據(jù)處理模塊,以CY7C68013作為接口芯片的數(shù)據(jù)采集系統(tǒng)。接口芯片CY7C68013工作在GPIF模式下,在數(shù)據(jù)的傳輸中起主控作用,利用FPGA以保證數(shù)據(jù)的正確性和穩(wěn)定性,使系統(tǒng)可以達到穩(wěn)定、實時、高速的數(shù)據(jù)傳輸。
中圖分類號: TP274.2
文獻標識碼: A
文章編號: 0258-7998(2010)09-0112-03
Real-time data transmission based on EZ-USB FX2
HUI Lan, PEI Dong Xing
Key Laboratory of Instrumentation Science & Dynamic Measurement of the Ministry Education of China, North University of China, Taiyuan 030051,China
Abstract: The data acquisition system has been designed with FPGA as data processing modules, and CY7C68013 as interface chip of data acquisition system. The interface chip CY7C68013 works in GPIF mode. The data acquisition system ensures the correctness of FPGA, and the stability of the data system can achieve stability, real-time, high speed.
Key words : real-time transmission;data; CY7C68013A; GPIF

    實時數(shù)據(jù)的采集以及顯示等都會涉及到PC機和下位機間的數(shù)據(jù)傳輸,而傳輸數(shù)據(jù)中的丟點問題是實時數(shù)據(jù)采集中必須解決的問題。傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)由于傳輸速度低或者安裝不方便等問題已不能滿足科研和生產(chǎn)過程的需求。輸入的實時數(shù)據(jù)是帶有幀頭的8位串行數(shù)據(jù)流,直接與CY7C68013AGPIF(General programmable interface)接口對接不能保證數(shù)據(jù)完整不丟失,并且無法在數(shù)據(jù)中加入幀識別信息。在這種情況下采用FPGA完成此部分邏輯功能。通過FPGA對實時數(shù)據(jù)進行相應(yīng)的調(diào)整再交給CY7C68013A傳送到上位機中。
1 系統(tǒng)硬件電路設(shè)計
1.1  系統(tǒng)結(jié)構(gòu)和數(shù)據(jù)流程

    本系統(tǒng)采用FPGA xc2s50-144完成整個系統(tǒng)的數(shù)據(jù)采集的處理,采用具有微處理器的USB接口CY7C68013A,通過USB接口將FPGA處理后的數(shù)據(jù)實時地傳輸?shù)接嬎銠C上。當PC機發(fā)出數(shù)據(jù)采集、讀取數(shù)據(jù)等控制命令時,控制命令通過CY7C68013A傳送給FPGA,由FPGA啟動A/D芯片進行A/D轉(zhuǎn)換。A/D轉(zhuǎn)換后將串行數(shù)據(jù)流和時鐘發(fā)送到FPGA中,F(xiàn)PGA通過判斷幀頭截取有效數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)換成8位的并行數(shù)據(jù)并緩存至FPGA內(nèi)部設(shè)計的FIFO中,由上位機通過USB接口芯片CY7C68013A以GPIF主控模式將數(shù)據(jù)傳送至上位機中。系統(tǒng)總體設(shè)計圖如圖1所示。

1.2  USB接口芯片
    CY7C68013A是Cypress公司的FX2系列產(chǎn)品,可提供480 Mb/s的傳輸速率。CY7C68013A提供了一種獨特架構(gòu),使USB接口和應(yīng)用環(huán)境直接共享FIFO,而且微控制器可以不參與數(shù)據(jù)傳輸,但允許它以FIFO或RAM的方式訪問這些共享FIFO,CY7C68013A的內(nèi)部FIFO緩沖區(qū)中有四個端點,它們可以通過設(shè)置相應(yīng)的EPxFIFOCFG(x是端點號)寄存器被配置為2倍、3倍或4倍緩沖區(qū)。雙緩沖區(qū)可以允許一個數(shù)據(jù)包在被8051訪問的同時,另一個進行USB數(shù)據(jù)傳輸。3或4緩沖區(qū)則允許在2個或3個緩沖區(qū)被訪問的同時,由另一個進行USB數(shù)據(jù)傳輸。這樣就可以把數(shù)據(jù)包可用的時間延遲減至最小,從而增加帶寬的吞吐量。CY7C68013A共有三種工作模式:分別為普通端口模式、GPIF模式和從屬FIFO模式。這三種工作模式由寄存器選擇決定。本設(shè)計中采用GPIF主控模式,GPIF在連接到外部邏輯設(shè)備時,可充當“內(nèi)部”控制,可以作為CY7C68013A端點FIFO的內(nèi)部主控制器。
1.3 硬件連接圖
 使用GPIF方式對FIFO芯片進行讀寫工作并使用PORTB雙向FIFO數(shù)據(jù)線,使外圍電路像普通FIFO一樣對FX2中端點2、4、6、8的數(shù)據(jù)緩沖區(qū)進行讀寫。當CY7C68013A工作在GPIF模式時,由PC機上發(fā)出控制命令給USB,CY7C68013A提供FPGA的片選、讀數(shù)據(jù)時鐘等信號。接口連線圖如圖2所示。

2 軟件設(shè)計
2.1  固件程序的設(shè)計

 固件的作用是輔助硬件來完成預(yù)期的設(shè)備功能,固件主要工作如下:
   (1)寄存器初始化工作,按照需要設(shè)置特殊功能寄存器的初值;
   (2)輔助硬件完成設(shè)備的枚舉過程,對主機的設(shè)備請求作出適當?shù)捻憫?yīng);
   (3)完成中斷處理、數(shù)據(jù)接收和發(fā)送以及對外圍電路的控制。
   在固件程序中,按照FIFO的時序圖完成GPIF波形設(shè)計,并生成波形描述符文件GPIF.c供設(shè)備功能程序main.c調(diào)用。生成的GPIF.c會初始化波形設(shè)計用到的寄存器,包括配置接口的設(shè)計,在TD_Init()中初始化函數(shù),配置好使用的端點類型,傳輸數(shù)據(jù)包的大小。在TD_Poll()中設(shè)置好GPIF的讀數(shù)據(jù)傳輸,通過main.c中對TD_Poll()的重復(fù)調(diào)用,完成USB的大數(shù)據(jù)量傳輸。
2.2 GPIF波形圖
 根據(jù)FPGA編寫的時序,利用Cypress公司配置的GPIF Designer畫出相應(yīng)的時序圖,如圖3所示。

    在數(shù)據(jù)讀時序狀態(tài)設(shè)計中,在S3狀態(tài),讓讀使能REN低電平有效。在S4中判斷FPGA內(nèi)FIFO 的空標志是否有效,有效后開始進行FIFO的讀傳輸,OE用來控制數(shù)據(jù)出現(xiàn)在數(shù)據(jù)總線上的時間。數(shù)據(jù)總線在S5時拉高是數(shù)據(jù)有效(activate),GPIF按字節(jié)將數(shù)據(jù)讀到FIFO中,同時TC計數(shù)器會減一。在狀態(tài)6時,以計數(shù)器的值來判斷一幀數(shù)據(jù)是否完成傳輸。如果沒有完成,則不斷循環(huán),讀完所有數(shù)據(jù)為止;如果讀完了所有數(shù)據(jù)后,則不再經(jīng)過中間其他任何狀態(tài),直接跳到狀態(tài)7(IDLE),表示完成一幀數(shù)據(jù)的傳輸。設(shè)計中在S4、S6設(shè)定決策點。
2.3 USB驅(qū)動設(shè)計
    USB功能驅(qū)動程序采用Cypress公司的通用驅(qū)動程序ezusb.sys,ezusb.sys驅(qū)動的開發(fā)工具為DDK,驅(qū)動程序開發(fā)工作包括:開發(fā)環(huán)境設(shè)置(VC編譯環(huán)境)、驅(qū)動程序設(shè)計、安裝文件(INF文件)設(shè)計。驅(qū)動程序減少了USB設(shè)備硬件處理數(shù)據(jù)的細節(jié),為應(yīng)用程序訪問USB硬件設(shè)備提供相應(yīng)接口。
   用戶編寫應(yīng)用程序只要調(diào)用它提供的接口函數(shù)及其所需要傳遞的參數(shù)來實現(xiàn)所需的功能。應(yīng)用程序用CreateFile()函數(shù)打開設(shè)備并且創(chuàng)建與設(shè)備的連接,然后用DeviceIoControl()函數(shù)或ReadFile()與WriteFile()函數(shù)從驅(qū)動程序中讀寫數(shù)據(jù)和向驅(qū)動程序?qū)懭霐?shù)據(jù)。當應(yīng)用程序退出時,用CloseHandle()函數(shù)關(guān)閉設(shè)備。這一過程將產(chǎn)生對應(yīng)于此設(shè)備對象的IRP與驅(qū)動程序設(shè)備類成員函數(shù),如表1所示。

2.4 應(yīng)用程序設(shè)計
    應(yīng)用程序是系統(tǒng)與用戶的接口,它通過動態(tài)鏈接庫調(diào)用通用驅(qū)動程序完成對外設(shè)的控制和通信。本系統(tǒng)的應(yīng)用程序開發(fā)使用的是Visual Basic6.0中文版本。本系統(tǒng)的工作過程為:首先是查找設(shè)備打開設(shè)備句柄,然后調(diào)用動態(tài)鏈接庫發(fā)送控制命令啟動系統(tǒng),當檢測到設(shè)備后進行數(shù)據(jù)的讀取命令,調(diào)用動態(tài)鏈接庫的函數(shù)關(guān)閉設(shè)備句柄。系統(tǒng)的應(yīng)用程序界面如圖4所示。

3 系統(tǒng)整體檢測
3.1 FPGA邏輯正確性檢測

    利用FPGA內(nèi)部累加器模擬ADC轉(zhuǎn)換后的串行數(shù)據(jù)以及相應(yīng)的時鐘,利用Cypress公司提供的Control Panel 發(fā)出控制命令直接給接口芯片,并讀取FPGA內(nèi)部產(chǎn)生的數(shù)據(jù),觀察其中的數(shù)據(jù)與設(shè)定的FPGA中發(fā)出的數(shù)據(jù)是否相同,以驗證FPGA內(nèi)部邏輯的正確性。相應(yīng)地利用示波器監(jiān)測FPGA內(nèi)部的時鐘信號,驗證其正確性。
3.2 數(shù)據(jù)傳輸數(shù)據(jù)檢測
    數(shù)據(jù)傳輸檢測中增加FPGA內(nèi)部累加器產(chǎn)生的數(shù)據(jù)包的數(shù)量,采用Bus Hound 記錄總線狀態(tài)變化,在得到的結(jié)果中觀察Bus Hound中的數(shù)據(jù)形式并查看VB讀數(shù)軟件中的數(shù)據(jù)文件,觀察得到的數(shù)據(jù)文件數(shù)據(jù)總量以及大小都正確,再打開應(yīng)用程序中的數(shù)據(jù)文件所示的波形,從而驗證了數(shù)據(jù)傳輸?shù)恼_性。
4 本系統(tǒng)中對傳輸速度改進方面的分析
 本系統(tǒng)中主要需要體現(xiàn)數(shù)據(jù)的實時性傳輸,在數(shù)據(jù)的處理部分與USB部分提高數(shù)據(jù)傳輸速度。主要通過以下方面使速度得到提高:
    (1)在數(shù)據(jù)處理部分利用FPGA截取數(shù)據(jù)的有效部分,并將串行數(shù)據(jù)變成并行數(shù)據(jù),以利于數(shù)據(jù)更快、更準確的傳輸。
    (2)為了保證數(shù)據(jù)不丟失,在FPGA內(nèi)部增加內(nèi)部FIFO,使數(shù)據(jù)在提交的同時也可以傳輸。
    (3)在USB的固件部分,使用AUTO傳輸方式,數(shù)據(jù)直接經(jīng)過USB2.0核、FIFO、GPIF Master以及NandFlash這條高速路徑傳輸,而不經(jīng)過低速的8051核,從而可以達到較高數(shù)據(jù)傳輸速度。
    (4)在固件的端點設(shè)置中,使用多緩沖機制,通過改變EPxCFG配置寄存器中的BUF0、BUF1位的值,就可以設(shè)置緩沖數(shù)。
    (5)使用GPIF方式進行傳輸,在GPIF波形的延時,提高GPIF波形的執(zhí)行頻率,也可以提升讀取速度。
    在進行系統(tǒng)整體性能的測試中,發(fā)現(xiàn)如果加快FPGA的數(shù)據(jù)輸出速度,則在讀出的波形中會有部分丟包的現(xiàn)象,經(jīng)過分步重新測試,發(fā)現(xiàn)在FPGA的內(nèi)部FIFO中,如果寫時鐘與讀時鐘的差距太大,就會造成丟點或者錯點的現(xiàn)象,所以USB的GPIF產(chǎn)生的讀波形應(yīng)該與FPGA的寫入速度相平衡,整體重新進行調(diào)試后,滿足了實時顯示并且穩(wěn)定的條件。
    本文利用FPGA和USB接口芯片CY7C68013實現(xiàn)了采樣數(shù)據(jù)的高速傳輸。特別是在調(diào)試過程中為了保證數(shù)據(jù)的正確性,提出了適合于通用驅(qū)動程序的塊傳輸同步控制信號。在上下位機的協(xié)調(diào)控制下數(shù)據(jù)能夠高速有效地傳輸。多次試驗證明,此系統(tǒng)運行穩(wěn)定,能夠滿足工作環(huán)境復(fù)雜、傳輸速度要求高的場合。
參考文獻
[1]  EZ-USB FX2 technical reference manual version 2.0 [M/CD].Cypress Semionductor Corp data book,2001.
[2]  錢峰.EZ-USB FX2 單片機原理、編程及應(yīng)用[M].北京:北京航空航天大學出版社,2005.
[3]  時向衛(wèi).Win2000/XP USB 設(shè)備驅(qū)動程序研究與設(shè)計[J]. 計算機工程與設(shè)計,2008,29(21):5563-5564.
[4]  趙卉.基于USB接口的無線數(shù)據(jù)傳輸系統(tǒng)設(shè)計[J].微計算機信息,2008,24(8-2):107-108.
[5]  王偉.基于USB2.0 的高速數(shù)據(jù)采集與傳輸系統(tǒng)的研究[D].長春:吉林大學,2007.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。