基于EZ-USB FX2的USB 2.0系統(tǒng)軟件開發(fā)
通用串行總線(Universal SeriaI Bus,簡稱USB)以其易插拔、無需配置、真正的即插即用等特性獲得了廣泛的市場認可。USB 1.O標準于1996年1月提出,傳輸速度為1.5 Mb/s的低速模式;1998年9月提出的USB 1.1標準則將速度提高到12 Mb/s的全速模式,并且增加了中斷傳輸?shù)膫鬏敺绞?。USB 2.0標準于2000年4月提出,將傳輸速度提高了40倍,達到了480 Mb/s的高速模式,足以滿足大多數(shù)外設的速率要求
1 USB2.0接口芯片EZ-USB FX2的系統(tǒng)架構及開發(fā) 要點
CYPRESS的EZ-USB FX2是業(yè)界推出的第一個USB 2.0集成外圍控制器。該器件集成有1個8051處理器、1個串行接口引擎(SIE)、1個USB收發(fā)器、8.5 kB片上RAM,4 kB FIFO存儲器以及1個通用可編程接口(GPIF、)。FX2是一個相當完整的解決方案。
集成的USB收發(fā)器連接到USB總線管腳D+和D一,串行接口引擎sIE實現(xiàn)串行數(shù)據(jù)的編解碼、檢錯、位填充和其他USB所需信號層的任務。最終sIE實現(xiàn)從USB接口 收發(fā)并行數(shù)據(jù)。
FX2中集成了增強型的8051處理器,他可工作在12MFIz,24 MHz和48 MHz的頻率,并且一個指令周期只需4個時鐘周期。單片機只是進行USB傳輸?shù)木S護及控制并不進行直接的數(shù)據(jù)傳輸。
為了實現(xiàn)USB 2.0的高速帶寬,把FX2的端點FIF(和從屬FIFO(實現(xiàn)和外部邏輯器件或處理器接口的FIFO)集成在一起以減少內部數(shù)據(jù)傳輸時間。并且FX2的FIFO有獨特的"量子"特性,數(shù)據(jù)以I-JSB分組大小為單位被提交到FIF0,而不是每次一個字節(jié)。這簡化了錯誤恢復,如果用經典的FIFO,當產生壞的(CR((循環(huán)校驗碼)時,所有的數(shù)據(jù)必然泛濫流出,因為他是壞數(shù)據(jù);如果CRC是好的,則分組信息能從USB域交換到I/O(輸入/輸出)域。對外來說,他看起來仍然像FIF0,但代之以每次只傳送1個字或1個字節(jié)為立即傳送整個分組信息。端點緩沖器可通過固件設置為雙、三或四緩沖器,與所需的數(shù)據(jù)量或靈活性有關。Fx2的FIFO量子特性及可編程設置多緩J沖為滿足USB 2.0所需帶寬提供了保障。
FX2片上只有RAM而無ROM,可以直接通過USB下載程序,實現(xiàn)所謂"軟配置"。"軟配置"提高了軟件的調試及升級速度。
FX2與外部邏輯的2種接口方式:Slave FIFlos方式和通用可編程接口GPIF、方式。Slave FIFOs方式是從機方式,外部控制器可像普通FIF0一樣對FX2的多層緩沖FIF、O進行讀寫。FX2的Slave FIFOs工作方式可設為同步或異步;工作時鐘可選為內部產生或外部輸入;其他控制信號也可靈活地設置為高有效或低有效。可編程接口(GPIF)方式是主機方式,可以軟件編程讀寫控制波形,他幾乎可以對任何8/16 b接口的控制器、存儲器和總線進行數(shù)據(jù)的主動讀寫,非常靈活。
2系統(tǒng)軟件的開發(fā)
USB系統(tǒng)軟件主要包括設備固件、USB設備驅動程序和應用程序3個部分。
2.1固件架構
對于USB總線控制芯片,如果沒有芯片與主機及外部邏輯通信的代碼,芯片則無法完成響應功能。為了便于開發(fā)者縮短開發(fā)周期,CYPRESS為開發(fā)者提供了固件程序框架來實現(xiàn)循環(huán)查詢的程序和與主機通信的端點中斷程序。用戶只需在這些框架里加入自己的代碼就可以實現(xiàn)特定的功能。固件程序框架可以實現(xiàn)芯片初始化、處理USB標準設備請求、電源掛起管理等。為用戶提供3類鉤子函數(shù):任務調度,標準設備請求解析,uSB中斷處理。
EZ-USB FX2固件程序框架首先初識化所有內部狀態(tài)量,然后調用用戶初始化函數(shù)TD-Init(),然后初始化UsB總線設備接口為非配置狀態(tài),并同時打開中斷。當完成上面的任務后,EZ-USB FX2固件程序就開始重新枚舉,直到在端點0收到SETUP包為止。一旦EZ-USB FX2收到SETUP包,固件程序框架就開始進行任務分配、任務分配就是依次重復地執(zhí)行以下過程:
(1)調用用戶函數(shù)TD-Poll()。
(2)檢測是否有未處理的設備請求,如果有,解析接收到的命令,進行適當響應。默認情況下,他會對給定的標準設備請求實現(xiàn)USB定義的響應;但是,框架提供分支程序允許用戶程序解析處理或者覆蓋特定的設備請求。
(3)檢測USB核是否報告了一個USB掛起事件,如果有,調用用戶函數(shù)TD~Susupend()。當返回值為真,檢測是否有恢復事件,如果沒有,則掛起處理器。當檢測到恢復事件,調用用戶函數(shù)TD-Resume(),并繼續(xù)執(zhí)行步驟(3)。當TD-Sustlpend()返回值為假時,則繼續(xù)執(zhí)行步驟(3)。通過以上流程,固件程序實現(xiàn)了簡單的合作任務執(zhí)行框架。
2.2驅動程序
在Windows平臺下,USB驅動程序由3部分組成:USB設備驅動程序,USB總線驅動程序和USB主控制器驅動程序,他們必須遵循win32驅動程序模型(wDM)。其中,windows操作系統(tǒng)已經提供了處于驅動程序棧底的USB總線驅動程序和USB主控制器驅動程序。而USB設備驅動程序由設備開發(fā)者編寫,他通過向USB總線驅動程序發(fā)送包含URB(USB Request Block)的IRP(I/0Request Packet),來實現(xiàn)USB外設之間的信息交換。當主機應用程序要對USB設備進行I/0操作時,他調用Windows API函數(shù)對win32子系統(tǒng)進行win32調用,由I/O管理器將此請求構造成一個合適的IRP,并把他傳遞給USB設備驅動程序。USB設備驅動程序接受到這個IRP后,根據(jù)IRP中的包含的具體操作代碼,構造響應的URB并把他放到一個新IRP中,然后把此IRP傳遞到USB總線驅動程序,USB總線驅動程序根據(jù)IRP中所包含的URB執(zhí)行響應的操作,并把操作結果通過IRP返還給USB設備驅動程序。USB設備驅動程序接受到此IRP后,將操作結果通過IRP返還I/O管理器。最后,I/O管理器將此IRP中的操作結果返還給應用程序,至此應用程序對uSB設備的一次I/O操作完成。
在CYPRESS公司的EZ-USB FX2開發(fā)包中,有一個通用的驅動程序。EZ-USB GENERAL PURP()SEDEVICE DRIVER(GPD),GPD提供了USB標準設備請求和數(shù)據(jù)傳輸?shù)挠脩裟J浇涌?,可以直接用來開發(fā)上層應用程序,加快開發(fā)進度。
2.3上層應用程序
應用程序工作于用戶模式,用戶模式可以訪問文件,處理數(shù)據(jù),人機交互,不過必須借助設備驅動程序來訪問硬件。對于EZ-USB FX2而言,所有用戶模式通過I/0 control調用來訪問EZ-USB GPD。每一個連接到主機的EZ-USB設備,驅動產生一個形式為ezusb-i的符號連接名。符號連接名用于調用CreateFile時得到設備驅動的句柄,實際上CreateFile()得到設備驅動創(chuàng)建的設備對象的句柄。
應用程序通過CreateFile()得到USB設備句柄,用Device Control()來進行控制傳輸。在VC環(huán)境下開發(fā)的主機端的應用程序,實現(xiàn)了設備的打開、關閉、固件下載、端口配置和文件傳輸?shù)裙δ?。界面如圖3所示。
3結語
USB2.0為PC和外部硬件設備之間提供了一種快速-和方便的數(shù)據(jù)交換方式,本文提供了基于EZ USB FX2的一個很好的解決方案,實現(xiàn)了從底層固件到上層應用程序數(shù)據(jù)傳輸?shù)恼麄€軟件系統(tǒng)。
參考文獻:
[1].ROMdatasheethttp://www.dzsc.com/datasheet/ROM_1188413.html.
[2].EZ-USBdatasheethttp://www.dzsc.com/datasheet/EZ-USB_305660.html.
評論