一種基于CY7C68013的納米粒度
USB 2.0特點
本文引用地址:http://2s4d.com/article/201610/308762.htmUSB全稱是Universal Serial Bus,中文簡稱通用串行總線,是應用在計算機上的一種新型的接口技術。USB 最早于 1994 年底由Intel、IBM、Compad、DEC、NEC、Microsoft、Northern Telecom等7家公司聯(lián)合提出。其目的就是為了通過取代現(xiàn)有計算機接口,解決當前外部設備通信中存在的各種問題,同時通過簡化計算機與外圍設備的連接,從而更大程度上實現(xiàn)對計算機的擴展。
在USB產(chǎn)生之前,計算機接口技術已經(jīng)有一定程度的發(fā)展,已經(jīng)出現(xiàn)了一系列的通信接口,如RS 232、RS 485、ISA、PCI和并行接口等接口,這些老式的接口存在種類繁多、體積大、規(guī)范不統(tǒng)一、不支持熱插拔等缺陷,使用不方便,不適合現(xiàn)今接口通信技術的發(fā)展需求。因此,越來越多的設備都開始使用USB接口來實現(xiàn),如鼠標、USB鍵盤、MP3、數(shù)碼相機、打印機、印刷機等。在實際設計工作當中,也越來越多地采用了USB技術,如數(shù)據(jù)采集、圖像采集等。
USB接口芯片CY7C68013A
在實際電路中,我們使用的USB接口芯片是CY7C68013A,實現(xiàn)FPGA和PC機的通信。CY7C68013A是賽普拉斯公司的EZ-USB FX2LP系列芯片。這個系列的芯片是世界上第一個集成USB 2.0協(xié)議的微處理器,同時向下兼容USB 1.1。此兼容USB通信協(xié)議的處理器既可以作為普通處理器一樣對設備進行控制,又可以實現(xiàn)與上位機的通信,這樣設計的好處可以簡化硬件電路,降低成本。該芯片包括1個增強型8051、串行引擎(SIE)、16KB的RAM、4KB的FIFO、多組標準I/O口、數(shù)據(jù)總線、地址總線、1個USB 2.0 收發(fā)器及1個通用可編程接口。
EZ-USB FX2LP枚舉和重枚舉
每個USB設備都有自己獨有的VID與PID,不同的ID可用來區(qū)分不同的USB設備,這樣能夠避免不同USB產(chǎn)品造成混亂。USB芯片都有默認的VID、PID,但實際使用中我們需要定義自己的VID與PID,它們一般存儲在外接的EEPROM中,這個步驟是USB產(chǎn)品開發(fā)所必須經(jīng)歷的階段。
CY7C68013A芯片工作時程序與數(shù)據(jù)都是放在片內的RAM中的,當芯片上電后,固件程序與數(shù)據(jù)會自動下載到RAM中,當芯片掉電后,RAM 中的所有程序和數(shù)據(jù)都會消失。當芯片剛剛上電時,USB設備被按照缺省的設備進行配置,默認的固件代碼被加載到芯片的RAM中,這個自動配置USB設備的過程被稱為“枚舉”。
對EZ-USB來說,枚舉過程就是USB上電復位到加載固件前這段過程,此時USB設備地址號為默認的0號,枚舉完成后,驅動為cypress...eeprom...missing。然后加載固件,進行重枚舉,重枚舉完成后,顯示驅動為cypress...ez-usb...example或其他自定義設備。
固件系統(tǒng)框圖
整個系統(tǒng)的硬件框圖如圖1所示??梢钥闯鯱SB控制系統(tǒng)在整個系統(tǒng)中起到橋梁作用,用于連接上位機和外部設備。
圖1 系統(tǒng)硬件框圖
上位機發(fā)送控制指令給USB設備,信息處于下行狀態(tài),解碼后用來控制外圍設備執(zhí)行相應功能。上位機需要從外設獲得信息(如數(shù)據(jù)采集),信息處于上行狀態(tài),由USB設備負責控制外設并將數(shù)據(jù)傳送到上位機,由上位機分析、顯示。
本設計采用FPGA同步控制和SlaveFIFO接口模式。圖2為USB與FPGA模塊的硬件設計框圖。
圖2 USB芯片與FPGA接口連接框圖
USB芯片工作在Slave FIFO時,F(xiàn)PGA模塊和USB模塊直接接口,通過并行數(shù)據(jù)線和控制線實現(xiàn)數(shù)據(jù)交互。本設計采用27根信號線,分別是16根數(shù)據(jù)線 DATA[15:0],3根標志狀態(tài)線FLAGA、FLAGB和FLAGC,還有7根控制線IFCLK、USB_FIFOADR[1:0]、USB_SLCS、USB_SLOE、USB_SLWR和USB_SLRD。FPGA 模塊控制整個數(shù)據(jù)流。FPGA模塊在向USB模塊控制發(fā)送數(shù)據(jù)的時候,通過控制線FIFOADR[1:0]選擇輸出到USB模塊內 FIFO的地址線。圖3為FPGA模塊同步向USB寫數(shù)據(jù)時序圖。
圖3 FPGA模塊同步向USB寫數(shù)據(jù)時序圖
驅動程序
對于USB設備,Windows操作系統(tǒng)要想對其實現(xiàn)操作,必須借助于驅動程序來實現(xiàn)。主機和驅動程序直接通信,交換數(shù)據(jù),而驅動程序則和硬件資源進行通信,從而很好地控制USB設備。Cypress提供的開發(fā)環(huán)境中自帶了相關的驅動程序CyLoad.sys和CyUSB.sys,可以直接使用,縮短了系統(tǒng)的開發(fā)周期。其中CyLoad.sys用于主機向USB設備下載固件程序,CyUSB.sys實現(xiàn)主機和固件程序通信。為了在CyLoad.sys的幫助下實現(xiàn)固件的自動下載,固件程序CyLoad.HEX必須轉換為適合自動下載的CyLoad.spt文件,并且與CyLoad.sys一起放在CyLoad文件夾下,拷貝到系統(tǒng)system32目錄下。在安裝文件CyUSB.inf中設置的PID,VID必須和描述符中的一致,才能夠自動加載對應固件。
上位機界面設計
界面程序在VC++6.0環(huán)境下開發(fā),該環(huán)境具有編程簡單、快捷等的特點,便于開發(fā)可視化程序。Cypress公司為EZ_USB系列芯片提供了開發(fā)庫CyAPI.lib,使用其中的控制函數(shù)類,可以在VC++6.0環(huán)境下開發(fā)界面程序。建立MFC工程后,在工程中加入CyAPI.lib,并且在主文件頭部添加EZ-USB開發(fā)環(huán)境中提供的CyAPI.h頭文件。利用庫中的控制函數(shù),如VendorID、ProductID等,可以獲取USB設備的描述信息,同時也可以編寫相關的控制功能程序。
USB主機程序可以使用Cypress提供的CyAPI.lib庫來進行編程,CyAPI.lib對應Cypress提供的驅動程序CyUsb.sys,為其提供了簡單而且功能強大的C++編程接口,通過CyAPI.lib庫提供的函數(shù),可以對USB設備進行讀寫操作,這些函數(shù)主要是Open、Close和XferData。
界面中的CheckoutEquipment分類框中為USB描述相關信息,由主機通過標準請求獲得。上位機向FPGA發(fā)送命令后,通過接收按鍵,上位機可以接收到FPGA內部的數(shù)據(jù),并在編輯框中顯示出來。
圖4 數(shù)據(jù)接收界面
評論