??? 摘 要: 為了和通用的嵌入式" 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ù)位和異步傳輸停止時的默認(rèn)狀態(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.