1、 USB簡(jiǎn)介
UBS(Universal Serial Bus)是一種標(biāo)準(zhǔn)的計(jì)算機(jī)與外設(shè)的連接接口,1995年問(wèn)世,并由Compaq,Digital Equipment Corp.(現(xiàn)屬Compaq),IBM,Intel,Microsoft,NEC及Northern Telecom七家計(jì)算機(jī)與通信工業(yè)領(lǐng)域的領(lǐng)先公司組成的聯(lián)盟定義和推廣。1996年,該聯(lián)盟公布了USB 1.1規(guī)范。其后,隨著USB的完善和應(yīng)用的需求,促進(jìn)了高速USB2.0規(guī)范在1999年發(fā)布。目前已經(jīng)成為外設(shè)的流行接口選擇。
USB具有諸多特性和特點(diǎn)。USB統(tǒng)一了各種接口設(shè)備的連接頭,如通信接口、打印機(jī)接口、顯示器接口、音響輸入/輸出設(shè)備、存儲(chǔ)設(shè)備等都采用相同的USB接口規(guī)范;USB即插即用,能自動(dòng)檢測(cè)與配置系統(tǒng)的資源;USB完全支持“熱插拔”,在開(kāi)機(jī)的狀態(tài)下,可以插入和拔離USB設(shè)備;USB接口規(guī)范1.1所支持的傳輸速度可達(dá)12 Mb/s(USBl.1),USB2.0規(guī)范支持的傳輸速度達(dá)到480 Mb/s;USB支持斗種不同傳輸速度和不同傳輸質(zhì)量的數(shù)據(jù)傳輸方式,即批量傳輸方式、中斷傳輸方式、控制傳輸方式和同步傳輸方式,能夠滿足不同設(shè)備的不同需求;USB連接設(shè)備最多可達(dá)127個(gè);USB采用單一專用的接口型號(hào),所有的USB設(shè)備的接口型號(hào)完全統(tǒng)一,并且使用USB集線器來(lái)增加擴(kuò)充的連接端口白的數(shù)目等。
2、 CY7C646xx系列
CY7C646xx系列是Cypress公司開(kāi)發(fā)的全速的USB接口系列中的一種,該系列針對(duì)USB外圍設(shè)備設(shè)計(jì),除了具有典型的USB特性之外,還具有三個(gè)關(guān)鍵特性:
1)該系列提供“軟”的應(yīng)用方案,即基于片內(nèi)RAM,支持即時(shí)動(dòng)態(tài)固件(Firmware)下載功能,允許無(wú)限制的擴(kuò)充和更新;
2)該系列能夠達(dá)到USBl.1協(xié)議的傳輸速度要求,向用戶提供足夠的端口、緩沖區(qū)和傳輸速度;
3)該系列對(duì)USB的底層協(xié)議實(shí)現(xiàn)高度硬件集成,簡(jiǎn)化了硬件固件代碼的編程,加速了USB通信的掌握過(guò)程,更易于開(kāi)發(fā),其內(nèi)部結(jié)構(gòu)框圖如圖1所示。
該系列通過(guò)USB總線(包括+5V、地、D+、D-)和計(jì)算機(jī)相連;轉(zhuǎn)發(fā)器固化到芯片內(nèi)部;串行接口引擎(亦稱USB核)具有完整的USB設(shè)備功能,完全能夠響應(yīng)主機(jī)對(duì)設(shè)備的標(biāo)準(zhǔn)請(qǐng)求,具有3種USB配置,每種配置1個(gè)或16個(gè)端點(diǎn)。完全支持4種標(biāo)準(zhǔn)的USB數(shù)據(jù)傳輸類型(控制傳輸、批量傳輸、中斷傳輸和同步傳輸);芯片內(nèi)部的程序數(shù)據(jù)隨機(jī)存儲(chǔ)器(RAM)具有8 KB的容量;芯片內(nèi)嵌入增強(qiáng)的8051微處理器。具有所有的8051資源,即5個(gè)I/O口,2個(gè)通用異步轉(zhuǎn)發(fā)器(UART),3個(gè)計(jì)數(shù)器/定時(shí)器,擴(kuò)展的中斷系統(tǒng)等;芯片利用從屬FIFO或者通用可編程接口(CPIF)和外部邏輯(諸如DSP等)進(jìn)行數(shù)據(jù)傳輸。
3、 USB接口系統(tǒng)的結(jié)構(gòu)
USB接口的結(jié)構(gòu)如圖2所示。計(jì)算機(jī)采用Windows操作系統(tǒng),用戶程序通過(guò)設(shè)備驅(qū)動(dòng)程序訪問(wèn)目標(biāo)板。在目標(biāo)板端上,CY7C646xx把TMS320VC33型數(shù)字信號(hào)處垣器和計(jì)算機(jī)通過(guò)USB總線建立通信鏈路,用CPLD進(jìn)行目標(biāo)板的控制。TMS320VC33通過(guò)CY7C646xx內(nèi)置的從屬FIFO和CY7C646xx進(jìn)行數(shù)據(jù)交換。
在本方案中,CY7C646xx采用無(wú)EEPROM的列舉方式,即當(dāng)目標(biāo)板插入U(xiǎn)SB端口時(shí),操作系統(tǒng)進(jìn)行USB常規(guī)描述符請(qǐng)求,CY7C646xx將內(nèi)置的PID、VID和DID回復(fù)主機(jī)請(qǐng)求;主機(jī)動(dòng)態(tài)加載“固件下載驅(qū)動(dòng)程序”,由該驅(qū)動(dòng)程序?qū)?051程序代碼和數(shù)據(jù)下載至CYTC646xx內(nèi)的RAM中,實(shí)現(xiàn)“軟”開(kāi)發(fā)目的;該驅(qū)動(dòng)程序重置啟動(dòng)8051,重新列舉設(shè)備,下載至RAM中的程序回復(fù)主機(jī)的USB描述符請(qǐng)求,主機(jī)加載“數(shù)據(jù)通信驅(qū)動(dòng)程序”,完成USB設(shè)備的安裝。應(yīng)用程序通過(guò)“數(shù)據(jù)通信驅(qū)動(dòng)程序”和CY7C646xx建立通信,完成數(shù)據(jù)傳輸。
4、 驅(qū)動(dòng)程序的編寫
USB設(shè)備驅(qū)動(dòng)程序采用一種新的驅(qū)動(dòng)模型--WDM(windows driver model)。WDM通過(guò)提供一種靈活的方式來(lái)簡(jiǎn)化驅(qū)動(dòng)程序的開(kāi)發(fā),在實(shí)現(xiàn)對(duì)新硬件支持的基礎(chǔ)上減少并降低所必須開(kāi)發(fā)的驅(qū)動(dòng)程序的數(shù)量和復(fù)雜性。可以應(yīng)用Cypress公司提供編寫CY7C646xx系列驅(qū)動(dòng)程序框架源代碼進(jìn)行相應(yīng)的修改和添加,生成所需要的驅(qū)動(dòng)程序。
4.1 固件下載驅(qū)動(dòng)程序
利用代碼轉(zhuǎn)換工具h(yuǎn)ex2c.exe,將生成的8051固件代碼(hex文件)轉(zhuǎn)換為C文件;將C文件中的相應(yīng)代碼拷貝到所提供的源代碼程序之一的firmware.c相應(yīng)部分;利用WindowsDDK工具將各個(gè)源文件編譯成.sys文件。
修改相應(yīng)的INF文件,將“%USB\VID_0547&PID_1004.DeviceDesc%=EZUSBDev.Dev,USB\VID_&PID_‘中的VID及PID修改為相應(yīng)的”預(yù)設(shè)USB設(shè)備“的相應(yīng)VID和PID,在本應(yīng)用中,VID.為0547,PID為2235;緊接在此語(yǔ)句之后應(yīng)加入相同的語(yǔ)句,PID和VID應(yīng)為所下載的固件代碼所能提供的PID和VID,保證外設(shè)第二次列舉后能根據(jù)此PID和VID找到相應(yīng)的支持主機(jī)和電路通信的驅(qū)動(dòng)程序。
4.2 支持主機(jī)和電路通信的驅(qū)動(dòng)程序
由Cypress公司提供的GPD(General Purpose Driver)模板供用戶修改使用。它提供一個(gè)上層的程序代碼來(lái)實(shí)現(xiàn)底層的驅(qū)動(dòng)程序的編寫,能夠完成USB設(shè)備的標(biāo)準(zhǔn)請(qǐng)求及Cypress公司的該系列電路所特定的請(qǐng)求和數(shù)據(jù)的傳輸。該GPD所提供的接口函數(shù)具有通用性,包括打開(kāi)、關(guān)閉設(shè)備及USB的I/O操作等。本應(yīng)用主要采用上述兩類接口程序,在沒(méi)有改變所提供的EZUSB.SYS的驅(qū)動(dòng)程序的情況下,實(shí)現(xiàn)主機(jī)和外設(shè)的數(shù)據(jù)通信。
5 、固件程序的編寫
固件程序指的是需要下載到CY7C646xx內(nèi)RAM中的8051程序代碼和數(shù)據(jù)。需要完成的功能包括初始化CY7C646xx內(nèi)部的所有用到的寄存器使之與外部電路相配合;對(duì)主機(jī)的USB標(biāo)準(zhǔn)請(qǐng)求的響應(yīng);CY7C646xx的電子仿真實(shí)際脫離與重新連接至USB接口的實(shí)現(xiàn);設(shè)備休眠狀態(tài)的啟動(dòng)和終止;完成讀取OUT端點(diǎn)和轉(zhuǎn)發(fā)至內(nèi)部從屬”寫FIFO“及讀取內(nèi)部從屬”讀FIFO“的數(shù)據(jù)和轉(zhuǎn)發(fā)至IN端點(diǎn)等功能。
該應(yīng)用采用Keil51編譯環(huán)境,用C語(yǔ)言完成固件源代碼的編寫。采用標(biāo)準(zhǔn)的結(jié)構(gòu)框架,修改或者添加自己的代碼,完成所需要的任務(wù)。
需要注意,如果開(kāi)發(fā)者沒(méi)有使用片外接存儲(chǔ)器,需將Keil51編譯環(huán)境的L51 Location選項(xiàng)中的Code(指令碼部分)始于0x0080,而且xdata(數(shù)據(jù)部分)始于0xl000,以保證在同一個(gè)RAM中指令代碼和數(shù)據(jù)不混迭。
6 、計(jì)算機(jī)端應(yīng)用程序的編寫
應(yīng)用程序與設(shè)備進(jìn)行通信的通用函數(shù)包括打開(kāi)關(guān)閉設(shè)備、傳輸數(shù)據(jù)等:
6.1 打開(kāi)和關(guān)閉設(shè)備
該應(yīng)用程序基于Ezusb.sys驅(qū)動(dòng)程序,利用VisualC++針對(duì)該電路進(jìn)行操作,完成數(shù)據(jù)的傳輸。
打開(kāi)設(shè)備: HANDLE hDevice=CreateFile (DeviceName,
GENERIC_WRITEIGENERIC_READ,F(xiàn)ILE_SHARE_WRITE︱FILE_SHARE_READ,
NULL,OPEN_EXISTING,0,NULL);
程序打開(kāi)設(shè)備”DeviceName’‘的方式為通用讀寫方式,文件共享讀寫。
關(guān)閉設(shè)備:CloseHandle (hDevice)。
6.2 數(shù)據(jù)傳輸
其代碼為BOOL bResult = DeviceloControl (hDevice,direction,&Control,sizeof xxxx_TRANSFER_CONTROL),buffer,length, (unsigned long*)&nBytes,NULL),其中,hDevice為設(shè)備句柄;direction為數(shù)據(jù)傳輸?shù)姆较颍籆ontrol為4種USB數(shù)據(jù)傳輸?shù)姆绞竭x擇;size(xxxx_TRANSFER_CONTROL)為數(shù)據(jù)格式所需存儲(chǔ)空間的大小;buffer為所傳輸數(shù)據(jù)的緩沖區(qū)地址指針;nBytes為傳輸完成后實(shí)際傳輸?shù)臄?shù)據(jù)個(gè)數(shù):數(shù)據(jù)傳輸格式為USB設(shè)備的統(tǒng)一規(guī)范,可參照Windows DDK中的相應(yīng)文件。
6.3 數(shù)據(jù)傳輸?shù)耐ㄐ艆f(xié)議
每個(gè)數(shù)據(jù)包由包頭和數(shù)據(jù)或者只由包頭組成,最大的數(shù)據(jù)長(zhǎng)度為64字節(jié),由于本應(yīng)用所采用的該系列的80引腳的CY7C64603沒(méi)有“數(shù)據(jù)空”對(duì)外標(biāo)志,所以,外部電路讀寫邏輯每次瀆寫64字節(jié)。傳輸?shù)淖止?jié)不足64時(shí)由固件補(bǔ)零:·數(shù)據(jù)包格式如圖3所示。
責(zé)任編輯:gt
評(píng)論