新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于EZ-USB FX2的USB 2.0系統(tǒng)軟件開發(fā)

基于EZ-USB FX2的USB 2.0系統(tǒng)軟件開發(fā)

作者: 時(shí)間:2013-11-08 來源:網(wǎng)絡(luò) 收藏

通用串行總線(Universal SeriaI Bus,簡(jiǎn)稱USB)以其易插拔、無(wú)需配置、真正的即插即用等特性獲得了廣泛的市場(chǎng)認(rèn)可。USB 1.O標(biāo)準(zhǔn)于1996年1月提出,傳輸速度為1.5 Mb/s的低速模式;1998年9月提出的USB 1.1標(biāo)準(zhǔn)則將速度提高到12 Mb/s的全速模式,并且增加了中斷傳輸?shù)膫鬏敺绞健SB 2.0標(biāo)準(zhǔn)于2000年4月提出,將傳輸速度提高了40倍,達(dá)到了480 Mb/s的高速模式,足以滿足大多數(shù)外設(shè)的速率要求

1 USB2.0接口芯片 的系統(tǒng)架構(gòu)及開發(fā) 要點(diǎn)

CYPRESS的 是業(yè)界推出的第一個(gè)USB 2.0集成外圍控制器。該器件集成有1個(gè)8051處理器、1個(gè)串行接口引擎(SIE)、1個(gè)USB收發(fā)器、8.5 kB片上RAM,4 kB FIFO存儲(chǔ)器以及1個(gè)通用可編程接口(GPIF、)。是一個(gè)相當(dāng)完整的解決方案。

集成的USB收發(fā)器連接到USB總線管腳D+和D一,串行接口引擎sIE實(shí)現(xiàn)串行數(shù)據(jù)的編解碼、檢錯(cuò)、位填充和其他USB所需信號(hào)層的任務(wù)。最終sIE實(shí)現(xiàn)從USB接口 收發(fā)并行數(shù)據(jù)。

FX2中集成了增強(qiáng)型的8051處理器,他可工作在12MFIz,24 MHz和48 MHz的頻率,并且一個(gè)指令周期只需4個(gè)時(shí)鐘周期。單片機(jī)只是進(jìn)行USB傳輸?shù)木S護(hù)及控制并不進(jìn)行直接的數(shù)據(jù)傳輸。

為了實(shí)現(xiàn)USB 2.0的高速帶寬,把FX2的端點(diǎn)FIF(和從屬FIFO(實(shí)現(xiàn)和外部邏輯器件或處理器接口的FIFO)集成在一起以減少內(nèi)部數(shù)據(jù)傳輸時(shí)間。并且FX2的FIFO有獨(dú)特的"量子"特性,數(shù)據(jù)以I-JSB分組大小為單位被提交到FIF0,而不是每次一個(gè)字節(jié)。這簡(jiǎn)化了錯(cuò)誤恢復(fù),如果用經(jīng)典的FIFO,當(dāng)產(chǎn)生壞的(CR((循環(huán)校驗(yàn)碼)時(shí),所有的數(shù)據(jù)必然泛濫流出,因?yàn)樗菈臄?shù)據(jù);如果CRC是好的,則分組信息能從USB域交換到I/O(輸入/輸出)域。對(duì)外來說,他看起來仍然像FIF0,但代之以每次只傳送1個(gè)字或1個(gè)字節(jié)為立即傳送整個(gè)分組信息。端點(diǎn)緩沖器可通過固件設(shè)置為雙、三或四緩沖器,與所需的數(shù)據(jù)量或靈活性有關(guān)。Fx2的FIFO量子特性及可編程設(shè)置多緩J沖為滿足USB 2.0所需帶寬提供了保障。

FX2片上只有RAM而無(wú)ROM,可以直接通過USB下載程序,實(shí)現(xiàn)所謂"軟配置"。"軟配置"提高了軟件的調(diào)試及升級(jí)速度。

FX2與外部邏輯的2種接口方式:Slave FIFlos方式和通用可編程接口GPIF、方式。Slave FIFOs方式是從機(jī)方式,外部控制器可像普通FIF0一樣對(duì)FX2的多層緩沖FIF、O進(jìn)行讀寫。FX2的Slave FIFOs工作方式可設(shè)為同步或異步;工作時(shí)鐘可選為內(nèi)部產(chǎn)生或外部輸入;其他控制信號(hào)也可靈活地設(shè)置為高有效或低有效??删幊探涌?GPIF)方式是主機(jī)方式,可以軟件編程讀寫控制波形,他幾乎可以對(duì)任何8/16 b接口的控制器、存儲(chǔ)器和總線進(jìn)行數(shù)據(jù)的主動(dòng)讀寫,非常靈活。

2系統(tǒng)軟件的開發(fā)

USB系統(tǒng)軟件主要包括設(shè)備固件、USB設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序3個(gè)部分。

2.1固件架構(gòu)

對(duì)于USB總線控制芯片,如果沒有芯片與主機(jī)及外部邏輯通信的代碼,芯片則無(wú)法完成響應(yīng)功能。為了便于開發(fā)者縮短開發(fā)周期,CYPRESS為開發(fā)者提供了固件程序框架來實(shí)現(xiàn)循環(huán)查詢的程序和與主機(jī)通信的端點(diǎn)中斷程序。用戶只需在這些框架里加入自己的代碼就可以實(shí)現(xiàn)特定的功能。固件程序框架可以實(shí)現(xiàn)芯片初始化、處理USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求、電源掛起管理等。為用戶提供3類鉤子函數(shù):任務(wù)調(diào)度,標(biāo)準(zhǔn)設(shè)備請(qǐng)求解析,uSB中斷處理。

FX2固件程序框架首先初識(shí)化所有內(nèi)部狀態(tài)量,然后調(diào)用用戶初始化函數(shù)TD-Init(),然后初始化UsB總線設(shè)備接口為非配置狀態(tài),并同時(shí)打開中斷。當(dāng)完成上面的任務(wù)后,EZ-USB FX2固件程序就開始重新枚舉,直到在端點(diǎn)0收到SETUP包為止。一旦EZ-USB FX2收到SETUP包,固件程序框架就開始進(jìn)行任務(wù)分配、任務(wù)分配就是依次重復(fù)地執(zhí)行以下過程:

(1)調(diào)用用戶函數(shù)TD-Poll()。

(2)檢測(cè)是否有未處理的設(shè)備請(qǐng)求,如果有,解析接收到的命令,進(jìn)行適當(dāng)響應(yīng)。默認(rèn)情況下,他會(huì)對(duì)給定的標(biāo)準(zhǔn)設(shè)備請(qǐng)求實(shí)現(xiàn)USB定義的響應(yīng);但是,框架提供分支程序允許用戶程序解析處理或者覆蓋特定的設(shè)備請(qǐng)求。

(3)檢測(cè)USB核是否報(bào)告了一個(gè)USB掛起事件,如果有,調(diào)用用戶函數(shù)TD~Susupend()。當(dāng)返回值為真,檢測(cè)是否有恢復(fù)事件,如果沒有,則掛起處理器。當(dāng)檢測(cè)到恢復(fù)事件,調(diào)用用戶函數(shù)TD-Resume(),并繼續(xù)執(zhí)行步驟(3)。當(dāng)TD-Sustlpend()返回值為假時(shí),則繼續(xù)執(zhí)行步驟(3)。通過以上流程,固件程序?qū)崿F(xiàn)了簡(jiǎn)單的合作任務(wù)執(zhí)行框架。

2.2驅(qū)動(dòng)程序

在Windows平臺(tái)下,USB驅(qū)動(dòng)程序由3部分組成:USB設(shè)備驅(qū)動(dòng)程序,USB總線驅(qū)動(dòng)程序和USB主控制器驅(qū)動(dòng)程序,他們必須遵循win32驅(qū)動(dòng)程序模型(wDM)。其中,windows操作系統(tǒng)已經(jīng)提供了處于驅(qū)動(dòng)程序棧底的USB總線驅(qū)動(dòng)程序和USB主控制器驅(qū)動(dòng)程序。而USB設(shè)備驅(qū)動(dòng)程序由設(shè)備開發(fā)者編寫,他通過向USB總線驅(qū)動(dòng)程序發(fā)送包含URB(USB Request Block)的IRP(I/0Request Packet),來實(shí)現(xiàn)USB外設(shè)之間的信息交換。當(dāng)主機(jī)應(yīng)用程序要對(duì)USB設(shè)備進(jìn)行I/0操作時(shí),他調(diào)用Windows API函數(shù)對(duì)win32子系統(tǒng)進(jìn)行win32調(diào)用,由I/O管理器將此請(qǐng)求構(gòu)造成一個(gè)合適的IRP,并把他傳遞給USB設(shè)備驅(qū)動(dòng)程序。USB設(shè)備驅(qū)動(dòng)程序接受到這個(gè)IRP后,根據(jù)IRP中的包含的具體操作代碼,構(gòu)造響應(yīng)的URB并把他放到一個(gè)新IRP中,然后把此IRP傳遞到USB總線驅(qū)動(dòng)程序,USB總線驅(qū)動(dòng)程序根據(jù)IRP中所包含的URB執(zhí)行響應(yīng)的操作,并把操作結(jié)果通過IRP返還給USB設(shè)備驅(qū)動(dòng)程序。USB設(shè)備驅(qū)動(dòng)程序接受到此IRP后,將操作結(jié)果通過IRP返還I/O管理器。最后,I/O管理器將此IRP中的操作結(jié)果返還給應(yīng)用程序,至此應(yīng)用程序?qū)SB設(shè)備的一次I/O操作完成。

在CYPRESS公司的EZ-USB FX2開發(fā)包中,有一個(gè)通用的驅(qū)動(dòng)程序。EZ-USB GENERAL PURP()SEDEVICE DRIVER(GPD),GPD提供了USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求和數(shù)據(jù)傳輸?shù)挠脩裟J浇涌?,可以直接用來開發(fā)上層應(yīng)用程序,加快開發(fā)進(jìn)度。

2.3上層應(yīng)用程序
應(yīng)用程序工作于用戶模式,用戶模式可以訪問文件,處理數(shù)據(jù),人機(jī)交互,不過必須借助設(shè)備驅(qū)動(dòng)程序來訪問硬件。對(duì)于EZ-USB FX2而言,所有用戶模式通過I/0 control調(diào)用來訪問EZ-USB GPD。每一個(gè)連接到主機(jī)的EZ-USB設(shè)備,驅(qū)動(dòng)產(chǎn)生一個(gè)形式為ezusb-i的符號(hào)連接名。符號(hào)連接名用于調(diào)用CreateFile時(shí)得到設(shè)備驅(qū)動(dòng)的句柄,實(shí)際上CreateFile()得到設(shè)備驅(qū)動(dòng)創(chuàng)建的設(shè)備對(duì)象的句柄。
應(yīng)用程序通過CreateFile()得到USB設(shè)備句柄,用Device Control()來進(jìn)行控制傳輸。在VC環(huán)境下開發(fā)的主機(jī)端的應(yīng)用程序,實(shí)現(xiàn)了設(shè)備的打開、關(guān)閉、固件下載、端口配置和文件傳輸?shù)裙δ?。界面如圖3所示。

3結(jié)語(yǔ)

USB2.0為PC和外部硬件設(shè)備之間提供了一種快速-和方便的數(shù)據(jù)交換方式,本文提供了基于EZ USB FX2的一個(gè)很好的解決方案,實(shí)現(xiàn)了從底層固件到上層應(yīng)用程序數(shù)據(jù)傳輸?shù)恼麄€(gè)軟件系統(tǒng)。

參考文獻(xiàn):

[1].ROMdatasheethttp://www.dzsc.com/datasheet/ROM_1188413.html.
[2].EZ-USBdatasheethttp://www.dzsc.com/datasheet/EZ-USB_305660.html.



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉