<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 全面認(rèn)識(shí)USB的技術(shù)精髓

          全面認(rèn)識(shí)USB的技術(shù)精髓

          作者: 時(shí)間:2016-12-12 來源:網(wǎng)絡(luò) 收藏
            USB是Universal Serial Bus的簡稱。它是一種可以同時(shí)處理計(jì)算機(jī)與具有USB接口的多種外設(shè)之間通信的電纜總線。這些連接到計(jì)算機(jī)上的外設(shè)共同分享USB的帶寬。USB的分時(shí)處理機(jī)制真正在硬件的意義上實(shí)現(xiàn)了計(jì)算機(jī)外設(shè)的即插即用。

            如果留心一下當(dāng)前市場上的電腦外設(shè),大家會(huì)發(fā)現(xiàn)采用USB設(shè)備的產(chǎn)品正在逐漸增加。鍵盤、鼠標(biāo)、MODEM、游戲桿、音箱、掃描儀等,以前插在串行、并行等外部擴(kuò)展接口上的部件,甚至一些以前要連接到電腦內(nèi)部擴(kuò)展槽上的設(shè)備,都開始以USB接口的界面出現(xiàn),USB設(shè)備的發(fā)展勢頭正如日中天。

            本文將從技術(shù)的角度來探討一下USB,有關(guān)它的實(shí)用部分請參閱本刊1999年第5、7和11期的相關(guān)文章。

            一個(gè)基于計(jì)算機(jī)的USB系統(tǒng)可以在系統(tǒng)層次上被分為三個(gè)部分:即USB主機(jī)(USB Host)、USB器件(USB Device)和USB的連接。

            所謂USB連接實(shí)際上是指一種USB器件和USB主機(jī)進(jìn)行通信的方法。它包括:

          ●總線的拓?fù)?/strong>(由一點(diǎn)分出多點(diǎn)的網(wǎng)絡(luò)形式):即外設(shè)和主機(jī)連接的模式;

          ●各層之間的關(guān)系:即組成USB系統(tǒng)的各個(gè)部分在完成一個(gè)特定的USB任務(wù)時(shí),各自之間的分工與合作;

          ●數(shù)據(jù)流動(dòng)的模式:即USB總線的數(shù)據(jù)傳輸方式;

          ●USB的“分時(shí)復(fù)用”:因?yàn)閁SB提供的是一種共享連接方式,因而為了進(jìn)行數(shù)據(jù)的同步傳輸,致使USB對數(shù)據(jù)的傳輸和處理必須采用分時(shí)處理的機(jī)制。

          一、USB的總線拓?fù)?br />
            USB的總線拓?fù)淙鐖D1所示,在USB的樹形拓?fù)渲?,USB集線器(HUB)處于節(jié)點(diǎn)(Node)的中心位置。而每一個(gè)功能部件都和USB主機(jī)形成唯一的點(diǎn)對點(diǎn)連接,USB的HUB為USB的功能部件連接到主機(jī)提供了擴(kuò)展的接口。利用這種樹形拓?fù)?,USB總線支持最多127個(gè)USB外設(shè)同時(shí)連接到主計(jì)算機(jī)系統(tǒng)。

          圖1 USB的總線拓?fù)涫疽鈭D



            一個(gè)USB系統(tǒng)僅可以有一個(gè)主機(jī),而為USB器件連接主機(jī)系統(tǒng)提供主機(jī)接口的部件被稱為USB主機(jī)控制器。USB主機(jī)控制器是一個(gè)由硬件、軟件和固件(Firmware)組成的復(fù)合體。一塊具有USB接口的主板通常集成了一個(gè)稱為ROOT HUB的部件,它為主機(jī)提供一到多個(gè)可以連接其它USB外設(shè)的USB擴(kuò)展接口,我們通常在主板上見到的USB接口都是由ROOT HUB提供的。

            USB器件可以分為兩種:即USB HUB和USB功能器件(Function Device)。

            作為USB總線的擴(kuò)展部件,USB HUB(圖2)必須滿足以下特征:

          ●為自己和其它外設(shè)的連接提供可擴(kuò)展的下行和上行(Downstream and Upstream)端口;

          ●支持USB總線的電源管理機(jī)制;

          ●支持總線傳輸失敗的檢測和恢復(fù);

          ●可以自動(dòng)檢測下行端口外設(shè)的連接和摘除,并向主機(jī)報(bào)告;

          ●支持低速外設(shè)和高速外設(shè)的同時(shí)連接。

            從以上要求出發(fā),USB HUB在硬件上由兩部分組成:HUB應(yīng)答器(HUB Repeater)和HUB控制器(HUB Controller)。HUB應(yīng)答器回應(yīng)主機(jī)對USB外設(shè)的設(shè)置,以及對連接到它下行端口的USB功能部件的連接和摘除(Attached and Detached)的檢測、分類,并將其端口信息傳送給主機(jī),它也負(fù)責(zé)如“總線傳輸失敗檢測”這樣的錯(cuò)誤處理;而HUB控制器則提供主機(jī)到HUB之間數(shù)據(jù)傳輸?shù)奈锢頇C(jī)制。如同我們所熟知的大多數(shù)計(jì)算機(jī)外設(shè)一樣,USB HUB也有一個(gè)用來向主機(jī)表明自己身份的“BIOS”系統(tǒng)。這塊位于USB HUB上的ROM,通過USB特征字使主機(jī)可以配置這個(gè)USB HUB,并監(jiān)控它的每一個(gè)端口。

            USB功能器件即可以為主機(jī)系統(tǒng)提供某種功能的USB器件,如一個(gè)USB ISDN的調(diào)制解調(diào)器、或是一只USB接口的數(shù)字?jǐn)z像機(jī)、USB的鍵盤或鼠標(biāo)等。

          圖2 USB HUB的結(jié)構(gòu)



          圖3 一個(gè)典型的USB功能器件結(jié)構(gòu)框圖



            USB的功能器件作為USB外設(shè)(USB Function),它必須保持和USB協(xié)議的完全兼容,并可以回應(yīng)標(biāo)準(zhǔn)的USB操作。同樣,用于表明自己身份的“BIOS”系統(tǒng)對于USB外設(shè)也是必不可少的,這在USB外設(shè)上被稱為協(xié)議層。在物理機(jī)制上,一個(gè)USB外設(shè)可以由四部分構(gòu)成(圖3):

          ●用于實(shí)現(xiàn)和USB協(xié)議兼容的SIE部分;

          ●用于存儲(chǔ)器件特征字、存儲(chǔ)實(shí)現(xiàn)外設(shè)特殊功能程序及廠家信息的協(xié)議層(ROM);

          ●用于實(shí)現(xiàn)外設(shè)功能的傳感器及對數(shù)據(jù)進(jìn)行簡單處理的DSP部分;

          ●將外設(shè)連接到主機(jī)或USB HUB的接口部分。

            根據(jù)傳輸率的不同,USB器件被分為高速和低速兩種。低速外設(shè)的標(biāo)準(zhǔn)傳輸率為1.5Mbps,而高速外設(shè)的標(biāo)準(zhǔn)傳輸率為12Mbps。所有的USB HUB都為高速外設(shè),而功能部件則可以根據(jù)外設(shè)的具體情況設(shè)計(jì)成不同的傳輸率,如用于視頻、音頻傳輸?shù)耐庠O(shè)大都采用12Mbps的傳輸率,而像鍵盤、鼠標(biāo)這樣的點(diǎn)輸入設(shè)備則設(shè)計(jì)成低速外設(shè)。由于USB的數(shù)據(jù)傳輸采用數(shù)據(jù)包的形式,因而使得連接到主機(jī)的所有的USB外設(shè)可以同時(shí)工作而互不干擾。不幸的是,所有這些USB外設(shè)必須同時(shí)分享USB協(xié)議所規(guī)定的USB帶寬(這個(gè)帶寬在USB 1.0協(xié)議中為12Mbps),雖然USB的分時(shí)處理機(jī)制可以使有限的USB帶寬在各設(shè)備之間動(dòng)態(tài)地分配,但如果兩臺(tái)以上的高速外設(shè)同時(shí)使用這樣的連接方法,就會(huì)使它們都無法享用到最高的USB帶寬,從而降低了性能。這也正是Intel這樣的巨頭為什么要推出USB 2.0協(xié)議的原因(在USB 2.0協(xié)議中USB的總線帶寬一下子被提高到了480Mbps)。

            用于實(shí)現(xiàn)外設(shè)到主機(jī)或USB HUB連接的是USB線纜(圖4)。從嚴(yán)格意義上講,USB線纜應(yīng)屬于USB器件的接口部分。USB線纜由四根線組成,其中一根是電源線VBus,一根是地線GND,其余兩根是用于差動(dòng)信號傳輸?shù)臄?shù)據(jù)線(D+,D-)。將數(shù)據(jù)流驅(qū)動(dòng)成為差動(dòng)信號來傳輸?shù)姆椒梢杂行岣咝盘柕目垢蓴_能力(EMI)。在數(shù)據(jù)線末端設(shè)置結(jié)束電阻的思路是非常巧妙的,以至對于HUB來判別所連接的外設(shè)是高速外設(shè)或是低速外設(shè),僅僅只需要檢測在外設(shè)被初次連接時(shí),D+或D-上的信號是高或是低即可。因?yàn)閷τ赨SB協(xié)議來講,要求低速外設(shè)在其D-端并聯(lián)一個(gè)7.5kΩ的接地電阻,而高速外設(shè)則在D+端接同樣的電阻。在加電時(shí),根據(jù)低速外設(shè)的D-線和高速外設(shè)的D+線所處的狀態(tài),HUB就很容易判別器件的種類,從而為器件配置不同的信息。圖5表明了一個(gè)典型的高速外設(shè)的連接狀況。為提高數(shù)據(jù)傳輸?shù)目煽啃?、系統(tǒng)的兼容性及標(biāo)準(zhǔn)化程度,USB協(xié)議對用于USB的線纜提出了較為嚴(yán)格的要求。如用于高速傳輸?shù)腢SB線纜,其最大長度不應(yīng)超過5米,而用于低速傳輸?shù)木€纜則最大長度為兩米,每根數(shù)據(jù)線的電阻應(yīng)為標(biāo)準(zhǔn)的90Ω。

            USB系統(tǒng)可以通過USB線纜為其外設(shè)提供不高于+5V、500mA的總線電源。那些完全依靠USB線纜來提供電源的器件被稱為總線驅(qū)動(dòng)器件(Bus-powered device),而自帶電源的器件則被稱為自驅(qū)動(dòng)外設(shè)(Self-powered device)。需要注意的是,當(dāng)一個(gè)外設(shè)初次連接時(shí),器件的配置和分類并不使用外設(shè)自帶的電源,而是通過USB線纜提供的電源來使外設(shè)處于Powered狀態(tài)。

            無論在軟件還是硬件層次上,USB主機(jī)都處于USB系統(tǒng)的核心。主機(jī)系統(tǒng)(圖6)不僅包含了用于和USB外設(shè)進(jìn)行通信的USB主機(jī)控制器及用于連接的USB接口(SIE),更重要的是主機(jī)系統(tǒng)是USB系統(tǒng)軟件和USB客戶軟件的載體。

          總而言之,USB主機(jī)軟件系統(tǒng)可以分為三個(gè)部分:

          ●客戶軟件部分(CSW),在邏輯上和外設(shè)的功能部件部分進(jìn)行數(shù)據(jù)的交換;

          ●USB系統(tǒng)軟件部分(即HCDI),在邏輯和實(shí)際中作為HCD和USBD之間的接口;

          ●USB主機(jī)控制器軟件部分(即HCD和USBD),用于對外設(shè)和主機(jī)的所有USB有關(guān)部分的控制和管理,包括外設(shè)的SIE部分、USB數(shù)據(jù)發(fā)送接收器(Transreceiver)部分及外設(shè)的協(xié)議層等。

          圖4 USB線纜



          圖5 高速外設(shè)的USB線纜和電阻的連接圖



          圖6 USB主機(jī)系統(tǒng)的結(jié)構(gòu)及各部分之間的關(guān)系



          二、USB的“分時(shí)復(fù)用”和電源管理

            當(dāng)一個(gè)USB外設(shè)初次接入一個(gè)USB系統(tǒng)時(shí),主機(jī)就會(huì)為該USB外設(shè)分配一個(gè)唯一的USB地址,并作為該USB外設(shè)的唯一標(biāo)識(shí)(USB系統(tǒng)最多可以分配這樣的地址127個(gè)),這稱為USB的總線列舉(Bus Enumeration)。USB使用總線列舉方法在計(jì)算機(jī)系統(tǒng)運(yùn)行期間動(dòng)態(tài)檢測外設(shè)的連接和摘除,并動(dòng)態(tài)地分配USB地址,從而在硬件意義上真正實(shí)現(xiàn)“即插即用”和“熱插拔”。

            在所有的USB信道之間動(dòng)態(tài)地分配帶寬是USB總線的特征之一。當(dāng)一臺(tái)USB外設(shè)在連接(Attached)并配置(Configuration)以后,主機(jī)即會(huì)為該USB外設(shè)的信道分配USB帶寬;而當(dāng)該USB外設(shè)從USB系統(tǒng)中摘除(Detached)或是處于掛起(Suspended)狀態(tài)時(shí),則它所占用的USB帶寬即會(huì)被釋放,并為其它的USB外設(shè)所分享。這種“分時(shí)復(fù)用”(Scheduling the USB)的帶寬分配機(jī)制大大地提高了USB帶寬利用率。

            作為一種先進(jìn)的總線方式,USB提供了基于主機(jī)的電源管理系統(tǒng)。USB系統(tǒng)會(huì)在一臺(tái)外設(shè)長時(shí)間(這個(gè)時(shí)間一般在3.0ms以上)處于非使用狀態(tài)時(shí)自動(dòng)將該設(shè)備掛起(Suspend),當(dāng)一臺(tái)USB外設(shè)處于掛起狀態(tài)時(shí),USB總線通過USB線纜為該設(shè)備僅僅提供500μA以下的電流,并把該外設(shè)所占用的USB帶寬分配給其它的USB外設(shè)。USB的電源管理機(jī)制使它支持如遠(yuǎn)程喚醒這樣的高級特性。當(dāng)一臺(tái)外設(shè)處于掛起狀態(tài)(Suspended Mode)時(shí),必須先通過主機(jī)使該設(shè)備“喚醒”(Resume),然后才可以執(zhí)行USB操作。

            USB的這種智能電源管理機(jī)制,使得它特別適合如筆記本電腦之類的設(shè)備的應(yīng)用。

          三、USB的數(shù)據(jù)傳輸模式

          圖7 幀開始數(shù)據(jù)包在USB數(shù)據(jù)傳輸中的分布



          圖8 USB的通信流及信道



          圖9 同步字段



          圖10 PID字段



            我們知道,USB總線是一種串行總線,即它的數(shù)據(jù)是一個(gè)bit一個(gè)bit來傳送的。雖然USB總線是把這些bit形式的數(shù)據(jù)打成數(shù)據(jù)包來傳送,但數(shù)據(jù)的同步也是必不可少的。USB 1.0/1.1協(xié)議規(guī)定,USB的標(biāo)準(zhǔn)脈沖時(shí)鐘為12MHz,而其總線時(shí)鐘為1ms,即每隔1ms,USB器件應(yīng)為USB線纜產(chǎn)生一個(gè)時(shí)鐘脈沖序列。這個(gè)脈沖序列稱為幀開始數(shù)據(jù)包(SOF,如圖7所示),主機(jī)利用SOF來同步USB數(shù)據(jù)的發(fā)送和接收。由此可見,對于一個(gè)數(shù)據(jù)傳輸率為12Mbps的外設(shè)而言,它每一幀的長度為12000bit;而對于低速外設(shè)而言,它每一幀的長度僅有1500bit。USB總線并不關(guān)心外設(shè)的數(shù)據(jù)采集系統(tǒng)及其處理的速率,無論對于怎樣的數(shù)據(jù)產(chǎn)生或是接收,它總是以外設(shè)所事先規(guī)定的USB標(biāo)準(zhǔn)傳輸率來傳輸數(shù)據(jù)。這就要求外設(shè)廠商必須在數(shù)據(jù)采集或接收系統(tǒng)和USB協(xié)議系統(tǒng)(SIE)之間,設(shè)置大小合適的先入先出模式(FIFO)來對數(shù)據(jù)進(jìn)行緩存。

            在USB系統(tǒng)中,數(shù)據(jù)是通過USB線纜采用USB數(shù)據(jù)包從主機(jī)傳送到外設(shè)或是從外設(shè)傳送到主機(jī)的。在USB協(xié)議中,把基于外設(shè)的數(shù)據(jù)源和基于主機(jī)的數(shù)據(jù)接收軟件(或者方向相反)之間的數(shù)據(jù)傳輸模式稱為信道(Pipe)。信道分為流模式的信道(Stream Pipe)和消息模式的信道(Message Pipe)兩種。信道和外設(shè)所定義的數(shù)據(jù)帶寬、數(shù)據(jù)傳輸模式以及外設(shè)的功能部件的特性(如緩存大小、數(shù)據(jù)傳輸?shù)姆较虻?相關(guān)。只要一個(gè)USB外設(shè)一經(jīng)連接,就會(huì)在主機(jī)和外設(shè)之間建立信道。對于任何的USB外設(shè),在它連接到一個(gè)USB系統(tǒng)中,并被USB主機(jī)經(jīng)USB線纜加電使其處于Powered狀態(tài)時(shí),都會(huì)在USB主機(jī)和外設(shè)的協(xié)議層(ROM)之間首先建立一個(gè)稱為Endpoint 0的消息信道,這個(gè)信道又稱為控制信道,主要用于外設(shè)的配置(Configuration)、對外設(shè)所處狀態(tài)的檢測及控制命令的傳送等。信道方式的結(jié)構(gòu)使得USB系統(tǒng)支持一個(gè)外設(shè)擁有多個(gè)功能部件(用Endpoint 0、Endpoint 1...Endpoint n這樣的方法進(jìn)行標(biāo)識(shí)),這些功能部件可以同時(shí)地、以不同的數(shù)據(jù)傳輸方向在同一條USB線纜上進(jìn)行數(shù)據(jù)傳輸而互不影響(圖8)。比如一個(gè)USB的ISDN MODEM,就可以同時(shí)擁有一個(gè)上傳的信道和一個(gè)下載的信道,并能同時(shí)很好地工作。

            為實(shí)現(xiàn)多外設(shè)、多信道地同時(shí)工作,USB總線使用數(shù)據(jù)包的方式來傳輸數(shù)據(jù)和控制信息。

            USB數(shù)據(jù)傳輸中的每一個(gè)數(shù)據(jù)包都以一個(gè)同步字段開始(圖9),它的最后兩個(gè)bit作為PID字段開始的標(biāo)志。緊跟在同步字段之后的一段8bit的脈沖序列稱為PID(數(shù)據(jù)包標(biāo)識(shí)字段,如圖10所示),PID字段的前四位用來標(biāo)記該數(shù)據(jù)包的類型,后四位則作為對前四位的校驗(yàn)。PID字段被分為標(biāo)記PID(共有IN、OUT、SETUP或SOF四種)、數(shù)據(jù)PID(DATA0或DATA1)、握手PID(ACK、NAK或STALL)及特殊PID等。主機(jī)根據(jù)PID字段的類型來判斷一個(gè)數(shù)據(jù)包中所包含的數(shù)據(jù)類型,并執(zhí)行相應(yīng)的操作。

            當(dāng)一個(gè)USB外設(shè)初次連接時(shí),USB系統(tǒng)會(huì)為這臺(tái)外設(shè)分配唯一的USB地址,這個(gè)地址通過地址寄存器(ADDR)來標(biāo)記,以保證數(shù)據(jù)包不會(huì)傳送到別的USB外設(shè)。7bit的ADDR使得USB系統(tǒng)最大尋址為127臺(tái)設(shè)備(ADDR字段,如圖11所示)。由于一臺(tái)USB外設(shè)可能具有多個(gè)信道,因而在ADDR字段后會(huì)有一個(gè)附加的端點(diǎn)字段(Endpoint Field,簡標(biāo)為ENDP)來標(biāo)記不同的信道(圖12)。所有的USB外設(shè)都必須支持Endpoint 0信道,用0000來標(biāo)記。對于高速設(shè)備,可以最大支持16個(gè)信道,而低速設(shè)備在Endpoint 0之外僅能有一個(gè)信道。

            數(shù)據(jù)字段作為一次USB數(shù)據(jù)傳輸?shù)闹行哪康?,在一個(gè)USB數(shù)據(jù)包中可以包含0~1203Byte的數(shù)據(jù)(圖13)。而幀數(shù)量字段則包含在幀開始數(shù)據(jù)包中,對有的應(yīng)用場合,可以用幀數(shù)量字段作為數(shù)據(jù)的同步信號。

            為保證控制、塊傳送及中斷傳送中數(shù)據(jù)包的正確性,CRC校驗(yàn)字段被引用到如標(biāo)記、數(shù)據(jù)、幀開始(SOF)這樣的數(shù)據(jù)包中。CRC校驗(yàn)(數(shù)據(jù)冗余校驗(yàn))可以給予數(shù)據(jù)以100%的正確性檢驗(yàn)。

          圖11 數(shù)據(jù)包的ADDR字段



          圖12 端點(diǎn)(Endpoint)字段



          圖13 USB的數(shù)據(jù)字段




          <下>


            本文介紹USB總線的數(shù)據(jù)傳輸模式、USB數(shù)據(jù)包的格式,以及USB外設(shè)的組成與結(jié)構(gòu)等內(nèi)容。

          一、USB數(shù)據(jù)包的格式

            在USB系統(tǒng)中,有四種形式的數(shù)據(jù)包--標(biāo)記數(shù)據(jù)包(Token Packets)、DATA數(shù)據(jù)包(DATA Packets)、幀開始數(shù)據(jù)包(SOF Packets)和握手?jǐn)?shù)據(jù)包(Handshake Packets)。

            1.標(biāo)記數(shù)據(jù)包由PID、ADDR、ENDP和CRC5四個(gè)字段組成(圖1)。它因?yàn)镻ID字段的不同而分為輸入類型(IN)、輸出類型(OUT)和設(shè)置類型(SETUP)三種。標(biāo)記數(shù)據(jù)包處于每一次USB傳輸?shù)腄ATA數(shù)據(jù)包前面,以指明這次USB操作的類型(PID字段標(biāo)記)、操作的對象(在ADDR和ENDP字段中指明)等信息。5bit的CRC校驗(yàn)位用來確保標(biāo)記數(shù)據(jù)包的正確性。

            2.我們已經(jīng)指出,USB主機(jī)會(huì)每隔1ms在USB總線上產(chǎn)生一個(gè)SOF的USB幀同步信號,SOF數(shù)據(jù)包包含了這個(gè)脈沖序列的實(shí)際內(nèi)容(圖2),它由SOF格式的PID字段、幀數(shù)量字段和5bit的CRC校驗(yàn)碼組成。主機(jī)利用SOF數(shù)據(jù)包來同步數(shù)據(jù)的傳送和接收。

            3.用于傳輸真正數(shù)據(jù)的DATA數(shù)據(jù)包(圖3),因?yàn)镻ID的不同可以分為DATA0和DATA1兩種。DATA0為偶數(shù)據(jù)包,DATA1為奇數(shù)據(jù)包。DATA數(shù)據(jù)包的奇偶性分類易于數(shù)據(jù)的雙流水處理,而用于控制傳輸?shù)腄ATA數(shù)據(jù)包總是以DATA0來傳送數(shù)據(jù)。

            4.握手?jǐn)?shù)據(jù)包僅僅包含一個(gè)PID字段(圖4),ACK形式的PID表明此次USB傳輸沒有發(fā)生錯(cuò)誤,數(shù)據(jù)已經(jīng)成功的傳輸;而NAK形式的握手?jǐn)?shù)據(jù)包則向主機(jī)表明此次USB傳輸因?yàn)镃RC校驗(yàn)錯(cuò)誤或別的原因而失敗了,從而使得主機(jī)可以進(jìn)行數(shù)據(jù)的重新傳輸;STALL形式的回應(yīng)向主機(jī)報(bào)告外設(shè)此刻正處于掛起狀態(tài)而無法完成數(shù)據(jù)的傳輸。

            需要指出的是,每個(gè)數(shù)據(jù)包的結(jié)束都會(huì)有兩個(gè)bit寬的EOP字段作為數(shù)據(jù)包結(jié)束的標(biāo)志(圖5),EOP在差模信號中表現(xiàn)為D+和D-都處于"0"狀態(tài)。對于高速USB外設(shè)而言,這個(gè)脈沖寬度在160~175ns之間,而低速設(shè)備則在1.25~1.50μs之間。無論其后是否有其它的數(shù)據(jù)包,USB線纜都會(huì)在EOP字段后緊跟1bit的總線空閑位。USB主機(jī)或外設(shè)利用EOP來判斷一個(gè)數(shù)據(jù)包的結(jié)束。

          圖1 標(biāo)記數(shù)據(jù)包的組成



          圖2 SOF數(shù)據(jù)包的格式



          圖3 DATA數(shù)據(jù)包的格式



          圖4 握手?jǐn)?shù)據(jù)包



          圖5 EOP字段在差模信號中的電壓表現(xiàn)



          二、USB總線的數(shù)據(jù)傳輸模式

            在前面我們已經(jīng)提到,每一個(gè)USB信道對應(yīng)著一個(gè)特定的USB傳輸模式,根據(jù)不同的需要,USB外設(shè)可以為USB信道指定不同的USB傳輸模式。USB總線支持四種數(shù)據(jù)傳輸模式:

            1.控制傳輸模式(圖6),控制傳輸用于在外設(shè)初次連接時(shí)對器件進(jìn)行配置;對外設(shè)的狀態(tài)進(jìn)行實(shí)時(shí)檢測;對控制命令的傳送等;也可以在器件配置完成后被客戶軟件用于其它目的。Endpoint 0信道只可以采用控制傳送的方式。

            2.塊傳送模式(圖7),塊傳送用于進(jìn)行批量的、非實(shí)時(shí)的數(shù)據(jù)傳輸。如一臺(tái)USB掃描儀即可采用塊傳送的模式,以保證數(shù)據(jù)連續(xù)地、在硬件層次上的實(shí)時(shí)糾錯(cuò)地傳送。采用塊傳送方式的信道所占用的USB帶寬,在實(shí)時(shí)帶寬分配中具有最高的優(yōu)先級。

            3.同步傳輸模式(圖8),同步傳輸適用于那些要求數(shù)據(jù)連續(xù)地、實(shí)時(shí)地、以固定的數(shù)據(jù)傳輸率產(chǎn)生、傳送并消耗的場合,如數(shù)字錄像機(jī)等。為保證數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性,同步傳輸不進(jìn)行數(shù)據(jù)錯(cuò)誤的重試,也不在硬件層次上回應(yīng)一個(gè)握手?jǐn)?shù)據(jù)包,這樣有可能使數(shù)據(jù)流中存在數(shù)據(jù)錯(cuò)誤的隱患。為保證在同步傳輸數(shù)據(jù)流中致命錯(cuò)誤的幾率小到可以容忍的程度,而數(shù)據(jù)傳輸?shù)难舆t又不會(huì)對外設(shè)的性能造成太大的影響,廠商必須為使用同步傳輸?shù)男诺肋x擇一個(gè)合適的帶寬(即必須在速度和品質(zhì)之間做出權(quán)衡)。

            4.中斷傳輸模式(圖9),對于那些小批量的、點(diǎn)式、非連續(xù)的數(shù)據(jù)傳輸應(yīng)用的場合,如用于人機(jī)交互的鼠標(biāo)、鍵盤、游戲桿等,中斷傳輸?shù)姆绞绞亲钸m合的。

          圖7 塊傳送的流程



          圖8 同步傳輸?shù)牧鞒?br />


          圖9 中斷傳輸?shù)牧鞒?br />


          三、USB外設(shè)的組成與結(jié)構(gòu)

            本文無意詳細(xì)論述USB外設(shè)(本部分所說的USB外設(shè)如無特別說明均指USB功能器件)的設(shè)計(jì)細(xì)節(jié),而只想介紹USB功能器件的一般組成,以此來幫助讀者了解USB外設(shè)的基本軟硬件構(gòu)成,以便了解USB外設(shè)的工作過程和原理。

            組成外設(shè)的傳感器件和DSP因?yàn)橥庠O(shè)的具體應(yīng)用各異而有所不同。如對于一臺(tái)CMOS數(shù)字?jǐn)z像機(jī)(如Creative的WebCam),它的CMOS光電耦合器及其DSP部分并不因?yàn)槭褂檬裁礃拥慕涌诜绞蕉兴淖?如早期的電腦眼皆采用ECP的并口增強(qiáng)模式來進(jìn)行圖像數(shù)據(jù)的傳輸,而現(xiàn)在幾乎都是USB接口)。因而本文的重點(diǎn)是闡述USB外設(shè)接口的部分,即USB Device Microcontroller(USB器件微控制器)。圖10表明了一個(gè)USB外設(shè)總線接口的詳細(xì)組成框圖。

            USB總線是以差模驅(qū)動(dòng)的方式來進(jìn)行數(shù)據(jù)傳輸?shù)?,但在?shù)據(jù)包發(fā)送之前,USB協(xié)議規(guī)定必須使用NRZI的編碼方式來對數(shù)據(jù)進(jìn)行編碼。當(dāng)然,在USB外設(shè)中,用于解碼的器件對外設(shè)來說也是必不可少的。NRZI的編碼協(xié)議其實(shí)很簡單,它采用的是逢"1"保持,逢"0"跳變的原則(圖11),而NRZI的解碼則采用相反的操作。
          為保證數(shù)據(jù)流中有足夠的信號變化,USB協(xié)議規(guī)定了Bit stuffing(加填充位)的原則,即如果信號流中連續(xù)出現(xiàn)六位以上的數(shù)據(jù)"1",則每隔六位,必須插入一個(gè)"0",然后才進(jìn)入NRZI編碼。圖12是一串原始數(shù)據(jù)及其加填充位后和NRZI編碼后的數(shù)據(jù)格式對比。

          圖10 USB外設(shè)總線接口的詳細(xì)組成框圖



          圖11 NRZI數(shù)據(jù)編碼



          圖12 原始數(shù)據(jù)和加填充位后及NRZI編碼后的數(shù)據(jù)格式對比



            SIE(Serial interface Engine)是USB外設(shè)最重要的硬件組成部分之一,它主要由四部分組成:

            1.硬件上用來完成NRZI編/解碼和加/去填充位操作的,NRZI/Bit Buffing和NRZO/Bit Unstuffing的部分;

            2.硬件上產(chǎn)生數(shù)據(jù)的CRC校驗(yàn)碼并對數(shù)據(jù)包進(jìn)行CRC校驗(yàn)的CRC check & Generator部分;   

          3.用來將并行數(shù)據(jù)轉(zhuǎn)化成USB串行數(shù)據(jù)的并/串轉(zhuǎn)換部分(Packet Encode),將主機(jī)發(fā)送的USB數(shù)據(jù)包轉(zhuǎn)化成可以識(shí)別的并行數(shù)據(jù)的串/并轉(zhuǎn)換部分(Packet Decode);

            4.檢測和產(chǎn)生SOP(即每個(gè)數(shù)據(jù)包的同步字段)和EOP信號的部分。

            USB外設(shè)使用一片ROM來存儲(chǔ)關(guān)于該外設(shè)工作的一些重要信息,這被稱為USB的協(xié)議層(Protocol Layer),它不僅存儲(chǔ)了諸如廠家識(shí)別號、該外設(shè)所屬的類型(是HUB還是Function,是低速還是高速設(shè)備)、電源管理等常規(guī)信息,更重要的是還存儲(chǔ)了外設(shè)的設(shè)備類型、器件配置信息、功能部件的描述、接口信息等,其存儲(chǔ)方式都采用特征字(Descriptors)的方式。USB主機(jī)通過在外設(shè)的協(xié)議層和主機(jī)之間建立Endpoint 0信道、采用控制傳輸?shù)姆绞綄@些信息進(jìn)行存取。特征字采用USB協(xié)議所規(guī)定的結(jié)構(gòu)和代碼排列(關(guān)于特征字的詳細(xì)信息請參閱USB協(xié)議標(biāo)準(zhǔn))。廠家也可以在該ROM的剩余空間中存儲(chǔ)特定的程序或信息,以幫助外設(shè)完成特定的工作。協(xié)議層是一臺(tái)USB外設(shè)能夠被主機(jī)正確識(shí)別和配置,并正常工作的前提。可以說,協(xié)議層是一臺(tái)USB外設(shè)的固件(Firmware)中心。

            我們知道,數(shù)據(jù)采樣率因采樣精度和使用的不同場合而不同,如對于音頻應(yīng)用,就可以采用22.05kHz或44.1kHz的采樣率,而這個(gè)時(shí)鐘并不和USB標(biāo)準(zhǔn)時(shí)鐘對應(yīng)。因而在實(shí)際應(yīng)用中,為保證采集到的數(shù)據(jù)無丟失地打包和傳送,必須在SIE和數(shù)據(jù)采集部件(對諸如音箱或打印機(jī)等外設(shè)則為數(shù)據(jù)消耗部件)之間設(shè)立FIFOs,以便對數(shù)據(jù)進(jìn)行緩存。對于采用塊傳送和同步傳送的外設(shè)而言,F(xiàn)IFOs的作用顯得尤為重要。例如一臺(tái)采用同步傳輸?shù)腢SB數(shù)字?jǐn)z像機(jī)(現(xiàn)在市場上有很多這種類型的產(chǎn)品),我們假設(shè)它的CCD為400×300像素,那么為保證數(shù)據(jù)正確地壓縮、傳輸和接收,直到以后的解壓縮及處理,在動(dòng)態(tài)采集中,F(xiàn)IFOs至少要存儲(chǔ)一幀圖像,即要求FIFOs有400×300=12KB的容量。

            在USB外設(shè)中,用于實(shí)現(xiàn)和USB線纜無縫連接的USB傳輸接收部分(Transreceiver)是必不可少的,它不僅要在電氣和物理層面上實(shí)現(xiàn)和USB線纜的連接,而且要完成對數(shù)據(jù)包的差模驅(qū)動(dòng)或分離的操作。
          以上我們簡述了USB外設(shè)接口的硬件組成,那么在完成USB數(shù)據(jù)傳輸?shù)倪^程中,這些硬件又是如何配合工作并和位于主機(jī)的軟硬件交互,以完成數(shù)據(jù)傳輸?shù)哪?

            前面已經(jīng)提到,USB總線采用總線列舉的方法來標(biāo)記和管理外設(shè)所處的狀態(tài),當(dāng)一臺(tái)USB外設(shè)初次連接到USB系統(tǒng)中后,通過8個(gè)步驟來完成它的初始化:

            1.USB外設(shè)所連接的HUB(ROOT HUB或擴(kuò)展HUB)檢測到所連接的USB外設(shè)并自動(dòng)通知主機(jī),以及它的端口狀態(tài)的變化,這時(shí)外設(shè)還處于禁止(Disabled)狀態(tài);

            2.主機(jī)通過對HUB的查詢以確認(rèn)外設(shè)的連接;

            3.現(xiàn)在,主機(jī)已經(jīng)知道有一臺(tái)新的USB外設(shè)連接到了USB系統(tǒng)中,然后,它激活(Enabled)這個(gè)HUB的端口,并向HUB發(fā)送一個(gè)復(fù)位(Reset)該端口的命令;

            4.HUB將復(fù)位信號保持10ms,為連接到該端口的外設(shè)提供100mA的總線電流,這時(shí)該外設(shè)處于Powered狀態(tài),它的所有寄存器被清空并指向默認(rèn)的地址;

            5.在外設(shè)分配到唯一的USB地址以前,他的默認(rèn)信道均使用主機(jī)的默認(rèn)地址。然后主機(jī)通過讀取外設(shè)協(xié)議層的特征字來了解該外設(shè)的默認(rèn)信道所使用的實(shí)際的最大數(shù)據(jù)有效載荷寬度(即外設(shè)在特征字中所定義的在DATA0數(shù)據(jù)包中數(shù)據(jù)字段的長度)。

            6.主機(jī)分配一個(gè)唯一的USB地址給該外設(shè),并使它處于Addressed狀態(tài);

            7.主機(jī)開始使用Endpoint 0信道讀取外設(shè)ROM中所存儲(chǔ)的器件配置特征字,這可能會(huì)花去幾幀的時(shí)間;

            8.基于器件配置特征字,主機(jī)為該外設(shè)指定一個(gè)配置值,這時(shí),外設(shè)即處于配置(Configured)狀態(tài)了,它所有的端點(diǎn)(Endpoint)這時(shí)也處于配置值所描述的狀態(tài)。從外設(shè)的角度來看,這時(shí)該外設(shè)已處于準(zhǔn)備使用的狀態(tài)。

            在一臺(tái)外設(shè)能被使用之前,它必須被配置。"配置"即主機(jī)根據(jù)外設(shè)的配置特征字來定義器件的配置寄存器,以便規(guī)定外設(shè)的所有Endpoint的工作環(huán)境。如某信道所采用的數(shù)據(jù)傳輸方式,該外設(shè)所屬的器件"基類(Class)"、"派生類(SubClass)"和C++等,從而通過基于主機(jī)的USB系統(tǒng)軟件或客戶軟件對外設(shè)進(jìn)行控制。
          當(dāng)一臺(tái)USB外設(shè)配置好以后,即會(huì)進(jìn)入到掛起(Suspend)狀態(tài),直到它開始被使用。

            必須指出的是,一臺(tái)USB外設(shè)一旦配置好,它的每一個(gè)特定的信道只能使用一種數(shù)據(jù)傳輸方式。Endpoint 0信道只能采用控制傳送的方式,主機(jī)通過Endpoint 0來傳送標(biāo)準(zhǔn)的USB命令,完成諸如讀取器件配置特征字、控制外設(shè)對數(shù)據(jù)的采集、處理和傳送等任務(wù),并可以通過Endpoint 0來檢測和改變外設(shè)所處的狀態(tài)(如對外設(shè)的遠(yuǎn)端喚醒、掛起和恢復(fù)等)。

            對于一臺(tái)采用同步傳輸?shù)臄?shù)字?jǐn)z像機(jī)來說,數(shù)據(jù)傳輸?shù)倪^程如下:

          1.應(yīng)用軟件(CSW)在內(nèi)存中開辟數(shù)據(jù)緩沖區(qū),并通過標(biāo)準(zhǔn)USB命令字向外設(shè)發(fā)出數(shù)據(jù)請求(IRPs);

          2.主機(jī)USB系統(tǒng)軟件通過對該IRPs的翻譯形成Token數(shù)據(jù)包發(fā)送到外設(shè),這時(shí)主機(jī)進(jìn)入等待狀態(tài);

          3.外設(shè)對數(shù)據(jù)包進(jìn)行NRZI解碼和Bit Unstuffing操作及CRC校驗(yàn),確認(rèn)后接收主機(jī)PID字段中所包含的命令并開始采集數(shù)據(jù)。

          4.采集到的并行數(shù)據(jù)首先進(jìn)入FIFOs,并通過并/串轉(zhuǎn)換部件形成串行脈沖;

          5.根據(jù)器件配置寄存器的要求對數(shù)據(jù)進(jìn)行符合條件的分割,配置數(shù)據(jù)包的PID字段等以形成原始數(shù)據(jù)包。

          6.通過CRC校驗(yàn)產(chǎn)生器對每一個(gè)數(shù)據(jù)包生成CRC校驗(yàn)碼字段,SOP & EOP信號產(chǎn)生器為該數(shù)據(jù)包加入同步字段頭和數(shù)據(jù)包結(jié)束符;

          7.數(shù)據(jù)包的NRZI編碼和Bit Stuffing操作;

          8.使用收發(fā)器(Transreceiver)將數(shù)據(jù)流驅(qū)動(dòng)到USB線纜上。

          9.主機(jī)控制器將USB數(shù)據(jù)轉(zhuǎn)化成為普通的"純"圖像數(shù)據(jù)送到數(shù)據(jù)緩沖區(qū)以進(jìn)行數(shù)據(jù)的進(jìn)一步處理;如果是控制傳輸、塊傳輸或中斷傳輸方式,在數(shù)據(jù)被成功傳送后,主機(jī)還會(huì)向外設(shè)發(fā)送ACK的握手?jǐn)?shù)據(jù)包作為回應(yīng)。
          圖13簡單描繪了非同步數(shù)據(jù)傳輸?shù)恼埱蠛蛡魉瓦^程(在同步傳輸中沒有Handshake部分)。

          圖13 非同步數(shù)據(jù)傳輸?shù)恼埱蠛蛡魉瓦^程



          四、結(jié)束語

            至此,我們已從幾個(gè)方面較詳細(xì)地介紹了USB系統(tǒng)的軟硬件構(gòu)成及USB的數(shù)據(jù)傳輸協(xié)議。USB可以說是開辟了計(jì)算機(jī)外設(shè)接口的新紀(jì)元。它把人們從繁雜的連線、不同的接口標(biāo)準(zhǔn)和惱人的中斷沖突中解放出來;

            使"PnP"和"熱插拔"這樣的特性不再只是口號;它大大擴(kuò)展了計(jì)算機(jī)可連接的外設(shè)數(shù)目;它的智能電源管理有效地降低了手持電腦的電源損耗……USB正在成為市場的熱點(diǎn),越來越多的外設(shè)生產(chǎn)廠家將自己的產(chǎn)品轉(zhuǎn)向USB接口。而USB 2.0協(xié)議的推出,無疑對USB技術(shù)的發(fā)展起到了推波助瀾的作用。

            在如鼠標(biāo)、鍵盤、手寫板或是游戲桿等人機(jī)交互的應(yīng)用場合;如掃描儀、數(shù)碼相機(jī)、移動(dòng)存貯設(shè)備、數(shù)字?jǐn)z像機(jī)等數(shù)據(jù)輸入應(yīng)用場合,USB無疑是替代傳統(tǒng)串/并口的最佳接口方式,它們使得USB的優(yōu)點(diǎn)得到了充分發(fā)揮。但對諸如視頻或音頻輸出這樣的場合,USB也真的適用嗎?我們知道,像Sound Blaster Live!這樣的聲卡正是因?yàn)樗谟布蠈?shí)現(xiàn)了波表合成和EAX環(huán)境音效等高級特性,才使我們在幾乎小于1%的資源占用率下就能聽到"天籟之音",同時(shí)又能在美侖美奐的3D環(huán)境中飚車。然而USB也并非萬能,例如我們看到在市場上熱賣的"USB音箱"號稱可以"省掉一塊聲卡!"。但由于USB接口并不對數(shù)據(jù)進(jìn)行任何處理,因而數(shù)據(jù)處理的任務(wù)完全交給了CPU和軟件,從而這種音箱造成了驚人的資源占用率,且從聲音的表現(xiàn)上看也與聲卡有著天壤之別。所以說,USB并不是"包治百病"的。


          關(guān)鍵詞: USB技術(shù)精

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();