<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è) > 嵌入式系統 > 設計應用 > 嵌入式系統中USB-HOST協(xié)議棧的設計

嵌入式系統中USB-HOST協(xié)議棧的設計

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

1 引言

在移動(dòng)設備大力發(fā)展的今天,移動(dòng)設備間的大量數據交流的需求大大刺激了嵌入式USB主機系統的發(fā)展,這必然要求嵌入式系統必須提供USB的主機。而傳統意義上的LISB程序的開(kāi)發(fā)都是USB外設程序的開(kāi)發(fā),主控制器驅動(dòng)大部分由操作系統來(lái)提供,開(kāi)發(fā)者所要做的就是調用操作系統提供的驅動(dòng)程序的接口。兩大主流操作系統中,Windows不公開(kāi)源碼而Linux的卻不方便移植。對于目前使用μCOS,VxWorks和QNX等OS的嵌入式系統和一些無(wú)OS的單片機系統來(lái)說(shuō),建立好一整套方便移植的USB主機驅動(dòng)程序將會(huì )有更大的意義。

2硬件平臺

硬件平臺的MCU選擇的是TMS320 DM642,他是TIC6000產(chǎn)品系列中的一款,基于C64x的內核,工作為600 MHz,C6000平臺上的。他有3個(gè)雙通道視頻口,可以支持多達6路視頻輸入輸出。DM64.2的處理能力較突出,一塊單片的DM642可以同時(shí)解碼4路MPEG2格式的視頻流。

USB主控制器選用的是Cypress的一款主/從控制器SL811HS,其既可以工作在主機(Host)模式又可以工作在從機(Slave)模式,能與全速(Full-Speed)和低速(Low-Speed)外設通訊。SL811HS可以與微處理器、微控制器和DSP無(wú)縫連接,并可直接連到諸如ISA,PCMCIA等一些總線(xiàn)上,圖1是SL811HS的結構框圖。SL811HS提供一個(gè)長(cháng)度為256 B內部RAM空間,該空間的前16 B分配給控制寄存器使用,后面的則作為數據緩沖區(最大240 B)。


3 USB協(xié)議棧的基本知識

3.1 USB設備的拓撲

USB的拓撲結構像金字塔,位于塔尖的是根集線(xiàn)器(Root Hub),根集線(xiàn)器是系統中所有USB端口的起點(diǎn),根集線(xiàn)器提供了一定數量的USB端口,USB設備和附加的集線(xiàn)器可以連接到那里。

3.2 USB主機驅動(dòng)框架

主機與外設之間的信息流與互連關(guān)系如圖2所示,主機與設備都被劃分成不同的層次。主機上黑實(shí)的箭頭是實(shí)際的數據流向,設備上對應的接口是基于不同實(shí)現的。在主機與設備之間的所有通信最終都是通過(guò)USB的電纜進(jìn)行,然而,在上層的水平層之間是一種邏輯的對應關(guān)系,其最終的通信還必須是通過(guò)黑實(shí)箭頭標示的方向。這個(gè)結構與TCP/IP協(xié)議棧的結構類(lèi)似,因此也可以用USB協(xié)議棧來(lái)形象的描述USB主機驅動(dòng)程序。

4 USB協(xié)議棧的實(shí)現

4.1協(xié)議棧的

為了使協(xié)議棧便于移植,整個(gè)程序使用C語(yǔ)言編寫(xiě),將一些諸如進(jìn)程與互斥操作和數據格式的定義等與操作系統和硬件平臺的相關(guān)部分從協(xié)議棧的核心部分分離開(kāi)來(lái)。在移植到其他操作系統時(shí)盡量維持協(xié)議棧的核心部分不動(dòng)或微小改動(dòng),只在與操作系統相關(guān)程序中添加相關(guān)即可。

4.2 USB-HOST協(xié)議棧的框架

基于圖2的USB通信層次圖,以對大容量存儲設備的支持為例,USB-HOST協(xié)議棧的設計如圖3所示。

文件系統層提供與用戶(hù)的交互接口。該層提供對文件的一些基本操作,諸如創(chuàng )建文件、刪除文件、讀寫(xiě)文件等常用操作。為與Windows,可以在該層實(shí)現FAT32,FATl6,NTFS等文件系統。

HDM為每個(gè)設備建立統一的數據結構和接口提供給文件系統對硬盤(pán)進(jìn)行讀寫(xiě)扇區操作。鑒于系統中可靜會(huì )同時(shí)存在IDE硬盤(pán),HDM對兩種硬盤(pán)進(jìn)行統一管理,對文件系統掩蓋硬盤(pán)的細節,使得文件系統在對兩種硬盤(pán)操作時(shí)沒(méi)有什么不同。

USB設備驅動(dòng)層目前只實(shí)現了大容量設備類(lèi)驅動(dòng)對于其他類(lèi)型的設備類(lèi)諸如音頻設備類(lèi)、通信設備類(lèi)、顯示設備類(lèi)、人機接口設備類(lèi)驅動(dòng)在本層添加,對大容量存儲設備類(lèi),USB規范針對不同的設備又選用不同的協(xié)議,如:RBC,SCSH-2,UFI,SFF-8020i,QIC-157等,對于USB硬盤(pán),使用SCSI協(xié)議。設備類(lèi)驅動(dòng)的協(xié)議層將來(lái)自USB硬盤(pán)的讀寫(xiě)操作翻譯成SCSI命令,而傳輸層則將命令分解為一個(gè)個(gè)USB事務(wù)發(fā)送到USB總線(xiàn)驅動(dòng)層。

總線(xiàn)驅動(dòng)層實(shí)現USB總線(xiàn)協(xié)議,管理USB設備和USB事務(wù)管理以及總線(xiàn)枚舉??偩€(xiàn)驅動(dòng)層先初始化所有的主控制器,每當成功檢測和初始化一個(gè)主控制器,并給這個(gè)控制器建立一套虛擬根集線(xiàn)器。在初始化主控制器后,注冊所有已支持的驅動(dòng)。如果有支持的設備插入的話(huà),就可以自動(dòng)找到相應的驅動(dòng)工作。

硬件抽象層對上層掩蓋硬件細節,為了增加軟件可移植性,與USB控制器芯片相關(guān)的部分放在該層的HCD部分中,在移植到其他平臺上時(shí),針對該平臺使用的控制器芯片改動(dòng)HCD的相關(guān)內容即可。此外,數據的最終傳輸也將在這里完成。

4.3 虛擬根集線(xiàn)器VRH(Virtual Root Hub)

一些USB主控制器會(huì )集成一些根集線(xiàn)器,但SI811HS并沒(méi)有集成集線(xiàn)器的功能,為了配合USB的系統拓撲結構,用軟件模擬一個(gè)根集線(xiàn)器,稱(chēng)為虛擬根集線(xiàn)器,該集線(xiàn)器只有一個(gè)端口。虛擬集線(xiàn)器并不能替代集線(xiàn)器的所有功能,他只是為了滿(mǎn)足USB的拓撲結構,同時(shí),提供根集線(xiàn)器的接口,方便驅動(dòng)程序被移植到其他具有根集線(xiàn)器功能的嵌入式系統中去。

4.4 USB帶寬

USB是以1 ms的時(shí)間片進(jìn)行數據傳輸的,在這1 ms的時(shí)間片中能傳輸的數據長(cháng)度就是USB的帶寬,如何保證在1個(gè)時(shí)間片上有最大數據的傳輸,則是決定USB傳輸速率的關(guān)鍵。由于USB可能被多種設備共享,所以在時(shí)間片內可能會(huì )有多種類(lèi)型的USB傳輸,中斷和同步傳輸對實(shí)時(shí)性要求高,因此他們在帶寬的分配上具有優(yōu)先權,其次是控制傳輸,BULK優(yōu)先權最低,使用剩下的帶寬。SI811HS的SOF中斷標志著(zhù)一個(gè)時(shí)間片的開(kāi)始。在大容量設備的驅動(dòng)程序中,主要是控制傳輸和塊(bulk)傳輸,SOF中斷開(kāi)始后,安排數據傳輸。此外,在塊傳輸中,數據的完整性則相對重要的多,因此,驅動(dòng)程序必須提供完善的錯誤檢測和重發(fā)機制。對于大容量設備來(lái)說(shuō),傳輸數據量大,傳輸速度也是一個(gè)很重要的指標,USB 1.1支持的最大傳輸速率是1.5 MB/s,但由于協(xié)議的開(kāi)銷(xiāo),數據的傳輸速率卻往往達不到這個(gè)峰值速率。除了對代碼進(jìn)行優(yōu)化外,充分利用帶寬將是提高速率行之有效的方法。

4.5協(xié)議棧的關(guān)鍵進(jìn)程

4.5.1 主進(jìn)程

主進(jìn)程是USB-HOST協(xié)議棧最開(kāi)始的一個(gè)進(jìn)程,除了初始化外,他的主要任務(wù)是監測設備。該進(jìn)程平時(shí)處于鎖死狀態(tài),當被激活時(shí)去檢測虛擬集線(xiàn)器的端口狀態(tài)。有設備插入時(shí),中斷處理函數改變端口狀態(tài)并啟動(dòng)主進(jìn)程,主進(jìn)程對端口上的設備進(jìn)行枚舉,并為其分配資源。相反,當有設備拔除時(shí),主進(jìn)程則將與該設備相關(guān)的資源釋放。

4.5.2 中斷處理函數

中斷處理函數也可以看成是一個(gè)優(yōu)先級最高的進(jìn)程,SL811HS的幾個(gè)重要的中斷是:插入/拔除中斷(Insered/Removed)檢測從設備的插入和拔除操作,SOF定時(shí)器中斷(SOF Timer)啟動(dòng)一個(gè)時(shí)間片,傳輸完成中斷(USB Done Interrupt)標志一次傳輸的完成,中斷處理函數的流程如圖4所示。

4.5.3軟件狗進(jìn)程

當有兩個(gè)中斷同時(shí)到達時(shí),處理器可能會(huì )丟失掉一個(gè)中斷沒(méi)有處理,可以設置一個(gè)軟件狗進(jìn)程,定時(shí)執行中斷處理函數。當有丟失的中斷時(shí),軟件狗會(huì )將這個(gè)中斷處理掉。

5 結 語(yǔ)

本文主要討論了嵌入式系統中USB-HOST協(xié)議棧的設計思路,整個(gè)軟件基于DSPBIOS系統在CCS的編譯環(huán)境下調試通過(guò),經(jīng)過(guò)測試,運行穩定。軟件的編寫(xiě)采用移植性好的C語(yǔ)言編寫(xiě),并將與平臺相關(guān)的部分代碼與核心代碼分開(kāi)以增加軟件的可移植性。此外,為軟件的功能的升級也預留了接口。

如今,隨著(zhù)移動(dòng)電子產(chǎn)品的大量出現,設備之間直接通信的需求也越來(lái)越大,USB占據了嵌人式設備與其他設備之間通信的主要角色。角色也在不停地變化,在這次傳輸中可能是主機,下次傳輸就有可能扮演從機的角色,OTG規范在這種需求下誕生,符合USB OTG的設備,既可以作為Host,也可以作為外設來(lái)與另一個(gè)OTG設備直接實(shí)現設備到設備的通信??深A見(jiàn)的將來(lái),嵌入式USB系統的發(fā)展趨勢將是USB OTG。



關(guān)鍵詞: 驅動(dòng) 代碼 兼容 頻率

評論


相關(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>