利用FPGA实现外设通信接口之:利用FPGA实现USB 2.0通信接口
10.3??利用FPGA實現USB?2.0通信接口
10.3.1??USB?2.0接口的實現方式
利用FPGA來實現USB?2.0接口的方式一般有兩種,一是借助外圍的USB接口芯片,二是FPGA內部實現USB協議控制器,外部通過USB的PHY芯片來實現接口。
對于第一種方式,FPGA不需要實現USB通信協議,開發的風險小,而且性能穩定,因此被大部分設計者所采用。而第二種方式需要購買USB的IP核,門檻較高。如果自己開發基于FPGA的USB協議棧,風險高,而且兼容性和穩定性很難保證。
目前市場上的USB?2.0接口芯片廠家和型號比較多,其中Cypress?Semiconductor公司的EZ-USB?FX2(CY7C68013)是世界上第一款集成USB?2.0的微處理器,它集成了USB?2.0收發器、SIE(串行接口引擎)、增強的8051微控制器和可編程的外圍接口。
FX2這種獨創性結構可使數據傳輸率達到56MByte/s,即USB?2.0允許的最大帶寬。在FX2中,智能SIE可以硬件處理許多USB?1.1和USB?2.0協議,從而減少了開發時間、確保了USB的兼容性。
GPIF(General?Programmable?Interface)和主/從端點FIFO(8位或16位數據總線)為ATA、UTOPIA、EPP、PCMCIA和DSP等提供了簡單和無縫連接接口。
CY7C68013結構圖如圖10.4所示。FPGA與CY7C68013的電路連接關系可以參考本書2.2.11小節的內容。
圖10.4??CY7C68013?FX2結構示意圖
10.3.2??FX2接口芯片的Slave?FIFO傳輸模式
當FPGA與FX2芯片相連時,只需要利用FX2作為一個USB?2.0數據通道來實現與主機的高速通信。FPGA能夠提供滿足Slave?FIFO要求的傳輸時序,可以作為Slave?FIFO主控制器。`
Slave?FIFO傳輸的示意圖如圖10.5所示。
圖10.5??Slave?FIFO傳輸的示意圖
在這種方式下,FX2內嵌的8051固件的功能只是配置Slave?FIFO相關的寄存器以及控制FX2何時工作在Slave?FIFO模式下。一旦8051固件將相關的寄存器配置完畢,且使自身工作在Slave?FIFO模式下后,FPGA就可按照Slave?FIFO的傳輸時序,高速與主機進行通信,而在通信過程中不需要8051固件的參與。
在Slave?FIFO方式下,FPGA與FX2的連接信號圖如圖10.6所示。
下面是信號線的說明。
IFCLK:FX2輸出的時鐘,可作為通信的同步時鐘。
FLAGA、FLAGB、FLAGC、FLAGD:FX2輸出的FIFO狀態信息,如滿、空等。
SLCS:FIFO的片選信號,外部邏輯控制,當SLCS輸出高時,不可進行數據傳輸。
SLOE:FIFO輸出使能,外部邏輯控制,當SLOE無效時,數據線不輸出有效數據。
SLRD:FIFO讀信號,外部邏輯控制,同步讀時,FIFO指針在SLRD有效時的每個IFCLK的上升沿遞增,異步讀時,FIFO讀指針在SLRD的每個有效至無效的跳變沿時遞增。
SLWR:FIFO寫信號,外部邏輯控制,同步寫時,在SLWR有效時的每個IFCLK的上升沿時數據被寫入,FIFO指針遞增,異步寫時,在SLWR的每個有效至無效的跳變沿時數據被寫入,FIFO寫指針遞增。
PKTEND:包結束信號,外部邏輯控制,在正常情況下,外部邏輯向FX2的FIFO中寫數,當寫入FIFO端點的字節數等于FX2固件設定的包大小時,數據將自動被打成一包進行傳輸,但有時外部邏輯可能需要傳輸一個字節數小于FX2固件設定的包大小的包,這時,它只需在寫入一定數目的字節后,聲明此信號,此時FX2硬件不管外部邏輯寫入了多少字節,都自動將之打成一包進行傳輸。
FD[15:0]:數據線。
FIFOADR[1:0]:選擇4個FIFO端點的地址線,外部邏輯控制。
10.3.3??Slave?FIFO模式的典型操作時序
1.同步Slave?FIFO寫操作
同步Slave?FIFO寫的標準連接圖如圖10.7所示。
同步Slave?FIFO寫的標準時序如下。
·??IDLE:當寫事件發生時,進狀態1。
·??狀態1:使FIFOADR[1:0]指向IN?FIFO,進狀態2。
·??狀態2:如FIFO滿,在當前狀態等待,否則進狀態3。
·??狀態3:驅動數據到數據線上,使SLWR有效,持續一個IFCLK周期,進狀態4。
·??狀態4:如需傳輸更多的數,進狀態2,否則進狀態IDLE。
狀態跳轉示意圖如圖10.8所示。
????
圖10.7??同步Slave?FIFO寫的標準連接圖??? 圖10.8??同步Slave?FIFO寫的標準時序
假定FX2設定包大小為512字節,當FPGA向FIFO端點中寫入的數據達512字節時,FX2硬件自動將已寫入的512字節打成一包準備進行傳輸。這個動作就和在普通傳輸中,FX2固件向FIFO端點中寫入512字節后,把512這個數寫入EPxBC中一樣,只不過這個過程是由硬件自動完成的。在這里可以看出“FX2固件不參與數據傳輸過程”的含義了。外部邏輯只需按上面的時序圖所示的時序向FIFO端點中一個一個字節(或字)地寫數,寫到一定數量,FX2硬件自動將數據打包傳輸,這一切均不需固件的參與,由此實現高速數據傳輸。
2.同步Slave?FIFO讀操作
同步Slave?FIFO讀的標準連接圖如圖10.9所示。
同步Slave?FIFO讀的標準時序如下。
·??IDLE:當讀事件發生時,進狀態1。
·??狀態1:使FIFOADR[1:0]指向OUT?FIFO,進狀態2。
·??狀態2:使SLOE有效,如FIFO空,在當前狀態等待,否則進狀態3,
·??狀態3:從數據線上讀數,使SLRD有效,持續一個IFCLK周期,以遞增FIFO讀指針,進狀態4。
·??狀態4:如需傳輸更多的數,進狀態2,否則進狀態IDLE。
狀態跳轉示意圖如圖10.10所示。
3.異步Slave?FIFO寫操作
異步Slave?FIFO寫的標準連接圖如圖10.11所示。
? ? ? ? ? ? ? ??
?圖10.10??同步Slave?FIFO讀狀態跳轉示意圖???? 圖10.11??異步Slave?FIFO寫的標準連接圖
異步Slave?FIFO寫的標準時序如下。
·??IDLE:當寫事件發生時,進狀態1。
·??狀態1:使FIFOADR[1:0]指向IN?FIFO,進狀態2。
·??狀態2:如FIFO滿,在當前狀態等待,否則進狀態3。
·??狀態3:驅動數據到數據線上,使SLWR有效,再無效,以使FIFO寫指針遞增,進狀態4。
·??狀態4:如需傳輸更多的數,進狀態2,否則進狀態IDLE。
狀態跳轉示意圖如圖10.12所示。
4.異步Slave?FIFO讀操作
異步Slave?FIFO讀的標準連接如圖10.13所示。
?? ? ? ? ? ? ? ? ? ? ???
圖10.12??異步Slave?FIFO寫狀態跳轉示意圖?????????圖10.13??異步Slave?FIFO讀的標準連接圖
異步Slave?FIFO讀的標準時序如下。
·??IDLE:當讀事件發生時,進狀態1。
·??狀態1:使FIFOADR[1:0]指向OUT?FIFO,進狀態2。
·??狀態2:如FIFO空,在當前狀態等待,否則進狀態3。
·??狀態3:使SLOE有效,使SLRD有效,從數據線上讀數,再使SLRD無效,以遞增FIFO讀指針,再使SLOE無效,進狀態4。
·??狀態4:如需傳輸更多的數,進狀態2,否則進狀態IDLE。
狀態跳轉示意圖如圖10.14所示。
10.3.4??FX2的固件程序設計
在FX2芯片的固件程序設計中,最關鍵的就是系統初始化函數TD_Init(void),下面講解這個函數的部分代碼。
//時鐘設置
CPUCS?=?0x12;????????//?48MHz?CLKOUT?輸出使能?
IFCONFIG?=0x43;??????//?使用外部時鐘,IFCLK輸入不反向
SYNCDELAY;???????????//?同步延遲
EP2CFG=0xA0;?????????//?需要設定為4緩沖,每個緩沖區大小為512字節
SYNCDELAY;
EP4CFG=0x00;
SYNCDELAY;
EP6CFG=0xE0;
SYNCDELAY;
EP8CFG=0x00;
SYNCDELAY;
FIFORESET?=?0x80;???//?激活?NAK-ALL?避免競爭
SYNCDELAY;?
FIFORESET?=?0x02;???//?復位?FIFO?2
SYNCDELAY;?
FIFORESET?=?0x06;???//?復位?FIFO?6
SYNCDELAY;?????????????
FIFORESET?=?0x00;???//?取消激活?NAK-ALL
???????
SYNCDELAY;
PINFLAGSAB?=?0xE6;??//?FLAGA?設定為?EP6PF,?FLAGB?設定為?EP6FF
SYNCDELAY;
PINFLAGSCD?=?0xf8;??//?FLAGC?設定為?EP2EF,?FLAGD?保留
SYNCDELAY;
PORTACFG?|=??0x00;??//?SLCS有效
SYNCDELAY;
FIFOPINPOLAR?=?0x00;?//?所有信號低電平有效
SYNCDELAY;
10.3.5??USB?2.0接口的典型應用
由于USB?2.0接口的數據傳輸速度快,而且使用方便,因此被廣泛應用于各種便攜設備中。例如,基于USB?2.0接口的數據采集終端,可以將各種類型的數據采集到電腦主機中進行處理和結果顯示,其典型的結構如圖10.15所示。
圖10.15??基于USB?2.0接口的數據采集終端結構框圖
總結
以上是生活随笔為你收集整理的利用FPGA实现外设通信接口之:利用FPGA实现USB 2.0通信接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVC (USB Video Class
- 下一篇: USB3.0超高速接口应用方案