摘 要:隨著通信技術(shù)的發(fā)展,通用串行總線(xiàn)作為一種新型接口技術(shù)得到廣泛應(yīng)用,它使得計(jì)算機(jī)與外部設(shè)備的連接十分方便。首先介紹USB 2.0特點(diǎn),并給出了利用CY7C68013A設(shè)計(jì)控制系統(tǒng)的總體方案,同時(shí)對(duì)系統(tǒng)固件功能和驅(qū)動(dòng)程序設(shè)計(jì)做了詳細(xì)討論,并提出系統(tǒng)設(shè)計(jì)中需要注意的一些關(guān)鍵性問(wèn)題??刂葡到y(tǒng)固件程序采用C語(yǔ)言編寫(xiě),上位機(jī)界面在VC++6.0環(huán)境下開(kāi)發(fā)。實(shí)驗(yàn)表明該系統(tǒng)運(yùn)行良好。
關(guān)鍵詞:CY7C68013A; 通用串行總線(xiàn); VC++6.0; 固件; 上位機(jī)
中圖分類(lèi)號(hào):TP368.1 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)13-0190-04
Design of USB Control System Based on CY7C68013A
ZHAO Tie-jun
(Equipment Power Department, China Coal Beijing Coal Mining Machinery Co. Ltd., Beijing 102400, China)
Abstract: With the increasing development of the communication technology, the universal serial bus (USB) as a new interface technology that makes the connection of PCs with peripheral equipments very simple has been extensively adopted. The feature of USB2.0 is introduced firstly, and then the overall plan for designing the control system by using CY7C68013A is presented. The function of the system firmware and the design of drive program are discussed in detail. The key issues which should be taken more attention during the system design are proposed. The control system firmware is programmed with C language. The control interface on PC is developed under the VC++6.0 development environment. The experiment indicates that the whole system runs perfectly well.
Keywords: CY7C68013A; USB; VC6.0; firmware; PC
0 引 言
通用串行總線(xiàn) (Universal Serial Bus,USB)作為計(jì)算機(jī)上的新型接口技術(shù),越來(lái)越受到人們的青睞。與以前的RS 232,RS 485,ISA,PCI和并行接口等接口相比,USB避免了接口體積大、接口規(guī)范不統(tǒng)一、不支持熱插拔等缺陷,具有使計(jì)算機(jī)與外部設(shè)備連接十分方便的優(yōu)點(diǎn)[1-2]。目前,很多設(shè)備都開(kāi)始使用USB接口來(lái)實(shí)現(xiàn),如鼠標(biāo)、鍵盤(pán)、打印機(jī)等。在實(shí)際設(shè)計(jì)工作當(dāng)中,也越來(lái)越多地采用了USB技術(shù),如數(shù)據(jù)采集等[3-4]。USB的設(shè)計(jì)和應(yīng)用已經(jīng)成為現(xiàn)代電子設(shè)計(jì)中一個(gè)非常重要的部分。
1 USB 2.0特點(diǎn)
USB是一種高效、快速、價(jià)格低廉、體積小的新型串行通信接口,其最大的特點(diǎn)是支持熱插拔,可以在不重新啟動(dòng)計(jì)算機(jī)的情況下直接將USB外部設(shè)備連接到計(jì)算機(jī)并開(kāi)始通信。
USB具有以下主要特點(diǎn)[2]:
(1) 節(jié)省系統(tǒng)資源。在計(jì)算機(jī)中,系統(tǒng)為USB主控制器分配一根中斷控制線(xiàn)和一些輸入/輸出地址,USB再為外部設(shè)備分配惟一的地址。
(2)可以提供電源。計(jì)算機(jī)上的USB接口可以向外部設(shè)備提供一定的電力支持,其輸出電流最小值為100 mA,最大值為500 mA,輸出電壓為5 V。
(3) 良好的兼容性。USB規(guī)范已經(jīng)有USB 1.0,USB 1.1,USB 2.0,無(wú)線(xiàn)USB等多個(gè)版本的協(xié)議,這些協(xié)議都有很好的向下兼容性。
(4) 共享式接口。USB采用“菊花鏈”式的連接方式,同時(shí)支持多個(gè)設(shè)備的連接,一個(gè)USB主控制器最多可以連接126個(gè)外部設(shè)備。
2 CY7C68013A的主要特點(diǎn)
CY7C68013A是Cypress公司的EZ-USB FX2LP系列低功耗版本單片機(jī),具有和8051兼容的CPU和指令系統(tǒng),同時(shí)包括USB接口和完整的USB 2.0協(xié)議引擎,并且提供了完善的固件及主機(jī)程序開(kāi)發(fā)包。該單片機(jī)的CPU采用的是增強(qiáng)型8051內(nèi)核,比標(biāo)準(zhǔn)的8051的速度快,硬件資源更為豐富,功能更強(qiáng)大。主要具有以下特點(diǎn)[5-6]:
(1) 具有第二個(gè)數(shù)據(jù)指針;
(2) 具有第二個(gè)USATRT;
(3) I2C總線(xiàn)接口;
(4) 8個(gè)額外的中斷(INT2~INT6,WAKEUP,T2,USART1);
(5) CPU時(shí)鐘可以運(yùn)行在12 MHz,24 MHz,48 MHz。
3 控制系統(tǒng)設(shè)計(jì)
基于USB的控制系統(tǒng)設(shè)計(jì)主要包含兩個(gè)方面的內(nèi)容,分別為固件程序的開(kāi)發(fā)和上位機(jī)(主機(jī))控制界面的設(shè)計(jì)。CY7C68013A芯片采用的是一種軟配置模式,即程序和數(shù)據(jù)都存放在內(nèi)部RAM中,并從RAM中開(kāi)始執(zhí)行。
3.1 啟動(dòng)模式的選擇
EZ-USB在沒(méi)有固件的情況下列舉為一個(gè)缺省的USB設(shè)備,并且將其固件和描述符等下載到EZ-USB后,開(kāi)始執(zhí)行固件程序,此時(shí)模擬一個(gè)物理上的斷開(kāi)重新連接過(guò)程[6-7]。在列舉為一個(gè)USB設(shè)備時(shí),根據(jù)芯片有沒(méi)有連接E2PROM,以及E2PROM中第一個(gè)字節(jié)值的不同,其處理方式有很多。主要有:不連接E2PROM的缺省設(shè)備列舉、C0加載、C2加載等啟動(dòng)方式。在此系統(tǒng)的設(shè)計(jì)過(guò)程中,采用第一種方式,即芯片沒(méi)有連接任何片外存儲(chǔ)器,USB的描述符以及VID,PID和DID等均由芯片內(nèi)置的邏輯提供,然后根據(jù)驅(qū)動(dòng)程序中提供的VID,PID和DID把主機(jī)上對(duì)應(yīng)的固件程序下載到片內(nèi)的RAM中,并執(zhí)行固件代碼。該方式具有硬件連接簡(jiǎn)單,節(jié)省器件等特點(diǎn)。
3.2 硬件系統(tǒng)框圖
整個(gè)系統(tǒng)的硬件框圖如圖1所示。可以看出USB控制系統(tǒng)在整個(gè)系統(tǒng)中起到橋梁作用,用于連接上位機(jī)和外部設(shè)備。
圖1 系統(tǒng)硬件框圖
上位機(jī)發(fā)送控制指令給USB設(shè)備,信息處于下行狀態(tài),解碼后用來(lái)控制外圍設(shè)備執(zhí)行相應(yīng)功能。上位機(jī)需要從外設(shè)獲得信息(如數(shù)據(jù)采集),信息處于上行狀態(tài),由USB設(shè)備負(fù)責(zé)控制外設(shè)并將數(shù)據(jù)傳送到上位機(jī),由上位機(jī)分析、顯示。
3.3 固件程序設(shè)計(jì)
在固件中,主要實(shí)現(xiàn)芯片外圍設(shè)備的控制,以及對(duì)USB設(shè)備的功能描述等任務(wù),同時(shí)負(fù)責(zé)與上位機(jī)通信,響應(yīng)上位機(jī)的標(biāo)準(zhǔn)請(qǐng)求和自定義請(qǐng)求。
描述符主要是讓上位機(jī)了解USB功能設(shè)備的基本配置信息和能力,如端點(diǎn)、接口等。在此主要使用標(biāo)準(zhǔn)描述符來(lái)說(shuō)明USB設(shè)備,如設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符、設(shè)備限定描述符等。在該設(shè)備中,這些描述符的層次結(jié)構(gòu)如圖2所示。
圖2 描述符層次圖
系統(tǒng)中使用了2個(gè)配置描述符,分別為高速配置和全速配置,每個(gè)配置使用1個(gè)接口,并對(duì)應(yīng)1個(gè)接口描述符,每個(gè)接口應(yīng)用了4個(gè)端點(diǎn),對(duì)應(yīng)4個(gè)端點(diǎn)描述符。同時(shí)端點(diǎn)配置為塊傳輸模式,2、4端點(diǎn)為OUT,6、8端點(diǎn)為IN,最大數(shù)據(jù)包長(zhǎng)度為512 B,上位機(jī)通過(guò)0端點(diǎn)來(lái)操作、控制USB設(shè)備。設(shè)備描述符中VID=0x04B4,PID=0x1304,用于指示設(shè)備供應(yīng)商和產(chǎn)品信息,并用于上電時(shí)幫助主機(jī)加載合適的驅(qū)動(dòng)程序,進(jìn)而下載相應(yīng)的固件程序。固件中對(duì)標(biāo)準(zhǔn)請(qǐng)求的響應(yīng)部分,主要是讓上位機(jī)能夠?qū)γ枋龇M(jìn)行讀取和寫(xiě)操作。自定義請(qǐng)求響應(yīng)主要實(shí)現(xiàn)上位機(jī)發(fā)送控制命令,來(lái)使能USB功能設(shè)備、以及執(zhí)行相應(yīng)的功能的目的,如DR_SendData,DR_ ReadData。
固件設(shè)計(jì)流程圖如圖3所示。
圖3 固件設(shè)計(jì)流程圖
用戶(hù)初始化設(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ò)程。用戶(hù)外圍設(shè)備控制功能的實(shí)現(xiàn)放在TD_Poll()子程序中,同時(shí)主循環(huán)中的SetupCommand()子程序用于接收、分析上位機(jī)的控制信號(hào),響應(yīng)上位機(jī)請(qǐng)求(標(biāo)準(zhǔn)請(qǐng)求和用戶(hù)自定義請(qǐng)求)。
3.4 上位機(jī)界面設(shè)計(jì)
為了能夠很好地控制USB設(shè)備,需要編寫(xiě)上位機(jī)控制界面。界面程序在VC++6.0環(huán)境下開(kāi)發(fā),該環(huán)境具有編程簡(jiǎn)單、快捷等的特點(diǎn),便于開(kāi)發(fā)可視化程序[8-9]。Cypress公司為EZ-USB系列芯片提供了開(kāi)發(fā)庫(kù)CyAPI.lib,使用其中的控制函數(shù)類(lèi),可以在VC++6.0環(huán)境下開(kāi)發(fā)界面程序[10]。建立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) 傳輸模式有中斷傳輸、塊傳輸、同步傳輸、控制傳輸四類(lèi),需根據(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ù)功能。
由于芯片采用33 V電壓供電,因此可以從主機(jī)USB口取電,經(jīng)LM317電壓調(diào)整芯片轉(zhuǎn)換為33 V,也可外接33 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ù)的正確性。
初始化子程序:
void TD_Init(void)
{
BREAKPT = ~bmBPEN;
OED=0xFF;//設(shè)置PD口為輸出
}
外設(shè)功能子程序:
void TD_Poll(void)
{
IOD=0x00; //D口輸出低電平
EZUSB_Delay(300);
IOD=0xFF;// D口輸出高電平
EZUSB_Delay(300);
}
自定義請(qǐng)求響應(yīng)發(fā)送數(shù)據(jù)子程序:
BOOL DR_SendData(void)
{
EP0BUF[0]=0xB1;//發(fā)送數(shù)據(jù)自定義請(qǐng)求碼
EP0BCH=0;
EP0BCL=2;
EZUSB_Delay(100);
OEA=0xFF;//PA口為輸出
IOA=EP0BUF[1];
EP0CS |= bmHSNAK;
return(TRUE);
}
自定義請(qǐng)求響應(yīng)接收數(shù)據(jù)子程序:
BOOL DR_ReadData(void)
{
OEB=0x00;//PB口為輸入
EP0BUF[0]=0xB2;//接收數(shù)據(jù)自定義請(qǐng)求碼
EP0BUF[1]=IOB;
EP0BCH=0;
EP0BCL=2;
EP0CS |= bmHSNAK;
return(TRUE);
}
主機(jī)控制界面運(yùn)行如圖4所示。
界面中的USB Information分類(lèi)框中為USB描述相關(guān)信息,由主機(jī)通過(guò)標(biāo)準(zhǔn)請(qǐng)求獲得。Operation分類(lèi)框中為主機(jī)向USB設(shè)備PA口發(fā)送數(shù)據(jù),以及從USB設(shè)備的PB讀取數(shù)據(jù)的
情況。
圖4 主機(jī)控制界面
6 結(jié) 語(yǔ)
采用CY7C68013A實(shí)現(xiàn)USB控制系統(tǒng),無(wú)論在固件程序編寫(xiě)、主機(jī)控制界面開(kāi)發(fā),以及設(shè)備驅(qū)動(dòng)程序的使用等方面,都具有簡(jiǎn)單、方便的優(yōu)點(diǎn)。系統(tǒng)采用設(shè)備固件存放在主機(jī)上的方法,不但簡(jiǎn)化了硬件設(shè)計(jì),節(jié)約元器件成本,而且也提高了設(shè)備的可靠性。同時(shí),此法對(duì)以后固件升級(jí)或更改設(shè)備功能,也十分簡(jiǎn)便,只需把固件修改好并放到主機(jī)相應(yīng)位置,在USB設(shè)備再次插入主機(jī)時(shí),就可以實(shí)現(xiàn)固件自動(dòng)更新。文中給出一些設(shè)計(jì)過(guò)程中需要注意的關(guān)鍵問(wèn)題,對(duì)于USB控制設(shè)備的設(shè)計(jì)具有一定的指導(dǎo)作用。上述系統(tǒng)和程序經(jīng)過(guò)實(shí)際運(yùn)行,工作穩(wěn)定、可靠。
參考文獻(xiàn)
[1]李英偉,王成儒.USB 2.0原理與工程開(kāi)發(fā)[M].北京:國(guó)防工業(yè)出版社,2007.
[2]胡曉軍,張愛(ài)成.USB接口開(kāi)發(fā)技術(shù)[M].西安:西安電子科技大學(xué)出版社,2005.
[3]錢(qián)峰.EZ-USBFX2單片機(jī)原理編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[4]周立功.PDIUSBD12 USB固件編程與驅(qū)動(dòng)開(kāi)發(fā)[M].北京:北京航空航天大學(xué)出版社,2003.
[5]薛園園.USB應(yīng)用開(kāi)發(fā)技術(shù)大全[M].北京:人民郵電出版社,2007.
[6]Cypress. EZ-USB FX2LPTM USB microcontroller datasheet[ EB/OL] . [ 2009-05-20] . http://www.cypress.com.
[7]Cypress. EZ-USB FX2 technical reference manual[ EB/OL] . [ 2009-03-18] . http://www.cypress.com.
[8]周曉云.程序設(shè)計(jì)基礎(chǔ)——可視化及VC++實(shí)現(xiàn)[M].北京:高等教育出版社,2004.
[9]張凱.VC++程序設(shè)計(jì)[M].大連:大連理工大學(xué)出版社,2002.
[10]Cypress. Cypress CyAPI programmer′s reference[ EB/OL] . [ 2009-02-20] . http://www.cypress.com.