陳一鳴 高 云 鄧 攀 尚 倫 陳雪艷
(武漢(鋼鐵)集團(tuán)公司研究院 湖北 武漢:430080)
USB(Universal Serial Bus,通用串行總線)是一種新型通信接口技術(shù),最早是由Compaq、Intel、Microsoft等多家公司于1994年11月共同提出的,具有高傳輸速率、即插即用和易于擴(kuò)展等優(yōu)點。USB從最初的0.7版,發(fā)展到目前普遍使用的2.0版,以及最新的3.1版,其傳輸速率最高能達(dá)到10Gbps,越來越多的測試測量設(shè)備具有USB通信接口。
為簡化USB設(shè)備的開發(fā)過程,USB-IF(USB Implementers Forum)對一些具有相似特點并提供相似功能的USB設(shè)備進(jìn)行抽象,定義它們所特有的屬性和使用方法,這些被稱為設(shè)備類。對于測試測量設(shè)備USB-IF在USB 2.0協(xié)議的基礎(chǔ)上定義了USBTMC協(xié)議(Universal Serial Bus Test and Measurement Class Specification),方便用戶開發(fā)和使用測試測量設(shè)備的USB通信接口。
STM32是意法半導(dǎo)體公司開發(fā)的基于Cortex-M3內(nèi)核的新型32位微控制器系列,芯片內(nèi)部集成了全速USB 2.0外設(shè)接口和A/D轉(zhuǎn)換器,適用于開發(fā)具有USB通信接口的測試測量設(shè)備[1]。本文解析了USBTMC協(xié)議,研究了其基于STM32的實現(xiàn),并詳述了測試過程。
USBTMC協(xié)議是USB-IF針對測試測量設(shè)備提出的一個符合USB 2.0協(xié)議的子類協(xié)議。2001年6月USB-IF發(fā)布了USBTMC協(xié)議的第一個版本USBTMC 0.7版,目前應(yīng)用廣泛的是2003年4月發(fā)布的USBTMC 1.0版。USBTMC協(xié)議為USB通信接口技術(shù)在測試測量設(shè)備中的應(yīng)用建立了一個統(tǒng)一且唯一的標(biāo)準(zhǔn),符合USBTCM協(xié)議的測試測量設(shè)備,可以通過VISA(Virtual Instrument Software Architecture)直接控制,與其通信的USB主機(jī)可以保持現(xiàn)有的VISA驅(qū)動和應(yīng)用程序不變[2]。
USBTMC協(xié)議通信模型如圖1所示,USB設(shè)備固件程序必須支持圖1所示的端點類型,Control端點、Bulk-OUT端點、Bulk-IN端點是必需的,Interrupt-IN端點根據(jù)設(shè)備要求可選[3]。
圖1 USBTMC協(xié)議通信模型
1.2.1 Control端點
Control端點是所有USB設(shè)備必須具備的默認(rèn)端點,在USBTMC協(xié)議中對Control端點沒有附加規(guī)定,只要求其符合USB 2.0協(xié)議。Control端點用于主機(jī)對設(shè)備發(fā)送標(biāo)準(zhǔn)、類定義和用戶定義的請求,默認(rèn)Control端點的端點號必須是0。
1.2.2 Bulk-OUT端點和Bulk-IN端點
Bulk-OUT端點用于主機(jī)對設(shè)備發(fā)送USBTMC命令消息。對于所有的Bulk-OUT USBTMC命令消息,在其傳輸過程中必須以Bulk-OUT Header開頭,Bulk-OUT Header中包含了該命令消息的相關(guān)信息。
Bulk-IN端點用于主機(jī)讀取設(shè)備的USBTMC響應(yīng)消息。對于所有的Bulk-IN USBTMC響應(yīng)消息,在其傳輸過程中必須以Bulk-IN Header開頭,Bulk-IN Header中包含了該響應(yīng)消息的相關(guān)信息。
Bulk-OUT傳輸和Bulk-IN傳輸是USBTMC協(xié)議的核心,協(xié)議中對上述內(nèi)容做了詳細(xì)的規(guī)定,具體內(nèi)容參考USBTMC協(xié)議1.0版。
本文中微控制器采用STM32F103RBT6,STM32標(biāo)準(zhǔn)外設(shè)庫采用STM32F10x Standard Peripherals Library3.5.0版,USBTMC協(xié)議采用USBTMC1.0版,開發(fā)平臺采用IAR Embedded Workbench for ARM5.41。
STM32系列中的增強(qiáng)型STM32F103XX擁有一個USB全速設(shè)備接口外設(shè),符合USB 2.0全速設(shè)備的技術(shù)協(xié)議。意法半導(dǎo)體公司為STM32系列微控制器提供了USB驅(qū)動程序固件,大大簡化了USB外設(shè)接口的應(yīng)用開發(fā)。
USB驅(qū)動程序固件由內(nèi)核層和應(yīng)用接口層組成,內(nèi)核層負(fù)責(zé)管理使用USB外設(shè)接口與USB協(xié)議間的直接通信,其嚴(yán)格遵守USB 2.0協(xié)議,并且獨(dú)立于STM32標(biāo)準(zhǔn)外設(shè)庫,接口層為用戶提供了內(nèi)核層和最終用戶應(yīng)用間的完整接口[4]。
USBTMC協(xié)議是基于USB 2.0協(xié)議的,所以實現(xiàn)USBTMC協(xié)議首先要實現(xiàn)USB 2.0協(xié)議,進(jìn)一步實現(xiàn)USBTMC協(xié)議。實現(xiàn)USB 2.0協(xié)議包括標(biāo)準(zhǔn)描述符的配置和標(biāo)準(zhǔn)請求的響應(yīng)。實現(xiàn)USBTMC協(xié)議包括類定義請求的響應(yīng)和消息傳輸?shù)膶崿F(xiàn)。具體實現(xiàn)流程如圖2所示。
圖2USBTMC協(xié)議實現(xiàn)流程
USB 2.0協(xié)議采用設(shè)備構(gòu)架的概念來描述一個USB設(shè)備,它把USB設(shè)備看成是一個配置、接口和端點的集合,并采用標(biāo)準(zhǔn)的USB描述符來說明它們,其中包括設(shè)備描述符、配置描述符、接口描述符、端點描述符和字符串描述符。對于高速設(shè)備,還可包含設(shè)備限定描述符和其速率配置描述符。描述符反映了USB設(shè)備的各類屬性,有固定格式的數(shù)據(jù)結(jié)構(gòu),每個描述符的開頭是本描述符的長度,緊跟其后的是描述符的類型信息。在USB設(shè)備枚舉過程中,USB主機(jī)首先會發(fā)出一系列標(biāo)準(zhǔn)請求來讀取USB設(shè)備的各類描述符,進(jìn)而確定該USB設(shè)備的屬性。
USBTMC協(xié)議中對測試測量設(shè)備的描述符進(jìn)行了規(guī)定,設(shè)備描述符的iSerialNumber必須是非零值,USB主機(jī)將16位idVendor值、16位idProduct值和iSerialNumber所指引的字符串值組合成一個標(biāo)識,作為該USB設(shè)備全球唯一的身份標(biāo)識。
接口描述符中USBTMC協(xié)議規(guī)定bInterfaceClass設(shè)置為0xFE,bInterfaceSubClass設(shè)置為0x03,bInterfaceProtocol可以設(shè)置為0x00或0x01。bInterfaceProtocol設(shè)置為0x00代表接口符合USBTMC協(xié)議,設(shè)置為0x01代表接口符合USBTMC USB488協(xié)議,本文中設(shè)置為0x00。
其它描述符的設(shè)置USBTMC協(xié)議中沒有特別規(guī)定,遵守USB 2.0協(xié)議,其中端點描述符必須包含圖1 USBTMC協(xié)議通信模型中規(guī)定的端點類型。
通過上述描述符配置后,當(dāng)USB設(shè)備與USB主機(jī)連接上時,如果USB主機(jī)已經(jīng)裝好VISA驅(qū)動,USB主機(jī)會將USB設(shè)備識別為USBTMC設(shè)備,并自動加載VISA驅(qū)動[5]。
2.4.1 實現(xiàn)標(biāo)準(zhǔn)請求
標(biāo)準(zhǔn)請求是USB 2.0協(xié)議中定義的USB設(shè)備請求,其主要功能是完成USB設(shè)備的配置操作,例如讀取USB設(shè)備的描述符。STM32 USB驅(qū)動程序固件實現(xiàn)了USB 2.0協(xié)議規(guī)定的大多數(shù)標(biāo)準(zhǔn)請求,開發(fā)人員只需添加USBTMC協(xié)議中額外規(guī)定即可。USBTMC協(xié)議中只對標(biāo)準(zhǔn)請求CLEAR_FEATURE做出了額外規(guī)定,request wValue = ENDPOINT_HALT,其實現(xiàn)流程如圖3所示。
圖3 標(biāo)準(zhǔn)請求CLEAR_FEATURE實現(xiàn)流程
2.4.2 實現(xiàn)類定義請求
除了標(biāo)準(zhǔn)請求外,USBTMC協(xié)議還定義了8個類定義請求,用以實現(xiàn)測試測量設(shè)備特定的功能。類定義請求的數(shù)據(jù)結(jié)構(gòu)和標(biāo)準(zhǔn)請求的數(shù)據(jù)結(jié)構(gòu)一樣,其中bmRequestType中的類型標(biāo)識位置為1,代表該請求是類定義請求。
在USB設(shè)備枚舉過程,當(dāng)USB主機(jī)將USB設(shè)備識別為測試測量設(shè)備后,USB主機(jī)會發(fā)送類定義請求GET_CAPABILITIES,獲取測試測量設(shè)備的屬性,其它類定義請求會在枚舉過程結(jié)束后根據(jù)實際需要發(fā)送,其實現(xiàn)流程如圖4所示。
圖4 類定義請求實現(xiàn)流程
消息通信是USBTMC協(xié)議的核心,測試測量設(shè)備的功能通過消息通信來實現(xiàn)。消息分為命令消息和響應(yīng)消息兩大類,USBTMC協(xié)議規(guī)定每一條消息有一個12位的消息包頭和多個消息數(shù)據(jù)字節(jié)組成,其中消息包頭包含了該消息的屬性信息,消息數(shù)據(jù)是消息的具體內(nèi)容。USBTMC協(xié)議規(guī)定在發(fā)送消息時首先發(fā)送消息包頭,緊接著發(fā)送消息數(shù)據(jù)。USB主機(jī)通過Bulk-OUT端點向測試測量設(shè)備發(fā)送命令消息,通過Bulk-IN端點接收測試測量設(shè)備發(fā)送的響應(yīng)消息,具體實現(xiàn)流程如圖5所示。
圖5 消息通信實現(xiàn)流程
測試及應(yīng)用USBTMC類USB設(shè)備,需要一臺安裝有VISA驅(qū)動和應(yīng)用軟件的USB主機(jī),本文中用一臺安裝有VISA驅(qū)動和labVIEW軟件的計算機(jī)作為USB主機(jī)。
labVIEW軟件自帶的MAX(Measurement & Automation Explorer)工具可以非常方便的測試USB設(shè)備。labVIEW軟件中將USB設(shè)備分為兩類:RAW類和INSTR類,其中INSTR類代表符合USBTMC協(xié)議的USB設(shè)備,RAW類代表不符合USBTMC協(xié)議的USB設(shè)備。
將上文中實現(xiàn)USBTMC協(xié)議的 USB設(shè)備插入USB主機(jī),打開MAX工具,MAX工具將自動識別USB設(shè)備如圖6所示。MAX工具會顯示出USB設(shè)備的設(shè)備信息,這些信息都是在配置描述符時設(shè)置的。圖中該USB設(shè)備顯示為USB0::0x0483::0x5710::8D85516F5050::INSTR,0x0483代表USB設(shè)備的制造商ID,0x5710代表型號代碼,8D85516F5050代表序列號,INSTR代表該USB設(shè)備屬于INSTR類,即USBTMC類USB設(shè)備。
圖6 在MAX中顯示的USB設(shè)備
打開MAX工具的測試面板如圖7所示,測試面板中有四個選項卡:viSetAttribute,viWrite,viRead和viClear,可分別測試USB設(shè)備的屬性設(shè)置、寫操作、讀操作和清除操作等功能,通過這些功能測試即可說明該USB設(shè)備完全實現(xiàn)了USBTMC協(xié)議。
圖7 測試面板
labVIEW軟件中對USBTMC類USB設(shè)備操作非常方便,采用與操作串口設(shè)備相同的方式進(jìn)行,即可以使用VISA打開、VISA關(guān)閉、VISA讀取和VISA寫函數(shù)操作USBTMC類USB設(shè)備。如圖8所示是一個操作USBTMC類USB設(shè)備采集數(shù)據(jù)的應(yīng)用程序,圖中顯示其程序結(jié)構(gòu)和操作串口設(shè)備相同,但實際的設(shè)備連接是通過USB接口,數(shù)據(jù)采集速度大大提高。
圖8 采集數(shù)據(jù)應(yīng)用程序
USB設(shè)備開發(fā)的難點在于驅(qū)動的開發(fā),實現(xiàn)了USBTMC協(xié)議的設(shè)備可以使用同一個驅(qū)動(如本文中的VISA驅(qū)動),這極大的縮短了開發(fā)周期,節(jié)省了人力成本。目前國外一些公司的測試測量設(shè)備已經(jīng)大多支持USBTMC協(xié)議,而國內(nèi)公司對協(xié)議支持較少,研究和實現(xiàn)USBTMC協(xié)議有重要意義。
[1] 王永虹,徐煒,等.ARM Cortex-M3微控制器原理與實踐[M].北京:北京航空航天大學(xué)出版社,2008.
[2] 姜成航.基于USBTMC協(xié)議的USB接口虛擬儀器的研究[D].大連:大連理工大學(xué),2005:3-8.
[3] USB Implementers Forum, Inc. Universal Serial Bus Test and Measurement Class Specification [R]. Revision 1.0, April 14, 2003.
[4] 王鐵流,李宗方,陳東升等.基于STM32的USB數(shù)據(jù)采集模塊的設(shè)計與實現(xiàn)[J].測控技術(shù),2009,28(8):38.
[5] 宮會杰.基于Wince6.0 USBTMC協(xié)議的研究與實現(xiàn)[J].科技視界,2013,(8):40.