《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于EZ-USB FX2的實(shí)時(shí)數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)
基于EZ-USB FX2的實(shí)時(shí)數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)
來(lái)源:電子技術(shù)應(yīng)用2010年第9期
惠 蘭, 裴東興
中北大學(xué) 儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室, 山西 太原030051
摘要: 設(shè)計(jì)了一個(gè)以FPGA作為數(shù)據(jù)處理模塊,以CY7C68013作為接口芯片的數(shù)據(jù)采集系統(tǒng)。接口芯片CY7C68013工作在GPIF模式下,在數(shù)據(jù)的傳輸中起主控作用,利用FPGA以保證數(shù)據(jù)的正確性和穩(wěn)定性,使系統(tǒng)可以達(dá)到穩(wěn)定、實(shí)時(shí)、高速的數(shù)據(jù)傳輸。
中圖分類號(hào): TP274.2
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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í)時(shí)數(shù)據(jù)的采集以及顯示等都會(huì)涉及到PC機(jī)和下位機(jī)間的數(shù)據(jù)傳輸,而傳輸數(shù)據(jù)中的丟點(diǎn)問(wèn)題是實(shí)時(shí)數(shù)據(jù)采集中必須解決的問(wèn)題。傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)由于傳輸速度低或者安裝不方便等問(wèn)題已不能滿足科研和生產(chǎn)過(guò)程的需求。輸入的實(shí)時(shí)數(shù)據(jù)是帶有幀頭的8位串行數(shù)據(jù)流,直接與CY7C68013AGPIF(General programmable interface)接口對(duì)接不能保證數(shù)據(jù)完整不丟失,并且無(wú)法在數(shù)據(jù)中加入幀識(shí)別信息。在這種情況下采用FPGA完成此部分邏輯功能。通過(guò)FPGA對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行相應(yīng)的調(diào)整再交給CY7C68013A傳送到上位機(jī)中。
1 系統(tǒng)硬件電路設(shè)計(jì)
1.1  系統(tǒng)結(jié)構(gòu)和數(shù)據(jù)流程

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

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

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

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

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

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

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

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

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