《電子技術(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ǔ)上對(duì)傳輸描述符" title="描述符">描述符和調(diào)度策略進(jìn)行優(yōu)化會(huì)更加有利于實(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é)議對(duì)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)、面向大容量存儲(chǔ)類設(shè)備的IP中。因而本文將重點(diǎn)講述在EHCI協(xié)議基礎(chǔ)上針對(duì)控制和批量傳輸調(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)度接口空間包括四種傳輸描述符和對(duì)應(yīng)調(diào)度策略。
??? 周期性數(shù)據(jù)傳輸主要包括中斷和同步傳輸,對(duì)應(yīng)描述符為siTD、iTD;異步數(shù)據(jù)傳輸包括批量和控制傳輸,對(duì)應(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è)傳輸單元對(duì)應(yīng)一個(gè)或多個(gè)事務(wù)處理,可最大尋址20K數(shù)據(jù)量。創(chuàng)建的傳輸鏈表結(jié)構(gòu)如圖1所示。

?


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

??? EHCI協(xié)議描述的調(diào)度思想為:客戶軟件用USB請(qǐng)求塊(URB)的形式向管道請(qǐng)求數(shù)據(jù)傳輸,主機(jī)控制器驅(qū)動(dòng)程序(EHCD)負(fù)責(zé)跟蹤URB進(jìn)程并根據(jù)數(shù)據(jù)量的大小生成一條qTD鏈,激活qTD并鏈接在對(duì)應(yīng)端點(diǎn)的QH下,形成圖1所示結(jié)構(gòu)。隨后,EHCD根據(jù)USB協(xié)議規(guī)定的“幀帶寬對(duì)于端點(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)信息回寫到對(duì)應(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ā)起對(duì)系統(tǒng)內(nèi)存的數(shù)據(jù)讀寫,所以,為了減少硬件對(duì)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演變而來,兩者之間一一對(duì)應(yīng),它用 5個(gè)雙字描述了一次傳輸?shù)乃行畔?。此外,IP內(nèi)開辟一塊獨(dú)立的存儲(chǔ)區(qū),存儲(chǔ)等待硬件處理的HTD鏈。硬件只需按順序讀取HTD并將狀態(tài)回寫即可。這塊存儲(chǔ)區(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)、存儲(chǔ)器控制單元(MC)以及串行接口引擎模塊(SIE)交互。

?


??? HPU與MCUI:MCUI傳送軟件對(duì)HTD控制寄存器的讀寫信息。
??? HPU與GCU:全局控制邏輯發(fā)送事務(wù)處理使能信號(hào),幀開始指示信號(hào)給HPU,HPU在完成一次事務(wù)處理后輸出結(jié)束信號(hào)給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ò)誤檢測(cè)后將結(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中取出對(duì)應(yīng)的HTD,每個(gè)DW用一個(gè)32位內(nèi)部寄存器表示。
??? (3)有效性分析:包括4個(gè)方面的內(nèi)容。
?? ?①檢查HTD有效性(Active(A)=1Valid(V)=1);
??? ②將HTD序號(hào)和htddonemap/htdskipmap寄存器比對(duì),確保不進(jìn)行重復(fù)處理;
??? ③查看EPnum對(duì)應(yīng)端點(diǎn)是否已經(jīng)由以前的事務(wù)處理導(dǎo)致禁用;
??? ④計(jì)算剩余幀時(shí)是否足夠。
??? 上述檢測(cè)均通過后,可以跳轉(zhuǎn)到事務(wù)處理執(zhí)行狀態(tài)。如果無效,則根據(jù)無效的種類跳轉(zhuǎn)到其他狀態(tài)。
??? (4)執(zhí)行事務(wù)處理:將通過有效性檢查的HTD信息傳送給SIE進(jìn)入包級(jí)傳輸。
??? (5)回寫HTD:分析SIE返回的處理信息。包括兩種情況。
??? ①如果設(shè)備返回ACK握手包或是正確數(shù)據(jù),則表明事務(wù)處理正確完成,查看park模式計(jì)數(shù)器(EHCI協(xié)議規(guī)定:1幀中可以允許幾次對(duì)同一端點(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è):禁用管道;
??? c.nak握手:out事務(wù)處理轉(zhuǎn)為ping事務(wù)處理,in事務(wù)處理直接重傳。
??? 當(dāng)一個(gè)HTD所關(guān)聯(lián)的事務(wù)處理均被執(zhí)行完畢后,置位htddonemap寄存器對(duì)應(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)行行為級(jí)功能仿真,隨后綜合出門級(jí)網(wǎng)表并進(jìn)行門級(jí)后仿真。圖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)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。