??? 摘 要: 結合LabVIEW軟件開發(fā)平臺和USB總線的優(yōu)點,提出了以LabVIEW為應用程序" title="應用程序">應用程序開發(fā)平臺的USB無線串行通信系統(tǒng)的設計方案,介紹了USB無線通信設備與PC機接口的軟硬件設計方法,重點闡述了USB驅動程序和應用程序的設計方法以及在LabVIEW環(huán)境下如何調用動態(tài)鏈接庫" title="動態(tài)鏈接庫">動態(tài)鏈接庫完成應用程序與驅動程序的鏈接,從而實現(xiàn)在LabVIEW應用軟件下進行USB無線通信。該接口界面簡單靈活、接口便捷可靠,為進行實驗室研究和工業(yè)測試提供了很好的利用價值。
??? 關鍵詞: USB? LabVIEW? 無線數(shù)據(jù)傳輸
?
??? 通用串行總線USB具有即插即用、通用性強、易于擴展等優(yōu)點,可以支持Windows、Linux等多種操作系統(tǒng),為PC機與其外設之間大容量的數(shù)據(jù)通信提供了高速、可靠的傳輸協(xié)議。而LabVIEW是NI公司開發(fā)的一種圖形化的軟件開發(fā)平臺,在虛擬儀器技術快速發(fā)展的今天,很多工業(yè)控制和測試系統(tǒng)的數(shù)據(jù)采集、處理應用程序都采用LabVIEW軟件來完成,它具有界面友好、易學易懂、系統(tǒng)開發(fā)周期短、維護調試簡單、無需繁瑣代碼的編寫等優(yōu)點,為測試及工程開發(fā)人員使用帶來了很大方便。因此,本文結合USB總線和LabVIEW軟件開發(fā)平臺兩者的優(yōu)點,提出了以LabVIEW為應用程序開發(fā)平臺的USB無線串行通信系統(tǒng)的設計方案,將LabVIEW語言和USB總線技術緊密結合起來,為實現(xiàn)數(shù)據(jù)的采集、傳輸和處理一體化提供了靈活的用戶界面和便捷的接口功能。
1 USB無線串行通信系統(tǒng)設計方案
??? 隨著測試領域的擴展,將采集的數(shù)據(jù)以無線方式傳輸出去已經(jīng)成為測試系統(tǒng)發(fā)展的一種趨勢。傳統(tǒng)上PC機與傳輸模塊之間大多采用RS232接口實現(xiàn)數(shù)據(jù)傳輸,這種接口存在接口傳輸速率低、可靠性差、不易擴展等問題。本文采用nRF401射頻收發(fā)器、AT89C51單片機和PDIUSBD12 USB接口芯片" title="接口芯片">接口芯片構建無線串行接口電路部分,以LabVIEW軟件為應用程序開發(fā)平臺,設計基于LabVIEW的USB無線通信系統(tǒng),以解決傳統(tǒng)的無線串行通信系統(tǒng)所存在的問題。其結構框圖如圖1所示。
?????????????????????????
??? 本無線通信系統(tǒng)工作過程:將無線傳輸" title="無線傳輸">無線傳輸模塊通過USB接口芯片連接到主機上,系統(tǒng)上電后,主機通過PDIUSB D12與USB無線傳輸設備進行通信并且管理其設備狀態(tài)的變化。用戶要進行數(shù)據(jù)傳輸時,首先在用戶界面設置傳輸參數(shù)及收/發(fā)模式。當系統(tǒng)處于發(fā)射狀態(tài)時,AT89C51從PDIUSBD12的Buffer中讀取數(shù)據(jù)并送至nRF401發(fā)射出去;當系統(tǒng)處于接收狀態(tài)時,AT89C51從nRF401中讀出數(shù)據(jù)并通過USB接口芯片PDIUSBD12送入主機。主機通過總線枚舉方式識別USB設備,應用程序采用調用動態(tài)鏈接庫的方式實現(xiàn)與設備驅動的鏈接。
2 USB無線串行通信接口電路及總線枚舉
??? PDIUSBD12是PHILIPS公司開發(fā)的一款高性能并行USB接口芯片,通常用作與單片機進行通信的高速通用并行接口,符合USB1.1版本規(guī)范和大多數(shù)器件的分類規(guī)格,并且PDIUSBD12具有掛起功耗以及LazyClock輸出,可以滿足使用ACPI、OnNOW和USB電源管理設備的要求,其較低的操作功耗可以適合于使用總線供電的外設。此外,PDIUSBD12還集成了許多特性,包括SoftConnetTM、GoodLinkTM、可編程時鐘輸出、低頻晶振和終止寄存器集合[1]。所有這些特性都為系統(tǒng)節(jié)約了成本,同時使USB功能在外設上的應用變得容易。
??? PDIUSBD12與AT89C51控制的無線傳輸模塊及PC機間的接口電路如圖2所示(無線傳輸模塊連接圖略)。
????????????????????
??? PC機的USB接口的D-和D+與PDIUSBD12的串行數(shù)據(jù)線D+和D-相連,AT89C51的P0口接入PDIUSBD12的8位并行數(shù)據(jù),地址線P2.7作為PDIUSBD12的片選,地址線P2.6作為PDIUSBD12的命令/數(shù)據(jù)的選擇線。當P2.7=0片選有效時,若P2.6=1,則PDIUSBD12將總線上的內容作為命令指令;若P2.6=0時,則給PDIUSBD12寫數(shù)據(jù)或從PDIUSBD12的Buffer中讀取數(shù)據(jù)。設計中PDIUSBD12與AT89C51的數(shù)據(jù)交換采用中斷處理方式。
??? 在設備第一次連接到主機上之后,首先要接受主機枚舉和配置,目的是讓主機知道該設備的功能、類型、所占資源、傳輸方式及數(shù)據(jù)量大小等。主機確認了這些信息后,設備才能開始工作??偩€枚舉的過程如下: (1)接入態(tài)。USB設備接入USB總線,主機通過檢測其信號線上電平變化發(fā)現(xiàn)設備接入。(2)供電態(tài)。主機通過詢問連接事件細節(jié)確定設備接入端口,然后進行總線供電,激活該端口并發(fā)出復位命令。(3)缺省態(tài)。端口在激活狀態(tài)下,設備處于缺省態(tài),通過地址0與主機通信。(4)地址態(tài)。主機獲取設備描述符和缺省管道上一系列信息后,給設備分配一個總線上唯一地址,以后設備就用這個地址與主機通信。(5)配制態(tài)。主機依照讀取的設備描述符來對設備進行配置。(6)掛起態(tài)。當總線保持空閑狀態(tài)超過3ms時, 設備就自動進入掛起狀態(tài)。當設備完成以上除掛起的幾個步驟后即被主機配置成功,就可以開始USB設備所希望的各種數(shù)據(jù)傳輸。
3 USB軟件設計
??? USB系統(tǒng)軟件設計主要包括三部分:USB設備固件、USB設備驅動程序和應用程序。
設備固件是指將程序固化在AT89C51的內部ROM中的程序,其主要功能:控制nRF401進行數(shù)據(jù)的發(fā)射/接收和控制PDIUSBD12接口芯片與主機間進行通信。而AT89C51系統(tǒng)對USB控制器的操作是嚴格按照USB協(xié)議1.1進行的。當USB無線串行設備連接到主機上時,主機通過PDIUSBD12端點0發(fā)送請求的控制命令,PDIUSBD12產(chǎn)生一個中斷給AT89C51(INT0),AT89C51通過讀PDIUSBD12中斷寄存器和最后處理狀態(tài)寄存器對每個請求做出響應,并通過PDIUSBD12端點0回送請求信息,主機從返回的信息中讀取描述數(shù)據(jù),分配和載入一個設備驅動程序并對設備進行配置,設備被配置好后,就可以使用配置中支持的端點來傳輸數(shù)據(jù)。固件程序設計可以采用C51語言編寫,具體結構可見參考文獻[2]。下面介紹USB驅動和應用程序的編寫方法。
3.1 設備USB驅動程序的編寫
由于目前Windows操作系統(tǒng)都不帶自主開發(fā)的USB設備驅動程序,因此開發(fā)者需要用專門的驅動程序編寫工具編寫USB設備端驅動程序。Windows DDK 2K是Microsoft公司提供的一個在Windows2000下開發(fā)USB驅動程序的工具包,其中包含了驅動程序的編譯器和調試工具,但使用起來難度較大。而DriverStudio是由第三方軟件廠商Compuware提供的驅動程序生成工具,用于開發(fā)Windows NT、Windows 2000和Windows 98 WDM設備驅動程序,其優(yōu)點是DriveWrorks工具對DDK函數(shù)進行了封裝,大大簡化了編程,且改進的DriverWizard可以引導開發(fā)者完成程序開發(fā)的全過程。
??? 由于DriverStudio要與DDK結合使用,因此編寫前首先要安裝VC6.0和Win2k DDK,然后依據(jù)DriveWrorks下的DriverWizard提示設置USB設備的相關屬性參數(shù),隨后會在VC6.0下生成相應的.dsw工作平臺,其中包含驅動程序入口、初始化以及各種例程的.cpp源文件及.h頭文件等,在所有文件中添加相關代碼,將編好的程序在VC6.0和DDK中經(jīng)過編譯,生成.sys文件,最后把該驅動程序拷入系統(tǒng)盤drivers目錄下,并配合. inf 安裝文件即可以完成驅動程序的安裝使用。
??? USB驅動程序符合Win2000下內核模式驅動的分層體系結構,其工作過程:當應用程序想對USB設備進行I/O" title="I/O">I/O操作時,必須調用Win API函數(shù),I/O管理器將此請求構成一個合適的請求包(IRP)并把它傳遞給USB功能驅動程序;USB功能驅動程序接收到這個IRP后,根據(jù)IRP中包含的具體操作代碼構造相應USB請求塊(URB),并把此URB放到一個新IRP中,然后把它傳遞給USB底層驅動程序;底層驅動程序根據(jù)IRP中所含的URB執(zhí)行相應操作,并把操作結果返給USB功能驅動程序,USB功能驅動接到返回的IRP后,將操作結果通過IRP返還I/O管理器,最后I/O管理器將此IRP操作結果傳給應用程序。至此,應用程序對設備進行了一次I/O操作。
3.2 動態(tài)鏈接庫函數(shù)的生成及調用
??? 在LabVIEW下要實現(xiàn)PC機與無線傳輸模塊通過USB總線通信,方式主要有兩種:通過LabVIEW中提供的調用動態(tài)鏈接庫模塊(CallLibraryFunction)或通過VISA (Virtual Instrument Software Architec-ture)提供的USB控制函數(shù)節(jié)點來實現(xiàn)。本文只對前一種方式進行研究。
??? 在LabVIEW下要進行USB通信前,首先LabVIEW函數(shù)庫中必須有USB節(jié)點函數(shù),此節(jié)點函數(shù)能將LabVIEW軟件與USB底層驅動連接,可以讀寫USB設備并對其進行操作。雖然LabVIEW中沒有包含能直接被LabVIEW所應用的USB接口節(jié)點和程序,但在LabVIEW的Advanced高級應用子模版中的CallLibraryFunction模塊提供了對外部函數(shù)調用功能,可以很容易地實現(xiàn)對其他公司或自主開發(fā)的硬件設備的驅動。因此,可以借助調用動態(tài)鏈接庫的方法實現(xiàn)在LabVIEW下USB通信功能。其步驟如下:
??? (1)VC++下動態(tài)鏈接庫文件的生成。USB接口函數(shù)主要由Open_USB、Read_USB、Write_USB和Close_USB函數(shù)組成,分別表示打開設備、讀/寫設備和關閉設備。編好的接口函數(shù)存放在特定目錄下,供以后應用程序的調用。DLL需要的文件有:h函數(shù)聲明文件、c源文件、def定義文件。h函數(shù)聲明文件的作用是聲明DLL要實現(xiàn)的函數(shù)原型,供DLL編譯使用,同時還提供給應用程序編譯使用。C源文件是實現(xiàn)具體文件的源文件,它有一個入口點函數(shù),在DLL被初次調用時,做一些初始化工作。一般情況下,用戶無須做什么初始化工作,只需保留入口點函數(shù)框架即可。def定義文件是DLL項目中比較特殊的文件,它用來定義該DLL項目將輸出哪些函數(shù),只有該文件列出的函數(shù)才能被應用函數(shù)調用。要輸出的函數(shù)名列在該文件EXPORTS關鍵字下面[3]。
??? (2)通過LabVIEW中的CallLibraryFunction模塊實現(xiàn)對USB接口函數(shù)的調用。在DLL文件生成后,在LabVIEW框圖程序窗口打開FunctionPalette(功能模板),在Advanced模塊中選CallLibraryFunction模塊,然后在快捷欄選Configure,出現(xiàn)對話框,根據(jù)LabVIEW與DLLs的參數(shù)對應關系填寫好DLL文件的路徑、被調用函數(shù)名、參數(shù)的類型及返回類型,然后LabVIEW將自動生成各參數(shù)的入口及出口狀態(tài),這樣就實現(xiàn)了LabVIEW與DLLs的調用。
??? (3)實現(xiàn)在LabVIEW應用程序下PC機與無線傳輸模塊通過USB接口通信。由于本設計中應用程序采用調用動態(tài)鏈接庫形式,主要操作已由動態(tài)鏈接庫文件完成, 所以應用程序部分主要完成無線通信輸入/輸出參數(shù)及通道設置、錯誤操作提示、數(shù)據(jù)格式轉化及顯示等功能[4]。
??? 以上方案的分析結果表明:在LabVIEW軟件開發(fā)環(huán)境下調用動態(tài)鏈接庫,進行應用程序接口設計,其界面簡單、易懂,并且采用USB接口芯片PDIUSBD12構建無線USB 串行通信接口,電路結構簡單、系統(tǒng)性能良好。無論是進行實驗室研究還是工業(yè)測試,本設計方案都具有較大的推廣價值。
參考文獻
[1]?周立功. PDIUSBD12 USB固件編程與驅動開發(fā)[M].北京:北京航空航天大學出版社, 2002.
[2] ?蘇濤, 張海峰, 張登福. 基于USB總線的實時數(shù)據(jù)采集系統(tǒng)設計與實現(xiàn)[J]. 電子技術應用, 2004,30(1):
?12-14.
[3]?蘭文武,付桂翠,高澤溪,等. 基于USB接口的數(shù)據(jù)采集系統(tǒng)設計[J]. 電子技術應用, 2004,30(2):21-23.
[4]?吳鵬, 陶正蘇. 基于單片機USB接口的PC主機驅動程序和應用程序設計. 電子器件, 2005,(3).