USB On-The-Go是什麼
USB介面的裝置現在是隨處可見了,印表機、相機、手機、MP3等幾乎目前能想到的消費類電子裝置都具有USB介面。USB傳輸速率快,介面簡單、支援熱插拔的特性,使其在諸多介面中脫穎而出,大有統一天下之勢。但傳統的USB協議(USB2.0)限制了在這龐大的裝置群中必須有一個HOST作為主子,通常是PC。兩個外設之間的資料交換必須通過這個主子中轉才能完成,效率較低,不大方便。隨著嵌入式裝置的爆炸式增長,兩個USB裝置之間直接進行資料交換的需求越來越強烈,USB On-The-Go就應運而生了。一些手機、PDA和行動裝置的廠商在USB2.0的基礎上合作開發了USB On-The-Go(OTG)。USB OTG首先解決了USB裝置之間點對點的資料交換問題,擺脫了附庸於USB HOST的繁瑣。舉例來說,有了USB OTG,數位相機可以直接將照片通過印表機列印出來,而不必先將照片拷貝到PC上,再由PC控制印表機列印。
USB OTG還有以下幾個特性:
n 介面更小巧,有效減小了電子產品的體積
n 既能充當HOST又能用做Device,即DRD(Dual-role-devices)
n OTG裝置依然可以串連到PC上用做普通的外設,即POD(Peripheral-Only Device)
n 功耗更低,以延長採用電池供電的USB裝置的待機時間
USB OTG介面
傳統的USB裝置分為A和B兩種。A介面的裝置提供電源VBus,用做主子。B介面的裝置在通訊過程中作為外設。無論是A介面、B介面還是各自的Mini介面,雖然外形有些差別,但使用的引腳都遵循以下定義:
1腳:VCC電源
2腳:D-差分負極
3腳:D+差分正極
4腳:GND接地
USB OTG增加了一個ID引腳,它的介面(Mini-AB)定義如下:
1腳:VBus
2腳:D-
3腳:D+
4腳:ID
5腳:GND
USB OTG通過ID訊號線來識別是Mini A還是Mini B插頭。為了使用方便,不同的接外掛程式顏色不一樣:Mini A採用白色,Mini B採用黑色,Mini AB採用灰色。
USB OTG協議簡述
USB OTG中引入了兩個新的協議, SRP(Session Request Protocol)和HNP(Host Negotiation Protocol),即會話請求協議和主機交流協議。
SRP用於B裝置向A裝置請求建立會話和使用匯流排。OTG系統中的A裝置一般採用電池供電,因此,OTG系統電源管理是非常重要的。為了節省OTG系統的功耗,OTG規定A裝置在沒有匯流排活動的時候,可以關掉VBus上的電源。這樣,當一個B裝置串連到A裝置上之後,就要初始化SRP,並發送給A裝置,請求A裝置在VBus上提供電流支援,進而進行通訊。OTG中,DRD既可作為A裝置,也可作為B裝置,因此DRD必須支援初始化SRP和響應SRP,POD只能作B裝置,所以只能初始化SRP。B裝置有兩種方式向A裝置發送請求,要求建立SRP:資料線脈衝(Data-Line Pulsing),一種是VBus脈衝(VBus Pulsing)。任何一個A裝置只要求能響應一種SRP方式,而B裝置必須能初始化兩種SRP方式。這樣就能保證,當B裝置線初始化一種SRP,A裝置無法響應時,B裝置能用另一種SRP方式。
HNP用於兩個OTG裝置互連時角色切換。為了實現HNP,A裝置必須首先允許B裝置通過OTG最新定義的Set_Feature命令來控制匯流排。一旦該請求被A裝置接受,B裝置就可以對匯流排進行控制。如果A裝置想給B裝置一個機會來控制匯流排,它將中止對匯流排的操作,將匯流排掛起。接著B裝置就將D+拉低來終止以前的串連。接著,A裝置啟用位於D+處的上拉寄存器,完成這個轉換。此後,B裝置就將作為主控裝置使用,而A裝置將作為外圍裝置使用。同樣,B裝置也可以通過將匯流排掛起並啟用D+上拉寄存器,A裝置探測到匯流排上的變化後,清除D+上拉寄存器並重新作為主控裝置使用。簡而言之,兩個OTG裝置互連時,可以通過HNP協議協商主從地位。
WinCE下USB OTG驅動概述
USB OTG的軟體結構包括3部分:
u OTG控制器的驅動:包括SRP和HNP
u OTG的外設驅動:實現標準的USB類,來實現特定的USB外設功能
u OTG系統HOST驅動:包括HOST驅動、作業系統支援軟體和支援外設的類庫。
對於移植這一部分的驅動來說,需要注意ID偵測訊號、VBUS的控制訊號,這兩個訊號一般串連到MCU的GPIO上,根據硬體修改,而SRP和HNP一般由廠商完成,無需修改。我在調試這一部分時碰到的主要問題是,插入隨身碟後,OTG驅動檢測到隨身碟插入,並提供了VBUS的供電,但卻馬上停止通訊,無法正常使用隨身碟,後來經過進一步調試發現是MCU的OTG_VBUS的供電不足5V導致,不能用時的電壓為4.6V左右,串連到5V後就沒有問題了,目前USB OTG支援隨身碟,USB鍵鼠似乎是不能用的。