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