瀏覽人次:【5132】
USB協會於2000年推出USB 2.0規範,將USB的傳輸速度由Full speed的12 Mbps提高到High speed的480 Mbps,使得USB得以將傳輸速度大幅提昇後,又於2001年底推出USB OTG的技術,提供USB設備間可以相連的規範。
USB OTG發展歷程
由於USB在一開始便被定位在電腦與周邊間相連接的一個介面,因此USB協會在制定USB的基本架構時選擇了主從式的架構,將較困難及較複雜的工作都交給主機(Host)端,也就是電腦。因此相對來說,USB裝置設計的複雜度就降低許多,廠商也就願意也較容易設計USB介面的裝置。再加上USB具有隨插即用的特性,使得USB裝置的便利性大幅提昇。另外Microsoft的大力支持,將許多USB設備的驅動程式內建在系統中,讓使用者可以真正享受到隨插即用的便利性。例如USB鍵盤及滑鼠,不需要使用廠商所提供的驅動程式,就可以使用鍵盤及滑鼠的基本功能。
基於以上的幾個原因,有越來越多的周邊設備採用USB作為和電腦連結的介面。而其中有部分的USB設備面臨到傳輸速度不足的問題,於是USB協會繼USB 1.1後又制定USB 2.0的規範,以彌補USB 1.1在傳輸速度上的不足及一些原先未設想到的缺陷。在USB 2.0的規範中新增了高速傳輸(High speed transfer)的定義,傳輸速率為480 Mbps,大幅度的提昇USB的傳輸速度。在USB 2.0規範加入後,USB介面在電腦周邊的應用上已經可以說是相當完備了。
在越來越多的USB裝置出現後,漸漸有部分裝置想要脫離電腦的管束互相連結,例如數位相機和印表機的連結。但是USB舊有的架構限制了USB裝置間連結的可能性。在USB的架構中說明了,必須有一端要當主機,所以當兩個USB裝置碰在一起,沒有任何一端可以做主,因此便沒有辦法連結。對此,USB協會又推出了USB OTG的規範來彌補這樣子的缺陷。USB OTG是USB On The Go的縮寫,在這裡「Go」是棋盤的意思,取其意為在棋盤上任一條經線和緯線都可以找到相連的點。這也意味著,USB協會期待在USB OTG規範之下,任兩個符合規範的OTG裝置都可以互相連結,而不需要透過電腦。
USB OTG簡介
USB OTG並不是一個獨立於USB 2.0存在的規範,所有在USB OTG中未提到的事項都必須以USB 2.0的規範為準。因此USB OTG存在的目的僅在於提供一個方式,讓兩個USB裝置得以連結。USB OTG 1.0中提到一個具備雙重角色裝置(Dual-role device)的概念。就是說一個OTG的裝置,可以當主機,也可以當設備端。如此一來,當兩個OTG裝置遇上的時候,就可以由其中一方當作主機,另一方當作設備端。就可以完全符合USB對兩個裝置相連的需求了。除此之外,OTG的裝置還必須具備以下的特性:
●有限的主機功能;
●當設備端時必須支援全速傳輸;
●當主機端時至少要支援全速的USB設備,但不強制要求支援高速或是低速設備;
●可連結設備的清單;
●必須告知使用者傳輸的狀態;
●至少能提供8mA的電源給設備端;
●支援SRP(Session request protocol);
●支援HNP(Host negotiation protocol);
●僅能有一個且唯一的一個Mini-AB插座。(目前USB協會正在研議這一項限制,未來可能會有改變。)
以下針對上述項目作進一步的解釋。
可連結設備的清單
當OTG裝置成為主機端時,並沒有辦法真的支援所有的USB裝置,因此在道義上OTG裝置必須將其所支援的設備清單列出,以利消費者選擇可連接的設備。
不允許未告知使用者的錯誤狀態或是動作
當OTG裝置在使用時,必須將目前狀態讓使用者知道,尤其是以下三種狀況:在OTG裝置成為主機端時,連結的設備不支援;B-device開始SRP的動作;B-device完成SRP的動作後,A-device未回應。
電源供應
當OTG裝置成為主機端時,至少必須供應8mA的電源給設備端。OTG裝置成為設備端時則不需供應電源,但也不能從Vbus汲取超過8mA的電源。
SRP
為達到省電的目的,當OTG裝置成為主機端時,可以將Vbus的電源切斷,以節省電源。SRP則是提供一個機制讓設備端告知主機端重新提供電源,並且恢復在USB線路上的相關活動(例如傳送SOF或是IN token),以利設備端傳輸資料。
HNP
當兩個OTG裝置相連結時,由於兩個裝置都有當主機端的能力,所以會先由連接兩個裝置的纜線(Mini-A plug to Mini-B plug)決定哪一個裝置(連接Mini-A plug的裝置)在一開始的時候扮演主機(A-device)的角色,另一裝置則是扮演設備端(B-device)的角色。當兩個裝置經由纜線結合在一起之後,若是想要互換角色,則必須經由HNP所定義的訊號溝通過之後,才可以互換角色。
接頭及插座
USB 2.0規定可以使用的接頭及插座包括:Standard-A接頭(plug)及插座(receptacle);Standard-B接頭及插座;Mini-B接頭及插座。OTG 1.0新增加的接頭及插座:Mini-A接頭及插座;Mini-AB插座。
連接線
USB 2.0規定可以使用的連接線包括:Standard-A接頭對Standard-B接頭;Standard-A接頭對Mini-B接頭;連到裝置的Standard-A接頭連接線,例如滑鼠上面附的連接線。OTG 1.0新增加的連接線有:Mini-A接頭對Standard-B接頭;Mini-A接頭對mini-B接頭;直接連到裝置的Mini-A接頭連接線。
接頭外觀
OTG 1.0詳細規定每一種接頭的大小及形狀甚至是顏色,例如Mini-A接頭的外觀是橢圓形,顏色是白色;Mini-B接頭的外觀是長方形,顏色是黑色,以利使用者辨識。
轉接頭(Cable adapters)
OTG 1.0規定可以使用的轉接頭包括:Mini-A 插座對Standard-A接頭;Standard-A 插座對Mini-A接頭。
Hubs
OTG裝置可以支援Hub。因為OTG相當強調是一個點對點的連接,因此當一個OTG裝置接上Hub後,Hub本身的功能可以正常工作。但若想要在Hub之下再接其他的裝置,就可能會有問題了,因為這樣一來就不再只是一個點對點的連結了。但是在OTG的規範中並未明確規定不可以這樣做。
A-device vs. B-device
USB OTG並沒有規範額外的通訊協定來讓兩個OTG裝置相連結。OTG所規範的是當兩個OTG裝置相連結時,可以由其中一裝置來當主機,另一裝置當設備。這和原來的電腦對周邊的連結方式是一樣的,只是在OTG的概念提出之前,所有的裝置只能夠當成是設備端。
當兩個OTG裝置相連結時,在USB原有的架構中並沒有提供這兩個裝置決定誰當主機端的方式。因此OTG便新增加了Mini-AB的插座及Mini-A、Mini-B接頭,以利OTG裝置決定要當作主機端或是設備端。新增加的Mini-AB插座可以允許使用Mini-A及Mini-B兩種接頭插入。在Mini-A及Mini-B接頭中均新增一個訊號ID,在Mini-A接頭中ID必須連到USB的地線(GND)上,而在Mini-B接頭中則必須是斷路。
所以若是Mini-A接頭插入OTG裝置,ID就會是低電位,此時這個OTG裝置被稱為A-device,而且在初始的時候必須成為主機端。若是Mini-B接頭插入OTG裝置,則該OTG裝置被稱為B-device,並且要設定成為設備端。因此兩個OTG裝置的連結必須透過Mini-A接頭對Mini-B接頭的連接線,以便在一連上的時候決定哪一邊作為主機端。當連結建立以後,這兩個OTG裝置可以藉由HNP的協定來轉換主機/設備的角色。
SRP(Session request protocol)
因為大多數的OTG裝置都以輕巧可以隨身攜帶為訴求,因此為了達到省電的目的,OTG裝置的主機端可以將Vbus的電源切斷,以節省電源。但是在USB原有的架構中,並不允許設備端主動提出任何的要求,因此OTG便定義了SRP的協定,提供設備端主動要求開始作資料的傳送的能力。例如:OTG數位相機連結OTG印表機時,假設此時印表機為主機端,且進入省電模式並將Vbus的電源切斷。此時若是使用者想要將數位相機上照片印出來,數位相機就可以透過SRP向印表機提出要傳資料的需求,就不需要再對印表機作操作了。印表機在回應了來自數位相機的需求後,就可以開始向數位相機要資料來列印了,但是在傳送資料的過程中,一切還是由主機端(印表機)來控制。
SRP中的「Session」是指在Vbus上的電壓超過有效電壓值(Session valid threshold)的期間。對A-device來說VA_VBUS_VLD必須落在2.0~0.8V之間,B-device VB_VBUS_VLD則必須落在4.0~0.8V之間。一個Session的結束則是由設備端(並不一定是B-device)來辨識,當Vbus上的電壓小於0.8V時,就可以視為一個Session的結束。當上一個Session結束後,設備端才有權利再向主機端要求重新開始另一個Session。當然主機端也握有主動開始一個新的Session的權利。
《圖一 SRP sequence of events》 ![](/art/2003/10/051005104097/p1.gif) |
HNP(Host negotiation protocol)
考慮以下的情形,當兩個OTG裝置(裝置一和裝置二)相連結時,假設裝置一不支援裝置二,裝置二可以支援裝置一。
A-device B-device
狀況一 裝置一 裝置二 --> 告知使用者不支援裝置二
狀況二 裝置二 裝置一 --> 可以正常工作
因此當使用者把線接上裝置後,只有一種情形可以正常工作,這樣子會增加使用上的麻煩。因此,USB OTG又新增加了HNP的協定,讓主機端的角色可以在兩個OTG裝置間轉換。如此一來,在狀況一中雖然裝置一不支援裝置二,但是裝置一可以經由以下的步驟將主機的角色轉讓給裝置二,讓裝置二來主導資料的傳輸。
由A-device-->B-device
步驟一:A-device傳送SetFeature(b_hnp_enable)的命令(setup command)給B-device,告訴B-device將要成為主機端。
步驟二:A-device進入待命(Suspend)模式(和省電模式不同,並不把Vbus的電源切斷,只是停止在匯流排上動作(如傳送SOF))。如圖一中的事件。
步驟三:當B-device偵測到進入待命模式以後(>5ms),就可以將提昇電阻關掉,進入主機模式。對A-device來說,這相當於是一個B-device斷線的狀態。所幸HNP是由A-device主導,因此可以由A-device來區別這是斷線還是B-device進入等待A-device回應的狀態
步驟四:A-device由主機模式進入設備端模式,並且將提昇電阻打開(<3ms)。如圖一中的事件。這就相當於一個裝置插入主機端的狀況。如附圖一中的事件。到目前為止,A-device和B-device的角色就轉換過來了,由B-device獲得資料傳輸的主導權。
由B-device-->A-device
步驟五:B-device停止在匯流排上的動作,進入待命模式。如圖一中的事件。並且設定為設備端,將提昇電阻打開。如附圖一中的事件。
步驟六:當A-device偵測到進入待命模式後,會進入主機模式。如圖一中的事件。若是A-device並沒有要傳輸資料的話,則可以進入省電模式,切斷Vbus的電源供應。若是A-device還要傳送資料的話,就可以在USB Bus Reset(如圖一中的事件)後開始傳送資料。
《圖二 HNP sequence of events》 ![](/art/2003/10/051005104097/p2.gif) |
結語
USB OTG提供了一個讓兩個USB裝置連結的可能性,但是同時也提高了OTG裝置的在設計上的複雜度。原本要由電腦做的事情,現在都要落在當主機端的OTG裝置身上。因此,為了要對應不同的設備,就需要不同的驅動程式。原本USB裝置的製造商只要熟悉自己的產品就可以了,在加入OTG的概念後,就必須要對想要連結的設備有一定的了解。例如想做OTG數位相機來列印照片,除了數位相機的技術外,也需要了解印表機的設定及使用,而印表機的種類繁多,因此想要支援所有的印表機,可以說是一個遙不可及的夢想。所幸USB協會努力的推動各種不同裝置的標準。例如:人性化介面裝置(HID Class)、印表機裝置(Printer Class)、影像裝置(Still Image Class)、大量儲存裝置(Mass Storage Class)…等。如此便能夠使用相同資料格式,相同傳輸方式來傳輸資料。藉由這些不同裝置類別的規範,就有機會大大簡化在OTG裝置上對驅動程式的需求。OTG裝置只要能夠支援某一個類別,就可以支援符合該類別的所有設備。
(作者為巨盛電子專案經理)
|