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