USB設(shè)備的調(diào)試與測試技巧
SB是一種靈活的高速接口技術(shù),可以替代計(jì)算機(jī)中原來的串行口和并行口,但靈活性高也意味著更加復(fù)雜,使得USB設(shè)計(jì)調(diào)試以及設(shè)計(jì)完成后的驗(yàn)證都比較困難。本文首先對USB規(guī)范做一簡要介紹,然后詳細(xì)討論USB產(chǎn)品在調(diào)試與規(guī)范驗(yàn)證方面的一些實(shí)用技巧。
??? 通用串行總線(USB)是一種很流行的接口,可用于那些與個人計(jì)算機(jī)進(jìn)行通信的設(shè)備。近年來,所有新PC機(jī)和Mac機(jī)都支持USB技術(shù),這種接口有足夠的靈活性,既可用于驅(qū)動器和鍵盤之類的普通外圍設(shè)備,也可用于定制按特殊用途設(shè)計(jì)的外設(shè)。此外USB還有一些對用戶和開發(fā)人員都很有吸引力的特性,如從總線向設(shè)備提供電源、易于通過集線器進(jìn)行總線擴(kuò)展,以及主計(jì)算機(jī)對設(shè)備能自動識別等等。
??? 但USB的超強(qiáng)性能也意味著它的接口要比它所替代的老式串行和并行接口都復(fù)雜,每個USB設(shè)備必須響應(yīng)總線上的一系列標(biāo)準(zhǔn)請求和各種事件。大多數(shù)總線交流需要雙向通信,而且延遲必須很小,總線上的數(shù)據(jù)都經(jīng)過編碼,單單只用示波器或邏輯分析儀觀察不是很容易。工程技術(shù)人員可以選擇不同的工具與技術(shù)或采用不同設(shè)計(jì),簡化并加快USB的開發(fā)和故障排除。
??? USB規(guī)范
?????????????????? 圖1:Windows的設(shè)備管理器會顯示出所有枚舉成功的USB設(shè)備。
??? USB規(guī)范是由英特爾、微軟和另外幾個PC及外設(shè)公司共同提出的,在USB應(yīng)用者論壇(USB-IF)的網(wǎng)站上提供了供開發(fā)人員使用的規(guī)范文本、相關(guān)信息及工具(詳情可訪問www.usb.org)。
??? 每個總線上有一個主控制器,用來控制與總線上面設(shè)備的通信。為了給設(shè)備提供更大帶寬,一臺計(jì)算機(jī)可以有多個主控制器,分別控制其自己的總線。
??? USB支持三種總線速度:低速1.5Mbps、全速12Mbps和高速480Mbps。高速模式是2000年發(fā)布的規(guī)范2.0版本新增加的,?Windows?XP是支持USB?2.0的第一個Windows系統(tǒng),微軟公司允諾在Windows?2000和Windows?ME中對USB?2.0提供更新支持,而其它操作系統(tǒng)以后也將逐漸支持USB?2.0。
??? 對于嵌入式PC操作系統(tǒng),Windows?CE也支持?USB。大多數(shù)Windows?CE計(jì)算機(jī)作為USB主機(jī)使用,Windows?CE?3.0中還包括用于Cypress/ScanLogic公司SL11主/從控制器的驅(qū)動程序。有了這些驅(qū)動程序(或者用于其它控制器的類似驅(qū)動程序),一個Windows?CE計(jì)算機(jī)還可以作為USB外設(shè)使用。
??? USB的多功能性主要?dú)w功于它的4種傳輸類型,每一種類型適用于不同的用途。其中控制傳輸模式用于傳輸枚舉過程中的請求,也用于發(fā)送請求至設(shè)備和接收答復(fù)(可選);中斷傳輸模式用于鍵盤鼠標(biāo)之類由主機(jī)定期發(fā)出請求和發(fā)送數(shù)據(jù)的設(shè)備;批傳輸模式用在諸如打印機(jī)和掃描儀之類的設(shè)備中,這類設(shè)備要求傳輸速度快,但在總線忙碌時傳輸數(shù)據(jù)可以等待;同步傳輸用于實(shí)時伴音和其他應(yīng)用,這類應(yīng)用對時序要求很高,但允許有偶爾的錯誤。
??? 在自舉或者當(dāng)某個設(shè)備連接到總線上時,設(shè)備集線器就向主機(jī)報告連接情況,在一個稱為枚舉的過程中,主機(jī)發(fā)送系列請求以了解連接的設(shè)備并與之建立通信,設(shè)備則以所謂描述符數(shù)據(jù)結(jié)構(gòu)返回應(yīng)答信息。Windows的設(shè)備管理器將描述符內(nèi)的信息與PC內(nèi)部INF文檔進(jìn)行比較,從中找出最佳匹配,然后指定一個設(shè)備驅(qū)動程序,這樣應(yīng)用程序就能夠訪問該設(shè)備了。
??? 所有設(shè)備必需遵循USB對功率管理的要求,包括限制設(shè)備吸收的總線電流和檢測什么時候進(jìn)入低功耗掛起狀態(tài),允許的電流量取決于器件描述符中的信息。
??? 目前市面上有很多帶USB功能的設(shè)備控制器芯片可供選用,有的是帶一個USB口的微控制器,有的是非CPU控制器,上面帶有一個USB口和一個用于與普通微控制器通信的串口或并口。大多數(shù)具有USB功能的微控制器都有C語言編譯器,如果你熟悉某個微控制器系列,那么它提供的USB功能變量將非常有用。測試USB設(shè)備的通信功能包括幾個階段,第一個目
標(biāo)是成功枚舉,如果設(shè)備不能枚舉,那么接口什么事也做不了。其它測試包括讓設(shè)備執(zhí)行預(yù)定的任務(wù)(例如讀出或?qū)懭胛臋n至一個USB設(shè)備),以及驗(yàn)證該設(shè)備是否遵循功率管理規(guī)則。
???????????????????????????? 圖2:從集線器上收到的設(shè)備描述符代碼。
??? USB通信調(diào)試可在三個位置進(jìn)行,即在PC主機(jī)、設(shè)備和線纜等處,每個方案都有其自己的優(yōu)點(diǎn)。
??? 在主機(jī)上進(jìn)行調(diào)試
??? 在主機(jī)處,可以驗(yàn)證一個設(shè)備是否枚舉成功并能執(zhí)行預(yù)定的功能。在主機(jī)檢測到問題后,要找到問題根源常常還需要檢查設(shè)備本身硬件或線纜中的總線通信流量情況。
??? 當(dāng)USB設(shè)備連接到主機(jī)后,Windows的設(shè)備管理器(圖1)會進(jìn)行快速檢查,看設(shè)備枚舉是否有問題。圖標(biāo)列表上的驚嘆號表示與該設(shè)備通信或?qū)ふ因?qū)動程序時有問題,而圖標(biāo)上的X號則表示設(shè)備存在但己不起作用。
??? 為精確地看到主機(jī)在枚舉時收到什么信息,可以使用USBCheck應(yīng)用軟件包或者新的USB指令驗(yàn)證器工具,USB-IF網(wǎng)站上免費(fèi)提供了這兩種工具。USBCheck能觀察描述符、發(fā)送控制請求、觀察結(jié)果以及在集線器和HID(擬人接口設(shè)備)上對設(shè)備做進(jìn)一步測試。
??? USBCheck的設(shè)備框架測試能讀出描述符并發(fā)送標(biāo)準(zhǔn)請求,這些測試作為初始檢查非常有用,此時Windows從設(shè)備上檢索到它所想要的信息。圖?2顯示了USBCheck從集線器接收到的設(shè)備描述碼。主機(jī)對USB設(shè)備枚舉成功后,應(yīng)用軟件可以按預(yù)定用途對設(shè)備進(jìn)行測試,Windows設(shè)備驅(qū)動程序可通過組合API函數(shù)如ReadFile()、?WriteFile()或DeviceIoControl()等使應(yīng)用軟件訪問USB設(shè)備。有些不同等級的設(shè)備還有額外支持,如應(yīng)用軟件能以訪問其它驅(qū)動器的同樣方法訪問USB驅(qū)動器,應(yīng)用軟件不必了解驅(qū)動器是使用USB還是其它接口,因?yàn)檫@些細(xì)節(jié)在更低一級中進(jìn)行處理。對于許多設(shè)備來講,USB等級規(guī)范定義了設(shè)備的預(yù)定功能及固件響應(yīng),如HID、大容量存貯器件和用于靜止圖像捕獲的設(shè)備等。
??? 當(dāng)出現(xiàn)錯誤時,Windows返回的錯誤信息通常提供不了太多幫助。例如向HID類設(shè)備發(fā)送WriteFile()函數(shù)失效時,返回的錯誤一般是?“CRC?Error”,而造成傳輸失效的任何固件問題都會得到這個錯誤信息。通常排查錯誤要是從CRC計(jì)算著手基本上是找不到什么的,跟蹤這類問題出現(xiàn)的原因常常需要在設(shè)備或總線上進(jìn)行調(diào)試。
??? 認(rèn)證測試USB應(yīng)用者論壇和微軟公司可為USB設(shè)備和主機(jī)軟件開發(fā)人員提供測試,通過測試的產(chǎn)品可以在上面使用USB標(biāo)識或者M(jìn)icrosoft?Windows標(biāo)識。
??? 為了能在多種條件下徹底測試產(chǎn)品,USB-IF成員可以將自己的設(shè)備在USB-IF指定的認(rèn)證程序中進(jìn)行登記,一年登記費(fèi)用為2,500美元,其中包括程序運(yùn)行費(fèi)用,以及其它支持USB產(chǎn)品開發(fā)和在市場上推廣USB活動的費(fèi)用。當(dāng)某個設(shè)備符合認(rèn)證程序的標(biāo)準(zhǔn)時,USB-IF將認(rèn)為該設(shè)備“測量結(jié)果可以接受”,然后會把它加到認(rèn)證設(shè)備總表中。在收到簽署的許可協(xié)議和付款后,USB-IF將授權(quán)這一設(shè)備可以使用USB標(biāo)識。
??? 認(rèn)證程序有兩項(xiàng)評判標(biāo)準(zhǔn),分別是檢查對照表和認(rèn)證測試。檢查對照表包括一些與產(chǎn)品及其功能有關(guān)的問題,檢查表可以提供給供應(yīng)商,外圍設(shè)備、集線器、帶USB主機(jī)系統(tǒng)和線纜等不同供應(yīng)商有不同的對照表,有些產(chǎn)品還需要多個檢查表。外圍設(shè)備檢查表覆蓋了機(jī)械設(shè)計(jì)、設(shè)備狀態(tài)與信號以及工作電壓和功耗,每個問題都相應(yīng)附有標(biāo)準(zhǔn)規(guī)范中的對應(yīng)頁面作為參考,可以從中找到更多信息。從USB-IF的網(wǎng)站上可得到這些檢查表。
?????????????????????????&nbs
p;???? 圖3:帶位填充的不歸零倒置編碼。
??? 為幫助通過電氣測試,USB-IF還提供了一個USBHSET工具,其中含有軟件和測試步驟。另外也可以使用專業(yè)測試服務(wù)咨詢機(jī)構(gòu)VI?Engineering的USB預(yù)認(rèn)證測試儀,這是一個硬件單元,能執(zhí)行測試文件中的所有電氣測試,其中包括在LabView下運(yùn)行的軟件,可以觀察到眼圖、上升與下降次數(shù)、截面電壓、浪涌電流及其它更多內(nèi)容。
??? 為幫助驗(yàn)證USB規(guī)范第八章中所討論協(xié)議的響應(yīng)情況,位于比利時的PIMC公司提供了一個名為Ch8ck的工具。Ch8ck執(zhí)行的測試包括向并不支持的方向或者傳輸類型發(fā)送一個信息包ID,然后檢查中斷端點(diǎn)的響應(yīng),以及要求CRC值時的位填充情況。當(dāng)認(rèn)為產(chǎn)品能通過檢查表上各項(xiàng)內(nèi)容時,就可以準(zhǔn)備進(jìn)行認(rèn)證測試了。USB-IF對一些機(jī)構(gòu)提供資助,可以用不同類型的硬件測試設(shè)備,每個機(jī)構(gòu)都有很多供應(yīng)商和產(chǎn)品。你可以與主機(jī)硬件供應(yīng)商一起安排專門測試,也可以參與USB-IF的“plugfests”測試,這個測試將有盡可能多的供應(yīng)商把他們的設(shè)備連到一臺主機(jī)上,觀察所有設(shè)備是否可以相互和平共處。USB-IF也授權(quán)一些私人實(shí)驗(yàn)室進(jìn)行認(rèn)證測試。
??? 認(rèn)證測試程序文件對測試有詳細(xì)描述,包括對標(biāo)準(zhǔn)請求的響應(yīng)、功率的消耗和分配、信號質(zhì)量和協(xié)同性等。其中協(xié)同性測試將你的產(chǎn)品與其它多個USB外圍設(shè)備連在一個系統(tǒng)中并使用多種軟件,以模擬用戶使用情況。
??? 設(shè)備應(yīng)該工作正常,不會出現(xiàn)任何設(shè)備檢測不到錯誤或者系統(tǒng)崩潰、死機(jī)或重新自舉等錯誤。設(shè)備不僅要在一條只連接一個設(shè)備的總線上通過測試,而且也應(yīng)該在一條連有多種集線器和其它通用外圍設(shè)備的總線上通過測試。
??? 如果設(shè)備通過認(rèn)證測試,就有資格使用USB標(biāo)識,為取得標(biāo)識使用權(quán),高速設(shè)備還必須在全速模式下測試所有功能。此外非USB-IF成員還須支付額外一項(xiàng)管理費(fèi),數(shù)額為每兩年1,500美元。
??? 對于連接在PC上的設(shè)備,微軟公司鼓勵采用Windows硬件質(zhì)量實(shí)驗(yàn)室(WHQL)的測試方案,通過這些測試的設(shè)備可以使用?Microsoft?Windows標(biāo)識,并將列入到微軟公司的硬件兼容表中,同時微軟公司也會將設(shè)備的驅(qū)動程序加入到Windows驅(qū)動程序庫中。
??? 微軟公司提供了用于硬件和設(shè)備驅(qū)動程序的測試組件,你可以下載所需組件并對你的設(shè)備進(jìn)行測試。當(dāng)你相信你的設(shè)備能夠通過所有測試時,就可以提交一份材料給授權(quán)的測試機(jī)構(gòu),材料中應(yīng)包括設(shè)備、驅(qū)動程序和相關(guān)文檔、測試記錄以及相應(yīng)的費(fèi)用。在www.microsoft.com/hwtest網(wǎng)站中可以找到有關(guān)WHQL的更多信息。
??? 在設(shè)備上進(jìn)行調(diào)試
??? 在設(shè)備上的調(diào)試與任何嵌入式系統(tǒng)調(diào)試類似,提供帶USB功能微控制器的供應(yīng)商同時也提供了帶監(jiān)控程序的開發(fā)系統(tǒng),監(jiān)控程序可以設(shè)置斷點(diǎn)、單步運(yùn)行、跟蹤模式和其它自診斷工具。
??? USB通信所需的固件支持?jǐn)?shù)量取決于控制器芯片的結(jié)構(gòu),從芯片供應(yīng)商或其它地方獲得高品質(zhì)固件也很重要。
??? MCCI公司有一個免費(fèi)的USB資源編輯器,有助于將設(shè)備描述符信息翻譯成C語言的數(shù)據(jù)初始化結(jié)構(gòu),并將其存在設(shè)備的程序存儲器中,MCCI還提供了USB?DataPump便攜式固件包和安裝實(shí)用程序。
?????????????????????????????圖4:協(xié)議分析儀采集到的總線通信數(shù)據(jù)。
??? 用PC作為模擬的USB設(shè)備是專用開發(fā)組件的一個低成本替代方案,可對最終駐留在嵌入式設(shè)備中的代碼進(jìn)行初始測試。如DeVaSys公司的USBLPT-PD11板,上面帶有飛利浦PDIUSBD11?USB控制器,控制器的I2C接口與PC并口進(jìn)行通信,軟件使用DOS版Borland?Turbo?C語言控制被仿真設(shè)備。
??? 使用這一方法,你可以編寫PC應(yīng)用,使最終控制設(shè)備的固件執(zhí)行一些功能,包括在設(shè)備枚
舉和響應(yīng)其它任務(wù)時發(fā)送描述符。C語言編寫的PC軟件對設(shè)備是可移植的,不過每個控制器都有芯片專用操作,因此針對最終產(chǎn)品還需要作一些修改。
??? 在線纜上進(jìn)行調(diào)試
??? 有些時候,僅僅在主機(jī)和設(shè)備上進(jìn)行調(diào)試還不夠。在主機(jī)上,能夠觀察和控制的信息要經(jīng)過主機(jī)控制器及其驅(qū)動程序過濾;而在設(shè)備上,固件又看不到硬件管理的底層通信。為填補(bǔ)這一空白,需要觀察線纜中發(fā)送的是什么。
??? 如果用示波器或邏輯分析儀來觀察USB通信,你將會發(fā)現(xiàn)讀取位的狀態(tài)并不像將電壓與邏輯電平匹配那么容易。在總線上的數(shù)據(jù)是用帶有位填充的不歸零倒置(NRZI)代碼進(jìn)行編碼的,這種編碼能使接收器與發(fā)送器保持同步,不需要每個字節(jié)都發(fā)送時鐘信號或開始與結(jié)束位等額外的工作。
??? NRZI不是采用電壓方式定義邏輯0和邏輯1,而是用電壓改變代表邏輯0,電壓保持不變代表邏輯1。如圖3所示,每個邏輯0都會使前面一個狀態(tài)發(fā)生改變,而每一個邏輯1則不發(fā)生狀態(tài)改變,數(shù)據(jù)首先發(fā)送最低有效位。
??? 之所以要用位填充是因?yàn)榻邮掌髟谇袚Q時要同步,如果數(shù)據(jù)全部為0會有許多轉(zhuǎn)變,但如果數(shù)據(jù)中有一長串1,由于缺少轉(zhuǎn)變會使接收器失去同步。
??? 例如數(shù)據(jù)有6個連續(xù)的1,發(fā)送器就在第6個1后面填充或插入一個0(用一個切換來表示),這樣就保證每7個位至少有一個轉(zhuǎn)換,接收器檢測到每6個連續(xù)1以后的任意位都會丟棄掉。隨機(jī)數(shù)據(jù)的位填充開銷僅為0.8%,即每125個數(shù)據(jù)位有1個填充位。
??? 幸運(yùn)的是,每個端口的USB硬件會進(jìn)行所有編碼和解碼工作,所以設(shè)備開發(fā)人員和編程人員不必?fù)?dān)心這一點(diǎn)。觀察數(shù)據(jù)的最好方法是使用協(xié)議分析儀,這種分析儀可收集數(shù)據(jù),然后進(jìn)行解碼并以有用的格式顯示出來。你可以看到在枚舉時發(fā)生了什么,檢測和檢查協(xié)議及信令錯誤,觀察任何傳輸中的數(shù)據(jù),或者關(guān)注通信中你所希望的任何方面。
??? 任何分析儀都可以執(zhí)行USB通信解碼和顯示結(jié)果這類基本任務(wù),只是在用戶接口和顯示信息的方式上有所區(qū)別,不是所有分析儀都支持高速模式。圖4顯示了用Catalyst的SBAE-20總線分析儀-操作儀采集的數(shù)據(jù)。控制分析儀和觀察通信數(shù)據(jù)的用戶界面可以是一臺PC或邏輯分析儀,與?PC相連的分析儀可使用USB口、并口、以太網(wǎng)口或ISA板上接口連接。如果你有一臺通用邏輯分析儀,那么用USB分析儀與之相連會比其它方案更便宜,如?Crescent?Heart?Software的分析儀可與Tektronix的相連,而FuturePlus的分析儀可與Agilent的相連。測試設(shè)備與軟件
??? 除了通過應(yīng)用程序訪問設(shè)備外,進(jìn)一步對總線通信和信令進(jìn)行控制在測試和調(diào)試中也是很重要的,同樣也有一些儀器可做到這一點(diǎn)?Computer?Access?Technology的通信發(fā)生器可對總線通信和事件進(jìn)行精確控制,你可以在PC上運(yùn)行他們的軟件通過并口連接來控制通信發(fā)生器,可生成各種合法和非法信息和總線狀態(tài),而且還能控制每個位的狀態(tài)和位寬度。
??? Transdimension的USB主機(jī)/設(shè)備操作儀和Catalyst的SBAE-20都既具有協(xié)議分析儀功能,又具有在總線上產(chǎn)生通信數(shù)據(jù)的主機(jī)功能,SBAE-20其它功能還包括測量涌入和掛起狀態(tài)下的電流。
??? RPM?Systems的Root?1?USB功能驗(yàn)證適配器能執(zhí)行許多主機(jī)和根集線器功能,Root?1可枚舉相連接的設(shè)備,對其它通信進(jìn)行初始化并執(zhí)行各種測試,包括控制總線電壓。
??? 由于有很多新供應(yīng)商進(jìn)入到該領(lǐng)域,而原來的供應(yīng)商也在擴(kuò)展和改進(jìn)他們的產(chǎn)品,因此測試工具的數(shù)量和種類在過去數(shù)年已有所增加,隨著USB設(shè)備日益普及,這個趨勢肯定還會繼續(xù)下去。對任何開發(fā)項(xiàng)目來講,對少量工具進(jìn)行投資并學(xué)會如何很好使用這些工具將會在長期運(yùn)行中節(jié)約更多的時間和資金。
評論
查看更多