1 引 言
USB支持主計算機與許多可同時訪問的外設之間進行數據交換,使外設的連接具有單一化、即插即用、熱插拔等特點,已成為個人筆記本電腦和臺式機的標準配置接口。Cypress公司的EZ-USB FX2是一款集成 USB2.0的微處理器,它集成了USB2.0收發器、SIE(串行接口引擎)、增強的8051微控 制器和可編程的外圍接口。每條指令占四個時鐘周期,在48M晶振下工作時,單指令周 期為83.3ns,執行速度遠快于標準的8051單片機。本文的數據傳輸模塊采用CY7C68013 高速芯片設計的USB接口可以實現外部的存儲測試電路數據的快速下載,并且上傳至計 算機保存,顯示,處理。這里介紹CY7C68013的GPIF接口功能及其在設計中的實現機理。
2 硬件連接設計
2.1系統連接框圖及硬件各部分功能
系統的連接框圖如下圖1所示:主要有計算機主機USB接口,程序存儲EEPROM,內置MCU的USB接口芯片,電平轉換部分組成。
硬件各部分功能:
設備接口:實現模塊與測試電路的連接;
電平轉換:單片機的輸出和工作電壓為3.3V的電壓值,而設備的電壓是3.3~5V之間,電平轉換器件實現電壓值的匹配;
USB總線控制器:采用CY7C68013接口芯片的GPI接口模式完成控制信號的發送和16bit寬度數據的讀取;
串行EEPROM:存儲單片機固件,并被下載到單片機。
2.2硬件部分工作過程
硬件工作過程:
數據傳輸中核心器件是CY7C68013控制器芯片,主要完成USB的事務處理和單片機的控制功能。系統采用總線供電模式,數據傳輸模塊連接到計算機后,上電復位后,USB功能設備以全速的模式進行設備的識別并枚舉。設計中將程序存儲到串行EEPROM中,主芯片首先檢測I2C總線上的EEPROM,判斷其首字節是0xC2,下載固件和USB的描述符標裝入到自身的RAM中執行,并且根據信息設置定義設備,完成了重枚舉。 CY7C68013包含8.5KB的片上RAM,可以用于“軟配置”,4KB的FIFO存儲器可以給4個端點共享。實現數據的高速讀取和傳輸,根據實際的需要,設計中配置了端點2采用三緩沖,使用3KB,端點4采用雙緩沖使用1KB。
采用GPIF主機模式,EZ-USB FX2由軟件編程輸出讀寫控制波形,FD[15:0]雙向數據總線12位與外部測試電路的靜態存儲器(SRAM)的相連,CTL[5:0]輸出可編程控制信號,如SRAM的讀寫選通信號等。數據在GPIF控制下讀入到CY7C68013后,在軟件的配置下,完成1024字節的最大封包,輸入計算機,由主機端的主控制器的串行接口引擎完成數據流串行化和解碼。
3 系統軟件設計
3.1GPIF接口模式
FX支持3種接口方式:端口、Slave FIFOs和可編程接口GPIF。
在“端口”模式下,所有I/O引腳都可作為8051的通用I/O口。在“從FIFO”模式下,外部邏輯或外部處理器直接與FX2端點FIFO相連。在這種模式下,GPIF 不被激活,這種模式下,外部主控端既可以是異步方式,也可以是同步方式,并可以為FX2 接口提供自己的獨立時鐘。“GPIF主控”接口模式使用PORTB 和PORTD構成通向四個FX2端點FIFO(EP2、EP4、EP6和EP8)的16位數據接口。GPIF 作為內部的主控制器與FIFO直接相連, 并產生用戶可編程的控制信號與外部接口進行通信。GPIF使用內部時鐘。用戶將波形文件程序存在內部RAM的程序存儲區中。
根據系統需要,設計中采用GPIF接口模式將CY7C68013設為FIFO READ和SINGLE READ兩種模式, 讓GPIF中的端點FIFO與USB通信中端點緩沖直接建立連接, 數據的傳送不再需要CPU 的參與。 根據外部測試電路的要求,適用于不同測試環境預設電路的CPLD編程信號,根據實際的測試信號的頻率采用不同的采樣頻率,設定不同的觸發電平,使用單次寫模式可以完成編程數據的輸出。針對的測試數據采用FIFO多次讀模式,實現數據的批量傳輸。設計中采用48M晶振,由于靜態存儲器的在使能信號(OE)的上升沿后推地址(Adr),而數據在總線上的保持時間至少需要85ns,因此在波形設計中數據有效時間應該為4個時鐘周期,才能夠滿足地址有效的要求。靜態存儲器讀操作時序圖如圖2所示。
3.2固件程序設計
固件是指存儲在USB接口芯片或微控器中的代碼,用于控制硬件系統運行,各種USB標準請求的處理,以及USB閑置模式的電源管理服務,實現主機與外設之間的通信和數據傳輸。主要是根據系統需求設計相應的程序框架圖。Cypress 公司為FX2 固件開發提供了一個固件庫和固件框架,都是在KeilC51集成開發環境下開發的,固件庫提供了一些常量、數據結構、函數來簡化用戶對芯片的使用。C 語言環境, 同時保留了匯編代碼高效、快速的特點,將代碼在KeilC51環境中進行編譯。編譯通過后,將固件代碼下載到USB單片機中,就可以實現GPIF多字節讀等操作。在程序起始時,固件架構會執行下列步驟:
(1)首先,設置所有的內部狀態變量。
(2)然后,調用用戶的初始設置函數TD_Init()。待返回后固件架構就會設置USB接口成為未配置的狀態,并且使能中斷。
(3)接下來,在1秒的間隔內開始重新設備列舉(ReNumerate)設備,并直到設置(SETUP)封包收到端點0為止。
(4)一旦SETUP封包被檢測到,固件架構就會啟動與PC主機合作的工作分配器。而這個工作分配器就會順序重復執行下列的工作:
①調用用戶函數TD_Poll()。
②判斷標準設備請求是否決定。如果已決定,它將解析所收到的命令請求并加以響應。
③判斷USB核心是否己經報告了USB中止(suspend)事件。
用戶需要編寫TD_Poll()中的代碼完成特定的功能,判斷USB設備枚舉的狀態決定每次出發FIFO波形文件的次數,數據短包的處理方式等,實現數據的讀取。
3.3 應用程序的設計
應用程序編寫的關鍵是如何實現從USB設備讀取指定數量的數據以及向其發送指定的數據。另外,還有向USB設備發送USB標準設備請求和特定的命令,包括廠商定義的命令和用戶自定義的命令。
大型的應用程序大部分是很多模塊組成, 這些模塊完成相對獨立的功能,協作來完成整個軟件系統的工作。部分模塊的功能較為通用, 在構造其它軟件系統時仍會被使用。測試系統的應用程序采用VisualBasic6.0編寫,具有界面友好,操作簡單的特點。
動態鏈接庫文件的使用,需要在應用程序的全局定義變量定義模塊中調用。dll文件, 應用程序會在其所在目錄和系統目錄下查找。dll。在聲明過程中需要注意數據類型的匹配問題。
BulkRead Lib "DLL68013.dll" (ByVal pipenum As Long, ByRef rec As Integer, ByVal length As Integer) As Integer
Public Declare Function BulkWrite Lib "DLL68013.dll" (ByVal pipenum As Long, ByRef send As Byte, ByVal length As Integer) As Long
Public Declare Function OpenDevice Lib "DLL68013.dll" () As Integer
設計中結合實際需要,主要操作由動態鏈接庫文件完成,應用程序的主要功能包括錯誤操作提示,接收由動態鏈接庫讀取的數據傳回主界面實現數據的格式轉換,數據的顯示、處理等。
利用Cypress公司的USB2.0專用接口芯片CY7C68013, 完成了采用GPIF模式的通用數據傳輸模塊的硬件與軟件設計。針對原有的人機界面需要,開發了動態鏈接庫,可以提供給不同語言編寫的主機端的應用程序使用。
在系統測試中,利用信號發生器產生輸入信號為正弦波,頻率10Hz,測試系統的采樣頻率125Ksps,通過系統電路采樣,存儲,數據通過傳輸模塊傳入計算機,根據采集數據恢復的信號與原始信號比較,失真較小,噪聲水平低,采集數據的有效位數達到12位,實驗結果表明,實際的傳輸速率120Mbps,滿足了測試系統的數據傳輸要求。與實驗測試系統聯合調試,實際采樣波形如圖3所示。
芯片的可編程特性提高了系統工作的可靠性, 數據不會丟失,便于數據的傳輸和處理。另外,USB設備具有“熱插拔”和即插即用的特性具有較高的實用價值,設計的USB數據傳輸模塊適合于舊測試系統接口的改造。
-
收發器
+關注
關注
10文章
3399瀏覽量
105869 -
計算機
+關注
關注
19文章
7427瀏覽量
87724 -
微處理器
+關注
關注
11文章
2247瀏覽量
82326
發布評論請先 登錄
相關推薦
評論