基于CY7C68013A的USB控制系統(tǒng)設(shè)計研究
固件設(shè)計流程圖如圖3所示。本文引用地址:http://m.butianyuan.cn/article/162816.htm
用戶初始化設(shè)備部分放在TD_Init()子程序中,負(fù)責(zé)整個USB設(shè)備的初始化過程。在定向描述符之后,需要把所用中斷打開,并開啟8051全局中斷EA=1。由于EZ-USB設(shè)備啟動需要重列舉,因而需要通過設(shè)置和判斷USBCS寄存器的RENUM和DISCON位來模擬設(shè)備物理上的斷開和連接過程。用戶外圍設(shè)備控制功能的實現(xiàn)放在TD_Poll()子程序中,同時主循環(huán)中的SetupCommand()子程序用于接收、分析上位機(jī)的控制信號,響應(yīng)上位機(jī)請求(標(biāo)準(zhǔn)請求和用戶自定義請求)。
3.4 上位機(jī)界面設(shè)計
為了能夠很好地控制USB設(shè)備,需要編寫上位機(jī)控制界面。界面程序在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設(shè)備的描述信息,同時也可以編寫相關(guān)的控制功能程序。
3.5 系統(tǒng)設(shè)計中關(guān)鍵問題
(1)一個設(shè)備只能有一個設(shè)備描述符,可以有多個配置描述符,多個接口描述符,以及多個端點描述符。
(2)設(shè)備描述符中VID,PID要與驅(qū)動中的相一致,否則不能自動加載相應(yīng)的固件程序。
(3)固件程序必須轉(zhuǎn)換為.spt格式,用于固件加載的驅(qū)動程序和固件程序應(yīng)放在一個文件夾。
(4)端點0為缺省控制端點,其可設(shè)置最大數(shù)據(jù)包長度為64 B,在設(shè)備描述符中wMaxPacketSize字段描述。
(5)傳輸模式有中斷傳輸、塊傳輸、同步傳輸、控制傳輸四類,需根據(jù)自己設(shè)計需求選擇,同時注意最大數(shù)據(jù)包長度的設(shè)置。
4 驅(qū)動程序
對于USB設(shè)備,Windows操作系統(tǒng)要想對其實現(xiàn)操作,必須借助于驅(qū)動程序來實現(xiàn)。主機(jī)和驅(qū)動程序直接通信,交換數(shù)據(jù),而驅(qū)動程序則和硬件資源進(jìn)行通信,從而很好地控制USB設(shè)備。Cypress提供的開發(fā)環(huán)境中自帶了相關(guān)的驅(qū)動程序CyLoad.sys和CyUSB.sys,可以直接使用,縮短了系統(tǒng)的開發(fā)周期。其中CyLoad.sys用于主機(jī)向USB設(shè)備下載固件程序,CyUSB.sys實現(xiàn)主機(jī)和固件程序通信。為了在CyLoad.sys的幫助下實現(xiàn)固件的自動下載,固件程序CyLoad.HEX必須轉(zhuǎn)換為適合自動下載的CyLoad.spt文件,并且與CyLoad.sys一起放在CyLoad文件夾下,拷貝到系統(tǒng)system32目錄下。在安裝文件CyUSB.inf中設(shè)置的PID,VID必須和描述符中的一致,使得能夠自動加載對應(yīng)固件。
5 實驗
實驗系統(tǒng),采用CY7C68013A-56pin作為USB設(shè)備芯片,實現(xiàn)控制LED和讀取I/O數(shù)據(jù)功能。由于芯片采用3.3 V電壓供電,因此可以從主機(jī)USB口取電,經(jīng)LM317電壓調(diào)整芯片轉(zhuǎn)換為3.3 V,也可外接3.3 V電壓供電。在PD口接LED,顯示TD_Poll(void)實現(xiàn)的功能(燈亮/滅間隔300 ms),而PA口LED用于顯示判斷主機(jī)發(fā)送數(shù)據(jù)。PB口接高/低電平,用于主機(jī)讀取該口數(shù)據(jù),可以驗證主機(jī)接收數(shù)據(jù)的正確性。
評論