全面認(rèn)識USB的技術(shù)精髓
如果留心一下當(dāng)前市場上的電腦外設(shè),大家會發(fā)現(xiàn)采用USB設(shè)備的產(chǎn)品正在逐漸增加。鍵盤、鼠標(biāo)、MODEM、游戲桿、音箱、掃描儀等,以前插在串行、并行等外部擴展接口上的部件,甚至一些以前要連接到電腦內(nèi)部擴展槽上的設(shè)備,都開始以USB接口的界面出現(xiàn),USB設(shè)備的發(fā)展勢頭正如日中天。
本文將從技術(shù)的角度來探討一下USB,有關(guān)它的實用部分請參閱本刊1999年第5、7和11期的相關(guān)文章。
一個基于計算機的USB系統(tǒng)可以在系統(tǒng)層次上被分為三個部分:即USB主機(USB Host)、USB器件(USB Device)和USB的連接。
所謂USB連接實際上是指一種USB器件和USB主機進(jìn)行通信的方法。它包括:
●總線的拓?fù)?/strong>(由一點分出多點的網(wǎng)絡(luò)形式):即外設(shè)和主機連接的模式;
●各層之間的關(guān)系:即組成USB系統(tǒng)的各個部分在完成一個特定的USB任務(wù)時,各自之間的分工與合作;
●數(shù)據(jù)流動的模式:即USB總線的數(shù)據(jù)傳輸方式;
●USB的“分時復(fù)用”:因為USB提供的是一種共享連接方式,因而為了進(jìn)行數(shù)據(jù)的同步傳輸,致使USB對數(shù)據(jù)的傳輸和處理必須采用分時處理的機制。
一、USB的總線拓?fù)?br />
USB的總線拓?fù)淙鐖D1所示,在USB的樹形拓?fù)渲校琔SB集線器(HUB)處于節(jié)點(Node)的中心位置。而每一個功能部件都和USB主機形成唯一的點對點連接,USB的HUB為USB的功能部件連接到主機提供了擴展的接口。利用這種樹形拓?fù)?,USB總線支持最多127個USB外設(shè)同時連接到主計算機系統(tǒng)。
圖1 USB的總線拓?fù)涫疽鈭D
一個USB系統(tǒng)僅可以有一個主機,而為USB器件連接主機系統(tǒng)提供主機接口的部件被稱為USB主機控制器。USB主機控制器是一個由硬件、軟件和固件(Firmware)組成的復(fù)合體。一塊具有USB接口的主板通常集成了一個稱為ROOT HUB的部件,它為主機提供一到多個可以連接其它USB外設(shè)的USB擴展接口,我們通常在主板上見到的USB接口都是由ROOT HUB提供的。
USB器件可以分為兩種:即USB HUB和USB功能器件(Function Device)。
作為USB總線的擴展部件,USB HUB(圖2)必須滿足以下特征:
●為自己和其它外設(shè)的連接提供可擴展的下行和上行(Downstream and Upstream)端口;
●支持USB總線的電源管理機制;
●支持總線傳輸失敗的檢測和恢復(fù);
●可以自動檢測下行端口外設(shè)的連接和摘除,并向主機報告;
●支持低速外設(shè)和高速外設(shè)的同時連接。
從以上要求出發(fā),USB HUB在硬件上由兩部分組成:HUB應(yīng)答器(HUB Repeater)和HUB控制器(HUB Controller)。HUB應(yīng)答器回應(yīng)主機對USB外設(shè)的設(shè)置,以及對連接到它下行端口的USB功能部件的連接和摘除(Attached and Detached)的檢測、分類,并將其端口信息傳送給主機,它也負(fù)責(zé)如“總線傳輸失敗檢測”這樣的錯誤處理;而HUB控制器則提供主機到HUB之間數(shù)據(jù)傳輸?shù)奈锢頇C制。如同我們所熟知的大多數(shù)計算機外設(shè)一樣,USB HUB也有一個用來向主機表明自己身份的“BIOS”系統(tǒng)。這塊位于USB HUB上的ROM,通過USB特征字使主機可以配置這個USB HUB,并監(jiān)控它的每一個端口。
USB功能器件即可以為主機系統(tǒng)提供某種功能的USB器件,如一個USB ISDN的調(diào)制解調(diào)器、或是一只USB接口的數(shù)字?jǐn)z像機、USB的鍵盤或鼠標(biāo)等。
圖2 USB HUB的結(jié)構(gòu)
圖3 一個典型的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é)議層。在物理機制上,一個USB外設(shè)可以由四部分構(gòu)成(圖3):
●用于實現(xiàn)和USB協(xié)議兼容的SIE部分;
●用于存儲器件特征字、存儲實現(xiàn)外設(shè)特殊功能程序及廠家信息的協(xié)議層(ROM);
●用于實現(xiàn)外設(shè)功能的傳感器及對數(shù)據(jù)進(jìn)行簡單處理的DSP部分;
●將外設(shè)連接到主機或USB HUB的接口部分。
根據(jù)傳輸率的不同,USB器件被分為高速和低速兩種。低速外設(shè)的標(biāo)準(zhǔn)傳輸率為1.5Mbps,而高速外設(shè)的標(biāo)準(zhǔn)傳輸率為12Mbps。所有的USB HUB都為高速外設(shè),而功能部件則可以根據(jù)外設(shè)的具體情況設(shè)計成不同的傳輸率,如用于視頻、音頻傳輸?shù)耐庠O(shè)大都采用12Mbps的傳輸率,而像鍵盤、鼠標(biāo)這樣的點輸入設(shè)備則設(shè)計成低速外設(shè)。由于USB的數(shù)據(jù)傳輸采用數(shù)據(jù)包的形式,因而使得連接到主機的所有的USB外設(shè)可以同時工作而互不干擾。不幸的是,所有這些USB外設(shè)必須同時分享USB協(xié)議所規(guī)定的USB帶寬(這個帶寬在USB 1.0協(xié)議中為12Mbps),雖然USB的分時處理機制可以使有限的USB帶寬在各設(shè)備之間動態(tài)地分配,但如果兩臺以上的高速外設(shè)同時使用這樣的連接方法,就會使它們都無法享用到最高的USB帶寬,從而降低了性能。這也正是Intel這樣的巨頭為什么要推出USB 2.0協(xié)議的原因(在USB 2.0協(xié)議中USB的總線帶寬一下子被提高到了480Mbps)。
用于實現(xiàn)外設(shè)到主機或USB HUB連接的是USB線纜(圖4)。從嚴(yán)格意義上講,USB線纜應(yīng)屬于USB器件的接口部分。USB線纜由四根線組成,其中一根是電源線VBus,一根是地線GND,其余兩根是用于差動信號傳輸?shù)臄?shù)據(jù)線(D+,D-)。將數(shù)據(jù)流驅(qū)動成為差動信號來傳輸?shù)姆椒梢杂行岣咝盘柕目垢蓴_能力(EMI)。在數(shù)據(jù)線末端設(shè)置結(jié)束電阻的思路是非常巧妙的,以至對于HUB來判別所連接的外設(shè)是高速外設(shè)或是低速外設(shè),僅僅只需要檢測在外設(shè)被初次連接時,D+或D-上的信號是高或是低即可。因為對于USB協(xié)議來講,要求低速外設(shè)在其D-端并聯(lián)一個7.5kΩ的接地電阻,而高速外設(shè)則在D+端接同樣的電阻。在加電時,根據(jù)低速外設(shè)的D-線和高速外設(shè)的D+線所處的狀態(tài),HUB就很容易判別器件的種類,從而為器件配置不同的信息。圖5表明了一個典型的高速外設(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ū)動器件(Bus-powered device),而自帶電源的器件則被稱為自驅(qū)動外設(shè)(Self-powered device)。需要注意的是,當(dāng)一個外設(shè)初次連接時,器件的配置和分類并不使用外設(shè)自帶的電源,而是通過USB線纜提供的電源來使外設(shè)處于Powered狀態(tài)。
無論在軟件還是硬件層次上,USB主機都處于USB系統(tǒng)的核心。主機系統(tǒng)(圖6)不僅包含了用于和USB外設(shè)進(jìn)行通信的USB主機控制器及用于連接的USB接口(SIE),更重要的是主機系統(tǒng)是USB系統(tǒng)軟件和USB客戶軟件的載體。
總而言之,USB主機軟件系統(tǒng)可以分為三個部分:
●客戶軟件部分(CSW),在邏輯上和外設(shè)的功能部件部分進(jìn)行數(shù)據(jù)的交換;
●USB系統(tǒng)軟件部分(即HCDI),在邏輯和實際中作為HCD和USBD之間的接口;
●USB主機控制器軟件部分(即HCD和USBD),用于對外設(shè)和主機的所有USB有關(guān)部分的控制和管理,包括外設(shè)的SIE部分、USB數(shù)據(jù)發(fā)送接收器(Transreceiver)部分及外設(shè)的協(xié)議層等。
圖4 USB線纜
圖5 高速外設(shè)的USB線纜和電阻的連接圖
圖6 USB主機系統(tǒng)的結(jié)構(gòu)及各部分之間的關(guān)系
二、USB的“分時復(fù)用”和電源管理
當(dāng)一個USB外設(shè)初次接入一個USB系統(tǒng)時,主機就會為該USB外設(shè)分配一個唯一的USB地址,并作為該USB外設(shè)的唯一標(biāo)識(USB系統(tǒng)最多可以分配這樣的地址127個),這稱為USB的總線列舉(Bus Enumeration)。USB使用總線列舉方法在計算機系統(tǒng)運行期間動態(tài)檢測外設(shè)的連接和摘除,并動態(tài)地分配USB地址,從而在硬件意義上真正實現(xiàn)“即插即用”和“熱插拔”。
在所有的USB信道之間動態(tài)地分配帶寬是USB總線的特征之一。當(dāng)一臺USB外設(shè)在連接(Attached)并配置(Configuration)以后,主機即會為該USB外設(shè)的信道分配USB帶寬;而當(dāng)該USB外設(shè)從USB系統(tǒng)中摘除(Detached)或是處于掛起(Suspended)狀態(tài)時,則它所占用的USB帶寬即會被釋放,并為其它的USB外設(shè)所分享。這種“分時復(fù)用”(Scheduling the USB)的帶寬分配機制大大地提高了USB帶寬利用率。
作為一種先進(jìn)的總線方式,USB提供了基于主機的電源管理系統(tǒng)。USB系統(tǒng)會在一臺外設(shè)長時間(這個時間一般在3.0ms以上)處于非使用狀態(tài)時自動將該設(shè)備掛起(Suspend),當(dāng)一臺USB外設(shè)處于掛起狀態(tài)時,USB總線通過USB線纜為該設(shè)備僅僅提供500μA以下的電流,并把該外設(shè)所占用的USB帶寬分配給其它的USB外設(shè)。USB的電源管理機制使它支持如遠(yuǎn)程喚醒這樣的高級特性。當(dāng)一臺外設(shè)處于掛起狀態(tài)(Suspended Mode)時,必須先通過主機使該設(shè)備“喚醒”(Resume),然后才可以執(zhí)行USB操作。
USB的這種智能電源管理機制,使得它特別適合如筆記本電腦之類的設(shè)備的應(yīng)用。
三、USB的數(shù)據(jù)傳輸模式
圖7 幀開始數(shù)據(jù)包在USB數(shù)據(jù)傳輸中的分布
圖8 USB的通信流及信道
圖9 同步字段
圖10 PID字段
我們知道,USB總線是一種串行總線,即它的數(shù)據(jù)是一個bit一個bit來傳送的。雖然USB總線是把這些bit形式的數(shù)據(jù)打成數(shù)據(jù)包來傳送,但數(shù)據(jù)的同步也是必不可少的。USB 1.0/1.1協(xié)議規(guī)定,USB的標(biāo)準(zhǔn)脈沖時鐘為12MHz,而其總線時鐘為1ms,即每隔1ms,USB器件應(yīng)為USB線纜產(chǎn)生一個時鐘脈沖序列。這個脈沖序列稱為幀開始數(shù)據(jù)包(SOF,如圖7所示),主機利用SOF來同步USB數(shù)據(jù)的發(fā)送和接收。由此可見,對于一個數(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ù)包從主機傳送到外設(shè)或是從外設(shè)傳送到主機的。在USB協(xié)議中,把基于外設(shè)的數(shù)據(jù)源和基于主機的數(shù)據(jù)接收軟件(或者方向相反)之間的數(shù)據(jù)傳輸模式稱為信道(Pipe)。信道分為流模式的信道(Stream Pipe)和消息模式的信道(Message Pipe)兩種。信道和外設(shè)所定義的數(shù)據(jù)帶寬、數(shù)據(jù)傳輸模式以及外設(shè)的功能部件的特性(如緩存大小、數(shù)據(jù)傳輸?shù)姆较虻?相關(guān)。只要一個USB外設(shè)一經(jīng)連接,就會在主機和外設(shè)之間建立信道。對于任何的USB外設(shè),在它連接到一個USB系統(tǒng)中,并被USB主機經(jīng)USB線纜加電使其處于Powered狀態(tài)時,都會在USB主機和外設(shè)的協(xié)議層(ROM)之間首先建立一個稱為Endpoint 0的消息信道,這個信道又稱為控制信道,主要用于外設(shè)的配置(Configuration)、對外設(shè)所處狀態(tài)的檢測及控制命令的傳送等。信道方式的結(jié)構(gòu)使得USB系統(tǒng)支持一個外設(shè)擁有多個功能部件(用Endpoint 0、Endpoint 1...Endpoint n這樣的方法進(jìn)行標(biāo)識),這些功能部件可以同時地、以不同的數(shù)據(jù)傳輸方向在同一條USB線纜上進(jìn)行數(shù)據(jù)傳輸而互不影響(圖8)。比如一個USB的ISDN MODEM,就可以同時擁有一個上傳的信道和一個下載的信道,并能同時很好地工作。
為實現(xiàn)多外設(shè)、多信道地同時工作,USB總線使用數(shù)據(jù)包的方式來傳輸數(shù)據(jù)和控制信息。
USB數(shù)據(jù)傳輸中的每一個數(shù)據(jù)包都以一個同步字段開始(圖9),它的最后兩個bit作為PID字段開始的標(biāo)志。緊跟在同步字段之后的一段8bit的脈沖序列稱為PID(數(shù)據(jù)包標(biāo)識字段,如圖10所示),PID字段的前四位用來標(biāo)記該數(shù)據(jù)包的類型,后四位則作為對前四位的校驗。PID字段被分為標(biāo)記PID(共有IN、OUT、SETUP或SOF四種)、數(shù)據(jù)PID(DATA0或DATA1)、握手PID(ACK、NAK或STALL)及特殊PID等。主機根據(jù)PID字段的類型來判斷一個數(shù)據(jù)包中所包含的數(shù)據(jù)類型,并執(zhí)行相應(yīng)的操作。
當(dāng)一個USB外設(shè)初次連接時,USB系統(tǒng)會為這臺外設(shè)分配唯一的USB地址,這個地址通過地址寄存器(ADDR)來標(biāo)記,以保證數(shù)據(jù)包不會傳送到別的USB外設(shè)。7bit的ADDR使得USB系統(tǒng)最大尋址為127臺設(shè)備(ADDR字段,如圖11所示)。由于一臺USB外設(shè)可能具有多個信道,因而在ADDR字段后會有一個附加的端點字段(Endpoint Field,簡標(biāo)為ENDP)來標(biāo)記不同的信道(圖12)。所有的USB外設(shè)都必須支持Endpoint 0信道,用0000來標(biāo)記。對于高速設(shè)備,可以最大支持16個信道,而低速設(shè)備在Endpoint 0之外僅能有一個信道。
數(shù)據(jù)字段作為一次USB數(shù)據(jù)傳輸?shù)闹行哪康?,在一個USB數(shù)據(jù)包中可以包含0~1203Byte的數(shù)據(jù)(圖13)。而幀數(shù)量字段則包含在幀開始數(shù)據(jù)包中,對有的應(yīng)用場合,可以用幀數(shù)量字段作為數(shù)據(jù)的同步信號。
為保證控制、塊傳送及中斷傳送中數(shù)據(jù)包的正確性,CRC校驗字段被引用到如標(biāo)記、數(shù)據(jù)、幀開始(SOF)這樣的數(shù)據(jù)包中。CRC校驗(數(shù)據(jù)冗余校驗)可以給予數(shù)據(jù)以100%的正確性檢驗。
圖11 數(shù)據(jù)包的ADDR字段
圖12 端點(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四個字段組成(圖1)。它因為PID字段的不同而分為輸入類型(IN)、輸出類型(OUT)和設(shè)置類型(SETUP)三種。標(biāo)記數(shù)據(jù)包處于每一次USB傳輸?shù)腄ATA數(shù)據(jù)包前面,以指明這次USB操作的類型(PID字段標(biāo)記)、操作的對象(在ADDR和ENDP字段中指明)等信息。5bit的CRC校驗位用來確保標(biāo)記數(shù)據(jù)包的正確性。
2.我們已經(jīng)指出,USB主機會每隔1ms在USB總線上產(chǎn)生一個SOF的USB幀同步信號,SOF數(shù)據(jù)包包含了這個脈沖序列的實際內(nèi)容(圖2),它由SOF格式的PID字段、幀數(shù)量字段和5bit的CRC校驗碼組成。主機利用SOF數(shù)據(jù)包來同步數(shù)據(jù)的傳送和接收。
3.用于傳輸真正數(shù)據(jù)的DATA數(shù)據(jù)包(圖3),因為PID的不同可以分為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ù)包僅僅包含一個PID字段(圖4),ACK形式的PID表明此次USB傳輸沒有發(fā)生錯誤,數(shù)據(jù)已經(jīng)成功的傳輸;而NAK形式的握手?jǐn)?shù)據(jù)包則向主機表明此次USB傳輸因為CRC校驗錯誤或別的原因而失敗了,從而使得主機可以進(jìn)行數(shù)據(jù)的重新傳輸;STALL形式的回應(yīng)向主機報告外設(shè)此刻正處于掛起狀態(tài)而無法完成數(shù)據(jù)的傳輸。
需要指出的是,每個數(shù)據(jù)包的結(jié)束都會有兩個bit寬的EOP字段作為數(shù)據(jù)包結(jié)束的標(biāo)志(圖5),EOP在差模信號中表現(xiàn)為D+和D-都處于"0"狀態(tài)。對于高速USB外設(shè)而言,這個脈沖寬度在160~175ns之間,而低速設(shè)備則在1.25~1.50μs之間。無論其后是否有其它的數(shù)據(jù)包,USB線纜都會在EOP字段后緊跟1bit的總線空閑位。USB主機或外設(shè)利用EOP來判斷一個數(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)提到,每一個USB信道對應(yīng)著一個特定的USB傳輸模式,根據(jù)不同的需要,USB外設(shè)可以為USB信道指定不同的USB傳輸模式。USB總線支持四種數(shù)據(jù)傳輸模式:
1.控制傳輸模式(圖6),控制傳輸用于在外設(shè)初次連接時對器件進(jìn)行配置;對外設(shè)的狀態(tài)進(jìn)行實時檢測;對控制命令的傳送等;也可以在器件配置完成后被客戶軟件用于其它目的。Endpoint 0信道只可以采用控制傳送的方式。
2.塊傳送模式(圖7),塊傳送用于進(jìn)行批量的、非實時的數(shù)據(jù)傳輸。如一臺USB掃描儀即可采用塊傳送的模式,以保證數(shù)據(jù)連續(xù)地、在硬件層次上的實時糾錯地傳送。采用塊傳送方式的信道所占用的USB帶寬,在實時帶寬分配中具有最高的優(yōu)先級。
3.同步傳輸模式(圖8),同步傳輸適用于那些要求數(shù)據(jù)連續(xù)地、實時地、以固定的數(shù)據(jù)傳輸率產(chǎn)生、傳送并消耗的場合,如數(shù)字錄像機等。為保證數(shù)據(jù)傳輸?shù)膶崟r性,同步傳輸不進(jìn)行數(shù)據(jù)錯誤的重試,也不在硬件層次上回應(yīng)一個握手?jǐn)?shù)據(jù)包,這樣有可能使數(shù)據(jù)流中存在數(shù)據(jù)錯誤的隱患。為保證在同步傳輸數(shù)據(jù)流中致命錯誤的幾率小到可以容忍的程度,而數(shù)據(jù)傳輸?shù)难舆t又不會對外設(shè)的性能造成太大的影響,廠商必須為使用同步傳輸?shù)男诺肋x擇一個合適的帶寬(即必須在速度和品質(zhì)之間做出權(quán)衡)。
4.中斷傳輸模式(圖9),對于那些小批量的、點式、非連續(xù)的數(shù)據(jù)傳輸應(yīng)用的場合,如用于人機交互的鼠標(biāo)、鍵盤、游戲桿等,中斷傳輸?shù)姆绞绞亲钸m合的。
圖7 塊傳送的流程
圖8 同步傳輸?shù)牧鞒?br />
圖9 中斷傳輸?shù)牧鞒?br />
三、USB外設(shè)的組成與結(jié)構(gòu)
本文無意詳細(xì)論述USB外設(shè)(本部分所說的USB外設(shè)如無特別說明均指USB功能器件)的設(shè)計細(xì)節(jié),而只想介紹USB功能器件的一般組成,以此來幫助讀者了解USB外設(shè)的基本軟硬件構(gòu)成,以便了解USB外設(shè)的工作過程和原理。
組成外設(shè)的傳感器件和DSP因為外設(shè)的具體應(yīng)用各異而有所不同。如對于一臺CMOS數(shù)字?jǐn)z像機(如Creative的WebCam),它的CMOS光電耦合器及其DSP部分并不因為使用什么樣的接口方式而有所改變(如早期的電腦眼皆采用ECP的并口增強模式來進(jìn)行圖像數(shù)據(jù)的傳輸,而現(xiàn)在幾乎都是USB接口)。因而本文的重點是闡述USB外設(shè)接口的部分,即USB Device Microcontroller(USB器件微控制器)。圖10表明了一個USB外設(shè)總線接口的詳細(xì)組成框圖。
USB總線是以差模驅(qū)動的方式來進(jìn)行數(shù)據(jù)傳輸?shù)?,但在?shù)據(jù)包發(fā)送之前,USB協(xié)議規(guī)定必須使用NRZI的編碼方式來對數(shù)據(jù)進(jìn)行編碼。當(dāng)然,在USB外設(shè)中,用于解碼的器件對外設(shè)來說也是必不可少的。NRZI的編碼協(xié)議其實很簡單,它采用的是逢"1"保持,逢"0"跳變的原則(圖11),而NRZI的解碼則采用相反的操作。
為保證數(shù)據(jù)流中有足夠的信號變化,USB協(xié)議規(guī)定了Bit stuffing(加填充位)的原則,即如果信號流中連續(xù)出現(xiàn)六位以上的數(shù)據(jù)"1",則每隔六位,必須插入一個"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校驗碼并對數(shù)據(jù)包進(jìn)行CRC校驗的CRC check & Generator部分;
3.用來將并行數(shù)據(jù)轉(zhuǎn)化成USB串行數(shù)據(jù)的并/串轉(zhuǎn)換部分(Packet Encode),將主機發(fā)送的USB數(shù)據(jù)包轉(zhuǎn)化成可以識別的并行數(shù)據(jù)的串/并轉(zhuǎn)換部分(Packet Decode);
4.檢測和產(chǎn)生SOP(即每個數(shù)據(jù)包的同步字段)和EOP信號的部分。
USB外設(shè)使用一片ROM來存儲關(guān)于該外設(shè)工作的一些重要信息,這被稱為USB的協(xié)議層(Protocol Layer),它不僅存儲了諸如廠家識別號、該外設(shè)所屬的類型(是HUB還是Function,是低速還是高速設(shè)備)、電源管理等常規(guī)信息,更重要的是還存儲了外設(shè)的設(shè)備類型、器件配置信息、功能部件的描述、接口信息等,其存儲方式都采用特征字(Descriptors)的方式。USB主機通過在外設(shè)的協(xié)議層和主機之間建立Endpoint 0信道、采用控制傳輸?shù)姆绞綄@些信息進(jìn)行存取。特征字采用USB協(xié)議所規(guī)定的結(jié)構(gòu)和代碼排列(關(guān)于特征字的詳細(xì)信息請參閱USB協(xié)議標(biāo)準(zhǔn))。廠家也可以在該ROM的剩余空間中存儲特定的程序或信息,以幫助外設(shè)完成特定的工作。協(xié)議層是一臺USB外設(shè)能夠被主機正確識別和配置,并正常工作的前提。可以說,協(xié)議層是一臺USB外設(shè)的固件(Firmware)中心。
我們知道,數(shù)據(jù)采樣率因采樣精度和使用的不同場合而不同,如對于音頻應(yīng)用,就可以采用22.05kHz或44.1kHz的采樣率,而這個時鐘并不和USB標(biāo)準(zhǔn)時鐘對應(yīng)。因而在實際應(yīng)用中,為保證采集到的數(shù)據(jù)無丟失地打包和傳送,必須在SIE和數(shù)據(jù)采集部件(對諸如音箱或打印機等外設(shè)則為數(shù)據(jù)消耗部件)之間設(shè)立FIFOs,以便對數(shù)據(jù)進(jìn)行緩存。對于采用塊傳送和同步傳送的外設(shè)而言,F(xiàn)IFOs的作用顯得尤為重要。例如一臺采用同步傳輸?shù)腢SB數(shù)字?jǐn)z像機(現(xiàn)在市場上有很多這種類型的產(chǎn)品),我們假設(shè)它的CCD為400×300像素,那么為保證數(shù)據(jù)正確地壓縮、傳輸和接收,直到以后的解壓縮及處理,在動態(tài)采集中,F(xiàn)IFOs至少要存儲一幀圖像,即要求FIFOs有400×300=12KB的容量。
在USB外設(shè)中,用于實現(xiàn)和USB線纜無縫連接的USB傳輸接收部分(Transreceiver)是必不可少的,它不僅要在電氣和物理層面上實現(xiàn)和USB線纜的連接,而且要完成對數(shù)據(jù)包的差模驅(qū)動或分離的操作。
以上我們簡述了USB外設(shè)接口的硬件組成,那么在完成USB數(shù)據(jù)傳輸?shù)倪^程中,這些硬件又是如何配合工作并和位于主機的軟硬件交互,以完成數(shù)據(jù)傳輸?shù)哪?
前面已經(jīng)提到,USB總線采用總線列舉的方法來標(biāo)記和管理外設(shè)所處的狀態(tài),當(dāng)一臺USB外設(shè)初次連接到USB系統(tǒng)中后,通過8個步驟來完成它的初始化:
1.USB外設(shè)所連接的HUB(ROOT HUB或擴展HUB)檢測到所連接的USB外設(shè)并自動通知主機,以及它的端口狀態(tài)的變化,這時外設(shè)還處于禁止(Disabled)狀態(tài);
2.主機通過對HUB的查詢以確認(rèn)外設(shè)的連接;
3.現(xiàn)在,主機已經(jīng)知道有一臺新的USB外設(shè)連接到了USB系統(tǒng)中,然后,它激活(Enabled)這個HUB的端口,并向HUB發(fā)送一個復(fù)位(Reset)該端口的命令;
4.HUB將復(fù)位信號保持10ms,為連接到該端口的外設(shè)提供100mA的總線電流,這時該外設(shè)處于Powered狀態(tài),它的所有寄存器被清空并指向默認(rèn)的地址;
5.在外設(shè)分配到唯一的USB地址以前,他的默認(rèn)信道均使用主機的默認(rèn)地址。然后主機通過讀取外設(shè)協(xié)議層的特征字來了解該外設(shè)的默認(rèn)信道所使用的實際的最大數(shù)據(jù)有效載荷寬度(即外設(shè)在特征字中所定義的在DATA0數(shù)據(jù)包中數(shù)據(jù)字段的長度)。
6.主機分配一個唯一的USB地址給該外設(shè),并使它處于Addressed狀態(tài);
7.主機開始使用Endpoint 0信道讀取外設(shè)ROM中所存儲的器件配置特征字,這可能會花去幾幀的時間;
8.基于器件配置特征字,主機為該外設(shè)指定一個配置值,這時,外設(shè)即處于配置(Configured)狀態(tài)了,它所有的端點(Endpoint)這時也處于配置值所描述的狀態(tài)。從外設(shè)的角度來看,這時該外設(shè)已處于準(zhǔn)備使用的狀態(tài)。
在一臺外設(shè)能被使用之前,它必須被配置。"配置"即主機根據(jù)外設(shè)的配置特征字來定義器件的配置寄存器,以便規(guī)定外設(shè)的所有Endpoint的工作環(huán)境。如某信道所采用的數(shù)據(jù)傳輸方式,該外設(shè)所屬的器件"基類(Class)"、"派生類(SubClass)"和C++等,從而通過基于主機的USB系統(tǒng)軟件或客戶軟件對外設(shè)進(jìn)行控制。
當(dāng)一臺USB外設(shè)配置好以后,即會進(jìn)入到掛起(Suspend)狀態(tài),直到它開始被使用。
必須指出的是,一臺USB外設(shè)一旦配置好,它的每一個特定的信道只能使用一種數(shù)據(jù)傳輸方式。Endpoint 0信道只能采用控制傳送的方式,主機通過Endpoint 0來傳送標(biāo)準(zhǔn)的USB命令,完成諸如讀取器件配置特征字、控制外設(shè)對數(shù)據(jù)的采集、處理和傳送等任務(wù),并可以通過Endpoint 0來檢測和改變外設(shè)所處的狀態(tài)(如對外設(shè)的遠(yuǎn)端喚醒、掛起和恢復(fù)等)。
對于一臺采用同步傳輸?shù)臄?shù)字?jǐn)z像機來說,數(shù)據(jù)傳輸?shù)倪^程如下:
1.應(yīng)用軟件(CSW)在內(nèi)存中開辟數(shù)據(jù)緩沖區(qū),并通過標(biāo)準(zhǔn)USB命令字向外設(shè)發(fā)出數(shù)據(jù)請求(IRPs);
2.主機USB系統(tǒng)軟件通過對該IRPs的翻譯形成Token數(shù)據(jù)包發(fā)送到外設(shè),這時主機進(jìn)入等待狀態(tài);
3.外設(shè)對數(shù)據(jù)包進(jìn)行NRZI解碼和Bit Unstuffing操作及CRC校驗,確認(rèn)后接收主機PID字段中所包含的命令并開始采集數(shù)據(jù)。
4.采集到的并行數(shù)據(jù)首先進(jìn)入FIFOs,并通過并/串轉(zhuǎn)換部件形成串行脈沖;
5.根據(jù)器件配置寄存器的要求對數(shù)據(jù)進(jìn)行符合條件的分割,配置數(shù)據(jù)包的PID字段等以形成原始數(shù)據(jù)包。
6.通過CRC校驗產(chǎn)生器對每一個數(shù)據(jù)包生成CRC校驗碼字段,SOP & EOP信號產(chǎn)生器為該數(shù)據(jù)包加入同步字段頭和數(shù)據(jù)包結(jié)束符;
7.數(shù)據(jù)包的NRZI編碼和Bit Stuffing操作;
8.使用收發(fā)器(Transreceiver)將數(shù)據(jù)流驅(qū)動到USB線纜上。
9.主機控制器將USB數(shù)據(jù)轉(zhuǎn)化成為普通的"純"圖像數(shù)據(jù)送到數(shù)據(jù)緩沖區(qū)以進(jìn)行數(shù)據(jù)的進(jìn)一步處理;如果是控制傳輸、塊傳輸或中斷傳輸方式,在數(shù)據(jù)被成功傳送后,主機還會向外設(shè)發(fā)送ACK的握手?jǐn)?shù)據(jù)包作為回應(yīng)。
圖13簡單描繪了非同步數(shù)據(jù)傳輸?shù)恼埱蠛蛡魉瓦^程(在同步傳輸中沒有Handshake部分)。
圖13 非同步數(shù)據(jù)傳輸?shù)恼埱蠛蛡魉瓦^程
四、結(jié)束語
至此,我們已從幾個方面較詳細(xì)地介紹了USB系統(tǒng)的軟硬件構(gòu)成及USB的數(shù)據(jù)傳輸協(xié)議。USB可以說是開辟了計算機外設(shè)接口的新紀(jì)元。它把人們從繁雜的連線、不同的接口標(biāo)準(zhǔn)和惱人的中斷沖突中解放出來;
使"PnP"和"熱插拔"這樣的特性不再只是口號;它大大擴展了計算機可連接的外設(shè)數(shù)目;它的智能電源管理有效地降低了手持電腦的電源損耗……USB正在成為市場的熱點,越來越多的外設(shè)生產(chǎn)廠家將自己的產(chǎn)品轉(zhuǎn)向USB接口。而USB 2.0協(xié)議的推出,無疑對USB技術(shù)的發(fā)展起到了推波助瀾的作用。
在如鼠標(biāo)、鍵盤、手寫板或是游戲桿等人機交互的應(yīng)用場合;如掃描儀、數(shù)碼相機、移動存貯設(shè)備、數(shù)字?jǐn)z像機等數(shù)據(jù)輸入應(yīng)用場合,USB無疑是替代傳統(tǒng)串/并口的最佳接口方式,它們使得USB的優(yōu)點得到了充分發(fā)揮。但對諸如視頻或音頻輸出這樣的場合,USB也真的適用嗎?我們知道,像Sound Blaster Live!這樣的聲卡正是因為它在硬件上實現(xiàn)了波表合成和EAX環(huán)境音效等高級特性,才使我們在幾乎小于1%的資源占用率下就能聽到"天籟之音",同時又能在美侖美奐的3D環(huán)境中飚車。然而USB也并非萬能,例如我們看到在市場上熱賣的"USB音箱"號稱可以"省掉一塊聲卡!"。但由于USB接口并不對數(shù)據(jù)進(jìn)行任何處理,因而數(shù)據(jù)處理的任務(wù)完全交給了CPU和軟件,從而這種音箱造成了驚人的資源占用率,且從聲音的表現(xiàn)上看也與聲卡有著天壤之別。所以說,USB并不是"包治百病"的。
評論