|
通用序列匯流排(Universal Serial Bus, USB)已經問世十一年了,難以置信的是,電子業界至今仍不斷以創新方法來利用這套通訊協定;相對地,工程師每天卻也在千百種設計方案中,重複著相同的錯誤。如何從錯誤中學習正確觀念,是一項重要的功課。雖然USB與研發人員熟悉的其他協定有眾多相似之處,然而相較於熟悉的PS/2與RS-232領域,工程師在USB重複犯錯的次數竟然更多。此外,面對嚴格的標準規範,工程師犯下的錯誤可能會造成不符USB規範的代價。這些錯誤主要可分成五類:速度、電源、訊號品質、軟體、以及規格符合(表1)。
速度減緩因素眾多
最常見的錯誤,就是設計人員以為能使用全部的頻寬。毫無疑問的,USB裝置的速度不僅是消費者與研發者之間最常發生的爭議;且是遍布全球的通路賣場中最常被問及的問題。目前有線USB裝置共具備三種資料傳輸速度:低速USB的傳輸資料速度為1.5Mbps;全速USB的傳輸資料的速度則為12Mbps;而高速USB的傳輸資料的速度為480Mbps。值得注意的是,USB 2.0並不等於高速USB,高速USB最初是以USB 2.0的規格版本發表的,而該規格也同時適用於低速與全速USB的資料傳輸速度。
與任何電子系統一樣,設計人員都希望獲得最佳效能。然而對USB而言,許多設計人員在設計之初,就相信他們會從系統中得到所有的效能,達到1.5Mbps、12Mbps,或480Mbps的速度。老實說,這是很糟糕的假設,因為有很多原因會造成一項裝置無法使用全部的頻寬。
第一個原因,是許多使用者可共享USB匯流排。即使設計人員使用主機板上不同的連接埠,仍然有可能與匯流排上的其他裝置同時共用一個主機控制器(Host Controller),也就是說,與其他所有裝置共用USB匯流排頻寬。
第二個原因,是USB封包格式化協定會把較長的資料分成數個512位元組的封包。每個封包的標頭(Header)負責辨識封包內容,而封包尾端則有CRC,負責確定資料的完整性。每個封包傳送後,都須由接收端回覆ACK(圖1)。
訊框起始(Start of Frame, SOF)封包則是每125微秒傳送一次,以維持匯流排上的時序。在此因素影響下,USB的最大頻寬是每個微訊框(Microframe)可允許13個連續封包傳送,相當於每秒53,248,000位元組的傳輸速率。然而由於一般主機控制器在每個微訊框僅能接收10個連續封包,或傳送8個連續封包,因此現有主機控制器無法提供理論上的速度極限值。
無法預測系統瓶頸點
許多高速系統都在這項議題上遭遇挫折,在此根據一項針對將資料寫入NAND快閃記憶體之系統的分析結果來說明。這個系統透過USB傳送資料,之後將資料先暫放於緩衝區(Buffer),接著再寫入快閃記憶體中。每個封包都分成三種時間元素:USB傳輸所需時間、主要作業系統消耗時間(Operating System Overhead),以及NAND快閃記憶體韌體的編程時間。圖2是128kbyte資料區塊經過即時效能分析後的時序圖。
工程師幾乎花費所有時間,利用加快USB介面晶片的波形,以嘗試降低USB傳輸所需的時間,直到將時間切割成不同區段。一旦工程師了解,效能其實是決定於所使用的NAND快閃記憶體可編程韌體,才能夠藉由減少NAND的頭段時間,來大幅提升效能。在大多數系統中,高速USB並不是瓶頸所在。因此,設計人員必須仔細檢查整個系統,以確保有足夠的頻寬空間,來達成想要的系統速度。
電源限制影響設計 USB匯流排電源
根據USB規格,USB裝置可以由「匯流排供電」(Bus-powered)、由USB電源線提供電源,也就是「自行供電」(Self-powered),或是由電池或外接電源供電。最理想的USB供電方式是由匯流排供電,如此一來就不須再外接電源。
然而,利用USB匯流排供電,也意味著用戶將受到USB規格中500微安培、100毫安培、與500毫安培的電流限制。但是許多設計人員卻沒有仔細留意這些限制,因此造成設計無法符合匯流排供電的規格。以下說明不同電流的設計限制。
首先,500微安培是由主機端供應電源,但是當USB沒有執行傳輸動作時,裝置必須處於USB暫停(Suspend)狀態。在此狀態下,只能從VBUS獲得500微安培的電流。這個狀態是為了當個人電腦處於暫停模式時,能將最小的電流輸出降至最低。
其次,100毫安培的USB規格具備高電源(500毫安培)與低電源(100毫安培)兩個連接埠。低電源連接埠常用於匯流排供電型的集線器中,而且是承接500毫安培的電源,再分配給下端連接埠各100毫安培的電流。
當USB裝置連接時,此裝置在收到來自主機端的設定組態(Set Configuration)訊息之前,無法判讀它是在何種連接埠上,因此會將電流限制在100毫安培。
這表示該項裝置必須在非常低的電源模式下,在USB上進行裝置列舉的作業,直到收到設定組態訊息指示,才能夠切換至高電源模式。
這在高速USB上原本是非常困難的事,這情況直到2004年業者發表新款晶片之後才得以解決。最後,500毫安培則是USB規格中所允許的最大電源輸出值。
因此,實際設計測試應由系統工程師主導,以確保裝置在由匯流排供電的運作模式下所需的不同電源值,否則就必須為新的USB系統額外購買昂貴的外接電源。
逆流電源
「自行供電」的USB裝置也有本身電源的問題。由於這類裝置有獨立的電源供應器,因此可能在主機端關閉時,仍處於開機狀態。這種情況可能讓D+訊號有小幅電壓上升,而造成USB裝置偵測的部分會緩慢地對整個主機系統充電,進而干擾系統的啟動。自行供電的USB裝置(包括由電池供電的裝置)必須直接由VBUS消除該電壓上升的問題,或是透過軟體控制,利用VBUS感應器將裝置關閉。
裝置特性攸關訊號品質 共用D+/D-訊號
為了降低時間、流程與成本,有些產品會嘗試在多個裝置之間共用USB訊號線路。例如USB型的基座(Docking Station)可能允許一個軟碟機或一個DVD播放機插入儲存插槽中。這兩種裝置共用USB線路,就可藉由降低集線器連接埠的數目,進而節省成本。
然而,如果沒有完全了解系統中的裝置特性,要利用這種方法就相當困難。在三態(Tri-state)編排中,如圖3的設計選擇二,匯流排上的另一裝置會增加USB線路上的電容值,而連結至該裝置也會造成訊號反射,干擾高速USB的運作。另外,在開關型編排中(如圖3的設計選擇一),開關本身會對USB線路造成額外的電容值與電阻值,這將會減緩USB線路上訊號的上升/下降時間,並且造成USB訊號眼(Eye)縮小。
圖4顯示一般USB裝置訊號以10pF/10歐姆負載,傳輸經過開關後的訊號眼圖。在單一訊號眼圖中,紅色區域內應該不會存在干擾。而USB訊號共用線路成功的關鍵,就是必須維持開關的低負載,並且採用具備高訊號轉換速率的晶片。
自行開發軟體帶來風險 不使用現有類別驅動程式
類別驅動程式(Class Drivers)是USB系統環境中非常重要的部分。這些驅動程式是由主要作業系統提供,因此毋須另外進行開發。USB的類別是由裝置工作小組(Device Working Groups)定義,這是一個在USB制訂者論壇(USB-IF)號召下組成的自發性團體,目的在創造裝置之間標準的溝通語言。
目前市面上的USB裝置類別包括各類人性化介面裝置(例如滑鼠、鍵盤、或其他控制器等)、大量儲存裝置(例如各式磁碟機)、通訊裝置(例如數據機、網路介面卡)、音頻訊號、影像、以及靜態影像(例如:相片與掃描器)。
若一項新設計的裝置完全符合現有的類別架構,那麼只須到www.usb.org下載類別定義,並以此進行設計即可。然而,若某項裝置並非完全符合現有的類別,該裝置還是可用的,例如,微軟就採用靜態影像類別(Still Image Class),設計新的媒體裝置通訊協定(Media Transfer Protocol, MTP)類別。另外,人機介面裝置並不一定要連接到與使用者互動的介面上,它也可以在不另外開發新驅動程式的情況下,與程式中的溫度計、壓力感測器、幫浦控制器等裝置連結。
雖然藉由一個類別驅動程式就能夠完成設計,許多公司基於某種原因還是會想嘗試開發專用驅動程式,或以高價委外,由外部設計公司開發驅動程式。類別驅動程式不僅能夠排除設計風險、成本與時程等問題,也可避免許多除錯與複雜度的問題。
未取得製造商識別碼
每個USB裝置都有一組獨一無二的識別碼,讓作業系統可藉以找出正確的裝置驅動程式。識別碼的第一部分是由USB規格制訂者論壇指定的16位元製造商識別碼(VID)數值;而第二部分則是由產品製造商所指定的16位元數值,稱為產品識別碼(Product ID, PID)。
若廠商與設計人員事先規畫,並且能事先與USB規格制訂者論壇溝通,要取得製造商識別碼並且指定產品識別碼,其實是相當簡單的程序。然而,每年仍有數以千計的裝置已完成韌體與軟體的設計工作,但因無法取得適當的識別碼,而造成設計延遲的情況發生。
USB規格驗證嚴格 在規格測試前進行原型測試
產品必須通過USB規格測試,才能合法使用各類USB標章(圖5)。USB規格制訂者論壇負責規格測試,以確保所有用戶都能有良好的使用經驗。由於所有USB廠商相互依存,以建立良好的商譽,因此這點相當重要。若用戶對於某個USB裝置產生不好的經驗,將會大幅降低使用其他裝置的意願。
研發廠商可能無法負擔規格測試流程中一些需要昂貴高階測試設備的步驟。然而,許多裝置無法通過規格測試的原因,則是因為某些廠商沒有檢查一些簡單的項目。
因此,在裝置送測之前,必須至少先進行下列的測試:首先是USB指令驗證者工具(USB Command Verifier Tool)第9章的測試。
這個程式可驗證一項裝置是否可以處理可能由主機端送出的最重要的設定指令(請參考www.usb.org/developers/tools/網站)。其次,則是電源測試,包括暫停(Suspend)電流、湧入(Inrush)電流、尚未配置(Unconfigured)電流等測試。
電磁干擾可接地解決
要介紹良好的電磁干擾(EMI)設計技術,足以另外寫成一篇文章,不過,最常見也最容易解決的電磁干擾錯誤,就是嘗試利用系統的接地面作為USB纜線的屏蔽。這會讓雜訊引入接地面上,進而越過裝置屏蔽(圖6)。
分析至此,在USB設計上容易犯的錯誤已經相當清楚。數以百計的設計者每年絞盡腦汁,就是為了解決上述問題。從別人的錯誤中學習,可省下許多精力、重複設計、以及時程延遲的壓力。但最重要的是,請繼續保留創造力,因為這個世界需要更多創新、精緻、有趣的USB相關裝置。 |
|