文獻(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ù)采集,、處理和傳輸場合,。而在項(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)的功能,,簡化了固件程序的開發(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)多種場合下的寬帶要求,。
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ò)展性好,、操作簡單等優(yōu)點(diǎ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)志清除的語句,,但在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)比較簡單,。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)功能測試
主要測試系統(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].電子測量技術(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].中國傳媒大學(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.