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