引言
通用串行總線(USB)具有快速,、雙向、大批量傳輸,、廉價以及可實現(xiàn)熱插拔等優(yōu)點,,Cypress公司的FX2系列芯片之一CY7C68013是最早符合USB2.0標準的微控制器,集成了符合USB2.0的收發(fā)器,、串行接口引擎(SIE),、增強型8051內(nèi)核以及可編程的外圍接口,實現(xiàn)基于USB2.0的接口數(shù)據(jù)通信,,CY7C68013可配置成3種不同的接口模式,;Ports(端口模式)、GPIF Master(可編程接口模式)和Slave FIFO(主從模式),,其中,,后兩種模式利用其內(nèi)部集成的可以獨立于微處理器而自動處理USB事務的硬件(USB核),數(shù)據(jù)的傳輸通過執(zhí)行USB本身的協(xié)議來完成,,微處理器可不參與數(shù)據(jù)傳輸,,從而使數(shù)據(jù)的傳輸速率大大地提高,同時也簡化了固件代碼的編寫,。后兩種方式由于克服了微處理器這個帶寬"瓶頸",,因而廣泛應用于大批量的數(shù)據(jù)傳輸,如圖像,、視頻等信號的采集。
而對前一種Ports(端口模式),,文獻中介紹較少,,作為一種最基本的數(shù)據(jù)傳輸方式,其數(shù)據(jù)傳輸主要由固件程序完成,,需要CPU的參與,,因此數(shù)據(jù)傳輸速率比較低,適用于傳輸速率要求不高的場合,,而且由于FX2內(nèi)部集成有8051內(nèi)核,,對一個剛從單片機的開發(fā)過渡到USB開發(fā)的工程人員來說,也不失是一種有效的數(shù)據(jù)傳輸方式,現(xiàn)以一個工程開發(fā)的實例來詳細說明一下在Ports模式下如何實現(xiàn)數(shù)據(jù)一雙向傳輸,。
1 設計要求
主機通過USB接口以4KB/s的速率分別向兩個通道發(fā)送數(shù)據(jù)序列,,并由外設的D/A轉換器完成數(shù)據(jù)的轉換,同時,,由外部的兩個A/D轉換器以400KB/s的采樣率完成數(shù)據(jù)的采集,,采集后的數(shù)字信號也經(jīng)USB接口傳送至主機存儲,其中,,USB接口芯片采用Cypress公司的CY7C68013,,FPGA采用Altera公司的EP1C6Q240C8,圖1為其數(shù)據(jù)的多路傳輸系統(tǒng)框圖,。
![]() |
2 USB 數(shù)據(jù)多路傳輸硬件
2.1 EZ-USB FX2 CY7C68013
EZ-USB FX2 CY7C68013支持USB2.0數(shù)據(jù)傳輸,,其內(nèi)部結構及功能在其他文獻已有詳細的介紹,現(xiàn)針對此芯片在本電路的作用進行簡要的說明,,在設計中主要利用CY7C68013的Ports接口模式完成多路數(shù)據(jù)的傳輸,,USB和FPGA之間數(shù)據(jù)和狀態(tài)的傳輸由CY7C68013的IOA接口完成,IOB接口中的IOB0-IOB2口線作為USB和FPGA之間的控制線,。CY7C68013內(nèi)部的EP2端口設置為512字節(jié)雙緩沖,、OUT、塊傳輸,,作為主機向外設發(fā)送數(shù)據(jù)的緩沖區(qū),;EP6端口設置為512字節(jié)雙緩沖,IN,、塊傳輸,,作為外設向數(shù)據(jù)傳送數(shù)據(jù)的緩沖區(qū)。
2.2 FPGA芯片EP1C6Q240C8
FPGA采用Altera公司的Cyclone 芯片EP1C6Q240C8,。在這里FPGA的作用有3個:其一,,給兩路D/A轉通道各分配兩個128×8位的RAM區(qū),作為從主機向外設發(fā)送數(shù)據(jù)的緩存,。其二,、給兩路A/D轉換通道各分配兩個512×8位的RAM區(qū),作為從外設向主機傳送數(shù)據(jù)的緩存,,由于兩路數(shù)據(jù)的傳輸和采集共用一個8位數(shù)據(jù)總線,,因此,數(shù)據(jù)總線要針對不同的接收和發(fā)送來回切換,,因而每個通道的兩路分別采用兩個RAM塊,,起到雙緩沖作為,以防傳輸時數(shù)據(jù)"溢出"的,。其三,,由于數(shù)據(jù)總線要針對不同通道來回切換,,控制切換的過程由狀態(tài)寄存器來完成,因此,,要在FPGA內(nèi)部設置一個狀態(tài)寄存器,,所設置的狀態(tài)寄存器僅包含兩位,分別標識兩個通道的數(shù)據(jù)RAM的"滿"或"空"的狀態(tài),,以確定當前應該為哪一個通道發(fā)送或接收數(shù)據(jù),。
3 通信協(xié)議的制定
采用CY7C68013的Ports模式實現(xiàn)數(shù)據(jù)通信,與FIFO和GPIF模式不同,,后兩種模式在數(shù)據(jù)傳輸方面主要由USB核完成,,所需的控制信號由CY7C68013自身來提供。而對于Ports模式,,控制信號沒有專用的口線,,那么就必須用其他通用的I/O接口來完成,在此,,采用IOB0-IOB2作為USB和FPGA之間的控制線,,由于自定義的3條線是通用口線,沒有實際的意義,,因此在USB和FPGA之間首先要制定兩者的通信協(xié)議,即給這3條口線賦以實際的功能,。
ALE(IOB0):例如ALE的上升沿,通過IOA端口向FPGA傳送控制指令,,例如,,當IOA=01H時,表示系統(tǒng)開始工作,,A/D和D/A轉換器開始啟動,。當IOA=88H時,表示轉換結束,,F(xiàn)PGA將不再接收或發(fā)送數(shù)據(jù),,當IOA=02H時,表示CY7C68013將讀取FPGA內(nèi)狀態(tài)寄存器的內(nèi)容,,由讀取兩狀態(tài)標志位的0或1,,來判斷兩個通道內(nèi)的4個數(shù)據(jù)緩沖器的"滿"或"空"狀態(tài),若D/A通道的任一個數(shù)據(jù)緩沖區(qū)為"空",則由FPGA向狀態(tài)寄存器的第一個狀態(tài)標志位內(nèi)填1,;否則填0,;同理,若A/D通道的任一個數(shù)據(jù)緩沖區(qū)為"滿",,則由FPGA向狀態(tài)寄存器的第二個狀態(tài)標志位內(nèi)填1;否則填0,;當IOA=03H時,,表示主機將通過USB向D/A通道發(fā)送轉換數(shù)據(jù),,每次發(fā)送256個字節(jié),前128字節(jié)為D/A轉換的1通道,,后128字節(jié)為2通道,,當IOA=04H時,表示主機將要接收由A/D通道傳送來的數(shù)據(jù),。
RD(IOB1):利用RD的上升沿通過IOA端口讀取D/A轉換器轉換來的數(shù)據(jù),。
WR(IOB2):利用WR的上升沿通過IOA端口向A/D轉換器發(fā)送由主機傳送來的數(shù)據(jù)。
4 軟件的實現(xiàn)
USB與FPGA在Ports模式下數(shù)據(jù)的傳輸,,由于是由CY7C68013內(nèi)部的CPU核來實現(xiàn)的,,因此,對固件程序的編寫顯得比較重要,,總的來說,,固件程序的編寫有兩種方式:一是由于CY7C68013的內(nèi)部集成有增強型8051內(nèi)核,對熟悉8051匯編語言的用戶來說,,可以直接利用會匯編語言編寫高效的固件代碼,;二是Cypress公司EZ-USB FX2系列配套有現(xiàn)成的固件程序框架函數(shù),用戶需要時,,只需添加相應的用戶程序即可,。當然,用戶程序中的數(shù)據(jù)通信的實現(xiàn)也就是如何完成通信協(xié)議的過程,。
在此,,采用后者來完成CY7C68013和FPGA的數(shù)據(jù)通信,實現(xiàn)數(shù)據(jù)通信功能的部分軟件代碼如下(以下代碼均可寫在框架函數(shù)void TD_Poll(void)內(nèi)):
5 總結
CY7C68013和FPGA的數(shù)據(jù)通信中,,采用基本的Ports接口模式,,利用自動指針方法,通過數(shù)字示波器的觀察,,完成1KB的傳送,,大約需要750μs。與另外兩種模式相比,,雖然數(shù)據(jù)傳輸?shù)乃俣容^低,,但作為一種數(shù)據(jù)傳輸模式,尤其對剛從單片機開發(fā)過渡到USB開發(fā)的工程人員來說,,也不失為一種有效的開發(fā)方式,。