2012年4月17日 星期二

USB設備的除錯與測試技巧

原文刊載:電子工程專輯

 

USB是一種靈活的高速介面技術,可以替代電腦中原來的串列埠和平行埠,但靈活性高也意味著更加複雜,使得USB設計除錯以及設計完成後的驗證都比較困難。本文首先對USB規範做一簡要介紹,然後詳細討論USB產品在除錯與規範驗證方面的一些實用技巧。

通用串列匯流排(USB)是一種很流行的介面,可用於那些與個人電腦進行通訊的設備。近年來,所有新PC機和Mac機都支援USB技術,這種介面有足夠的靈活性,既可用於驅動器和鍵盤之類的普通周邊設備,也可用於定製按特殊用途設計的周邊。此外USB還有一些對用戶和開發人員都很有吸引力的特性,如從匯流排向設備提供電源、易於透過集線器進行匯流排擴展,以及主電腦對設備能自動識別等等。

但USB的超強性能也意味著它的介面要比它所替代的老式串列和平行介面都複雜,每個USB設備必須響應匯流排上的一系列標準請求和各種事件。大多數匯流排交流需要雙向通訊,而且延遲必須很小,匯流排上的數據都透過編碼,單單只用示波器或邏輯分析儀觀察不是很容易。工程技術人員可以選擇不同的工具與技術或採用不同設計,簡化並加快USB的開發和故障排除。

USB規範

USB規範是由英特爾、微軟和另外幾個PC及周邊公司共同提出的,在USB應用者論壇(USB-IF)的網站上提供了供開發人員使用的規範文本、相關資訊及工具(詳情可訪問www.usb.org)。圖1:Windows的設備管理器會顯示出所有枚舉成功的USB設備。

每個匯流排上有一個主控制器,用來控制與匯流排上面設備的通訊。為了給設備提供更大頻寬,一台電腦可以有多個主控制器,分別控制其自己的匯流排。

USB支援三種匯流排速度:低速1.5Mbps、全速12Mbps和高速480Mbps。高速模式是2000年發佈的規範2.0版本新增加的,Windows XP是支援USB 2.0的第一個Windows系統,微軟公司允諾在Windows 2000和Windows ME中對USB 2.0提供更新支援,而其它作業系統以後也將逐漸支援USB 2.0。

對於嵌入式PC作業系統,Windows CE也支援 USB。大多數Windows CE電腦作為USB主機使用,Windows CE 3.0中還包括用於Cypress/ScanLogic公司SL11主?從控制器的驅動程式。有了這些驅動程式(或者用於其它控制器的類似驅動程式),一個Windows CE電腦還可以作為USB周邊使用。

USB的多功能性主要歸功於它的4種傳輸類型,每一種類型適用於不同的用途。其中控制傳輸模式用於傳輸枚舉過程中的請求,也用於發送請求至設備和接收答覆(可選);中斷傳輸模式用於鍵盤鼠標之類由主機定期發出請求和發送數據的設備;批傳輸模式用在諸如列印機和掃描儀之類的設備中,這類設備要求傳輸速度快,但在匯流排忙碌時傳輸數據可以等待;同步傳輸用於實時伴音和其他應用,這類應用對時序要求很高,但允許有偶爾的錯誤。

在自舉或者當某個設備連接到匯流排上時,設備集線器就向主機報告連接情況,在一個稱為枚舉的過程中,主機發送系列請求以了解連接的設備並與之建立通訊,設備則以所謂描述符數據結構返回應答資訊。Windows的設備管理器將描述符內的資訊與PC內部INF文檔進行比較,從中找出最佳匹配,然後指定一個設備驅動程式,這樣應用程式就能夠存取該設備了。

所有設備必需遵循USB對功率管理的要求,包括限制設備吸收的匯流排電流和檢測什麼時候進入低功耗挂起狀態,允許的電流量取決於元件描述符中的資訊。

目前市面上有很多帶USB功能的設備控制器晶片可供選用,有的是帶一個USB埠的微控制器,有的是非CPU控制器,上面帶有一個USB埠和一個用於與普通微控制器通訊的序列埠或平行埠。大多數具有USB功能的微控制器都有C語言編譯器,如果你熟悉某個微控制器系列,那麼它提供的USB功能變量將非常有用。

測試USB設備的通訊功能包括幾個階段,第一個目標是成功枚舉,如果設備不能枚舉,那麼介面什麼事也做不了。其它測試包括讓設備執行預定的任務(例如讀出或寫入文檔至一個USB設備),以及驗證該設備是否遵循功率管理規則。

USB通訊除錯可在三個位置進行,即在PC主機、設備和線纜等處,每個方案都有其自己的優點。

在主機上進行除錯

在主機處,可以驗證一個設備是否枚舉成功並能執行預定的功能。在主機檢測到問題後,要找到問題根源常常還需要檢查設備本身硬體或線纜中的匯流排通訊流量情況。圖2:從集線器上收到的設備描述符代碼。

當USB設備連接到主機後,Windows的設備管理器(圖1)會進行快速檢查,看設備枚舉是否有問題。圖標列表上的惊嘆號表示與該設備通訊或尋找驅動程式時有問題,而圖標上的X號則表示設備存在但己不起作用。

為精確地看到主機在枚舉時收到什麼資訊,可以使用USBCheck應用套裝軟體或者新的USB指令驗證器工具,USB-IF網站上免費提供了這兩種工具。USBCheck能觀察描述符、發送控制請求、觀察結果以及在集線器和HID(擬人介面設備)上對設備做進一步測試。

USBCheck的設備框架測試能讀出描述符並發送標準請求,這些測試作為初始檢查非常有用,此時Windows從設備上檢索到它所想要的資訊。圖2顯示了USBCheck從集線器接收到的設備描述碼。

主機對USB設備枚舉成功後,應用軟體可以按預定用途對設備進行測試,Windows設備驅動程式可透過組合API函數如ReadFile()、WriteFile()或DeviceIoControl()等使應用軟體存取USB設備。有些不同等級的設備還有額外支援,如應用軟體能以存取其它驅動器的同樣方法存取USB驅動器,應用軟體不必了解驅動器是使用USB還是其它介面,因為這些細節在更低一級中進行處理。

對於許多設備來講,USB等級規範定義了設備的預定功能及韌體響應,如HID、大容量存貯元件和用於靜止圖像捕獲的設備等。

當出現錯誤時,Windows返回的錯誤資訊通常提供不了太多幫助。例如向HID類設備發送WriteFile()函數失效時,返回的錯誤一般是‘CRC Error’,而造成傳輸失效的任何韌體問題都會得到這個錯誤資訊。通常排查錯誤要是從CRC計算著手基本上是找不到什麼的,跟蹤這類問題出現的原因常常需要在設備或匯流排上進行除錯。

認證測試

USB應用者論壇和微軟公司可為USB設備和主機軟體開發人員提供測試,透過測試的產品可以在上面使用USB標識或者Microsoft Windows標識。

為了能在多種條件下徹底測試產品,USB-IF成員可以將自己的設備在USB-IF指定的認證程式中進行登記,一年登記費用為2,500美元,其中包括程式運行費用,以及其它支援USB產品開發和在市場上推廣USB活動的費用。

當某個設備符合認證程式的標準時,USB-IF將認為該設備‘測量結果可以接受’,然後會把它加到認證設備總表中。在收到簽署的許可協議和付款後,USB-IF將授權這一設備可以使用USB標識。

認證程式有兩項評判標準,分別是檢查對照表和認證測試。檢查對照表包括一些與產品及其功能有關的問題,檢查表可以提供給供應商,周邊設備、集線器、帶USB主機系統和線纜等不同供應商有不同的對照表,有些產品還需要多個檢查表。

周邊設備檢查表覆蓋了機械設計、設備狀態與信號以及工作電壓和功耗,每個問題都相應附有標準規範中的對應頁面作為參考,可以從中找到更多資訊。從USB-IF的網站上可得到這些檢查表。

為幫助通過電氣測試,USB-IF還提供了一個USBHSET工具,其中含有軟體和測試步驟。另外也可以使用專業測試服務咨詢機構VI Engineering的USB預認證測試儀,這是一個硬體單元,能執行測試文件中的所有電氣測試,其中包括在LabView下運行的軟體,可以觀察到眼圖、上升與下降次數、截面電壓、浪湧電流及其它更多內容。

為幫助驗證USB規範第八章中所討論協議的響應情況,位於比利時的PIMC公司提供了一個名為Ch8ck的工具。Ch8ck執行的測試包括向並不支援的方向或者傳輸類型發送一個資訊包ID,然後檢查中斷端點的響應,以及要求CRC值時的位元填充情況。當認為產品能透過檢查表上各項內容時,就可以準備進行認證測試了。USB-IF對一些機構提供資助,可以用不同類型的硬體測試設備,每個機構都有很多供應商和產品。你可以與主機硬體供應商一起安排專門測試,也可以參與USB-IF的‘plugfests’測試,這個測試將有盡可能多的供應商把他們的設備連到一台主機上,觀察所有設備是否可以相互和平共處。USB-IF也授權一些私人實驗室進行認證測試。

認證測試程式文件對測試有詳細描述,包括對標準請求的響應、功率的消耗和分配、信號品質和協同性等。其中協同性測試將你的產品與其它多個USB周邊設備連在一個系統中並使用多種軟體,以模擬用戶使用情況。

設備應該工作正常,不會出現任何設備檢測不到錯誤或者系統崩潰、死機或重新自舉等錯誤。設備不僅要在一條只連接一個設備的匯流排上通過測試,而且也應該在一條連有多種集線器和其它通用周邊設備的匯流排上通過測試。

如果設備通過認證測試,就有資格使用USB標識,為取得標識使用權,高速設備還必須在全速模式下測試所有功能。此外非USB-IF成員還須支付額外一項管理費,數額為每兩年1,500美元。

對於連接在PC上的設備,微軟公司鼓勵採用Windows硬體品質實驗室(WHQL)的測試方案,透過這些測試的設備可以使用Microsoft Windows標識,並將列入到微軟公司的硬體相容表中,同時微軟公司也會將設備的驅動程式加入到Windows驅動程式庫中。

微軟公司提供了用於硬體和設備驅動程式的測試組件,你可以下載所需組件並對你的設備進行測試。當你相信你的設備能夠通過所有測試時,就可以提交一份材料給授權的測試機構,材料中應包括設備、驅動程式和相關文檔、測試記錄以及相應的費用。

在www.microsoft.com/hwtest網站中可以找到有關WHQL的更多資訊。

在設備上進行除錯

在設備上的除錯與任何嵌入式系統除錯類似,提供帶USB功能微控制器的供應商同時也提供了帶監控程式的開發系統,監控程式可以設置斷點、單步運行、跟蹤模式和其它自診斷工具。

USB通訊所需的韌體支援數量取決於控制器晶片的結構,從晶片供應商或其它地方獲得高品質韌體也很重要。

MCCI公司有一個免費的USB資源編輯器,有助於將設備描述符資訊翻譯成C語言的數據初始化結構,並將其存在設備的程式記憶體中,MCCI還提供了USB DataPump可攜式韌體包和黏著實用程式。

用PC作為模擬的USB設備是專用開發組件的一個低成本替代方案,可對最終駐留在嵌入式設備中的代碼進行初始測試。如DeVaSys公司的USBLPT-PD11板,上面帶有飛利浦PDIUSBD11 USB控制器,控制器的I2C介面與PC平行埠進行通訊,軟體使用DOS版Borland Turbo C語言控制被模擬設備。

使用這一方法,你可以編寫PC應用,使最終控制設備的韌體執行一些功能,包括在設備枚舉和響應其它任務時發送描述符。C語言編寫的PC軟體對設備是可移植的,不過每個控制器都有晶片專用作業,因此針對最終產品還需要作一些修改。

在線纜上進行除錯

有些時候,僅僅在主機和設備上進行除錯還不夠。在主機上,能夠觀察和控制的資訊要透過主機控制器及其驅動程式過濾;而在設備上,韌體又看不到硬體管理的底層通訊。為填補這一空白,需要觀察線纜中發送的是什麼。

如果用示波器或邏輯分析儀來觀察USB通訊,你將會發現讀取位元的狀態並不像將電壓與邏輯電平匹配那麼容易。在匯流排上的數據是用帶有位元填充的不歸零倒置(NRZI)代碼進行編碼的,這種編碼能使接收器與發送器保持同步,不需要每個位元組都發送時脈信號或開始與結束位元等額外的工作。

NRZI不是採用電壓方式定義邏輯0和邏輯1,而是用電壓改變代表邏輯0,電壓保持不變代表邏輯1。如圖3所示,每個邏輯0都會使前面一個狀態產生改變,而每一個邏輯1則不產生狀態改變,數據首先發送最低有效位元。

之所以要用位元填充是因為接收器在切換時要同步,如果數據全部為0會有許多轉變,但如果數據中有一長串1,由於缺少轉變會使接收器失去同步。圖3:帶位元填充的不歸零倒置編碼。

例如數據有6個連續的1,發送器就在第6個1後面填充或插入一個0(用一個切換來表示),這樣就保證每7個位元至少有一個轉換,接收器檢測到每6個連續1以後的任意位元都會丟棄掉。隨機數據的位元填充開銷僅為0.8%,即每125個數據位元有1個填充位元。

幸運的是,每個埠的USB硬體會進行所有編碼和解碼工作,所以設備開發人員和編程人員不必擔心這一點。觀察數據的最好方法是使用協議分析儀,這種分析儀可收集數據,然後進行解碼並以有用的格式顯示出來。你可以看到在枚舉時產生了什麼,檢測和檢查協議及信令錯誤,觀察任何傳輸中的數據,或者關注通訊中你所希望的任何方面。

任何分析儀都可以執行USB通訊解碼和顯示結果這類基本任務,只是在用戶介面和顯示資訊的方式上有所區別,不是所有分析儀都支援高速模式。圖4顯示了用Catalyst的SBAE-20匯流排分析儀-作業儀採集的數據。控制分析儀和觀察通訊數據的用戶界面可以是一台PC或邏輯分析儀,與PC相連的分析儀可使用USB埠、平行埠、乙太網路埠或ISA板上介面連接。如果你有一台通用邏輯分析儀,那麼用USB分析儀與之相連會比其它方案更便宜,如Crescent Heart Software的分析儀可與Tektronix的相連,而FuturePlus的分析儀可與Agilent的相連。

測試設備與軟體

除了透過應用程式存取設備外,進一步對匯流排通訊和信令進行控制在測試和除錯中也是很重要的,同樣也有一些儀器可做到這一點

Computer Access Technology的通訊產生器可對匯流排通訊和事件進行精確控制,你可以在PC上運行他們的軟體藉由平行埠連接來控制通訊產生器,可產生各種合法和非法資訊和匯流排狀態,而且還能控制每個位元的狀態和位元寬度。

Transdimension的USB主機?設備作業儀和Catalyst的SBAE-20都既具有協議分析儀功能,又具有在匯流排上產生通訊數據的主機功能,SBAE-20其它功能還包括測量湧入和挂起狀態下的電流。

RPM Systems的Root 1 USB功能驗證配接器能執行許多主機和根集線器功能,Root 1可枚舉相連接的設備,對其它通訊進行初始化並執行各種測試,包括控制匯流排電壓。

由於有很多新供應商進入到該領域,而原來的供應商也在擴展和改進他們的產品,因此測試工具的數量和種類在過去數年已有所增加,隨著USB設備日益普及,這個趨勢肯定還會繼續下去。對任何開發項目來講,對少量工具進行投資並學會如何很好使用這些工具將會在長期運行中節約更多的時間和資金。

作者:Jan Axelson

沒有留言: