高速USB接口設(shè)計(jì)
傳統(tǒng)的通信方式傳輸速度慢、抗干擾能力弱、安裝麻煩等原因嚴(yán)重阻礙了數(shù)據(jù)采集設(shè)備的發(fā)展,隨著電子信息技術(shù)的迅猛發(fā)展。計(jì)算機(jī)和外圍設(shè)備得到飛速發(fā)展和應(yīng)用。新一代通用串行總線,簡(jiǎn)稱(chēng)USB。具有傳輸線少、速度快、支持熱插拔以及易于擴(kuò)展等優(yōu)點(diǎn),很好解決了以上問(wèn)題,因此串行總線技術(shù)在計(jì)算機(jī)系統(tǒng)及通信設(shè)備中得到廣泛的應(yīng)用,為了滿足數(shù)據(jù)采集傳輸速度的要求.所以提出了高速USB接口的設(shè)計(jì)與實(shí)施。
系統(tǒng)硬件實(shí)現(xiàn)數(shù)據(jù)采集功能,并將采集的數(shù)據(jù)送至USB控制器,再通過(guò)USB接口將數(shù)據(jù)傳送給PC機(jī)。硬件設(shè)計(jì)主要包括USB2.O主控制器(CY7C68013)外圍電路設(shè)計(jì)、CY7C68013與FPGA連接等。系統(tǒng)軟件包括USB固件程序、設(shè)備的驅(qū)動(dòng)程序和用戶界面程序。USB固件程序在keilC中完成,實(shí)現(xiàn)對(duì)CY7C68013初始化,設(shè)備驅(qū)動(dòng)程序?yàn)橛脩艚缑娉绦蛱峁┸浖陀布脚_(tái)連接的通道,由DriverStudiO開(kāi)發(fā);用戶界面程序采用VB語(yǔ)言完成,在VB中調(diào)用驅(qū)動(dòng)函數(shù)中的句柄對(duì)硬件設(shè)備進(jìn)行操作,實(shí)現(xiàn)數(shù)據(jù)的接收、保存、顯示和打印功能。
2 USB控制器件CY7C68013內(nèi)部結(jié)構(gòu)
CY7C68013是Cypres公司生產(chǎn)EZ—USB FX2系列的一種。其內(nèi)部結(jié)構(gòu)如圖1所示。EZ-USB FX2系列的典型應(yīng)用是無(wú)線局域網(wǎng)、移動(dòng)硬盤(pán)、DSL調(diào)制解調(diào)器等接口類(lèi)設(shè)備。為滿足不同用戶的需要,Cypress公司為FX2提供了4種封裝形式:128引腳TQFP;100引腳QFN;56引腳QFN;56引腳SSOP。這些同種類(lèi)不同封裝的其內(nèi)部結(jié)構(gòu)相同,不同的封裝形式引出的外部引腳數(shù)量有所不同。EZ—USB FX2擁有獨(dú)特的結(jié)構(gòu),其串行接口引擎(SIE)負(fù)責(zé)完成諸如數(shù)據(jù)的編解碼、差錯(cuò)控制、位填充等與USB協(xié)議有關(guān)的功能,將嵌入式MCU(增強(qiáng)型8051)解放出來(lái),簡(jiǎn)化固件代碼的開(kāi)發(fā)。FX2中還包含一個(gè)通用可編程接口(GPIF),它支持所有通用的總線標(biāo)準(zhǔn),并可與外部ASIC、DSP等直接相連,對(duì)于EZ—USB FX系列需要微處理器(增強(qiáng)型8051)參與端點(diǎn)FIFO與外圍電路之間的數(shù)據(jù)傳輸,由于增強(qiáng)型8051本身的工作頻率較低,限制了傳輸速率的進(jìn)一步提高。雖然這種限制在12Mb/s的全速模式下并不明顯,但當(dāng)速率提升至480 Mb/s的高速模式時(shí),微處理器必將成為整個(gè)系統(tǒng)的帶寬瓶頸。為此,在EZ—USBFX2中,USB接口和外圍電路直接共享FIFO存儲(chǔ)器。增強(qiáng)型8051可不參與數(shù)據(jù)傳輸,但通過(guò)FIFO或RAM的方式訪問(wèn)所傳輸?shù)臄?shù)據(jù),這些FIF0與USB之間的傳輸以數(shù)據(jù)包的形式實(shí)現(xiàn),此處理被稱(chēng)為“量子FIF0”,它很好的解決了USB高速傳輸模式下的帶寬問(wèn)題。
EZ-USBFX2內(nèi)部包含3個(gè)固定的64字節(jié)端點(diǎn)緩沖區(qū)(0xE740~0x7FF)和4KB的可配置端點(diǎn)緩沖區(qū)空間(OxF000~OxFFFF)。3個(gè)64字節(jié)的緩沖區(qū)分別用于EPO,EPIIN和EPIOUT,4KB的可配置緩沖區(qū)用于EP2、EP4、EP6和EP8。其中,端點(diǎn)0默認(rèn)為控制端點(diǎn),其0UT和IN數(shù)據(jù)共享一塊存儲(chǔ)空間(OxE740~OxE77F),端點(diǎn)1支持塊傳輸、中斷傳輸和同步傳輸,其OUT數(shù)據(jù)占用緩沖區(qū)OxE780~0xE7BF,IN數(shù)據(jù)占用緩沖區(qū)OxE7C0~0xE7FFa端點(diǎn)。端點(diǎn)l僅能由EZ-USB FX2的固件訪問(wèn)端點(diǎn)2、端點(diǎn)4,端點(diǎn)6和端點(diǎn)8是大容量高帶寬的數(shù)據(jù)傳輸端點(diǎn),其無(wú)需8051固件干涉便可同外圍電路完成高速數(shù)據(jù)傳輸。這4個(gè)端點(diǎn)具有非常靈活的配置方式,適應(yīng)不同場(chǎng)合下的帶寬要求。其中雙重緩沖意味著USB讀寫(xiě)一個(gè)緩沖區(qū)的同時(shí),另一緩沖區(qū)可以與外圍電路進(jìn)行數(shù)據(jù)通信;三重緩沖增加了第3個(gè)數(shù)據(jù)緩沖區(qū),可供USB端或外圍電路端使用;四重緩沖增加了第4個(gè)緩沖區(qū)。多重緩沖結(jié)構(gòu)可在數(shù)據(jù)讀寫(xiě)雙方速度相似時(shí),有效提高USB帶寬的性能,平滑帶寬抖動(dòng),并減少雙方的互相等待時(shí)間。
3 硬件設(shè)計(jì)
USB控制器及其外圍電路組成系統(tǒng)的數(shù)據(jù)讀取和傳輸模塊,主要負(fù)責(zé)讀取數(shù)據(jù)及與PC機(jī)通信,從而完成系統(tǒng)功能。EZ—USBFX2和FPGA的從SlaveFIF0硬件連接如圖2所示。
EZ-USBFX2和FPGA之間的通信模式既可選擇從屬FIFO接口模式,也可選擇GPIF接口模式。通過(guò)配置IF—CONFIG[l:0]來(lái)選擇。當(dāng)為11時(shí),選擇從屬FIFO接口模式;當(dāng)為10時(shí),選擇GPIF接口模式。
當(dāng)EZ—USBFX2被設(shè)置為SlaveFIFO接口模式時(shí),USB數(shù)據(jù)在PC機(jī)和FPGA中傳輸,不需EZ-USBFX2的CPU參與,而經(jīng)EZ-USBFX2的內(nèi)部端點(diǎn)FIFO傳輸。對(duì)FPGA端點(diǎn)FIFO提供了FPGA經(jīng)16位數(shù)據(jù)總線FD連接EZ—USBFX2 FIFO,其數(shù)據(jù)總線是雙向,通過(guò)SLOE引腳控制輸出。FIFOADR[1:O]引腳選擇4個(gè)FIFO中的一個(gè)與FD總線連接。異步方式下,SLRD和SLWR是讀/寫(xiě)選通信號(hào)。同步方式下,SLRD和SLWER作為IFCLIK時(shí)鐘引腳使能信號(hào)。這里采用異步方式。
4 USB固件程序的設(shè)計(jì)
為了簡(jiǎn)化固件編程,Cypress提供了固件編程框架,在此基礎(chǔ)上只需要修改少量代碼即完成固件編程。固件編程框架完成了USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求和USB電源管理,并提供了任務(wù)調(diào)度函數(shù),在任務(wù)調(diào)度函數(shù)中編寫(xiě)少量代碼就可完成編程。只需要提供USB設(shè)備描述符表和外圍操作程序就可實(shí)現(xiàn)一
個(gè)功能完整的USB設(shè)備。
4.1 函數(shù)介紹
Void TD_Init(void):此函數(shù)主要完成EZ-USBFX2的初始化,在EZ—USBFX2再次枚舉和開(kāi)始任務(wù)分配前被調(diào)用,其目的是初始化各個(gè)端口以及各端口的先入先出緩沖區(qū)。[!--empirenews.page--]
Void TD_PoLL(void):此函數(shù)在設(shè)備運(yùn)行時(shí)被重復(fù)的調(diào)用,應(yīng)包括完成特別任務(wù)的代碼。在該函數(shù)返回前,優(yōu)先級(jí)高的任務(wù)可能己完成。若它返回值為假,EZ—USBFX2將不會(huì)影響設(shè)備請(qǐng)求和USB總線設(shè)備掛起事件。若需要大量的處理時(shí)間,EZ-USBFX2會(huì)通過(guò)多次調(diào)用TD_PoLL函數(shù)將時(shí)間分段。
BooL TD_suspend(void):此函數(shù)是在設(shè)備進(jìn)入掛起狀態(tài)前調(diào)用,在其中加入適當(dāng)?shù)拇a,配置設(shè)備的工作狀態(tài),可使設(shè)備處于低功耗狀態(tài)并返回真值??梢愿膭?dòng)TD_Suspend的程序代碼,使其返回為假,可使EZ-USBFX2不進(jìn)入掛起狀態(tài)。
Void TD_Resume (void):當(dāng)外部要求重新啟動(dòng)時(shí),設(shè)備會(huì)通過(guò)調(diào)用此函數(shù)對(duì)處理器重啟,即TD_SUspendO函數(shù)的逆操作。此時(shí),設(shè)備在正常電源下重新啟動(dòng)。設(shè)備請(qǐng)求函數(shù)主要完成對(duì)來(lái)自主機(jī)的命令和請(qǐng)求的處理工作。
4.2 固件主程序
fw.c是固件程序的主程序文件,負(fù)責(zé)處理主機(jī)發(fā)出的各種USB設(shè)備請(qǐng)求。該程序首先初始化所有的內(nèi)部狀態(tài)變量,然后調(diào)用TD_InitO函數(shù)初始化,并打開(kāi)中斷。然后,固件程序開(kāi)始列舉USB設(shè)備,直至在端點(diǎn)0上接收到SETUP包為止。一旦接受到令牌包,框架將開(kāi)始交互的任務(wù)調(diào)度。
整個(gè)系統(tǒng)實(shí)現(xiàn)過(guò)程中,設(shè)置一些重要寄存器。表1列出EZ—USBFX2為異步從屬FIFO自動(dòng)模式時(shí),需要配置的相關(guān)寄存器。
5 FPGA程序的設(shè)計(jì)
編程思路:由于CY7C68013設(shè)置為異步SlaveFIFO模式,根據(jù)異步FIFO讀寫(xiě)狀態(tài)圖,選擇狀態(tài)機(jī)來(lái)編寫(xiě)進(jìn)程。其狀態(tài)圖如圖3所示。
6 結(jié)語(yǔ)
以CY7C68013和FPGA接口為例描述了USB芯片的SlaveFIFO固件程序流程和設(shè)計(jì)思想,并且在項(xiàng)目中得到了實(shí)際應(yīng)用,并且數(shù)據(jù)連續(xù)傳輸無(wú)誤碼,無(wú)丟失。