??? 摘 要: 為了和通用的嵌入式" title="的嵌入式">的嵌入式處理器協(xié)同工作,在 EHCI協(xié)議的基礎(chǔ)上對傳輸描述符" title="描述符">描述符和調(diào)度策略進行優(yōu)化會更加有利于實現(xiàn)沒有總線控制權(quán)的嵌入式USB主機,。在簡單剖析了EHCI協(xié)議的調(diào)度思想后給出了軟硬件劃分結(jié)構(gòu)和實現(xiàn)方法,軟硬件協(xié)同仿真結(jié)果證實了設(shè)計的正確性,。
??? 關(guān)鍵詞: EHCI? 傳輸描述符? HTD? 調(diào)度
?
??? USB主機控制器" title="主機控制器">主機控制器廣泛應(yīng)用于PC和便攜式電子設(shè)備中。USB主機控制器是USB總線的核心部分,,充當(dāng)著USB總線管理和數(shù)據(jù)發(fā)動者的角色,。為了統(tǒng)一高速數(shù)據(jù)傳輸?shù)能沑硬件接口,Intel公司制定了增強型主機控制器接口EHCI(Enhanced Host Controller Interface)協(xié)議,,EHCI協(xié)議對USB2.0主機的數(shù)據(jù)傳輸調(diào)度進行了詳細描述,,使主機控制單元的開發(fā)更具規(guī)范性。
??? 主機控制器的數(shù)據(jù)傳輸調(diào)度部分與軟硬件劃分方式緊密相關(guān),,本文所述結(jié)構(gòu)是位于所開發(fā)的一款與嵌入式MCU通用接口相連,、沒有總線控制權(quán)、面向大容量存儲類設(shè)備的IP中,。因而本文將重點講述在EHCI協(xié)議基礎(chǔ)上針對控制和批量傳輸調(diào)度的改進與實現(xiàn),。
1 EHCI協(xié)議的調(diào)度思想
??? EHCI協(xié)議規(guī)定了3個接口空間:PCI配置空間、HC寄存器空間和調(diào)度接口空間,。支持兩種數(shù)據(jù)傳輸類型:異步傳輸和周期性傳輸,。
??? PCI配置空間描述了開發(fā)作為PCI設(shè)備的USB主機控制器時需要的寄存器。HC寄存器空間由性能寄存器和操作寄存器組成,;性能寄存器用于記錄主機控制器的性能參數(shù)值,;操作寄存器包括命令、狀態(tài),、中斷和根集線器端口寄存器,是進行USB控制的最主要接口空間。調(diào)度接口空間包括四種傳輸描述符和對應(yīng)調(diào)度策略,。
??? 周期性數(shù)據(jù)傳輸主要包括中斷和同步傳輸,,對應(yīng)描述符為siTD、iTD,;異步數(shù)據(jù)傳輸包括批量和控制傳輸,,對應(yīng)描述符為QH、qTD,。所有異步傳輸數(shù)據(jù)包通過隊列頭QH鏈接成一個環(huán)形鏈表" title="鏈表">鏈表,,一個QH代表一個端點,利用操作寄存器Asynlistaddr進行初始訪問,,QH下鏈接多個傳輸描述符qTD,,qTD作為一個傳輸單元對應(yīng)一個或多個事務(wù)處理,可最大尋址20K數(shù)據(jù)量,。創(chuàng)建的傳輸鏈表結(jié)構(gòu)如圖1所示,。
?
??? 圖1中三個QH分別代表三個不同類型的端點,而qTD編號則代表了傳輸描述符的調(diào)度順序,。整個環(huán)形鏈表在生存期內(nèi)一直位于系統(tǒng)內(nèi)存中,。
??? EHCI協(xié)議描述的調(diào)度思想為:客戶軟件用USB請求塊(URB)的形式向管道請求數(shù)據(jù)傳輸,主機控制器驅(qū)動程序(EHCD)負責(zé)跟蹤URB進程并根據(jù)數(shù)據(jù)量的大小生成一條qTD鏈,激活qTD并鏈接在對應(yīng)端點的QH下,,形成圖1所示結(jié)構(gòu),。隨后,EHCD根據(jù)USB協(xié)議規(guī)定的“幀帶寬對于端點均衡分配”原則,,按照端點輪流讀取的順序?qū)⒁粋€激活的qTD信息映射到QH的工作區(qū)中,,隨之啟動硬件操作,EHC(高速主機控制器)讀取QH工作區(qū)信息開始進行qTD的相關(guān)事務(wù)處理,。處理完畢,,回寫狀態(tài)信息到QH工作區(qū),觸發(fā)特定中斷重新將控制權(quán)交還給EHCD,,EHCD從QH工作區(qū)中讀取狀態(tài)信息回寫到對應(yīng)qTD中,,結(jié)束一次qTD的傳輸,并激活下一個,,以此循環(huán)操作,。當(dāng)URB所關(guān)聯(lián)的qTDs全部處理完畢后,更新URB狀態(tài)信息,,通過回調(diào)函數(shù)帶回給應(yīng)用程序,。這部分調(diào)度思想主要在驅(qū)動程序中實現(xiàn)。
2 傳輸調(diào)度的實現(xiàn)
2.1 調(diào)度思想改進
??? 由于所面向的IP連接在MCU通用IO上,,不具有系統(tǒng)總線控制權(quán),,不能主動發(fā)起對系統(tǒng)內(nèi)存的數(shù)據(jù)讀寫,,所以,為了減少硬件對MCU的頻繁訪問以及軟硬件同時訪問memroy時的阻塞現(xiàn)象,,在不改變QH,、qTD結(jié)構(gòu)的基礎(chǔ)上增加了一種驅(qū)動程序中生成但只供硬件調(diào)度的傳輸描述符結(jié)構(gòu)——HTD(Hardware Transfer Descriptor),如圖2所示,。HTD由qTD演變而來,,兩者之間一一對應(yīng),它用 5個雙字描述了一次傳輸?shù)乃行畔?。此外,,IP內(nèi)開辟一塊獨立的存儲區(qū),存儲等待硬件處理的HTD鏈,。硬件只需按順序讀取HTD并將狀態(tài)回寫即可,。這塊存儲區(qū)可供軟硬件直接訪問,所以稱為“共享內(nèi)存”區(qū),。驅(qū)動程序從所有激活的qTD中選擇1~32個生成HTD,,并按處理順序存入共享內(nèi)存,如圖1所示,。
?
2.2 傳輸調(diào)度的硬件實現(xiàn)-HTD處理模塊
??? 上述改進部分主要由IP中HTD處理模塊" title="處理模塊">處理模塊(HPU加深區(qū)域)實現(xiàn),。圖3為IP實現(xiàn)結(jié)構(gòu)圖,從中可見HPU主要與MCU接口單元(MCUI),、全局控制邏輯(GCU),、共享內(nèi)存(MEM)、存儲器控制單元(MC)以及串行接口引擎模塊(SIE)交互,。
?
??? HPU與MCUI:MCUI傳送軟件對HTD控制寄存器的讀寫信息,。
??? HPU與GCU:全局控制邏輯發(fā)送事務(wù)處理使能信號,幀開始指示信號給HPU,,HPU在完成一次事務(wù)處理后輸出結(jié)束信號給GCU,。
??? HPU與MC、MEM:HPU發(fā)送讀寫HTD的使能及地址信息給MC,,MC單元在確定沒有訪問沖突的情況下連接MEM和HPU,,進行兩者之間的HTD值傳送。
??? HPU與SIE:HPU輸出一次事務(wù)處理的信息給SIE,,SIE根據(jù)處理類型(OUT/IN/SETUP)的不同將事務(wù)處理分解成令牌包,、數(shù)據(jù)包和握手包形式經(jīng)根集線器傳送出去,或是SIE接收到設(shè)備上傳的數(shù)據(jù)進行錯誤檢測后將結(jié)果告知HPU,。
??? HTD處理模塊內(nèi)部采用狀態(tài)機機制實現(xiàn),,共5個主要狀態(tài),如圖4所示,。表1是HTD控制寄存器,。
?
?
??? (1)idle狀態(tài):系統(tǒng)復(fù)位和異步傳輸停止時的默認狀態(tài),,不執(zhí)行硬件操作。
??? (2)取HTD:根據(jù)上一個HTD的nextHTDp場指示從MEM中取出對應(yīng)的HTD,,每個DW用一個32位內(nèi)部寄存器表示,。
??? (3)有效性分析:包括4個方面的內(nèi)容,。
?? ?①檢查HTD有效性(Active(A)=1Valid(V)=1),;
??? ②將HTD序號和htddonemap/htdskipmap寄存器比對,確保不進行重復(fù)處理,;
??? ③查看EPnum對應(yīng)端點是否已經(jīng)由以前的事務(wù)處理導(dǎo)致禁用,;
??? ④計算剩余幀時是否足夠。
??? 上述檢測均通過后,,可以跳轉(zhuǎn)到事務(wù)處理執(zhí)行狀態(tài),。如果無效,則根據(jù)無效的種類跳轉(zhuǎn)到其他狀態(tài),。
??? (4)執(zhí)行事務(wù)處理:將通過有效性檢查的HTD信息傳送給SIE進入包級傳輸,。
??? (5)回寫HTD:分析SIE返回的處理信息。包括兩種情況,。
??? ①如果設(shè)備返回ACK握手包或是正確數(shù)據(jù),,則表明事務(wù)處理正確完成,查看park模式計數(shù)器(EHCI協(xié)議規(guī)定:1幀中可以允許幾次對同一端點的事務(wù)處理操作,,park計數(shù)初始值體現(xiàn)在mult場中),,如果為非0值,則更新nrBytestransferrd(已傳輸數(shù)據(jù)量)的值,,進行當(dāng)前HTD的下一個事務(wù)處理;如果為0,,則回寫讀取下一個HTD。
??? ②如果事務(wù)處理傳輸出錯,,則根據(jù)錯誤類型做相應(yīng)處理:
??? a.CRC錯,超時,,toggle錯,PID損壞,,utmi錯:事務(wù)處理重傳;
??? b.stall握手,,babble檢測:禁用管道,;
??? c.nak握手:out事務(wù)處理轉(zhuǎn)為ping事務(wù)處理,,in事務(wù)處理直接重傳,。
??? 當(dāng)一個HTD所關(guān)聯(lián)的事務(wù)處理均被執(zhí)行完畢后,,置位htddonemap寄存器對應(yīng)bit位,,并查看irq_andmask和irq_ormask值判斷是否觸發(fā)中斷,。一旦中斷產(chǎn)生,,則當(dāng)前HTD的傳輸調(diào)度過程就又進入了驅(qū)動程序處理中,。
2.3 傳輸調(diào)度的驅(qū)動實現(xiàn)
?? Linux操作系統(tǒng)將USB驅(qū)動程序分為客戶端驅(qū)動、USB核心,、EHCD,、HAL(Hardware Access Layer)四個層次,。其中QH-qTD-HTD鏈表形成的相關(guān)函數(shù)按執(zhí)行順序列出,,如表2所示(高版本Linux內(nèi)核中已集成EHCI驅(qū)動部分的實現(xiàn)代碼,,故不詳述)。
?
3 仿真及綜合結(jié)果
??? 本IP使用Verilog硬件描述語言,仿真環(huán)境為modelsim,綜合環(huán)境為synopsys DC,在RTL描述后進行行為級功能仿真,,隨后綜合出門級網(wǎng)表并進行門級后仿真,。圖5即是HTD處理模塊的一次數(shù)據(jù)正確發(fā)送并回寫的時序仿真波形,。
?
參考文獻
[1] Compaq,,Intel,,Microsoft,,Philips.Universal Serial Bus Specification,Revison2.0.2000.
[2] Intel.Enhanced Host Controller Interface Specification for?Universal Serial Bus,,Version 1.0.2002.
[3] 周立功.USB2.0與OTG規(guī)范及開發(fā)指南.北京:北京航空航天大學(xué)出版社,,2004.