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