基于CY7C68013A的USB控制系統(tǒng)設計研究
固件設計流程圖如圖3所示。本文引用地址:http://butianyuan.cn/article/162816.htm
用戶初始化設備部分放在TD_Init()子程序中,負責整個USB設備的初始化過程。在定向描述符之后,需要把所用中斷打開,并開啟8051全局中斷EA=1。由于EZ-USB設備啟動需要重列舉,因而需要通過設置和判斷USBCS寄存器的RENUM和DISCON位來模擬設備物理上的斷開和連接過程。用戶外圍設備控制功能的實現(xiàn)放在TD_Poll()子程序中,同時主循環(huán)中的SetupCommand()子程序用于接收、分析上位機的控制信號,響應上位機請求(標準請求和用戶自定義請求)。
3.4 上位機界面設計
為了能夠很好地控制USB設備,需要編寫上位機控制界面。界面程序在VC++6.O環(huán)境下開發(fā),該環(huán)境具有編程簡單、快捷等的特點,便于開發(fā)可視化程序。Cypress公司為EZ_USB系列芯片提供了開發(fā)庫CyAPI.lib,使用其中的控制函數(shù)類,可以在VC++6.0環(huán)境下開發(fā)界面程序。建立MFC(exe)工程后,在工程中加入CyAPI.lib,并且在主文件頭部添加EZ-USB開發(fā)環(huán)境中提供的CyAPI.h,cyioctl.h頭文件。利用庫中的控制函數(shù),如VendorID,ProductID等,可以獲取USB設備的描述信息,同時也可以編寫相關的控制功能程序。
3.5 系統(tǒng)設計中關鍵問題
(1)一個設備只能有一個設備描述符,可以有多個配置描述符,多個接口描述符,以及多個端點描述符。
(2)設備描述符中VID,PID要與驅動中的相一致,否則不能自動加載相應的固件程序。
(3)固件程序必須轉換為.spt格式,用于固件加載的驅動程序和固件程序應放在一個文件夾。
(4)端點0為缺省控制端點,其可設置最大數(shù)據(jù)包長度為64 B,在設備描述符中wMaxPacketSize字段描述。
(5)傳輸模式有中斷傳輸、塊傳輸、同步傳輸、控制傳輸四類,需根據(jù)自己設計需求選擇,同時注意最大數(shù)據(jù)包長度的設置。
4 驅動程序
對于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必須和描述符中的一致,使得能夠自動加載對應固件。
5 實驗
實驗系統(tǒng),采用CY7C68013A-56pin作為USB設備芯片,實現(xiàn)控制LED和讀取I/O數(shù)據(jù)功能。由于芯片采用3.3 V電壓供電,因此可以從主機USB口取電,經(jīng)LM317電壓調整芯片轉換為3.3 V,也可外接3.3 V電壓供電。在PD口接LED,顯示TD_Poll(void)實現(xiàn)的功能(燈亮/滅間隔300 ms),而PA口LED用于顯示判斷主機發(fā)送數(shù)據(jù)。PB口接高/低電平,用于主機讀取該口數(shù)據(jù),可以驗證主機接收數(shù)據(jù)的正確性。
評論