文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)02-0018-04
通用串行總線(USB)因具有傳輸速度快、支持熱插拔、易于擴(kuò)展以及即插即用等優(yōu)點(diǎn),已經(jīng)成為計(jì)算機(jī)與外部設(shè)備進(jìn)行數(shù)據(jù)交換的常用接口。USB控制器是一種集成了USB總線協(xié)議的微控制器,利用USB控制器,用戶可以在不深入了解USB協(xié)議的情況下設(shè)計(jì)完整的USB接口,這也促進(jìn)了USB接口的廣泛應(yīng)用[1]。
目前,軟件無線電技術(shù)越來越成熟,FPGA的應(yīng)用也更加廣泛。一塊配備了USB接口的FPGA數(shù)據(jù)處理模塊可以應(yīng)用到各種高速數(shù)據(jù)采集、處理和傳輸場(chǎng)合。而在項(xiàng)目研發(fā)過程中,隨時(shí)都需要對(duì)FPGA進(jìn)行編程調(diào)試?;诖耍疚难芯亢驮O(shè)計(jì)了一種可以同時(shí)實(shí)現(xiàn)對(duì)FPGA進(jìn)行配置和數(shù)據(jù)通信的USB接口。
1 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)總體框圖如圖1所示,系統(tǒng)主要包括以USB控制器為控制核心的USB接口設(shè)備、PC機(jī)上的應(yīng)用軟件和驅(qū)動(dòng)程序以及相關(guān)的固件程序[2]。系統(tǒng)工作原理如下:ISE軟件生成的FPGA配置文件由下載軟件下載到USB接口設(shè)備中,由CY7C68013A控制器實(shí)現(xiàn)對(duì)FPGA芯片的被動(dòng)配置;FPGA配置成功后由CY7C68013A芯片返回配置成功信息;計(jì)算機(jī)收到配置成功信息后就可以關(guān)閉下載軟件、打開接收軟件,正常接收FPGA向計(jì)算機(jī)發(fā)送的通信數(shù)據(jù)。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 CY7C68013A器件
系統(tǒng)中的USB控制器選擇CYPRESS公司EZ-USB FX2LP系列的CY7C68013A單片機(jī),它主要包括USB2.0收發(fā)器、智能串行接口引擎(SIE)、增強(qiáng)型8051微處理器、16 KB的RAM、4 KB的FIFO存儲(chǔ)器、地址和數(shù)據(jù)總線、I/O口、I2C控制器和通用可編程接口(GPIF)。
CY7C68013A的串行接口引擎負(fù)責(zé)完成獨(dú)立串行數(shù)據(jù)的編解碼、差錯(cuò)控制、位填充等與USB協(xié)議有關(guān)的功能,簡(jiǎn)化了固件程序的開發(fā);通用可編程接口支持所有通用的總線標(biāo)準(zhǔn),可與外部ASIC、DSP等直接連接。CY7C68013A芯片內(nèi)部包含3個(gè)固定的、64 B端點(diǎn)緩沖區(qū),分別是EP0、EP1IN和EP1OUT。其中,EP0是默認(rèn)的控制傳輸端點(diǎn),EP1IN和EP1OUT支持快傳輸、中斷傳輸和同步傳輸,它們只能由8051內(nèi)核的固件訪問;另外還有4 KB的可配置端點(diǎn)緩沖區(qū),分別是EP2、EP4、EP6和EP8,它們是大容量寬帶的數(shù)據(jù)傳輸端點(diǎn),無需8051固件干涉便可與外圍電路完成高速數(shù)據(jù)傳輸。這4個(gè)端點(diǎn)具有非常靈活的配置方式,可以適應(yīng)多種場(chǎng)合下的寬帶要求。
2.2 硬件電路
系統(tǒng)硬件電路如圖2所示。CY7C68013A控制器工作在從屬FIFO模式,I2C總線上連接一片EEPROM芯片(24LC64)。CY7C68013A的固件程序由EEPROM燒寫器燒寫到24LC64中,上電后自動(dòng)加載到內(nèi)部RAM中。FD是雙向的數(shù)據(jù)傳輸總線。FLAGA、FLAFB、FLAGC是FIFO標(biāo)志管腳,指示FIFO的空滿程度,保證數(shù)據(jù)的有效存取。FIFO_ADR[1:0]用于選擇與FD連接的4個(gè)端點(diǎn)緩沖區(qū)。SLRD和SLWR分別作為FIFO的讀寫選通信號(hào),SLOE用于使能數(shù)據(jù)總線FD的輸出。PKTEND是CY7C68013A向PC發(fā)送數(shù)據(jù)的控制端。IFCLK是48 MHz的接口時(shí)鐘,由芯片內(nèi)部產(chǎn)生,控制FPGA配置數(shù)據(jù)的的讀取。PE0與FPGA的PROG引腳相連,是FPGA初始化控制引腳;PE1與FPGA的RDWR引腳相連,是FPGA配置數(shù)據(jù)的讀寫選擇端;PE2與FPGA的DONE引腳相連,是FPGA配置成功指示信號(hào)。FPGA的配置模式管腳M[2:0]=011,將FPGA設(shè)置成從機(jī)串行模式[3-4]。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 CY7C68013A固件程序設(shè)計(jì)
CY7C68013A的固件程序是指在芯片內(nèi)部RAM運(yùn)行的程序代碼,它是USB接口設(shè)計(jì)的核心部分。CY7C68013A的固件程序有兩種加載方式:一種是在線下載方式,這種方式是將固件存儲(chǔ)在計(jì)算機(jī)中,在計(jì)算機(jī)上編寫一個(gè)能自動(dòng)下載以及設(shè)備從枚舉功能的固件下載驅(qū)動(dòng)程序,當(dāng)CY7C68013A連接上計(jì)算機(jī)后由驅(qū)動(dòng)程序下載固件;另一種方式是將固件程序存儲(chǔ)到片外的EEPROM芯片中,上電后自動(dòng)將固件加載到內(nèi)部RAM中。由于第二種方式有擴(kuò)展性好、操作簡(jiǎn)單等優(yōu)點(diǎn),本文采用的是第二種方式。為了簡(jiǎn)化固件編程,CYPRESS公司提供了固件編程框架,用戶只需在此框架下添加USB描述表、收發(fā)數(shù)據(jù)的通信代碼和相關(guān)的控制代碼就可以完成固件編程[1,5]。固件框架文件如表1所示。
用戶在編寫固件程序時(shí),只需對(duì)bulkllop.c和dscr.51兩個(gè)文件根據(jù)具體設(shè)計(jì)需求修改相應(yīng)的代碼。固件框架內(nèi)主要使用的函數(shù)如下:
TD_Init()函數(shù):主要完成CY7C68013A的初始化,它只會(huì)在USB啟動(dòng)后調(diào)用一次。函數(shù)里添加的初始化代碼包括CPU時(shí)鐘頻率設(shè)定、USB工作模式選擇、I/O口配置、端點(diǎn)選擇及傳輸方向設(shè)置、FIFO的配置等。
TD_Poll()函數(shù):是用戶調(diào)度程序,在設(shè)備運(yùn)行時(shí)被重復(fù)調(diào)用,編寫需要反復(fù)執(zhí)行的代碼。其主要功能是對(duì)各個(gè)端點(diǎn)的狀態(tài)進(jìn)行查詢,實(shí)現(xiàn)端點(diǎn)間數(shù)據(jù)的交互。
TD_suspend()函數(shù):在設(shè)備進(jìn)入掛起狀態(tài)前調(diào)用,在其中加入適當(dāng)?shù)拇a,配置設(shè)備的工作狀態(tài),可使設(shè)備處于低功耗狀態(tài)并返回真值。改動(dòng)TD_Suspend的程序代碼,使其返回為假,可使CY7C68013A不進(jìn)入掛起狀態(tài)。
DR_VendorCmnd()函數(shù):是自定義命令代碼的書寫處。fw.c固件會(huì)自動(dòng)調(diào)用函數(shù)里的代碼。
ISR_Ep0in() interrupt 0~I(xiàn)SR_Ep8inout() interrupt 0函數(shù):是當(dāng)使用端點(diǎn)中斷傳輸時(shí)的中斷代碼書寫處。
CY7C68013A的固件編程框架流程如圖3所示。
針對(duì)本文提出的采用CY7C68013A芯片設(shè)計(jì)USB接口,以實(shí)現(xiàn)對(duì)FPGA的配置和通信功能,其相關(guān)的設(shè)置如表2所示。
在TD_Init()中對(duì)端點(diǎn)的設(shè)置如下:
(1)EP2:用于傳輸FPGA的配置數(shù)據(jù)(XXX.bit文件)。一次傳輸數(shù)據(jù)的大小與CY7C68013A配置成USB1.1還是USB2.0有關(guān)。當(dāng)配置成USB1.1時(shí),必須保證一次只傳送64 B,不能超過該值;當(dāng)配置成USB2.0時(shí),一次最多可以傳送512 B,也可以只傳送64 B。在void ISR_Ep2in-
out(void) interrupt 0 中,將得到的數(shù)據(jù)對(duì)FPGA進(jìn)行配置。使用AUTO PTR可以節(jié)約時(shí)間,配置速率為6 Mb/s左右。
(2)EP4:用于傳送控制參數(shù),其設(shè)置方法與EP2相同。在void ISR_Ep4inout(void) interrupt 0中,將從應(yīng)用軟件傳來的控制命令(包含對(duì)FPGA的配置命令)傳給FPGA。
(3)EP6:用于采集數(shù)據(jù)。將其設(shè)置成SlaveFIFO模式,AUTOIN有效,IFCLK實(shí)現(xiàn)同步,16 bit數(shù)據(jù)寬度。在void ISR_Ep6inout(void) interrupt 0 中,將FIFO中的數(shù)據(jù)發(fā)往USB。AUTOIN=1,在數(shù)據(jù)傳輸中,自動(dòng)完成傳輸,不需要單片機(jī)的參與。
(4)EP8:用于傳送狀態(tài)數(shù)據(jù)。由于用了雙緩沖,在得到狀態(tài)數(shù)據(jù)時(shí),要多讀2次才能得到當(dāng)前的狀態(tài)信息。在void ISR_Ep8inout(void) interrupt 0 中,將從FPGA得到的狀態(tài)數(shù)據(jù)發(fā)往USB。
此外,在中斷程序中,要添加中斷標(biāo)志清除的語(yǔ)句,但在EP6的中斷中,由于設(shè)置了AUTOIN=1,則不需要。
3.2 設(shè)備驅(qū)動(dòng)程序
設(shè)備驅(qū)動(dòng)程序是用戶訪問設(shè)備的接口。EZ-USB 開發(fā)系統(tǒng)提供了裝載驅(qū)動(dòng)程序開發(fā)模板,利用模板開發(fā)設(shè)備驅(qū)動(dòng)比較簡(jiǎn)單。CYPRESS公司針對(duì)CY7C68013A提供了全新的驅(qū)動(dòng)程序CYUSB.SYS。安裝驅(qū)動(dòng)之前,必須先根據(jù)VID/PID正確編輯CYUSB.INF文件,在文件中添加自己的PID/VID代碼和設(shè)備描述;連接設(shè)備時(shí),將根據(jù)硬件上的PID/VID查找INF文件中對(duì)應(yīng)的驅(qū)動(dòng),如果找不到,則在設(shè)備管理器中將顯示“68013 EEPROM MISSING”的字樣。安裝驅(qū)動(dòng)時(shí),找到修改好的CYUSB.INF文件,驅(qū)動(dòng)即可被正確安裝,此時(shí)設(shè)備可以正常使用了[6]。
3.3 主機(jī)應(yīng)用程序
主機(jī)應(yīng)用程序包括對(duì)FPGA配置程序用的下載軟件和通信用的數(shù)據(jù)接收軟件。下載軟件用VC6.0進(jìn)行開發(fā), 它將ISE軟件開發(fā)的FPGA配置文件(.bit文件)通過CY7C68013A芯片下載到FPGA中實(shí)現(xiàn)對(duì)FPGA的配置,并返回配置狀態(tài)信息[7]。下面是下載軟件與CY7C68013A芯片的通信過程與格式:
(1)下載軟件對(duì)CY7C68013A芯片控制的命令發(fā)往pipeNum=1,結(jié)構(gòu)為:
struct tagUSBCardControl {
BYTE Control_Flag; //控制命令標(biāo)記,為常數(shù):0x81
BYTE FPGA_PROG; //FPGA的PROG管腳,進(jìn)行配置
//時(shí),應(yīng)用軟件先給出一個(gè)0,再給出一個(gè)1,
//然后往EP2寫入配置數(shù)據(jù),數(shù)據(jù)發(fā)送完成后,
//可以檢查狀態(tài)信息,判斷FPGA是否配置成功
BYTE Use[64-2]; //控制命令,F(xiàn)PGA的I/O地址從
//0x8002~0x803F;若是USB2.0,則Use[512-2]
//對(duì)應(yīng)的FPGA的I/O地址為0x8002~0x81FF
};
(2)從pipeNum=3得到CY7C68013A芯片的狀態(tài)信息,格式是:
truct tagUSBCardStatus {
BYTE FPGA_STATUS;//FPGA工作正常標(biāo)記,為0x81
BYTE IOE; //芯片IOE管腳的值,用于VC程序中
//判斷FPGA是否配置成功
BYTE Use[64-2]; //狀態(tài)信息,F(xiàn)PGA的I/O地址從
//0x8202~0x823F。USB2.0則為512也一樣
};
數(shù)據(jù)接收軟件可以根據(jù)實(shí)際需要進(jìn)行編寫,本設(shè)計(jì)采用通用的USB調(diào)試助手軟件接收FPGA發(fā)送的二進(jìn)制信息。
4 系統(tǒng)功能測(cè)試
主要測(cè)試系統(tǒng)實(shí)現(xiàn)對(duì)FPGA的配置和數(shù)據(jù)通信兩方面的功能。通過下載軟件的FPGA配置界面,將XC2VP4.bit配置文件下載到FPGA中。FPGA配置程序的主要功能除了完成相關(guān)的初始化配置之外,還向USB口交替發(fā)送16 bit高電平“1”和低電平“0”。配置成功后會(huì)返回“FPGA配置成功”信息。此時(shí)關(guān)閉下載軟件,打開USB數(shù)據(jù)接收軟件,接收數(shù)據(jù)如圖4所示,表明實(shí)驗(yàn)成功。
本文介紹了一種利用CYPRESS公司的USB控制器CY7C68013A芯片設(shè)計(jì)USB2.0接口的設(shè)計(jì)方案,并進(jìn)行了實(shí)驗(yàn)驗(yàn)證。由于方案同時(shí)可對(duì)FPGA進(jìn)行配置和數(shù)據(jù)通信,因此它可以為開發(fā)人員實(shí)時(shí)調(diào)試FPGA帶來方便,同時(shí)也方便系統(tǒng)在后期的更新?lián)Q代。
參考文獻(xiàn)
[1] 錢峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 王曉麗,龍兵,李力.基于FPGA的USB數(shù)字I/O設(shè)備設(shè)計(jì)[J].電子測(cè)量技術(shù),2011,34(10):57-59.
[3] 劉森,趙明生.通過USB接口實(shí)現(xiàn)FPGA的SelectMap配置[J].微計(jì)算機(jī)信息,2009,25(4-2):1-2,269.
[4] 張俊濤,王豫瑩.基于FPGA和USB2.0的高速數(shù)據(jù)采集系統(tǒng)[J].儀表技術(shù)與傳感器,2011(10):46-48.
[5] 馬俊濤,李振宇.SlaveFIFO模式下CY7C68013和FPGA的數(shù)據(jù)通信[J].中國(guó)傳媒大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,16(2):38-44.
[6] Airhand.EZ-USB 68013A開發(fā)指南[EB/OL].[2009-03-13].http://forum.eepw.com.cn/thread/148408/1.
[7] 葛亮.Visual C++從入門到實(shí)踐[M].北京:清華大學(xué)出版社,2009.