USB OTG既可以做主設(shè)備,也可以做從設(shè)備
USB OTG
想了解USB OTG的工作原理,需要知道三個協(xié)議:
ADP:Attach Detection Protocol
HNP:Host Negotiation Protocol
SRP:Session Request Protocol
2.1 ADP
USB主從設(shè)備或USB OTG設(shè)備,如何知道USB總線上有沒有掛接其它USB設(shè)備呢?USB設(shè)備會周期性地檢測USB端口的電容值,如果USB端口電容值變化足夠大,大到可以確定有新的USB設(shè)備接入了,那么USB A型設(shè)備會為USB總線提供電源,并檢測設(shè)備連接;而USB B型設(shè)備則發(fā)起一個會話請求(SRP),并等待A型設(shè)備的響應(yīng)。
2.2 HNP
2.2.1 主從設(shè)備是如何確定的?
USB OTG既可以做主設(shè)備,也可以做從設(shè)備。在系統(tǒng)運行過程中,OTG設(shè)備的角色(主設(shè)備or從設(shè)備)可以轉(zhuǎn)換,但是,在系統(tǒng)剛啟動時,OTG設(shè)備的角色是確定的。如何確定的呢?下面來解決這個問題
上圖是幾種典型的USB接口,其中Mini-A型、Mini-B型、Micro-AB型和Micro-B型口都有五個管腳,管腳順序是
1:Vbus
2:D-
3:D+
4:ID
5:GND
若是ID管腳接地,則該設(shè)備為A設(shè)備;若ID管腳懸空,則該設(shè)備是B設(shè)備,其中A設(shè)備是initial host,B設(shè)備是initial peripheral。即系統(tǒng)剛啟動時,A設(shè)備是主設(shè)備,B設(shè)備是從設(shè)備。如下圖所示,左邊的設(shè)備是B設(shè)備,右邊的USB設(shè)備是A設(shè)備。
值得注意的是,在系統(tǒng)運行的過程中,USB設(shè)備的主從角色可能會變化,但是A設(shè)備/B設(shè)備的名稱不會變化。也就是說,在系統(tǒng)運行過程中,A設(shè)備有可能從主設(shè)備變成從設(shè)備,但是A設(shè)備仍然叫做A設(shè)備;B設(shè)備類似。
另外,A設(shè)備始終是供電設(shè)備,而與A設(shè)備扮演的角色無關(guān)。即使A設(shè)備變成了從設(shè)備,仍然由A設(shè)備供電。
2.2.2 為什么需要更換主從設(shè)備的角色呢?
上圖為一個需要互換角色的例子。左邊是一臺PDA,PDA里有打印機驅(qū)動,但由于它是B設(shè)備,因此初始角色是從設(shè)備。很顯然,在打印服務(wù)的過程中,有必要互換PDA和打印機的角色。
我們在開發(fā)i.MX233開發(fā)板的過程中,ID管腳沒有引出來,因此,默認i.MX233是從設(shè)備??墒荱SB攝像頭也是從設(shè)備,這樣i.MX233沒有辦法轉(zhuǎn)換成主設(shè)備,從而i.MX233無法使用USB Camera。
2.3 SRP
正如剛剛提到的那樣,A設(shè)備一直供電,即使A設(shè)備通過HNP協(xié)議由主設(shè)備變成從設(shè)備了,也一直由A設(shè)備供電。然而,在嵌入式系統(tǒng)里,尤其是只有電池供電的系統(tǒng)里,功耗是一個很重要的性能指標。A設(shè)備可以通過停止供電終止會話,進而降低功耗。這樣就產(chǎn)生了一個問題,如果B設(shè)備要求開啟一個會話,該怎么辦?
SRP可以解決這個問題。根據(jù)SRP,B設(shè)備可以請求A設(shè)備打開電源,開始一個會話(session)。
如上圖所示,B設(shè)備中的SRP PULSE會先給D+引腳一個脈沖,之后再給VBUS一個脈沖,這樣可以喚醒A設(shè)備。相應(yīng)的,右邊的A設(shè)備檢測到D+或VBUS上的信號,則開啟VBUS并啟動會話。
評論