《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 基于EHCI協(xié)議的USB2.0主機(jī)傳輸調(diào)度的設(shè)計(jì)與實(shí)現(xiàn)

基于EHCI協(xié)議的USB2.0主機(jī)傳輸調(diào)度的設(shè)計(jì)與實(shí)現(xiàn)

2008-07-16
作者:陳星宇,,李廣軍

??? 摘 要: 為了和通用的嵌入式" title="的嵌入式">的嵌入式處理器協(xié)同工作,在 EHCI協(xié)議的基礎(chǔ)上對傳輸描述符" title="描述符">描述符和調(diào)度策略進(jìn)行優(yōu)化會更加有利于實(shí)現(xiàn)沒有總線控制權(quán)的嵌入式USB主機(jī),。在簡單剖析了EHCI協(xié)議的調(diào)度思想后給出了軟硬件劃分結(jié)構(gòu)和實(shí)現(xiàn)方法,軟硬件協(xié)同仿真結(jié)果證實(shí)了設(shè)計(jì)的正確性。
??? 關(guān)鍵詞: EHCI? 傳輸描述符? HTD? 調(diào)度

?

??? USB主機(jī)控制器" title="主機(jī)控制器">主機(jī)控制器廣泛應(yīng)用于PC和便攜式電子設(shè)備中,。USB主機(jī)控制器是USB總線的核心部分,,充當(dāng)著USB總線管理和數(shù)據(jù)發(fā)動(dòng)者的角色,。為了統(tǒng)一高速數(shù)據(jù)傳輸?shù)能沑硬件接口,Intel公司制定了增強(qiáng)型主機(jī)控制器接口EHCI(Enhanced Host Controller Interface)協(xié)議,,EHCI協(xié)議對USB2.0主機(jī)的數(shù)據(jù)傳輸調(diào)度進(jìn)行了詳細(xì)描述,,使主機(jī)控制單元的開發(fā)更具規(guī)范性。
??? 主機(jī)控制器的數(shù)據(jù)傳輸調(diào)度部分與軟硬件劃分方式緊密相關(guān),,本文所述結(jié)構(gòu)是位于所開發(fā)的一款與嵌入式MCU通用接口相連,、沒有總線控制權(quán)、面向大容量存儲類設(shè)備的IP中,。因而本文將重點(diǎn)講述在EHCI協(xié)議基礎(chǔ)上針對控制和批量傳輸調(diào)度的改進(jìn)與實(shí)現(xiàn),。
1 EHCI協(xié)議的調(diào)度思想
??? EHCI協(xié)議規(guī)定了3個(gè)接口空間:PCI配置空間、HC寄存器空間和調(diào)度接口空間,。支持兩種數(shù)據(jù)傳輸類型:異步傳輸和周期性傳輸,。
??? PCI配置空間描述了開發(fā)作為PCI設(shè)備的USB主機(jī)控制器時(shí)需要的寄存器。HC寄存器空間由性能寄存器和操作寄存器組成,;性能寄存器用于記錄主機(jī)控制器的性能參數(shù)值,;操作寄存器包括命令、狀態(tài),、中斷和根集線器端口寄存器,,是進(jìn)行USB控制的最主要接口空間。調(diào)度接口空間包括四種傳輸描述符和對應(yīng)調(diào)度策略,。
??? 周期性數(shù)據(jù)傳輸主要包括中斷和同步傳輸,,對應(yīng)描述符為siTD,、iTD;異步數(shù)據(jù)傳輸包括批量和控制傳輸,,對應(yīng)描述符為QH,、qTD。所有異步傳輸數(shù)據(jù)包通過隊(duì)列頭QH鏈接成一個(gè)環(huán)形鏈表" title="鏈表">鏈表,,一個(gè)QH代表一個(gè)端點(diǎn),,利用操作寄存器Asynlistaddr進(jìn)行初始訪問,QH下鏈接多個(gè)傳輸描述符qTD,,qTD作為一個(gè)傳輸單元對應(yīng)一個(gè)或多個(gè)事務(wù)處理,,可最大尋址20K數(shù)據(jù)量。創(chuàng)建的傳輸鏈表結(jié)構(gòu)如圖1所示,。

?


??? 圖1中三個(gè)QH分別代表三個(gè)不同類型的端點(diǎn),,而qTD編號則代表了傳輸描述符的調(diào)度順序。整個(gè)環(huán)形鏈表在生存期內(nèi)一直位于系統(tǒng)內(nèi)存中,。

??? EHCI協(xié)議描述的調(diào)度思想為:客戶軟件用USB請求塊(URB)的形式向管道請求數(shù)據(jù)傳輸,主機(jī)控制器驅(qū)動(dòng)程序(EHCD)負(fù)責(zé)跟蹤URB進(jìn)程并根據(jù)數(shù)據(jù)量的大小生成一條qTD鏈,,激活qTD并鏈接在對應(yīng)端點(diǎn)的QH下,形成圖1所示結(jié)構(gòu),。隨后,,EHCD根據(jù)USB協(xié)議規(guī)定的“幀帶寬對于端點(diǎn)均衡分配”原則,按照端點(diǎn)輪流讀取的順序?qū)⒁粋€(gè)激活的qTD信息映射到QH的工作區(qū)中,,隨之啟動(dòng)硬件操作,,EHC(高速主機(jī)控制器)讀取QH工作區(qū)信息開始進(jìn)行qTD的相關(guān)事務(wù)處理。處理完畢,,回寫狀態(tài)信息到QH工作區(qū),,觸發(fā)特定中斷重新將控制權(quán)交還給EHCD,EHCD從QH工作區(qū)中讀取狀態(tài)信息回寫到對應(yīng)qTD中,,結(jié)束一次qTD的傳輸,,并激活下一個(gè),以此循環(huán)操作,。當(dāng)URB所關(guān)聯(lián)的qTDs全部處理完畢后,,更新URB狀態(tài)信息,通過回調(diào)函數(shù)帶回給應(yīng)用程序,。這部分調(diào)度思想主要在驅(qū)動(dòng)程序中實(shí)現(xiàn),。
2 傳輸調(diào)度的實(shí)現(xiàn)
2.1 調(diào)度思想改進(jìn)

??? 由于所面向的IP連接在MCU通用IO上,不具有系統(tǒng)總線控制權(quán),,不能主動(dòng)發(fā)起對系統(tǒng)內(nèi)存的數(shù)據(jù)讀寫,,所以,為了減少硬件對MCU的頻繁訪問以及軟硬件同時(shí)訪問memroy時(shí)的阻塞現(xiàn)象,,在不改變QH,、qTD結(jié)構(gòu)的基礎(chǔ)上增加了一種驅(qū)動(dòng)程序中生成但只供硬件調(diào)度的傳輸描述符結(jié)構(gòu)——HTD(Hardware Transfer Descriptor),如圖2所示,。HTD由qTD演變而來,,兩者之間一一對應(yīng),它用 5個(gè)雙字描述了一次傳輸?shù)乃行畔?。此外,,IP內(nèi)開辟一塊獨(dú)立的存儲區(qū),存儲等待硬件處理的HTD鏈,。硬件只需按順序讀取HTD并將狀態(tài)回寫即可,。這塊存儲區(qū)可供軟硬件直接訪問,所以稱為“共享內(nèi)存”區(qū),。驅(qū)動(dòng)程序從所有激活的qTD中選擇1~32個(gè)生成HTD,,并按處理順序存入共享內(nèi)存,如圖1所示,。

?


2.2 傳輸調(diào)度的硬件實(shí)現(xiàn)-HTD處理模塊
??? 上述改進(jìn)部分主要由IP中HTD處理模塊" title="處理模塊">處理模塊(HPU加深區(qū)域)實(shí)現(xiàn),。圖3為IP實(shí)現(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,,進(jìn)行兩者之間的HTD值傳送。
??? HPU與SIE:HPU輸出一次事務(wù)處理的信息給SIE,,SIE根據(jù)處理類型(OUT/IN/SETUP)的不同將事務(wù)處理分解成令牌包,、數(shù)據(jù)包和握手包形式經(jīng)根集線器傳送出去,或是SIE接收到設(shè)備上傳的數(shù)據(jù)進(jìn)行錯(cuò)誤檢測后將結(jié)果告知HPU,。
??? HTD處理模塊內(nèi)部采用狀態(tài)機(jī)機(jī)制實(shí)現(xiàn),,共5個(gè)主要狀態(tài),如圖4所示,。表1是HTD控制寄存器,。

?

?


??? (1)idle狀態(tài):系統(tǒng)復(fù)位和異步傳輸停止時(shí)的默認(rèn)狀態(tài),不執(zhí)行硬件操作,。
??? (2)取HTD:根據(jù)上一個(gè)HTD的nextHTDp場指示從MEM中取出對應(yīng)的HTD,,每個(gè)DW用一個(gè)32位內(nèi)部寄存器表示,。
??? (3)有效性分析:包括4個(gè)方面的內(nèi)容。
?? ?①檢查HTD有效性(Active(A)=1Valid(V)=1),;
??? ②將HTD序號和htddonemap/htdskipmap寄存器比對,,確保不進(jìn)行重復(fù)處理;
??? ③查看EPnum對應(yīng)端點(diǎn)是否已經(jīng)由以前的事務(wù)處理導(dǎo)致禁用,;
??? ④計(jì)算剩余幀時(shí)是否足夠,。
??? 上述檢測均通過后,可以跳轉(zhuǎn)到事務(wù)處理執(zhí)行狀態(tài),。如果無效,,則根據(jù)無效的種類跳轉(zhuǎn)到其他狀態(tài)。
??? (4)執(zhí)行事務(wù)處理:將通過有效性檢查的HTD信息傳送給SIE進(jìn)入包級傳輸,。
??? (5)回寫HTD:分析SIE返回的處理信息,。包括兩種情況。
??? ①如果設(shè)備返回ACK握手包或是正確數(shù)據(jù),,則表明事務(wù)處理正確完成,,查看park模式計(jì)數(shù)器(EHCI協(xié)議規(guī)定:1幀中可以允許幾次對同一端點(diǎn)的事務(wù)處理操作,park計(jì)數(shù)初始值體現(xiàn)在mult場中),,如果為非0值,,則更新nrBytestransferrd(已傳輸數(shù)據(jù)量)的值,進(jìn)行當(dāng)前HTD的下一個(gè)事務(wù)處理,;如果為0,,則回寫讀取下一個(gè)HTD。
??? ②如果事務(wù)處理傳輸出錯(cuò),,則根據(jù)錯(cuò)誤類型做相應(yīng)處理:
??? a.CRC錯(cuò),,超時(shí),toggle錯(cuò),,PID損壞,,utmi錯(cuò):事務(wù)處理重傳;
??? b.stall握手,,babble檢測:禁用管道,;
??? c.nak握手:out事務(wù)處理轉(zhuǎn)為ping事務(wù)處理,in事務(wù)處理直接重傳,。
??? 當(dāng)一個(gè)HTD所關(guān)聯(lián)的事務(wù)處理均被執(zhí)行完畢后,,置位htddonemap寄存器對應(yīng)bit位,并查看irq_andmask和irq_ormask值判斷是否觸發(fā)中斷,。一旦中斷產(chǎn)生,,則當(dāng)前HTD的傳輸調(diào)度過程就又進(jìn)入了驅(qū)動(dòng)程序處理中。
2.3 傳輸調(diào)度的驅(qū)動(dòng)實(shí)現(xiàn)
?? Linux操作系統(tǒng)將USB驅(qū)動(dòng)程序分為客戶端驅(qū)動(dòng)、USB核心,、EHCD,、HAL(Hardware Access Layer)四個(gè)層次。其中QH-qTD-HTD鏈表形成的相關(guān)函數(shù)按執(zhí)行順序列出,,如表2所示(高版本Linux內(nèi)核中已集成EHCI驅(qū)動(dòng)部分的實(shí)現(xiàn)代碼,,故不詳述),。

?


3 仿真及綜合結(jié)果
??? 本IP使用Verilog硬件描述語言,仿真環(huán)境為modelsim,,綜合環(huán)境為synopsys DC,在RTL描述后進(jìn)行行為級功能仿真,,隨后綜合出門級網(wǎng)表并進(jìn)行門級后仿真,。圖5即是HTD處理模塊的一次數(shù)據(jù)正確發(fā)送并回寫的時(shí)序仿真波形。

?


參考文獻(xiàn)
[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.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。