《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > 基于LabVIEW的USB無線通信接口的設(shè)計

基于LabVIEW的USB無線通信接口的設(shè)計

2008-07-23
作者:劉改梅, 韓慧蓮

??? 摘 要: 結(jié)合LabVIEW軟件開發(fā)平臺和USB總線的優(yōu)點(diǎn),提出了以LabVIEW為應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序開發(fā)平臺的USB無線串行通信系統(tǒng)的設(shè)計方案,介紹了USB無線通信設(shè)備與PC機(jī)接口的軟硬件設(shè)計方法,重點(diǎn)闡述了USB驅(qū)動程序和應(yīng)用程序的設(shè)計方法以及在LabVIEW環(huán)境下如何調(diào)用動態(tài)鏈接庫" title="動態(tài)鏈接庫">動態(tài)鏈接庫完成應(yīng)用程序與驅(qū)動程序的鏈接,從而實(shí)現(xiàn)在LabVIEW應(yīng)用軟件下進(jìn)行USB無線通信。該接口界面簡單靈活、接口便捷可靠,為進(jìn)行實(shí)驗(yàn)室研究和工業(yè)測試提供了很好的利用價值。
??? 關(guān)鍵詞: USB? LabVIEW? 無線數(shù)據(jù)傳輸

?

??? 通用串行總線USB具有即插即用、通用性強(qiáng)、易于擴(kuò)展等優(yōu)點(diǎn),可以支持Windows、Linux等多種操作系統(tǒng),為PC機(jī)與其外設(shè)之間大容量的數(shù)據(jù)通信提供了高速、可靠的傳輸協(xié)議。而LabVIEW是NI公司開發(fā)的一種圖形化的軟件開發(fā)平臺,在虛擬儀器技術(shù)快速發(fā)展的今天,很多工業(yè)控制和測試系統(tǒng)的數(shù)據(jù)采集、處理應(yīng)用程序都采用LabVIEW軟件來完成,它具有界面友好、易學(xué)易懂、系統(tǒng)開發(fā)周期短、維護(hù)調(diào)試簡單、無需繁瑣代碼的編寫等優(yōu)點(diǎn),為測試及工程開發(fā)人員使用帶來了很大方便。因此,本文結(jié)合USB總線和LabVIEW軟件開發(fā)平臺兩者的優(yōu)點(diǎn),提出了以LabVIEW為應(yīng)用程序開發(fā)平臺的USB無線串行通信系統(tǒng)的設(shè)計方案,將LabVIEW語言和USB總線技術(shù)緊密結(jié)合起來,為實(shí)現(xiàn)數(shù)據(jù)的采集、傳輸和處理一體化提供了靈活的用戶界面和便捷的接口功能。
1 USB無線串行通信系統(tǒng)設(shè)計方案
??? 隨著測試領(lǐng)域的擴(kuò)展,將采集的數(shù)據(jù)以無線方式傳輸出去已經(jīng)成為測試系統(tǒng)發(fā)展的一種趨勢。傳統(tǒng)上PC機(jī)與傳輸模塊之間大多采用RS232接口實(shí)現(xiàn)數(shù)據(jù)傳輸,這種接口存在接口傳輸速率低、可靠性差、不易擴(kuò)展等問題。本文采用nRF401射頻收發(fā)器、AT89C51單片機(jī)和PDIUSBD12 USB接口芯片" title="接口芯片">接口芯片構(gòu)建無線串行接口電路部分,以LabVIEW軟件為應(yīng)用程序開發(fā)平臺,設(shè)計基于LabVIEW的USB無線通信系統(tǒng),以解決傳統(tǒng)的無線串行通信系統(tǒng)所存在的問題。其結(jié)構(gòu)框圖如圖1所示。

?????????????????????????
??? 本無線通信系統(tǒng)工作過程:將無線傳輸" title="無線傳輸">無線傳輸模塊通過USB接口芯片連接到主機(jī)上,系統(tǒng)上電后,主機(jī)通過PDIUSB D12與USB無線傳輸設(shè)備進(jìn)行通信并且管理其設(shè)備狀態(tài)的變化。用戶要進(jìn)行數(shù)據(jù)傳輸時,首先在用戶界面設(shè)置傳輸參數(shù)及收/發(fā)模式。當(dāng)系統(tǒng)處于發(fā)射狀態(tài)時,AT89C51從PDIUSBD12的Buffer中讀取數(shù)據(jù)并送至nRF401發(fā)射出去;當(dāng)系統(tǒng)處于接收狀態(tài)時,AT89C51從nRF401中讀出數(shù)據(jù)并通過USB接口芯片PDIUSBD12送入主機(jī)。主機(jī)通過總線枚舉方式識別USB設(shè)備,應(yīng)用程序采用調(diào)用動態(tài)鏈接庫的方式實(shí)現(xiàn)與設(shè)備驅(qū)動的鏈接。
2 USB無線串行通信接口電路及總線枚舉
??? PDIUSBD12是PHILIPS公司開發(fā)的一款高性能并行USB接口芯片,通常用作與單片機(jī)進(jìn)行通信的高速通用并行接口,符合USB1.1版本規(guī)范和大多數(shù)器件的分類規(guī)格,并且PDIUSBD12具有掛起功耗以及LazyClock輸出,可以滿足使用ACPI、OnNOW和USB電源管理設(shè)備的要求,其較低的操作功耗可以適合于使用總線供電的外設(shè)。此外,PDIUSBD12還集成了許多特性,包括SoftConnetTM、GoodLinkTM、可編程時鐘輸出、低頻晶振和終止寄存器集合[1]。所有這些特性都為系統(tǒng)節(jié)約了成本,同時使USB功能在外設(shè)上的應(yīng)用變得容易。
??? PDIUSBD12與AT89C51控制的無線傳輸模塊及PC機(jī)間的接口電路如圖2所示(無線傳輸模塊連接圖略)。

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

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。