<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于EZ-USB FX2的USB 2.0系統軟件開(kāi)發(fā)

基于EZ-USB FX2的USB 2.0系統軟件開(kāi)發(fā)

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

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

1 USB2.0接口芯片 的系統架構及開(kāi)發(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存儲器以及1個(gè)通用可編程接口(GPIF、)。是一個(gè)相當完整的解決方案。

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

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

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

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

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

2系統軟件的開(kāi)發(fā)

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

2.1固件架構

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

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

(1)調用用戶(hù)函數TD-Poll()。

(2)檢測是否有未處理的設備請求,如果有,解析接收到的命令,進(jìn)行適當響應。默認情況下,他會(huì )對給定的標準設備請求實(shí)現USB定義的響應;但是,框架提供分支程序允許用戶(hù)程序解析處理或者覆蓋特定的設備請求。

(3)檢測USB核是否報告了一個(gè)USB掛起事件,如果有,調用用戶(hù)函數TD~Susupend()。當返回值為真,檢測是否有恢復事件,如果沒(méi)有,則掛起處理器。當檢測到恢復事件,調用用戶(hù)函數TD-Resume(),并繼續執行步驟(3)。當TD-Sustlpend()返回值為假時(shí),則繼續執行步驟(3)。通過(guò)以上流程,固件程序實(shí)現了簡(jiǎn)單的合作任務(wù)執行框架。

2.2驅動(dòng)程序

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

在CYPRESS公司的EZ-USB FX2開(kāi)發(fā)包中,有一個(gè)通用的驅動(dòng)程序。EZ-USB GENERAL PURP()SEDEVICE DRIVER(GPD),GPD提供了USB標準設備請求和數據傳輸的用戶(hù)模式接口,可以直接用來(lái)開(kāi)發(fā)上層應用程序,加快開(kāi)發(fā)進(jìn)度。

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

3結語(yǔ)

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

參考文獻:

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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>