USB1.1中文協(xié)議-3_第1頁(yè)
USB1.1中文協(xié)議-3_第2頁(yè)
USB1.1中文協(xié)議-3_第3頁(yè)
USB1.1中文協(xié)議-3_第4頁(yè)
USB1.1中文協(xié)議-3_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第四章USB數(shù)據(jù)流模型 本章介紹了數(shù)據(jù)如何在USB中傳送,將涉及到系統(tǒng)中關(guān)于信號(hào)的發(fā)送和協(xié)議定義的一層。對(duì)于USB系統(tǒng)中這一層中各個(gè)定義的詳細(xì)情況可參見(jiàn)第六章和第七章。本章中介紹的數(shù)據(jù)傳送格式,將在第八章到第十一章中逐步擴(kuò)充。所有的實(shí)現(xiàn)者必須閱讀此章,以便了解USB中一些非常核心的概念。4.1 實(shí)現(xiàn)者的視圖 USB提供了在一臺(tái)主機(jī)和若干臺(tái)附屬的USB設(shè)備之間的通信功能,從終端用戶(hù)的角度看到的USB系統(tǒng),可簡(jiǎn)單地用圖4.1表示:USB設(shè)備 USB主機(jī)圖41 USB主機(jī)/設(shè)備的簡(jiǎn)單模型但在實(shí)際的實(shí)現(xiàn)上,具體的系統(tǒng)要比這復(fù)雜,不同層次的實(shí)現(xiàn)者對(duì)USB的有不同要求,這使得我們必須從不同的層次觀察USB

2、系統(tǒng)。USB系統(tǒng)提出了一些重要的概念和情況來(lái)支持現(xiàn)代個(gè)人計(jì)算機(jī)所提出的可靠性要求,所以USB的分層理解是必須的。它能使不同層次的實(shí)現(xiàn)者只關(guān)心USB相關(guān)層次的特性功能細(xì)節(jié),而不必掌握從硬件結(jié)構(gòu)到軟件系統(tǒng)的所有細(xì)節(jié)。USB的這種層次結(jié)構(gòu)如圖4-2所示, 主機(jī) 物理設(shè)備 應(yīng)用客戶(hù)軟件USB邏輯設(shè)備USB系統(tǒng)軟件USB總線接口USB主機(jī)控制器 實(shí)際通信流 邏輯通信流 需實(shí)現(xiàn)的區(qū)域 圖42 USB需實(shí)現(xiàn)的區(qū)域各層次的具體細(xì)節(jié)將在以后逐步介紹。特別地,有四個(gè)層次的實(shí)現(xiàn)是較為集中的。 ·USB物理設(shè)備(USB Physical Device):USB上的一種硬件,可運(yùn)行一些用戶(hù)程序。 ·

3、客戶(hù)軟件(client software):為一個(gè)特定的USB設(shè)備而在主機(jī)上運(yùn)行的軟件。這種軟件由USB設(shè)備的提供者提供,或由操作系統(tǒng)提供。 ·USB系統(tǒng)軟件(USB system software):此軟件用于在特定的操作系統(tǒng)中支持USB,它由操作系統(tǒng)提供。與具體的USB設(shè)備無(wú)關(guān),也獨(dú)立于客戶(hù)軟件。 ·USB主機(jī)控制器(USB Host Controller):總線在主機(jī)方面的接口,是軟件和硬件的總和。用于支持USB設(shè)備通過(guò)USB連到主機(jī)上。 這四個(gè)USB系統(tǒng)的組成部分在功能上存在相互重疊的部分。為了支持主機(jī)與客戶(hù)之間的堅(jiān)固可靠的通信,還需要在后面對(duì)這些部分進(jìn)行細(xì)節(jié)性描述

4、。 如圖4-2所示,一臺(tái)主機(jī)與一個(gè)USB設(shè)備間的連接是由許多層上的連接組成。USB總線接口層提供了在主機(jī)和設(shè)備之間的物理連接、發(fā)送連接、數(shù)據(jù)包連接。USB設(shè)備層對(duì)USB系統(tǒng)軟件是可見(jiàn)的,系統(tǒng)軟件基于它所見(jiàn)的設(shè)備層來(lái)完成對(duì)設(shè)備的一般的USB操作。應(yīng)用層可以通過(guò)與之相配合的客戶(hù)軟件向主機(jī)提供一些額外的功能。USB設(shè)備層和應(yīng)用層的通信是邏輯上的,對(duì)應(yīng)于這些邏輯通信的實(shí)際物理通信由USB總線接口層來(lái)完成。 關(guān)于USB的物理通信在第5、6章中描述,而相關(guān)的邏輯通信在第8、9章中介紹。本章描述一些核心概念,USB系統(tǒng)的實(shí)現(xiàn)者必須先掌握它們,然后在往后幾章中閱讀更加詳細(xì)的部分。 為了描述和管理USB通信,以

5、下概念是很重要的: ·總線拓樸(Bus Topology):USB的基本物理組成、基本邏輯組成,以及各組成部分之間的相互關(guān)系。這將在4.2節(jié)中描述。 ·通信流模型(communication Flow Models):描述主機(jī)與設(shè)備如何通過(guò)USB通信,以及通信所用的四種通信類(lèi)型。這將在4.3到4.8的各節(jié)中介紹。 ·總線訪問(wèn)管理(BUS Access):主機(jī)面對(duì)大量的USB設(shè)備的各種通信要求,如何控制、協(xié)調(diào)總線的訪問(wèn)。 ·關(guān)于同步傳送的考慮:4.10節(jié)中將介紹。對(duì)要求同步傳送的設(shè)備提供一些特性。非同步傳送設(shè)備的實(shí)現(xiàn)者不必閱讀此節(jié)。4.2 總線拓樸 總線拓

6、樸結(jié)構(gòu)包括四個(gè)重要的組成部分。 ·主機(jī)和設(shè)備:USB系統(tǒng)的基礎(chǔ)組成部分。 ·物理拓樸結(jié)構(gòu):描述USB系統(tǒng)中的各組成部分是如何連接起來(lái)的。 ·邏輯拓樸結(jié)構(gòu):描述USB系統(tǒng)中各種組成部分的地位和作用,以及描述從主機(jī)和設(shè)備的角度觀察到的USB系統(tǒng)。 ·客戶(hù)軟件層與應(yīng)用層的關(guān)系:描述從客戶(hù)軟件層看到的應(yīng)用層的情況,以及從應(yīng)用層看到的客戶(hù)軟件層的情況。4.2.1 USB主機(jī) 主機(jī)的邏輯結(jié)構(gòu)如圖4-3,包括 ·USB主機(jī)控制器(USB Host Controller) ·USB系統(tǒng)軟件集合:USB驅(qū)動(dòng)程序,主機(jī)控制器的驅(qū)動(dòng)程序,主機(jī)軟件 

7、3;客戶(hù)軟件 主機(jī) 客戶(hù)軟件USB系統(tǒng)軟件USB主機(jī)控制器 實(shí)際通信流 邏輯通信流圖43 主機(jī)的組成 USB主機(jī)在USB系統(tǒng)中是一個(gè)起協(xié)調(diào)作用的實(shí)體,它不僅占有特殊的物理位置,而且對(duì)于USB以及連到USB上的設(shè)備來(lái)說(shuō),還負(fù)有特殊責(zé)任。主機(jī)控制所有的對(duì)USB的訪問(wèn)。一個(gè)USB設(shè)備想要訪問(wèn)總線必須由主機(jī)給予它使用權(quán)。主機(jī)還負(fù)責(zé)監(jiān)督USB的拓樸結(jié)構(gòu)。 關(guān)于主機(jī)和它的任務(wù)的更詳細(xì)、更徹底的描述,請(qǐng)見(jiàn)第9章。4.2.2 USB設(shè)備 一個(gè)USB設(shè)備的邏輯結(jié)構(gòu)如圖4.4所示,包括 ·USB總線接口 ·USB邏輯設(shè)備 ·應(yīng)用層 物理設(shè)備 應(yīng)用USB邏輯設(shè)備 USB總線接口實(shí)際通信

8、流邏輯通信流圖4-4 物理設(shè)備組成USB設(shè)備用于向主機(jī)提供一些額外的功能。USB設(shè)備提供的功能是多種多樣的,但面向主機(jī)的接口卻是一致的。所以,對(duì)于所有這些設(shè)備,主機(jī)可以用同樣的方式來(lái)管理它們與USB有關(guān)的部分。 為了幫助主機(jī)辨認(rèn)及確定USB設(shè)備,這些設(shè)備本身需要提供用于確認(rèn)的信息。在某一些方面的信息,所有設(shè)備都是一樣的;而另一些方面的信息,由這些設(shè)備具體的功能決定。信息的具體格式是不定的,由設(shè)備所處的設(shè)備級(jí)決定。 對(duì)USB設(shè)備更完備的描述,見(jiàn)第8章。423 總線的物理拓樸結(jié)構(gòu) USB系統(tǒng)中的設(shè)備與主機(jī)的連接方式采用的是星形連接,如圖4-5。主機(jī)設(shè)備 設(shè)備根HUB復(fù)合設(shè)備 HUB設(shè)備設(shè)備設(shè)備設(shè)備

9、HUB圖45 USB物理總線的拓?fù)?圖中的Hub是一類(lèi)特殊的USB設(shè)備,它是一組USB的連接點(diǎn),主機(jī)中有一個(gè)被嵌入的Hub叫根Hub(root Hub)。主機(jī)通過(guò)根Hub提供若干個(gè)連接點(diǎn)。為了防止環(huán)狀連接,采用星形連接來(lái)體現(xiàn)層次性,如圖4-5。這種連接的形狀很像一棵樹(shù)。 用于提供具體功能的設(shè)備叫應(yīng)用設(shè)備。許多不同功能的設(shè)備放在一起被看作一個(gè)整體,叫包。例如,鍵盤(pán)和軌跡球可以被視作一個(gè)整體,在它的內(nèi)部,提供具體功能的設(shè)備被永久地接到Hub上,而這個(gè)Hub被接到USB上。所有這些設(shè)備及這個(gè)Hub被看作一個(gè)復(fù)合設(shè)備,而這個(gè)Hub又被看作這個(gè)復(fù)合設(shè)備的內(nèi)部Hub。在主機(jī)看來(lái),這個(gè)復(fù)合設(shè)備和一個(gè)帶著若干

10、設(shè)備的單獨(dú)Hub是一樣的。圖中也標(biāo)出了一個(gè)復(fù)合設(shè)備。4.2.4 總線邏輯拓樸結(jié)構(gòu) 在物理結(jié)構(gòu)上,設(shè)備通過(guò)Hub連到主機(jī)上。但在邏輯上,主機(jī)是直接與各個(gè)邏輯設(shè)備通信的,就好像它們是直接被連到主機(jī)上一樣。這個(gè)邏輯關(guān)系如圖4-6所示。與之對(duì)應(yīng)的物理結(jié)構(gòu)就是圖4-5中的結(jié)構(gòu)。Hub也是邏輯設(shè)備,但在圖4-6中,為了簡(jiǎn)化起見(jiàn),未被畫(huà)出,雖然USB系統(tǒng)中的工作都是從邏輯角度來(lái)看待的,但主機(jī)必須對(duì)物理結(jié)構(gòu)有個(gè)了解。例如,在處理Hub被移去的情況時(shí),當(dāng)一個(gè)Hub被移出,通過(guò)它與主機(jī)相連的設(shè)備也應(yīng)一起被移去,這是由其物理結(jié)構(gòu)決定的。關(guān)于Hub的更詳細(xì)的討論在第10章。 邏輯設(shè)備 主機(jī)邏輯設(shè)備邏輯設(shè)備邏輯設(shè)備邏輯

11、設(shè)備圖46 USB邏輯總線的拓?fù)?.2.5 客戶(hù)軟件層與應(yīng)用層的關(guān)系 USB系統(tǒng)的物理上、邏輯上的拓樸結(jié)構(gòu)反映了總線的共享性。操縱USB應(yīng)用設(shè)備的客戶(hù)軟件只關(guān)心設(shè)備上與它相關(guān)的接口,客戶(hù)軟件必須通過(guò)USB軟件編程接口來(lái)操縱應(yīng)用設(shè)備。這與另一些總線如PCL,ELSA,PCMUA等不同,這些總線是直接訪問(wèn)內(nèi)存或I/O的。在運(yùn)行中,客戶(hù)軟件必須獨(dú)立于USB上的其它設(shè)備。這樣,設(shè)備和客戶(hù)軟件的設(shè)計(jì)者就可以只關(guān)心該設(shè)備與主機(jī)硬件的相互作用和主機(jī)軟件的相互作用的細(xì)節(jié)問(wèn)題。圖4-7說(shuō)明了在圖4-6的邏輯結(jié)構(gòu)下,一個(gè)設(shè)備設(shè)計(jì)者看到的客戶(hù)軟件與相應(yīng)應(yīng)用的關(guān)系的視圖??蛻?hù)軟件客戶(hù)軟件客戶(hù)軟件應(yīng)用應(yīng)用應(yīng)用圖4-7

12、客戶(hù)軟件和應(yīng)用間的關(guān)系4.3 USB通信流 USB是為主機(jī)軟件和它的USB應(yīng)用設(shè)備間的通信服務(wù)的,對(duì)客戶(hù)與應(yīng)用間不同的交互,USB設(shè)備對(duì)數(shù)據(jù)流有不同的要求。USB為此提供了更好的overall總線使用,它允許各種不同的數(shù)據(jù)流相互獨(dú)立地進(jìn)入一個(gè)USB設(shè)備。每種通信流都采取了某種總線訪問(wèn)方法來(lái)完成主機(jī)上的軟件與設(shè)備之間的通信。每個(gè)通信都在設(shè)備上的某個(gè)端點(diǎn)結(jié)束。不同設(shè)備的不同端點(diǎn)用于區(qū)分不同的通信流。 圖4-8是圖4-2的擴(kuò)充,它更詳盡地描述了USB系統(tǒng),支持了邏輯設(shè)備層和應(yīng)用層間的通信。實(shí)際的通信流要經(jīng)過(guò)好幾個(gè)接口邊界,從第5章到第7章,刻畫(huà)了機(jī)械上、電氣上以及協(xié)議上的USB接口的定義。第8章刻劃

13、了USB設(shè)備的編程接口。通過(guò)此接口,可從主機(jī)側(cè)對(duì)USB設(shè)備進(jìn)行控制,第9章介紹了兩個(gè)主機(jī)側(cè)的通信接口: ·主機(jī)控制器的驅(qū)動(dòng)程序(HCD):它位于USB主機(jī)控制器與USB系統(tǒng)軟件之間。主機(jī)控制器可以有一系列不同的實(shí)現(xiàn),而系統(tǒng)軟件獨(dú)立于任何一個(gè)具體實(shí)現(xiàn)。一個(gè)驅(qū)動(dòng)程序可以支持不同的控制器,而不必特別了解這個(gè)具體的控制器。一個(gè)USB控制器的實(shí)現(xiàn)者必須提供一個(gè)支持它自己的控制器的主機(jī)控制器驅(qū)動(dòng)器(HCD)實(shí)現(xiàn)。 ·USB驅(qū)動(dòng)程序(USBD):USB系統(tǒng)軟件與客戶(hù)軟件之間的接口,提供給客戶(hù)軟件一些方便的使用USB設(shè)備的功能。 一個(gè)USB邏輯設(shè)備對(duì)USB系統(tǒng)來(lái)說(shuō)就是一個(gè)端點(diǎn)集合。端點(diǎn)可以

14、根據(jù)它們實(shí)現(xiàn)的接口來(lái)分類(lèi)。USB系統(tǒng)軟件通過(guò)一個(gè)缺省的控制通道來(lái)管理設(shè)備。而客戶(hù)軟件用通道束管理接口。通道束的一端為端點(diǎn),一端為緩沖區(qū)??蛻?hù)軟件要求通信數(shù)據(jù)在主機(jī)上的一個(gè)緩沖和USB設(shè)備上的一個(gè)端點(diǎn)之間進(jìn)行。主機(jī)控制器或USB設(shè)備(取決于數(shù)據(jù)傳送方向)將數(shù)據(jù)打包后在USB上傳。由主機(jī)控制器(HC)協(xié)調(diào)何時(shí)用總線訪問(wèn)在USB上傳遞數(shù)據(jù)。 主機(jī) 連接 物理設(shè)備接口X應(yīng)用接口的集合 Client SW管理一個(gè)接口 到一個(gè)接 口的通道 束 與接口 無(wú) 緩沖 沒(méi)有USB 有關(guān) USB格式 格式 端點(diǎn)0USB邏輯設(shè)備端點(diǎn)的集合USB System SW管理設(shè)備 到0號(hào)端點(diǎn)的 缺省通道USB設(shè)備(第9章)

15、USB USB幀格式 接口 的數(shù)據(jù) 事務(wù) SIE主機(jī)控制器 事務(wù) USB幀格式 每個(gè)端 USB幀 SIEUSB總線接口 的數(shù)據(jù) 點(diǎn)的數(shù) 結(jié)構(gòu)的 據(jù) 數(shù)據(jù) USB 主機(jī)(第10章) USB線路 機(jī)械的,通道:兩個(gè)水平實(shí)體之間連接 電氣的, 的抽象。 協(xié)議 數(shù)據(jù)傳遞機(jī)制 (第6,7,8章) 被傳遞的數(shù)據(jù)的與USB相關(guān)的形式圖4-8 USB主機(jī)/設(shè)備的細(xì)節(jié)圖圖4-9說(shuō)明了數(shù)據(jù)如何在主機(jī)側(cè)中的內(nèi)存緩沖和設(shè)備中的端點(diǎn)中傳送。在后面,將逐步介紹端點(diǎn)、通道和通信流。 主機(jī)上的軟件通過(guò)一系列的通信流與邏輯設(shè)備進(jìn)行通信。這一系列的通信流是由USB設(shè)備的軟件和硬件設(shè)計(jì)者選擇的,使設(shè)備能傳送由USB提供的字符。端點(diǎn)

16、USB邏輯設(shè)備通道客戶(hù)軟件主機(jī)緩沖區(qū)通信流 界面 圖4-9 USB通信流4.3.1 設(shè)備端點(diǎn) 一個(gè)端點(diǎn)是一個(gè)可唯一識(shí)別的USB設(shè)備的Portion,它是主機(jī)與設(shè)備間通信流的一個(gè)結(jié)束點(diǎn)。一系列相互獨(dú)立的端點(diǎn)在一起構(gòu)成了USB邏輯設(shè)備。每個(gè)邏輯設(shè)備有一個(gè)唯一的地址,這個(gè)地址是在設(shè)備連上主機(jī)時(shí),由主機(jī)分配的,而設(shè)備中的每個(gè)端點(diǎn)在設(shè)備內(nèi)部有唯一的端點(diǎn)號(hào)。這個(gè)端點(diǎn)號(hào)是在設(shè)備設(shè)計(jì)時(shí)被給定的。每個(gè)端點(diǎn)都是一個(gè)簡(jiǎn)單的連接點(diǎn),或者支持?jǐn)?shù)據(jù)流進(jìn)設(shè)備,或者支持其流出設(shè)備,兩者不可得兼。 一個(gè)端點(diǎn)的特性決定了它與客戶(hù)軟件進(jìn)行的傳送的類(lèi)型。一個(gè)端點(diǎn)有以下特性: ·端點(diǎn)的總線訪問(wèn)頻率要求 ·端點(diǎn)的總線

17、延遲要求 ·端點(diǎn)的帶寬要求 ·端點(diǎn)的端點(diǎn)號(hào) ·對(duì)錯(cuò)誤處理的要求 ·端點(diǎn)能接收或發(fā)送的包的最大長(zhǎng)度 ·端點(diǎn)的傳送類(lèi)型(詳見(jiàn)4.4節(jié)) ·端點(diǎn)與主機(jī)的數(shù)據(jù)傳送方向 端點(diǎn)號(hào)不為0的端點(diǎn)在被設(shè)置前處于未知狀態(tài),是不能被主機(jī)訪問(wèn)的。4.3.1 對(duì)0號(hào)端點(diǎn)的要求 所有USB設(shè)備都需要實(shí)現(xiàn)一個(gè)缺省的控制方法。這種方法將端點(diǎn)0作為輸入端點(diǎn),同時(shí)也將端點(diǎn)0作為輸出端點(diǎn)。USB系統(tǒng)用這個(gè)缺省方法初始化及一般地使用邏輯設(shè)備(即設(shè)置此設(shè)備)。缺省控制通道(見(jiàn)4.3.2節(jié))支持了對(duì)控制的傳送(控制傳送將在4.5中定義),一旦設(shè)備接上,并加電,且又收到一個(gè)總線復(fù)

18、位命令,端點(diǎn)0就是可訪問(wèn)的了。4.3.1.2 對(duì)非0號(hào)端點(diǎn)的要求 設(shè)備可以有除0以外的其它端點(diǎn),這取決于這些設(shè)備的實(shí)現(xiàn)。低速設(shè)備在0號(hào)輸入及輸出端點(diǎn)外,只能有2個(gè)額外的可選端點(diǎn)。而高速設(shè)備可具有的額外端點(diǎn)數(shù)僅受限于協(xié)議的定義(協(xié)議中規(guī)定,最多15個(gè)額外的輸入端點(diǎn)和最多15個(gè)額外的輸出端點(diǎn))。 除缺省控制通道的缺省端點(diǎn)外,其它端點(diǎn)只有在設(shè)備被設(shè)置后才可使用,對(duì)設(shè)備的設(shè)置是設(shè)備設(shè)置過(guò)程(見(jiàn)第8章)的一部分。4.3.2 通道 一個(gè)USB通道是設(shè)備上的一個(gè)端點(diǎn)和主機(jī)上軟件之間的聯(lián)系。體現(xiàn)了主機(jī)上緩存和端點(diǎn)間傳送數(shù)據(jù)的能力。 有兩不同的且互斥的通道通信格式。 ·流(Stream):指不具有US

19、B定義的格式的數(shù)據(jù)流。 ·消息(Message):指具有某種USB定義的格式的數(shù)據(jù)流。 USB不解釋在通道中傳送的數(shù)據(jù)的內(nèi)容。消息通道要求數(shù)據(jù)組織成USB定義的格式,但它的內(nèi)容,USB是不管的。 特別地,有下列概念與通道相關(guān): ·對(duì)USB總線訪問(wèn)的申請(qǐng)(claim),帶寬的使用情況 ·傳送類(lèi)型 ·與通道相連的端點(diǎn)的特性,例如:端點(diǎn)的數(shù)據(jù)傳送方向,最大數(shù)據(jù)凈負(fù)荷區(qū)的長(zhǎng)度。數(shù)據(jù)凈負(fù)荷是指在總線處理事務(wù)(transaction)中,數(shù)據(jù)包中數(shù)據(jù)區(qū)的數(shù)據(jù)(總線處理事務(wù)見(jiàn)第7章)。由兩個(gè)0號(hào)端點(diǎn)組成的通道叫缺省控制通道。一旦設(shè)備加電并復(fù)位后,此通道即可使用。其它通

20、道只在設(shè)備被設(shè)置后才存在。USB系統(tǒng)軟件在決定設(shè)備身份、設(shè)置要求和設(shè)置設(shè)備時(shí)使用缺省控制通道。當(dāng)設(shè)備被設(shè)置后,這個(gè)設(shè)備的特定軟件還可使用該通道。USB系統(tǒng)軟件保留缺省控制通道的擁有權(quán),協(xié)調(diào)其它客戶(hù)軟件對(duì)通道的使用。 一個(gè)客戶(hù)軟件一般都通過(guò)I/O請(qǐng)求包(IRP)來(lái)要求數(shù)據(jù)傳送。然后,或者等待,或者當(dāng)傳送完成后被通知。IRP的細(xì)節(jié)是由操作系統(tǒng)來(lái)指定的??蛻?hù)軟件提出與設(shè)備上的端點(diǎn)建立某個(gè)方向的數(shù)據(jù)傳送的請(qǐng)求,IRP就可簡(jiǎn)單地理解為這個(gè)請(qǐng)求。一個(gè)客戶(hù)軟件可以要求一個(gè)通道回送所有的IRP。當(dāng)關(guān)于IRP的總線傳送結(jié)束時(shí),無(wú)論它是成功地完成,還是出現(xiàn)錯(cuò)誤,客戶(hù)軟件都將獲得通知說(shuō)IRP完成了。 如果通道上沒(méi)有

21、正在傳送的數(shù)據(jù),也沒(méi)有數(shù)據(jù)想使用此通道,這個(gè)通道就處于閑置狀態(tài)。主機(jī)控制器對(duì)它不采取任何動(dòng)作,也就是說(shuō),這個(gè)通道的端點(diǎn)會(huì)發(fā)現(xiàn)沒(méi)有任何的總線動(dòng)作是沖它而來(lái)的。只有當(dāng)有數(shù)據(jù)在通道上時(shí),該通道才能發(fā)現(xiàn)總線對(duì)它的動(dòng)作。 如果一個(gè)非同步通道遇到一個(gè)迫使它給主機(jī)發(fā)STALL的情況(參見(jiàn)第7章),或者在任一個(gè)IRP中發(fā)現(xiàn)3個(gè)總線錯(cuò)誤。這個(gè)IRP將被中止。其它所有突出的IRP也一同被中止。通道不再接收任何IRP,直到客戶(hù)軟件從這個(gè)情況中恢復(fù)過(guò)來(lái)(恢復(fù)的方式取決于軟件的實(shí)現(xiàn)),而且承認(rèn)這個(gè)中止或出現(xiàn)的錯(cuò)誤,并發(fā)一個(gè)USBD Call來(lái)表明它已承認(rèn)。一個(gè)合適的狀態(tài)信息將通知客戶(hù)軟件IRP的結(jié)果出錯(cuò)或中止。同步通道

22、的運(yùn)作在4.6中介紹。 一個(gè)IRP可能會(huì)需要多個(gè)數(shù)據(jù)凈荷區(qū)來(lái)傳遞數(shù)據(jù)。這些數(shù)據(jù)區(qū)除最后一個(gè)外,都具有數(shù)據(jù)凈荷區(qū)的最大長(zhǎng)度,最后一個(gè)數(shù)據(jù)區(qū)包含了這個(gè)IRP中剩下的數(shù)據(jù)。(可參見(jiàn)關(guān)于傳送類(lèi)型的介紹,以獲得更詳細(xì)的了解)。對(duì)這樣的一個(gè)IRP,短包(也就是說(shuō)未達(dá)到最大長(zhǎng)度的數(shù)據(jù)區(qū))在數(shù)據(jù)輸入時(shí)無(wú)法填完IRP數(shù)據(jù)緩沖區(qū)。這可能會(huì)有二種不同解釋?zhuān)蕾?lài)于客戶(hù)軟件的情況: ·如果該客戶(hù)軟件可以接受變長(zhǎng)的IRP,那么,IRP數(shù)據(jù)緩沖區(qū)未被填滿(mǎn),可以看作一個(gè)分限,說(shuō)明一個(gè)IRP已成功結(jié)束,主機(jī)控制器可以準(zhǔn)備接收下一個(gè)IRP了。 ·如果該客戶(hù)軟件只收定長(zhǎng)的IRP。那么,我們認(rèn)為發(fā)生了一個(gè)錯(cuò)誤,

23、這IRP將被中止,通道也會(huì)被阻塞,通道上的數(shù)據(jù)都中止。 因?yàn)閷?duì)這兩種情況,主機(jī)控制器會(huì)有不同的反應(yīng),而且采取何種措施不由控制器決定,所以對(duì)每個(gè)IRP都必須說(shuō)明客戶(hù)軟件的具體要求。 通道的端點(diǎn)可以用NAK信號(hào)來(lái)通知主機(jī)自己正忙,NAK不能作為向主機(jī)反還IRP的中止條件。在一個(gè)給定的IRP處理過(guò)程中,可以遇到任意多個(gè)NAK,NAK不構(gòu)成錯(cuò)誤。4.3.2.1 流通道 流通道中的數(shù)據(jù)是流的形式,也就是該數(shù)據(jù)的內(nèi)容不具有USB要求的結(jié)構(gòu)。數(shù)據(jù)從流通道一端流進(jìn)的順序與它們從流通道另一端流出時(shí)的順序是一樣的,流通道中的通信流總是單方向的。 對(duì)于在流通道中傳送的數(shù)據(jù),USB認(rèn)為它來(lái)自同一個(gè)客戶(hù)。USB系統(tǒng)軟件

24、不能夠提供使用同一流通道的多個(gè)客戶(hù)的同步控制。在流通道中傳送的數(shù)據(jù)遵循先進(jìn)先出原則。 流管流只能連到一個(gè)固定號(hào)碼的端點(diǎn)上,或者流進(jìn),或者流出。(這個(gè)號(hào)碼是由協(xié)議層決定的)。而具有這個(gè)號(hào)碼的另一個(gè)方向的端點(diǎn)可以被分配給其它流通道。 流通道支持同步傳送,中斷傳送和批傳送,這些在稍后的章節(jié)會(huì)進(jìn)一步解釋。4.3.2.2 消息通道 消息通道與端點(diǎn)的關(guān)系同流通道與端點(diǎn)的關(guān)系是不同的。首先,主機(jī)向USB設(shè)備發(fā)出一個(gè)請(qǐng)求;接著,就是數(shù)據(jù)的傳送;最后,是一個(gè)狀態(tài)階段。為了能夠容納請(qǐng)求/數(shù)據(jù)/狀態(tài)的變化,消息通道要求數(shù)據(jù)有一個(gè)格式,此格式保證了命令能夠被可靠地傳送和確認(rèn)。消息通道允許雙方向的信息流,雖然大多數(shù)的通

25、信流是單方向的。特別地,缺省控制通道也是一個(gè)消息通道。 USB系統(tǒng)軟件不會(huì)讓多個(gè)請(qǐng)求同時(shí)要求同一個(gè)消息通道。一個(gè)設(shè)備的每個(gè)消息通道在一個(gè)時(shí)間段內(nèi),只能為一個(gè)消息請(qǐng)求服務(wù),多個(gè)客戶(hù)軟件可以通過(guò)缺省控制通道發(fā)出它們的請(qǐng)求,但這些請(qǐng)求到達(dá)設(shè)備的次序是按先進(jìn)先出的原則的。設(shè)備可以在數(shù)據(jù)傳送階段和狀態(tài)階段控制信息流,這取決于這些設(shè)備與主機(jī)交互的能力(參見(jiàn)第7章)。正常情況下,在上一個(gè)消息未被處理完之前,是不能向消息通道發(fā)下一個(gè)消息的。但在有錯(cuò)誤發(fā)生的情況下,主機(jī)會(huì)取消這次消息傳送,并且不等設(shè)備將已收的數(shù)據(jù)處理完,就開(kāi)始下一次的消息傳送。在操作通道的軟件看來(lái),一個(gè)IRP中的錯(cuò)誤,使這個(gè)IRP被取消,并且所

26、有正排隊(duì)等待的IRP一同也被取消。申請(qǐng)這個(gè)IRP的客戶(hù)被通知IRP結(jié)束,且有出錯(cuò)提示。 消息通道后有兩個(gè)相同號(hào)碼的端點(diǎn),一個(gè)用于輸入,一個(gè)用于輸出。兩個(gè)號(hào)碼必須相同。 消息通道支持控制傳送,這將在4.5中進(jìn)行介紹。4.4 傳送類(lèi)型 USB通過(guò)通道在主機(jī)緩沖區(qū)與設(shè)備端點(diǎn)間傳送數(shù)據(jù)。在消息通道中傳遞的數(shù)據(jù)具有USB定義的格式,它的數(shù)據(jù)凈荷區(qū)中包含的數(shù)據(jù)允許具有設(shè)備指定的格式。USB要求任何在通道上傳送的數(shù)據(jù)均被打包,數(shù)據(jù)的解釋工作由客戶(hù)軟件和應(yīng)用層軟件負(fù)責(zé)。USB提供了多種數(shù)據(jù)格式,使之盡可能滿(mǎn)足客戶(hù)軟件和應(yīng)用軟件的要求。一個(gè)IRP需要一個(gè)或多個(gè)總線處理事務(wù)來(lái)完成。 每個(gè)傳送類(lèi)型在以下的幾個(gè)傳送特

27、征上會(huì)有不同: ·USB規(guī)定的數(shù)據(jù)格式 ·信息流的方向 ·數(shù)據(jù)凈荷區(qū)的長(zhǎng)度限制 ·總線訪問(wèn)的限制 ·延時(shí)的限制 ·出錯(cuò)處理 USB設(shè)備的設(shè)計(jì)者可以決定設(shè)備上每個(gè)端點(diǎn)的能力。一旦為這個(gè)端點(diǎn)建立了一個(gè)通道,這個(gè)通道的絕大多數(shù)傳送特征也就固定下來(lái)了,一直到這個(gè)通道被取消為止。也有部分傳送特征可以改變,對(duì)這樣的特征,將會(huì)在介紹每個(gè)傳送類(lèi)型時(shí)作出說(shuō)明。 USB定義了4種傳送類(lèi)型: ·控制傳送:可靠的、非周期性的、由主機(jī)軟件發(fā)起的請(qǐng)求或者回應(yīng)的傳送,通常用于命令事務(wù)和狀態(tài)事務(wù)。 ·同步傳送:在主機(jī)與設(shè)備之間的周期性的、連續(xù)的通

28、信,一般用于傳送與時(shí)間相關(guān)的信息。這種類(lèi)型保留了將時(shí)間概念包含于數(shù)據(jù)中的能力。但這并不意味著,傳送這樣數(shù)據(jù)的時(shí)間總是很重要的,即傳送并不一定很緊急。 ·中斷傳送:小規(guī)模數(shù)據(jù)的、低速的、固定延遲的傳送。 ·批傳送:非周期性的,大包的可靠的傳送。典型地用于傳送那些可以利用任何帶寬的數(shù)據(jù),而且這些數(shù)據(jù)當(dāng)沒(méi)有可用帶寬時(shí),可以容忍等待。 這些傳送類(lèi)型將在后面的四個(gè)大節(jié)中進(jìn)行討論。IRP的數(shù)據(jù)均放在數(shù)據(jù)包中的數(shù)據(jù)區(qū)被傳送,這將在7.4.3中介紹。關(guān)于與具體傳送類(lèi)型有關(guān)的一些協(xié)議細(xì)節(jié)在第7章中介紹。4.5 控制傳送 控制傳送允許訪問(wèn)一個(gè)設(shè)備的不同部分??刂苽魉陀糜谥С衷诳蛻?hù)軟件和它的應(yīng)用

29、之間的關(guān)于設(shè)置信息、命令信息、狀態(tài)信息的傳送。控制傳送由以下幾個(gè)事務(wù)組成:(1)建立聯(lián)系,把請(qǐng)求信息從主機(jī)傳到它的應(yīng)用設(shè)備;(2)零個(gè)或多個(gè)數(shù)據(jù)傳送事務(wù),按照(1)事務(wù)中指明的方向傳送數(shù)據(jù);(3)狀態(tài)信息回傳。將狀態(tài)信息從應(yīng)用設(shè)備傳到主機(jī)。當(dāng)端點(diǎn)成功地完成了被要求的操作時(shí),回傳的狀態(tài)信息為“success”。7.2中將介紹控制傳送的細(xì)節(jié),例如,什么樣的包,什么樣的總線事務(wù)和總線事務(wù)的順序。而第8章將介紹USB定義的USB命令字。 USB設(shè)備必須實(shí)現(xiàn)缺省控制通道,并將它實(shí)現(xiàn)成一個(gè)消息通道。這個(gè)通道由USB系統(tǒng)軟件使用。USB設(shè)備的確認(rèn)信息、狀態(tài)信息以及控制信息由該通道傳送。如果需要的話(huà),一個(gè)應(yīng)用

30、設(shè)備可以為端點(diǎn)實(shí)現(xiàn)額外的控制通道。 USB設(shè)備框架(見(jiàn)第8章)定義了標(biāo)準(zhǔn)的,設(shè)備級(jí)的或由銷(xiāo)售商提供的請(qǐng)求,這些請(qǐng)求可操作設(shè)備的狀態(tài)。USB設(shè)備框架又定義了一些描述器(descriptor),用于存放USB設(shè)備的各種信息。控制機(jī)制提供訪問(wèn)設(shè)備描述器和請(qǐng)求操作設(shè)備的機(jī)制。 控制傳送只能通過(guò)消息通道進(jìn)行。所以,使用控制傳送的數(shù)據(jù)必須具有USB定義的數(shù)據(jù)格式(見(jiàn)4.5.1節(jié))。 應(yīng)用層和相應(yīng)的客戶(hù)軟件不能為控制傳送指定總線訪問(wèn)頻率和帶寬。這由USB系統(tǒng)軟件從全局優(yōu)化角度加以決定。USB系統(tǒng)軟件會(huì)限制設(shè)備要求的訪問(wèn)頻率和帶寬,這些限制在4.5.3和4.5.4中介紹。4.5.1 控制傳送類(lèi)型的數(shù)據(jù)格式 S

31、etup包的數(shù)據(jù)格式屬于一個(gè)命令集,這個(gè)集合能保證主機(jī)和設(shè)備之間正常通信。這個(gè)格式也允許一些銷(xiāo)售商對(duì)設(shè)備命令的擴(kuò)展。Setup包后的數(shù)據(jù)傳送也具有USB定義的格式,除非這個(gè)數(shù)據(jù)是銷(xiāo)售商提供的信息。回傳的狀態(tài)信息仍然具有USB定義的格式。7.5.8節(jié)和第8章將介紹控制傳送的Setup定義和數(shù)據(jù)定義。4.5.2 控制傳送的方向 控制傳送使用的是消息通道上的雙向信息流。所以,一旦一個(gè)控制通道被確認(rèn)之后,這個(gè)通道就使用了具有某個(gè)端點(diǎn)號(hào)的兩個(gè)端點(diǎn),一個(gè)輸入,一個(gè)輸出。4.5.3 控制傳送包的大小的限制 控制傳送的端點(diǎn)決定了它所能接收或發(fā)送的最大數(shù)據(jù)凈負(fù)荷區(qū)長(zhǎng)度。USB為高速設(shè)備定義的最大數(shù)據(jù)凈負(fù)荷區(qū)長(zhǎng)度

32、為8、16、32或64字節(jié),低速設(shè)備的數(shù)據(jù)凈負(fù)荷區(qū)的長(zhǎng)度只能是8字節(jié)。Setup后的所有數(shù)據(jù)包都要遵守這個(gè)規(guī)定,這個(gè)規(guī)定是針對(duì)這些數(shù)據(jù)包中的數(shù)據(jù)凈負(fù)荷區(qū)的,不包括包中的協(xié)議要求的額外信息,Setup包實(shí)際上也是8字節(jié)??刂仆ǖ?包括缺省控制通道)總是使用w Max Packet Size的值。 端點(diǎn)在自己的設(shè)置信息中報(bào)告自己允許的最大凈負(fù)荷區(qū)長(zhǎng)度。USB不要求數(shù)據(jù)凈負(fù)荷區(qū)必須達(dá)到最大長(zhǎng)度,當(dāng)長(zhǎng)度不夠時(shí),不必填充到最大長(zhǎng)度。 主機(jī)控制器對(duì)高速設(shè)備的控制通道端點(diǎn)支持8、16、32、64字節(jié)的最大長(zhǎng)度,對(duì)低速設(shè)備支持8字節(jié)的長(zhǎng)度。它不能支持更大的或更小的其它長(zhǎng)度。 對(duì)于缺省控制通道的最大數(shù)據(jù)區(qū)長(zhǎng)度,

33、USB系統(tǒng)軟件要從設(shè)備描述器的頭8個(gè)字節(jié)中讀出,設(shè)備將這8個(gè)字節(jié)放在一個(gè)包中發(fā)出,其中的七個(gè)字包含了缺省通道的wMaxPacketSize。對(duì)其它的控制端點(diǎn)來(lái)說(shuō),USB系統(tǒng)軟件在它們被設(shè)置后,獲得此長(zhǎng)度,然后USB系統(tǒng)軟件就會(huì)保證數(shù)據(jù)凈負(fù)荷區(qū)不會(huì)超長(zhǎng)。另外,主機(jī)總是認(rèn)為數(shù)據(jù)凈負(fù)荷區(qū)的最大長(zhǎng)度至少為8。 端點(diǎn)所傳的數(shù)據(jù)凈負(fù)荷區(qū)長(zhǎng)度必須小于或等于其wMaxPacketSize(參見(jiàn)第8章),當(dāng)一個(gè)數(shù)據(jù)區(qū)不能容納所傳數(shù)據(jù)時(shí),就分幾個(gè)區(qū)來(lái)傳。除最后一個(gè)區(qū)外,其它區(qū)都應(yīng)達(dá)到最大長(zhǎng)度。最后一區(qū)包含最后剩下的數(shù)據(jù)。 當(dāng)端點(diǎn)做了以下兩件事時(shí),控制傳送的數(shù)據(jù)階段可被認(rèn)為結(jié)束: ·已傳了由Setup階段

34、指定的數(shù)據(jù)量。 ·傳了一個(gè)數(shù)據(jù)包,它的長(zhǎng)度為0或它的數(shù)據(jù)區(qū)長(zhǎng)度小于最大長(zhǎng)度。 數(shù)據(jù)階段結(jié)束后,主機(jī)控制器進(jìn)入狀態(tài)階段,而不是開(kāi)始另一個(gè)數(shù)據(jù)傳誦。如果它不這樣做,端點(diǎn)會(huì)認(rèn)為通道脫線而中止通道(通道脫線見(jiàn)4.3.2)。如果主機(jī)在狀態(tài)階段時(shí),主機(jī)收到一個(gè)大于最大長(zhǎng)度的數(shù)據(jù)區(qū),那么請(qǐng)求這次傳送的IRP將被中止。 當(dāng)數(shù)據(jù)全部傳完,主機(jī)與端點(diǎn)之間的控制傳送的數(shù)據(jù)階段結(jié)束。如果其間,端點(diǎn)收到了超過(guò)最大長(zhǎng)度的數(shù)據(jù)區(qū),它將中止通道。4.5.4 控制傳送的總線訪問(wèn)的限制 無(wú)論低速設(shè)備還是高速設(shè)備都可以使用控制通道。 端點(diǎn)沒(méi)法指明控制通道對(duì)總線訪問(wèn)頻率的要求。USB權(quán)衡所有控制通道的總線訪問(wèn)頻率和正等待的

35、IRP,從全局優(yōu)化,提供一個(gè)“最佳”傳送方案。 USB要求數(shù)據(jù)幀中的一部分被留給控制傳送使用。 ·如果被引發(fā)的控制傳送(引發(fā)方式由實(shí)現(xiàn)決定)只用了數(shù)據(jù)幀的不到10%的時(shí)間,則剩余的時(shí)間留給批傳送(參見(jiàn)4.8節(jié))。 ·如果一個(gè)控制傳送被引發(fā)又被中止,則它的中止可在本次的幀內(nèi),也可在以后的幀內(nèi)。也就是說(shuō),引發(fā)和中止不必在同一個(gè)幀內(nèi)。 ·如果留給控制傳送的時(shí)間不夠用,但恰好有一些同步和中斷傳送的幀時(shí)間未用,則主機(jī)控制器利用這些時(shí)間進(jìn)行額外的控制傳送。 ·如果對(duì)可用的幀時(shí)間有太多的控制傳送在等待,那么就對(duì)它們進(jìn)行排序然后傳送。 ·如果各個(gè)控制傳送申請(qǐng)的

36、是不同的端點(diǎn),主機(jī)控制器根據(jù)公平訪問(wèn)原則決定它們的訪問(wèn)順序。公平訪問(wèn)原則的具體內(nèi)容決定于主機(jī)控制器的實(shí)現(xiàn)。 ·如果一個(gè)控制傳送事務(wù)頻繁地被中止,不能認(rèn)為給它的總線訪問(wèn)時(shí)間是不公平的。 這些要求使得控制傳送一般可以在總線上進(jìn)行規(guī)則地、最優(yōu)化地傳送。 對(duì)某個(gè)端點(diǎn)的控制傳送的速率是可以變化的,USB系統(tǒng)軟件控制這些離散的變化。端點(diǎn)和其客戶(hù)軟件不能想當(dāng)然的認(rèn)為其有一個(gè)固定的傳送速率,端點(diǎn)可能發(fā)現(xiàn)在一幀內(nèi)有零個(gè)或若干個(gè)傳送。一個(gè)端點(diǎn)和它相應(yīng)的客戶(hù)軟件可占用的總線時(shí)間會(huì)因?yàn)槠渌O(shè)備進(jìn)入或退出系統(tǒng)或者本設(shè)備上的其它端點(diǎn)進(jìn)入或退出系統(tǒng)而改變。 總線頻率和幀定時(shí)決定于一個(gè)幀內(nèi)可傳送的控制傳送的最大個(gè)數(shù)

37、。在任一個(gè)USB系統(tǒng)內(nèi),一個(gè)幀內(nèi)的8字節(jié)高速數(shù)據(jù)區(qū)須少于29個(gè),8字節(jié)低速數(shù)據(jù)區(qū)須少于4個(gè)。表4-1是關(guān)于不同規(guī)格的高速的控制傳送的情況,以及在一幀內(nèi)可能的最大的傳送數(shù)目。這張表有兩個(gè)默認(rèn)的前提,即控制傳送有一個(gè)數(shù)據(jù)傳送階段而且這個(gè)數(shù)據(jù)傳送階段有一個(gè)長(zhǎng)度為0狀態(tài)階段,表4-1還指出了出現(xiàn)兩個(gè)數(shù)據(jù)區(qū)都達(dá)不到最大長(zhǎng)度的情況,表中不包括用于管理的一些額外的位。 表4-1 高速控制傳送限制協(xié)議開(kāi)銷(xiāo)(46字節(jié))(9 SYNC bytes, 9 PID bytes, 6 Endpoint+CRC bytes,6 CRC bytes, 8 Setup data bytes, and a 7_byte int

38、erpacker delay(EOP, etc.)數(shù)據(jù)凈荷區(qū)最大帶寬(字節(jié)/秒)Frame帶寬/傳送最大傳送數(shù)剩余字節(jié)有用數(shù)據(jù)字節(jié)/Frame 1320003%3223322620003%31436241200003%303012082240004%2816224163840004%2436384326080005%1937608648320007%1383832Ma因?yàn)橐粋€(gè)幀內(nèi)只留10%的時(shí)間給非周期性傳送,所以當(dāng)一個(gè)系統(tǒng)的總線時(shí)間被排滿(mǎn)的時(shí)候,這個(gè)系統(tǒng)內(nèi)的所有控制傳送只能去競(jìng)爭(zhēng)每個(gè)幀內(nèi)的三個(gè)控制傳送名額。因?yàn)槌丝蛻?hù)軟件會(huì)要求控制傳送外,USB系統(tǒng)要用控制傳送來(lái)傳

39、送設(shè)置信息,所以對(duì)某個(gè)客戶(hù)和它的應(yīng)用就不能指望它們的控制傳送像它們想的一樣進(jìn)行。主機(jī)控制器可以自由地決定如何將某個(gè)具體的控制傳送在總線上進(jìn)行,可以在一個(gè)幀內(nèi),也可以跨幾個(gè)幀。一個(gè)端點(diǎn)可能發(fā)現(xiàn)一個(gè)控制傳送的各個(gè)總線處理事務(wù)在同一幀內(nèi)或分在幾個(gè)不連續(xù)的幀內(nèi)。由于具體實(shí)現(xiàn)的不同,主機(jī)控制器可能不能提供理論上的每幀的最大控制傳送數(shù)目。 低速控制傳送與高速控制傳送都是競(jìng)爭(zhēng)同樣多的可用幀時(shí)間。低速控制傳送只是要用更多的時(shí)間來(lái)傳送罷了。表4-2列出了不同規(guī)格的低速包的情況,以及一幀內(nèi)允許的最大包數(shù)。這張表同樣沒(méi)包括進(jìn)管理用的開(kāi)銷(xiāo)。無(wú)論低速與高速,由于一個(gè)控制傳送都由幾個(gè)包組成,所以都可能要用幾個(gè)幀才能完成傳

40、送。表4-2低速控制傳送限制協(xié)議開(kāi)銷(xiāo)(46字節(jié))數(shù)據(jù)凈荷區(qū)最大帶寬字節(jié)/FrameFrame帶寬/傳送最大傳送數(shù)剩余字節(jié)有用數(shù)據(jù)字節(jié)/Frame 1 3000 25% 3463 2600026% 3436 41200027% 33712 82400029% 32524Max1875001874.5.5 控制傳送的數(shù)據(jù)順序 要進(jìn)行控制傳送,先要由主機(jī)向設(shè)備發(fā)一個(gè)總線建立(Setup)信息。它描述了控制訪問(wèn)的類(lèi)型,設(shè)備將執(zhí)行此控制訪問(wèn)。這個(gè)階段之后,是零個(gè)或多個(gè)控制數(shù)據(jù)信息的傳送,這是進(jìn)行訪問(wèn)的具體信息。最后,由狀態(tài)信息的傳送來(lái)結(jié)束這次控制傳送,允許端點(diǎn)將這次控傳的狀態(tài)回送給客戶(hù)軟件。這次控傳完成

41、之后,可以進(jìn)行對(duì)這個(gè)端點(diǎn)的下一個(gè)控傳,如4.5.4節(jié)所述,每次控傳何時(shí)在總線上進(jìn)行由主機(jī)控制器的具體實(shí)現(xiàn)決定。 在數(shù)據(jù)傳送階段和狀態(tài)信息回傳階段,可能由于設(shè)備自身的原因,設(shè)備處于“忙”狀態(tài)。此時(shí)端點(diǎn)可設(shè)法表明自己正忙(見(jiàn)第7、8章),主機(jī)將試著在稍后時(shí)間重傳一次。 如果在上一個(gè)控傳結(jié)束之前,端點(diǎn)又收到一個(gè)總線建立信息,設(shè)備將結(jié)束現(xiàn)未完成的傳送,轉(zhuǎn)而處理新的控傳。正常情況下,是不會(huì)早發(fā)總線建立信息的,不過(guò)當(dāng)上一個(gè)控傳因錯(cuò)誤而被中止后,主機(jī)可發(fā)下一個(gè)控傳的總線建立信息。在端點(diǎn)看來(lái),這是在上一個(gè)控傳結(jié)束前過(guò)早發(fā)出的。 一旦主機(jī)遇到一個(gè)引起中止的條件或檢測(cè)到一個(gè)錯(cuò)誤,端點(diǎn)可以通過(guò)接收下一個(gè)Setup包

42、的 PID來(lái)恢復(fù),也就是說(shuō),不一定必須從別的通道進(jìn)行恢復(fù)。對(duì)于缺省控制通道,如果端點(diǎn)收不到Setup的 PID時(shí),最終會(huì)要求設(shè)備復(fù)位來(lái)清除中止條件或錯(cuò)誤條件。 在控傳中,USB提供了強(qiáng)大的錯(cuò)誤檢測(cè)功能和錯(cuò)誤恢復(fù)和重傳功能。傳送器和接收器可以保持階段的同步,既關(guān)于他們?cè)诳貍鞯哪膫€(gè)階段這個(gè)問(wèn)題上保持同步。并且以最小的代價(jià)恢復(fù)。接收器可以識(shí)別一個(gè)數(shù)據(jù)重傳包或狀態(tài)信息重傳包,因?yàn)榘袔в袛?shù)據(jù)重傳的指示。一個(gè)發(fā)送器可以通過(guò)對(duì)方給它發(fā)的握手信息確知它發(fā)的數(shù)據(jù)重送包和狀態(tài)信息包已被成功接收,除了Setup包以外,協(xié)議可以將一個(gè)重送的包與原來(lái)的包區(qū)分開(kāi)來(lái),Setup包可以因?yàn)槌鲥e(cuò)而重傳,但無(wú)法說(shuō)明此包是重傳的

43、,還是原來(lái)的。4.6 同步傳送 在非USB的環(huán)境下,同步傳送意味著恒定速率、錯(cuò)誤容忍(error-tolerant)的傳送。在USB環(huán)境下,要求同步傳送能提供以下幾點(diǎn): ·固定的延遲下,確保對(duì)USB帶寬的訪問(wèn)。 ·只要數(shù)據(jù)能提供得上,就能保證通道上的恒定數(shù)據(jù)傳送速度。 ·如果由于錯(cuò)誤而造成傳送失敗,并不重傳數(shù)據(jù)。 當(dāng)USB同步傳送類(lèi)型被用來(lái)支持同步的源和目的時(shí),使用這個(gè)傳送類(lèi)型的軟件并不要求是同步的,4.10中將詳細(xì)介紹USB上的同步數(shù)據(jù)的處理。4.6.1 同步傳送的數(shù)據(jù)格式 對(duì)于同步傳送的通道(同步通道),USB并不對(duì)數(shù)據(jù)格式做要求。4.6.2 同步傳送的方向

44、同步通道是一種流通道,所以是單方向的。在對(duì)端點(diǎn)的描述中指明了與它相連的通道的數(shù)據(jù)流方向。如果設(shè)備要同步的雙向流的話(huà),只好用兩個(gè)同步通道,一個(gè)流進(jìn),一個(gè)流出。4.6.3 同步傳送中包的大小的限制 同步通道的端點(diǎn)確定了數(shù)據(jù)區(qū)的最大長(zhǎng)度,USB在設(shè)置端點(diǎn)期間,使用這一個(gè)信息,看是否可在每幀內(nèi)為最大長(zhǎng)度的數(shù)據(jù)區(qū)留下足夠的時(shí)間。如果可以,設(shè)置端點(diǎn)成功;否則,不成功。 USB系統(tǒng)軟件可為一個(gè)控制傳送的通道調(diào)整最大數(shù)據(jù)區(qū)長(zhǎng)度,但無(wú)法為同步通道進(jìn)行如此調(diào)整。在確定的USB設(shè)置下,同步通道要么被支持,要么不被支持。 USB限制了同步通道的最大數(shù)據(jù)區(qū)長(zhǎng)度為1023字節(jié),表4-3列出了不同規(guī)格的同步傳送,以及一幀內(nèi)

45、可能的最大傳送數(shù)。表中未包括管理開(kāi)銷(xiāo)的字節(jié)。 表4-3同步傳送限制協(xié)議開(kāi)銷(xiāo)(9 字節(jié))(2 SYNC bytes, 2 PID bytes, 2 Endpoint+CRC bytes,2 CRC bytes,and a 1_byte interpacket delay)數(shù)據(jù)凈荷區(qū)最大帶寬字節(jié)/秒Frame帶寬/傳送最大傳送數(shù)剩余字節(jié)有用字節(jié)字節(jié)/Frame11500001%150015022720001%136427244600001%115546087040001%884704169600002%6009603211520003%362411526412800005%204012801281

46、2800009%101301280256128000018%51751280512102400035%245810241023102300069%14681023Ma不是每一次的數(shù)據(jù)區(qū)都要達(dá)到最大長(zhǎng)度。數(shù)據(jù)區(qū)的長(zhǎng)度由發(fā)送者(客戶(hù)軟件或應(yīng)用軟件)決定,每次可以不同。USB可保證主機(jī)控制器看到的包有多長(zhǎng),在總線上傳的包就有多長(zhǎng)。數(shù)據(jù)的實(shí)際長(zhǎng)度由發(fā)送者決定,可以小于早先協(xié)商好的最大長(zhǎng)度。總線錯(cuò)誤可以使接收者看到的長(zhǎng)度比實(shí)際長(zhǎng)度有了變化。但這些錯(cuò)誤可被檢測(cè)到。具體地講,或者通過(guò)數(shù)據(jù)上的CRC碼,或者讓接收者預(yù)先知道實(shí)際應(yīng)該的長(zhǎng)度,以此進(jìn)行檢測(cè)。4.6.4 同步傳送的總線方向限

47、制 只有高速設(shè)備可以使用同步方式。 USB設(shè)備要求一個(gè)幀內(nèi)不能有超過(guò)90%的時(shí)間用于周期性傳送(同步傳送或中斷傳送)。 同步通道的端點(diǎn)描述自己的總線訪問(wèn)頻率。所有的同步通道一般在一幀內(nèi)傳一個(gè)包(也就是說(shuō),1ms一個(gè)包)。但總線上的錯(cuò)誤或者操作系統(tǒng)對(duì)客戶(hù)軟件調(diào)度上的延遲會(huì)造成一個(gè)幀內(nèi)一個(gè)包也沒(méi)有的情況。此時(shí),設(shè)備將一個(gè)錯(cuò)誤指示信息作為狀態(tài)信息返回給客戶(hù)軟件。設(shè)備可以通過(guò)跟蹤SOF(幀開(kāi)始)信號(hào)來(lái)測(cè)到此類(lèi)錯(cuò)誤。如果兩個(gè)SOF信號(hào)間無(wú)數(shù)據(jù)包,則出錯(cuò)。 總線頻率和幀定時(shí)限制了一個(gè)幀內(nèi)的同步傳送的上限,在任何USB系統(tǒng)內(nèi),最多有150個(gè)單字節(jié)的數(shù)據(jù)區(qū)。但由于實(shí)現(xiàn)上的原因,主機(jī)控制器可能無(wú)法支持到理論上的

48、最大傳送數(shù)。4.6.5 同步傳送的數(shù)據(jù)順序 同步傳送不支持因總線錯(cuò)誤而進(jìn)行的重傳。接收器可以判斷是否發(fā)生了一個(gè)錯(cuò)誤,低級(jí)的USB協(xié)議不允許有握手信號(hào)給同步通道的發(fā)送者。一般情況下,是可以有握手信號(hào)來(lái)通知發(fā)送者包是否被成功地接收。對(duì)于同步傳送來(lái)說(shuō),定時(shí)比正確性和重傳更重要??紤]到總線的錯(cuò)誤率較低,協(xié)議就認(rèn)為傳送一般均能成功。同步接收者可以判斷自己是否在一個(gè)幀內(nèi)錯(cuò)過(guò)了一些數(shù)據(jù),而且能知道丟失了多少數(shù)據(jù)。4.10節(jié)將有關(guān)于此的具體介紹。 因?yàn)闆](méi)有用來(lái)指示引起中止的條件的握手信號(hào),所以同步傳送的端點(diǎn)從不途停止。雖然,錯(cuò)誤信息可作為IRP的狀態(tài)來(lái)報(bào)告,但同步通道不會(huì)因此停下。錯(cuò)誤即使被查到,主機(jī)仍繼續(xù)處

49、理下一幀的數(shù)據(jù)。因?yàn)橥絺魉偷膮f(xié)議不支持每次事務(wù)都進(jìn)行握手,所以錯(cuò)誤檢測(cè)的功能可以相對(duì)弱一些。4.7 中斷傳送 中斷傳送是為這樣一類(lèi)設(shè)備設(shè)計(jì)的,它們只傳或收少量數(shù)據(jù),而且并不經(jīng)常進(jìn)行傳送,但它們有一個(gè)確定的服務(wù)周期,對(duì)中斷傳送有以下要求: ·通道的最大服務(wù)期得到保證。 ·由于錯(cuò)誤而引起的重發(fā)在下一服務(wù)期進(jìn)行。4.7.1 中斷傳送的數(shù)據(jù)格式 USB對(duì)中斷通道上的數(shù)據(jù)流格式無(wú)要求。4.7.2 中斷傳送的方向中斷通道是一種流通道,所以是單向的。端點(diǎn)描述信息指明了通道的數(shù)據(jù)流方向。4.7.3 中斷傳送對(duì)包的長(zhǎng)度的限制 中斷通道的端點(diǎn)決定自己能接收和發(fā)送的最大數(shù)據(jù)區(qū)長(zhǎng)度,高速設(shè)備允許

50、最大不超過(guò)64字節(jié)(或更少)的數(shù)據(jù)區(qū),而低速設(shè)備只允許不超過(guò)8個(gè)(或更少)字的數(shù)據(jù)區(qū),這個(gè)數(shù)字不包括協(xié)議要求的附加信息。USB并不需求所有的包都到最大長(zhǎng)度。如果不到的話(huà),不用加字節(jié)填充。 所有的主機(jī)控制器都要示支持高速設(shè)備的64字節(jié)數(shù)據(jù)區(qū)和低速設(shè)備的8字節(jié)(或更少)的最大數(shù)據(jù)區(qū),對(duì)超過(guò)最大值的數(shù)據(jù)區(qū)則不要求支持。 USB系統(tǒng)軟件設(shè)置中斷通道的最大數(shù)據(jù)區(qū)長(zhǎng)度。在設(shè)備設(shè)置期間,這一信息將被使用,只有此設(shè)置有效,這個(gè)數(shù)值是不會(huì)改變的。在設(shè)置有效期間,USB系統(tǒng)軟件根據(jù)此數(shù)值來(lái)看分給這個(gè)通道的總線時(shí)間是否充分。如果充分,則通道建立,否則不建立。與控制通道不同,USB系統(tǒng)不為中斷通道調(diào)整總線時(shí)間。所以對(duì)

51、給定的USB系統(tǒng),要么支持此通道,要么不支持。實(shí)際傳送的數(shù)據(jù)區(qū)長(zhǎng)度由發(fā)送器決定,可以小于最大長(zhǎng)度。 端點(diǎn)所發(fā)的數(shù)據(jù)區(qū)中的數(shù)據(jù)長(zhǎng)度不能超過(guò)端點(diǎn)的w Max Packet Size的值。而設(shè)備可以通過(guò)中斷傳送來(lái)傳比此值多的數(shù)據(jù)。客戶(hù)軟件可以通過(guò)中斷傳送的IRP來(lái)接收這批數(shù)據(jù),這個(gè)中斷傳送要求多個(gè)總線處理事務(wù)來(lái)完成,且要求每個(gè)事務(wù)后都有IRP完成的信號(hào)??梢栽O(shè)置一個(gè)緩沖區(qū),它的長(zhǎng)度為w Max Packet Size的整數(shù)倍,再加上一個(gè)零頭。對(duì)需要的多個(gè)總線事務(wù)來(lái)說(shuō),除最后一個(gè)外,前面的事務(wù)都傳遞w Max Packet Size長(zhǎng)度的包,后一個(gè)傳剩下的零頭。這些總線處理事務(wù)都在為通道建立的服務(wù)周期內(nèi)進(jìn)行。 如果一個(gè)中斷傳送要傳的數(shù)據(jù)不能放在一個(gè)數(shù)據(jù)區(qū)中,就分幾個(gè)區(qū),前幾個(gè)區(qū)都是最大長(zhǎng)度,最后一個(gè)包含剩下的長(zhǎng)度。當(dāng)出現(xiàn)以下情況時(shí),認(rèn)為中斷傳送結(jié)束: ·已傳的數(shù)據(jù)量恰好與期望的數(shù)據(jù)量同。 ·傳了一個(gè)有一個(gè)數(shù)據(jù)區(qū)的包,此包的長(zhǎng)度小于w Max Packet Size或傳了一個(gè)長(zhǎng)度為零的包。 如果一個(gè)中斷傳送完成,那么主機(jī)控制器結(jié)束當(dāng)前的IRP

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論