便攜設(shè)備如何相互溝通
隨著便攜設(shè)備的功能和數(shù)據(jù)容量的提升,,使用者也開(kāi)始希望其能與其他便攜式與非便攜設(shè)備共享信息,,但是掌上型設(shè)備的數(shù)據(jù)輸入及顯示較為不易。因?yàn)轶w積小,,便攜設(shè)備通常沒(méi)有實(shí)用的接口,,只有一個(gè)小屏幕和有限的按鍵。
便攜設(shè)備存在的另一個(gè)問(wèn)題是“需要傳輸?shù)臄?shù)據(jù)量”,。以一臺(tái)數(shù)碼相機(jī)為例,,其存儲(chǔ)容量可高達(dá)數(shù)百兆。此外,,數(shù)據(jù)傳輸?shù)姆绞揭灿泻芏?,手機(jī)用戶可能會(huì)想將手機(jī)連接到PC,下載原先儲(chǔ)存的信息;有時(shí)需要和其他手機(jī)聯(lián)機(jī),,互傳電話號(hào)碼;或者需要和數(shù)碼相機(jī)聯(lián)機(jī),,上傳所拍攝的照片;當(dāng)然有時(shí)還必須連接到PDA并使用其無(wú)線網(wǎng)絡(luò)功能。
無(wú)奈手機(jī)等便攜設(shè)備體積太小,,沒(méi)有空間為各種連機(jī)類型提供專屬的接頭,,而且便攜設(shè)備的市場(chǎng)對(duì)成本相當(dāng)敏感,想要提供這么多的接頭,,會(huì)導(dǎo)致成本過(guò)高,。由此看來(lái),我們需要一種便宜,、普及,、使用容易,、傳輸速率高的聯(lián)機(jī)方式,使各種不同的電子設(shè)備能夠彼此通信并傳輸數(shù)據(jù),?! ?/p>
標(biāo)準(zhǔn)的USB連機(jī)需要一個(gè)主端(host),這個(gè)主端通常是PC,。如果想把儲(chǔ)存在某個(gè)外圍設(shè)備的數(shù)據(jù)傳輸?shù)搅硪粋€(gè)外圍設(shè)備,,唯一的方法是通過(guò)主端來(lái)中介傳輸,如圖1所示,。例如,,想要將數(shù)碼相機(jī)的照片打印出來(lái),,必須先將照片上傳到主端,,再?gòu)闹鞫藗魉偷酱蛴C(jī)。為什么不在便攜設(shè)備里加入主端功能呢?
USB是一種主從架構(gòu)的通信協(xié)議,,原先是給一個(gè)主端搭配多個(gè)外圍設(shè)備的應(yīng)用方式設(shè)計(jì)的,,因此USB連機(jī)的操控管理,多半是仰賴主端,。如果要將整套USB規(guī)格的主端控管邏輯全部建構(gòu)在一個(gè)便攜設(shè)備中,,對(duì)于著重功能簡(jiǎn)便的便攜設(shè)備而言,會(huì)造成很大的負(fù)擔(dān),。而且USB傳輸線具有方向性,,插入主端的接頭和插入外圍設(shè)備的接頭并不相同。
以便攜設(shè)備而言,,有時(shí)候必須擔(dān)任主端的角色,,例如,數(shù)碼相機(jī)傳送照片給打印機(jī);而有時(shí)候則必須擔(dān)任外圍設(shè)備的角色,,例如,,數(shù)碼相機(jī)將照片上傳至PC,如圖2所示,。雖然USB的專用接頭體積不大,,但如果要建構(gòu)于小巧的便攜設(shè)備之中,可能還是過(guò)于龐大,。USB架構(gòu)認(rèn)定主端具備充足的電源,,可為聯(lián)機(jī)的外圍設(shè)備提供電力,有些設(shè)備甚至全部的電力都是來(lái)自USB總線的,。這樣的供電架構(gòu),,對(duì)于一些電力有限的小型便攜設(shè)備而言,會(huì)造成難以承受的負(fù)擔(dān),。USB OTG補(bǔ)充規(guī)格中最重要的改變就是擴(kuò)充了原先的USB協(xié)議,,提供更嚴(yán)謹(jǐn)?shù)?font class="f14">電源管理功能,,并允許電子設(shè)備擔(dān)任主端角色或外圍角色。
圖2 USB OTG的連接架構(gòu)
雙重角色設(shè)備
“雙重角色設(shè)備(Dual-Role Device)”既可擔(dān)任主端角色,、亦可擔(dān)任外圍的電子設(shè)備角色,。除了要符合USB 2.0標(biāo)準(zhǔn)的所有要求之外,“雙重角色設(shè)備”還必須提供有限的主端功能,,并支持“事務(wù)請(qǐng)求協(xié)議(SRP)”以及“主端協(xié)商協(xié)議(HNP)”,,而且應(yīng)具備單一Mini-AB插槽。此外,,這種設(shè)備必須能傳送信息給使用者,。當(dāng)“雙重角色設(shè)備”處于主端模式運(yùn)作時(shí),VBUS只需要供應(yīng)8mA的電流,,這個(gè)規(guī)格有別于標(biāo)準(zhǔn)USB主端的100mA或500mA要求,。
主端協(xié)商協(xié)議
當(dāng)“雙重角色設(shè)備”連接了一個(gè)Mini-A或Mini-B插頭時(shí),它相應(yīng)的便以O(shè)TG主機(jī)或外設(shè)的默認(rèn)方式工作,。A設(shè)備為默認(rèn)主端,,所以由它提供VBUS電源,且在檢測(cè)到有設(shè)備接入時(shí)復(fù)位總線,、列舉并配置B設(shè)備,。
A設(shè)備在完成對(duì)B設(shè)備的使用后,可以通過(guò)查詢B設(shè)備的OTG性能描述符來(lái)判斷是否支持HNP(即是否為“雙重角色設(shè)備”),。如支持HNP,,B設(shè)備將返回有效的OTG性能描述符,A設(shè)備則產(chǎn)生一個(gè)Set_feature命令(即HNP_Enable)來(lái)通知B設(shè)備可以在總線掛起的時(shí)候以主端方式工作,,隨后A設(shè)備掛起總線,。
B設(shè)備通過(guò)上拉電阻(全速時(shí))或者下拉電阻(高速時(shí))拉低D+(數(shù)據(jù)線上拉電阻)以示連接斷開(kāi)。隨后,,作為對(duì)B設(shè)備斷開(kāi)的響應(yīng),,A設(shè)備使能它的數(shù)據(jù)線并開(kāi)始以從端方式工作。完成這些轉(zhuǎn)換后,,B設(shè)備和A設(shè)備便各自以主機(jī)角色和外設(shè)角色使用總線,。如果該B設(shè)備屬于“雙重角色設(shè)備”且A設(shè)備不再使用它了,A設(shè)備便重發(fā)Set_feature命令并掛起總線,。若B設(shè)備申請(qǐng)角色轉(zhuǎn)換時(shí)出錯(cuò),,A設(shè)備則拉低VBUS以結(jié)束該事務(wù)。當(dāng)B設(shè)備正常結(jié)束傳輸事務(wù)時(shí)便掛起VBUS使能其上拉電阻,,重新以從端方式運(yùn)行,。A設(shè)備檢測(cè)到總線掛起后,發(fā)出一個(gè)連接斷開(kāi)信號(hào)并重新以主機(jī)方式工作。
事務(wù)請(qǐng)求協(xié)議
在以往的USB系統(tǒng)運(yùn)行過(guò)程中,主機(jī)提供5V的電源和不低于100mA的總線電流,。當(dāng)OTG主機(jī)(指以主機(jī)方式工作的兩用OTG設(shè)備,又稱A設(shè)備)連接到有線電源時(shí)這種方法是適用的,,但像手機(jī)這樣的自供電移動(dòng)設(shè)備則不能承受如此大的電能浪費(fèi)。為了節(jié)約電源延長(zhǎng)電池的使用壽命,當(dāng)總線上沒(méi)有活動(dòng)時(shí),,OTG主機(jī)將掛起總線電源VBUS,。SRP可使OTG從端(指外設(shè)式設(shè)備或者以外設(shè)方式工作的“雙重角色設(shè)備”,又稱B設(shè)備)請(qǐng)求設(shè)備重新使能VBUS,,而后A設(shè)備使用HNP交換兩個(gè)設(shè)備的工作方式,,這兩步完成后由新的OTG主機(jī)開(kāi)始事務(wù)傳輸。B設(shè)備可在前一事務(wù)結(jié)束2ms后的任意時(shí)間開(kāi)始SRP,。
B設(shè)備將先后執(zhí)行數(shù)據(jù)線脈沖調(diào)制和VBUS脈沖調(diào)制,,分別通過(guò)使能數(shù)據(jù)線上拉電阻(全速和高速設(shè)備為D+,低速設(shè)備為D-)5~10ms和驅(qū)動(dòng)VBUS實(shí)現(xiàn)。VBUS必須要有足夠長(zhǎng)的時(shí)間對(duì)其電容充電,這個(gè)時(shí)間應(yīng)能保證不大于13μF的電容充電至2.1V(OTG設(shè)備的電容是6.5μF或更小),從而不會(huì)對(duì)標(biāo)準(zhǔn)主機(jī)的96μF或更大的電容充電至2.0V,。該限制保證了從B設(shè)備引來(lái)的VBUS電流不會(huì)破壞標(biāo)準(zhǔn)主機(jī)的端口,。
A設(shè)備檢測(cè)到數(shù)據(jù)線脈沖調(diào)制或者VBUS脈沖調(diào)制后,首先復(fù)位總線,然后發(fā)送Set_feature命令而先不進(jìn)行設(shè)備的枚舉,此時(shí)B設(shè)備尚處在默認(rèn)的從端狀態(tài),。如果Set_feature命令成功執(zhí)行,說(shuō)明B設(shè)備為兩用OTG設(shè)備,A設(shè)備(使用HNP協(xié)議)掛起VBUS準(zhǔn)備讓B設(shè)備交換為主機(jī)方式接管總線,。如果Set_feature命令執(zhí)行失敗,,說(shuō)明B設(shè)備為外設(shè)式OTG設(shè)備,,于是A設(shè)備使能VBUS準(zhǔn)備開(kāi)始一個(gè)傳輸事務(wù)(此時(shí),A設(shè)備只是被喚醒,,并未改變工作方式),。當(dāng)A設(shè)備認(rèn)為總線上沒(méi)有傳輸需要時(shí),掛起VBUS以結(jié)束該事務(wù),。這種A設(shè)備自動(dòng)檢測(cè)B設(shè)備是否支持HNP的特征稱為“No Silent Failure”,。
USB得以成功的其中一項(xiàng)秘訣在于完善的認(rèn)證測(cè)試程序。這道程序能檢測(cè)設(shè)備是否符合規(guī)范且能否與其他USB設(shè)備共同運(yùn)作,,唯有通過(guò)認(rèn)證測(cè)試的設(shè)備才能貼上USB的認(rèn)可標(biāo)簽,。目前,認(rèn)證測(cè)試有兩種途徑,,可通過(guò)USB Compliance Workshop(Plugfests)或個(gè)別的測(cè)試實(shí)驗(yàn)室進(jìn)行測(cè)試,。以上兩種方式都能將通過(guò)檢測(cè)的設(shè)備列入符合規(guī)范USB設(shè)備的整合廠商名單中。
USB OTG 評(píng)估板測(cè)試
1 USB EHCI 主端控制器測(cè)試
每個(gè)設(shè)備應(yīng)該能響應(yīng)USB規(guī)范所定義的控制請(qǐng)求,。主端應(yīng)該能利用主端控制器經(jīng)USB纜線送出控制需求到USB設(shè)備,。
圖3 EHCI 主端控制器測(cè)試架構(gòu)
測(cè)試方法如下:USB測(cè)試Class驅(qū)動(dòng)呼叫由USB IP核提供更高層的API,經(jīng)USB子系統(tǒng)送出需求到USB設(shè)備,。接著, 主端經(jīng)控制端點(diǎn)(Endpoint)接受控制IN/OUT,,然后解析/獲得回應(yīng)數(shù)據(jù)/狀況用以核對(duì)其正確性。此外, 每個(gè)USB設(shè)備應(yīng)該包含幾個(gè)必需的描述符并依靠所接受的Get_Descriptor需求的內(nèi)容來(lái)回應(yīng)這些描述符。圖3中PC安裝Windows 2000或是Windows XP,,利用ARM ADS1.2的AxD調(diào)試器,,F(xiàn)A5 CPU的ICE一端連接PC的打印機(jī)口或是USB口,另一端連接開(kāi)發(fā)板,,開(kāi)發(fā)板的另一端則是各種USB設(shè)備,,如USB集線器、攝像頭,、鼠標(biāo),、鍵盤(pán)和U盤(pán)。
圖4 互測(cè)SNP和HNP的連接架構(gòu)
2 OTG 測(cè)試
利用兩臺(tái)USB OTG開(kāi)發(fā)板互測(cè)SNP和HNP的連接架構(gòu)如圖4所示,。
圖5 大量存儲(chǔ)的應(yīng)用測(cè)試
應(yīng)用測(cè)試
如圖5所示,,設(shè)計(jì)一個(gè)SD卡主端應(yīng)用來(lái)做演示, SD卡的大量存儲(chǔ)用以測(cè)試FOTG200功能。FOTG200是智原的USB 2.0 OTG控制器, 能作為一個(gè)雙重角色,。作為主設(shè)備,,它包含一個(gè)USB主端制器,能支援所有速度的事務(wù),。無(wú)須軟件干涉的情形下,,主端制器能處理一個(gè)基于事務(wù)的數(shù)據(jù)結(jié)構(gòu)以減去主控CPU的負(fù)擔(dān),自動(dòng)地在USB總線上轉(zhuǎn)送和接收數(shù)據(jù),。作為從設(shè)備,,每個(gè)端點(diǎn),除了端點(diǎn)0,,都承擔(dān)可編程的HS/FS傳輸類型提供彈性以適應(yīng)各式各樣的應(yīng)用,。
在這個(gè)應(yīng)用上, USB子系統(tǒng)由USB IP核、EHCI HCD控制器,、USB大量存儲(chǔ)Class驅(qū)動(dòng),、文件系統(tǒng)和SD卡設(shè)備驅(qū)動(dòng)所組成。因此,主端設(shè)備能夠讀/寫(xiě)文檔到SD卡(外部設(shè)備),。順便也能驗(yàn)證大量存儲(chǔ)Class驅(qū)動(dòng)和Bulk IN/OUT傳輸?shù)墓δ堋?/p>