
EZ-USB FX2固件程序框架首先初識化所有內(nèi)部狀態(tài)量,然后調(diào)用用戶初始化函數(shù)TD_Init(),然后初始化USB總線設(shè)備接口為非配置狀態(tài),并同時打開中斷。當(dāng)完成上面的任務(wù)后,EZ-USB FX2固件程序就開始重新枚舉,直到在端點(diǎn)0收到SETUP包為止。一旦EZUSB FX2收到SETUP包,固件程序框架就開始進(jìn)行任務(wù)分配、任務(wù)分配就是依次重復(fù)地執(zhí)行以下過程:
。1)調(diào)用用戶函數(shù)TD_Poll()。
(2)檢測是否有未處理的設(shè)備請求,如果有,解析接收到的命令,進(jìn)行適當(dāng)響應(yīng)。默認(rèn)情況下,他會對給定的標(biāo)準(zhǔn)設(shè)備請求實(shí)現(xiàn)USB定義的響應(yīng);但是,框架提供分支程序允許用戶 程序解析處理或者覆蓋特定的設(shè)備請求。
。3)檢測USB核是否報告了一個USB掛起事件,如果有,調(diào)用用戶函數(shù)TD_Susupend()。當(dāng)返回值為真,檢測是否有恢復(fù)事件,如果沒有,則掛起處理器。當(dāng)檢測到恢 復(fù)事件,調(diào)用用戶函數(shù)TD_Resume(),并繼續(xù)執(zhí)行步驟(3)。當(dāng)TD_Susupend()返回值為假時,則繼續(xù)執(zhí)行步驟(3)。通過以上流程,固件程序?qū)崿F(xiàn)了簡單的合作任務(wù)執(zhí)行框架。
2.2驅(qū)動程序
在Windows平臺下,USB驅(qū)動程序由3部分組成:USB設(shè)備驅(qū)動程序,USB總線驅(qū)動程序和US B主控制器驅(qū)動程序,他們必須遵循Win32驅(qū)動程序模型(WDM)。其中,Windows操作系統(tǒng)已 經(jīng)提供了處于驅(qū)動程序棧底的USB總線驅(qū)動程序和USB主控制器驅(qū)動程序。而USB設(shè)備驅(qū)動程 序由設(shè)備開發(fā)者編寫,他通過向USB總線驅(qū)動程序發(fā)送包含URB(USBRequestBlock)的IR P(I/O RequestPacket),來實(shí)現(xiàn)USB外設(shè)之間的信息交換。當(dāng)主機(jī)應(yīng)用程序要對USB設(shè)備進(jìn) 行I/O操作時,他調(diào)用Windows API函數(shù)對Win32子系統(tǒng)進(jìn)行Win32調(diào)用,由I/O管理器將 此請 求構(gòu)造成一個合適的IRP,并把他傳遞給USB設(shè)備驅(qū)動程序。USB設(shè)備驅(qū)動程序接受到這個IRP 后,根據(jù)IRP中的包含的具體操作代碼,構(gòu)造響應(yīng)的URB并把他放到一個新IRP中,然后把此I RP傳遞到USB總線驅(qū)動程序,USB總線驅(qū)動程序根據(jù)IRP中所包含的URB執(zhí)行響應(yīng)的操作,并把操 作結(jié)果通過IRP返還給USB設(shè)備驅(qū)動程序。USB設(shè)備驅(qū)動程序接受到此IRP后,將操作結(jié)果通過 IRP返還I/O管理器。最后,I/O管理器將此IRP中的操作結(jié)果返還給應(yīng)用程序,至此應(yīng)用程序 對USB設(shè)備的一次I/O操作完成。
在CYPRESS公司的EZUSB FX2開發(fā)包中,有一個通用的驅(qū)動程序EZ-USB GENE RAL PURPOSEDEVICEDRIVER(GPD),GPD提供了USB標(biāo)準(zhǔn)設(shè)備請求和數(shù)據(jù)傳輸?shù)挠脩裟J浇涌?/SPAN>,可以直接用來開發(fā)上層應(yīng)用程序,加快開發(fā)進(jìn)度。

2.3上層應(yīng)用程序
應(yīng)用程序工作于用戶模式,用戶模式可以訪問文件,處理數(shù)據(jù),人機(jī)交互,不過必須借助設(shè) 備驅(qū)動程序來訪問硬件。對于EZUSB FX2而言,所有用戶模式通過I/O control調(diào)用 來訪問EZ-USBGPD。每一個連接到主機(jī)的EZUSB 設(shè)備,驅(qū)動產(chǎn)生一個形式為 ezusbi的符號連接名。符號連接名用于調(diào)用CreateFile時得到設(shè)備驅(qū)動的句柄,實(shí) 際上CreateFile()得到設(shè)備驅(qū)動創(chuàng)建的設(shè)備對象的句柄。
應(yīng)用程序通過CreateFile()得到USB設(shè)備句柄,用DeviceControl()來進(jìn)行控制傳輸 。在VC 環(huán)境下開發(fā)的主機(jī)端的應(yīng)用程序,實(shí)現(xiàn)了設(shè)備的打開、關(guān)閉、固件下載、端口配置和文件傳 輸?shù)裙δ堋=缑嫒鐖D3所示。
3結(jié)語
USB2.0為PC和外部硬件設(shè)備之間提供了一種快速和方便的數(shù)據(jù)交換方式,本文提供了基于E Z-USBFX2的一個很好的解決方案,實(shí)現(xiàn)了從底層固件到上層應(yīng)用程序數(shù)據(jù)傳輸?shù)恼?O:P> 個軟件系統(tǒng)。