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