掌握OS驅動程式運作特性 優化智慧型手機USB設計

從過去的經驗來看,只要按照微軟(Microsoft)的CE工具軟體範例,就能將Windows結合手機,放入口袋中帶著走,同時也可以將高速(High-speed)USB的功能放入該平台,輕鬆完成手機平台高速傳輸的目標。
但若要實際傳輸速率達到原本預期的高速USB 2.0頻寬,那就另當別論,需要更多努力。事實上,由於裝置所預期與實際效能間仍有差異,也造成不少絕佳設計被捨棄。而指標測試的執行速度不如預期,並不只有行動系統的頻寬、下載速率或USB假設的設計單純性而已,還有很多重要細節,都是讓Windows Mobile手機能否達到最佳效能的關鍵。  

USB通用性成最佳優勢  

目前有線USB有三種資料傳輸速率:低速USB資料傳輸速率為1.5Mbit/s、全速USB為12Mbit/s,而高速USB則為480Mbit/s。要注意的是,USB 2.0並不等於高速USB,高速USB雖然最先是以USB 2.0規格版本推出,然而該版規格同時也包含了低速及全速的資料傳輸規格。  

就像任何電子系統一樣,設計人員都想獲得最佳效能。但是對於USB而言,許多設計人員在開始系統設計之初,就認為他們將達到1.5、12或480Mbit/s的效能,然而,這根本是天方夜譚。因為有許多原因讓裝置永遠無法使用全部頻寬,自然無法將效能發揮得淋漓盡致。儘管現實如此,但USB仍然是市面上手機資料傳輸的最佳選擇。  

此外,選擇USB作為手機的傳輸介面有許多原因,如當連接到PC埠時,USB所提供的電源能在兩小時內對一個1,000mAh容量的普通電池完成充電;此外,USB是目前真正通用的規格,自1997年以後出廠的每部個人電腦與麥金塔(Mac)電腦都有USB功能;每個主要的作業系統也都支援USB,包括嵌入式行動系統在內。然而,當準備要投入新的USB手機設計時,最大的考慮重點還是放在設計的簡易性--設計成本,以及最後的實際效能--產品成功的因素上。  

Windows踏入行動裝置市場  

在手機上開發USB功能時,作業系統的選擇也是十分重要,因為USB效能的最佳化與作業系統息息相關,目前市面上有許多可選用的作業系統,以智慧型手機(Smartphone)來說,這種講求高速USB速率與效能的高階手機市場,目前主要採用的是Symbian作業系統。研究機構ABI Research總監Stuart Carlaw表示,2006年Symbian在智慧型手機作業系統市場中估計有73%的占有率,但由於未來會面臨到Linux與Windows Mobile的強勢競爭,因此ABI預測,Symbian的占有率到2012年將會銳減至46%。這表示開發人員也必須了解Windows Mobile作業系統中USB的設計規格,以為將來市場變化作準備。  

在桌上型電腦的世界中,Windows是最知名的作業系統軟體之一。而在行動運算的世界中,Windows針對此市場區塊也提出了三種解決方案,分別是Windows CE、Windows Embedded以及Windows Mobile。簡單來說,Windows CE是屬於即時作業系統(Real Time Operating System, RTOS),可運用在醫療與科學設備、工業控制器、網際網路裝置及其他小型電子裝置中。Windows Embedded則提供了更強大的功能,能運用於次世代的裝置中,並可提供有線及無線網路連線、高階的多媒體裝置、存取大量記憶資源及更強大的多工作業能力。最後,Windows Mobile(WM)則是PDA和手機的標準平台。要在上述三種系統中設計USB的功能,就必須要確實地考慮並瞭解USB的各種規格。  

USBFN掌控USB運作  

首先,USB不是一種對等連線,其中有主控(Host)裝置及從屬(Slave)裝置之分。一般而言,主控裝置比從屬裝置具備更強大的功能,主控裝置控制USB匯流排上所有的動作,因此主控裝置多半建置於桌上型或筆記型電腦中。而其他可插入連結這些電腦的裝置則多屬於從屬裝置,例如滑鼠和外接式磁碟機。WM協定堆疊中具有主控端及從屬端驅動程式,但由於這兩者都不能稱為USB驅動程式,因此特別把USB從屬端驅動程式稱為USB功能驅動程式(USB Function Drivers, USBFN)。且多數的WM裝置都須要連結到電腦上,因此業界的焦點多放在USBFN上。同樣的觀念也可運用在USB主控端上。  

先來看基礎的部分,Windows Mobile USB介面採取分層的模式,可以最少的工作量產生新的USB驅動程式。在USB驅動程式中,上層稱為Model Device Driver(MDD),它為RNDIS與大量儲存裝置等USB裝置驅動程式提供統一介面。MDD層也為更上層的驅動程式提供裝置列舉(Enumeration)、緩衝、管線/端點轉譯等功能。此外還有Platform Dependent Driver(PDD)層,負責編程USB控制器中的暫存器,並且執行MDD標準功能呼叫與特定裝置需求之間的內容轉換工作(圖1)。

圖1 Windows Mobile中的USB驅動程式分層模型

USB的PDD功能可分成四個群組,分別代表驅動程式執行週期的四個階段(圖2)。在DLL初始化(Initialization)階段中,內部的機制如記憶體配置和工作建立皆在此進行。在USB裝置列舉階段中,PDD會告訴MDD關於USB硬體的功能,接著MDD會透過PDD將USB的描述元(Descriptors)傳遞給主控端進行裝置確認,而USB資料傳輸階段則是裝置完成實際傳輸作業的階段。至於在DLL刪除(Destruction)階段中,原先DLL所使用的作業系統資源則歸還給作業系統以供其他工作使用。
點圖放大
圖2 USB Platform Dependent Driver(PDD)之工作週期與功能項目

上述PDD工作週期中所列舉的眾多功能項目裡,只有IssueTransfer須修改以提升效能。該功能項目是由MDD所呼叫,以啟動IN(往主控端)及OUT(從主控端)的傳輸工作。IN在執行工作時會將放滿資料的緩衝區交給PDD,一旦USB裝置上空間許可時,PDD就會把資料移到該裝置中;OUT的工作執行則是當MDD將空的緩衝區提供給PDD時才會啟動,兩者一大差異在此。

圖3表示一般IN與OUT的工作順序。兩者皆開始於MDD呼叫PDD_IssueTransfer功能項目,接著PDD會依序將符合USB規格的資料封包傳送至MDD,直到傳輸完畢為止。當傳輸完成,PDD會呼叫傳輸完成的召回功能,再由MDD轉送給用戶端的執行作業。

圖3 一般USB的IN與OUT工作順序梯形圖

「快速」為USB唯一關鍵  

以上簡述的資料傳輸工作順序顯示了一項訊息:將資料從應用程式搬移到USB周邊的程式執行必須要快。在十六位元匯流排的系統中,必須重複執行此程式五千次,才能移動10K的資料。若處理器對USB周邊具備直接記憶體存取(Direct Memory Access, DMA)的功能,就可提供最快速的資料傳輸時間。若無DMA,則必須確定傳輸迴圈速度要夠快。IN資料傳輸迴圈如圖4的BEFORE所示。  

雖然這是結構明確的程式碼,還是會編譯成十一個組語層級的指令,這在高效能系統中是無法接受的。然若每次都用專屬的指標取代重複的pContext->pAntiochBaseAddress[addr],可將迴圈縮小成十個指令;將迴圈頭段展開成多字元,可將每位元組的運算成本降到三個組語指令以下,修改過的程式碼如圖4的AFTER所示。在一些處理器中,使用對應到data_p的相對位址會比每個指令累增data_p有更好的效果。在SOURCES檔案中加入WINCECOD=1的指令,就可以察看自己的程式碼。

點圖放大
圖4 可最佳化資料傳輸順序工作之程式碼範例

另一項須要追蹤處,是CPU與USB周邊硬體之間所用的匯流排時脈。在一開始的硬體測試中,通常選擇最慢的匯流排時序,以完全確定符合USB周邊晶片的時序需求。而透過記憶體管理單元編程,更能將效能提升至周邊設備所能容許的最快速度。  

DMA晶片協助儲存裝置/USB連結  

Windows CE提供一個最佳化的方式--使用DMA,同時描述如何配置實體緩衝區以執行DMA。但是由於匯流排寬度可能不合、訊號不相容及沒有接腳可用等問題,因此少有處理器/周邊組合有能力執行DMA。  

然目前已有業者推出可執行DMA的晶片(圖5),該類晶片可在儲存裝置與USB之間提供直接的資料路徑,而CPU毋須介入處理資料傳輸的作業,如此也帶來許多提升速率的機會,包括大量儲存裝置可直接與USB連結而毋須Windows Mobile的介入,或是Windows Mobile處理器可維持對儲存裝置的控制,並且利用USB與SD/MMC卡之間的直接資料路徑作為超高速的DMA通道。這在標準的Windows協定堆疊上是相當大的改良,因為原作法需要四次移動才能將資料由USB傳送至儲存裝置上--USB到CPU、CPU到記憶體、記憶體到CPU以及CPU到儲存裝置。

圖5 具備直接記憶體存取功能的晶片產品

部分USB 1.1驅動程式為插斷(Interrupt)驅動,每個封包都透過插斷服務常式(Interrupt Service Routine, ISR)處理。這種方式在全速USB模式中還可接受,但在高速模式中,由於USB封包相對較短,而且匯流排速度極高,使得此法並不可行。高速USB主控端在實際應用中的傳輸速度可達40Mbit/s,這代表每一百二十五微秒就會有十個長度為512位元組的封包到達。若在進出ISR時,不嘗試做環境切換(Context Switch),光是要有效率地移動這些資料就很困難。而ISR所引出的問題就是工作切換(Task Switching)的問題。即使是64千位元組的封包,或多或少都會對下一個工作造成延遲,如果可以適當地傳送,其實所花的時間不到二毫秒(表1)。
表1 效能檢查表

USB僅為系統一環  

不能忽略的是,USB只是日益複雜的大型系統中之一部分。當系統執行全速模式USB時,卻只得到300kbit/s的傳輸速率,開發人員常會將責任歸咎於USB。然而,USB本身有將近每秒1Mb的傳輸速率,用300kbit/s的速率傳送10Mb的檔案時雖需三十秒,但其中有十秒是處理USB控制訊息,有二十秒則是處理檔案系統與儲存裝置的額外資訊。如果改用高速USB,傳送10Mb的檔案就不用一秒。這也突顯了系統中其他部分須進行效能最佳化。因此,了解驅動程式方面的運作、傳輸作業順序、以及效能最佳化的部分,都有助於工程師更進一步設計出具備理想USB效能的智慧型手機。隨著未來市場上會有更多的智慧型手機推出,作業系統更加多元化,以及手機不斷增加的頻寬需求,設計人員面對這些議題時,若能仔細規畫並專注效能最佳化,設計人員研發的產品就可隨時準備好因應全球競爭最激烈的消費市場。  

(本文作者任職於賽普拉斯)

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!