文獻標識碼: A
文章編號: 0258-7998(2013)08-0017-03
隨著當今電子技術的發展,人們對數據通信速度和操作安裝的簡易性等方面的要求日益提高,使得數據通信技術不可避免地成為一項關鍵技術。USB是一種通用串行總線,其發展速度非常迅猛,USB協議已由傳輸速度為12 Mb/s的USB1.1發展到傳輸速度支持低速、全速、高速和超高速的USB3.0,最大傳輸速度高達5 Gb/s。USB總線技術由于數據傳輸速度高、使用方便和能夠連接多達127個外設,因此其在數據通信中的應用越來越廣泛。
Windows平臺下傳統的USB應用系統的開發步驟是:先用Windows DDK或第三方開發工具開發USB驅動程序,然后用Visual C++開發應用程序。若讓不熟悉Windows編程的開發者用傳統方法開發USB驅動程序和應用程序,將會非常困難[1]。因此,本文介紹了一種難度較低的USB應用系統實現方案,即在LabVIEW環境下基于NI-VISA實現PC與C8051F320單片機的USB通信系統。
1 系統總體設計
本系統選用具有USB接口的C8051F320-TBC開發板實現數據的雙向通信。該設計完成兩項任務:(1)采集單片機上溫度傳感器的數據,通過USB上傳至PC;(2)PC通過USB發送指令至單片機,控制單片機執行相應的動作。
本系統的硬件平臺結構如圖1所示。
本系統的軟件平臺設計包括單片機端的固件(Firmware)程序設計、PC端的驅動程序設計和PC端的應用程序設計3方面。
單片機端固件程序的任務是處理來自USB主機端的標準請求和完成與USB主機的數據交換;PC端的驅動程序作為USB主機(PC)和USB從機(單片機)的橋梁,其主要任務是讓USB主機可以識別USB設備,并將硬件本身的功能告訴USB主機;PC端的應用程序的任務是通過驅動程序與USB設備進行通信并對USB數據進行處理。
本文采用LabVIEW平臺開發PC端的驅動程序和應用程序,采用Silicon Laboratories IDE集成開發環境開發固件程序。本系統軟件平臺結構如圖2所示。
2 模塊設計
2.1 固件程序設計
單片機端固件程序設計的目的是使USB主機能夠識別USB設備(本系統為C8051F320設備),并正確與USB設備進行雙向通信。
固件程序完成的任務有三項:(1)使得USB主機可識別USB設備,并建立二者之間的通信;(2)接收由USB主機發送來的控制指令,在本設計中為點亮單片機的LED燈;(3)將采集的溫度數據傳送給USB主機。
本設計將固件程序劃分為USB描述符聲明程序(usb_desc.c)、中斷服務程序(usb_isr.c)、標準設備請求程序(usb_stdreq.c)、主程序(main.c)4個子模塊。
USB描述符聲明程序(usb_desc.c)用來描述設備的USB信息。該文件包含有USB協議中規定的5種標準描述符信息:設備描述符信息、配置描述符信息、接口描述符信息、端點描述符信息和字符串描述符信息。USB主機通過訪問這些描述符即可實現對設備類型的識別和配置。
中斷服務程序(usb_isr.c)用來處理所有與USB相關的中斷事件,當有任何類型的USB中斷事件發生時,固件程序都會調用這個中斷服務程序。
標準設備請求程序(usb_stdreq.c)包括所有標準設備請求的處理例程,這些處理例程都是通過控制端點的處理來調用,該文件主要用來處理USB主機發送的標準請求。
主程序(main.c)的功能是響應USB主機發送的控制指令并將采集的溫度數據傳送給USB主機。
固件程序流程圖如圖3所示。
由圖3可知,該固件程序首先進行設備列舉[2],其目的是使USB主機能夠識別USB設備。USB主機根據設備的描述符信息對USB設備進行配置并分配資源,待通信建立后,USB設備可接收由USB主機發來的控制指令,并將采集的溫度數據通過USB傳給USB主機。
2.2 驅動程序設計
驅動程序的設計采用虛擬儀器軟件架構NI-VISA實現,NI-VISA(Virtual Instrument Software Architecture)是由美國NI公司開發的一種用來與各種儀器總線進行通信的高級應用編程接口。VISA是一個綜合軟件包,可在任何平臺、總線和環境下對USB、串口、GPIB、VXI、PXI及以太網等進行配置、編程和調試。
USB設備有USB INSTR設備與USB RAW設備兩類。符合USB測試和測量類(USBTMC)協議的設備稱為USB INSTR設備;不符合USBTMC協議的設備稱為USB RAW設備。
NI-VISA有USB INSTR類函數與USB RAW類函數兩種VISA類函數,它們可分別控制USB INSTR與USB RAW兩種設備。USB INSTR設備可通過LabVIEW直接調用USB INSTR類函數實現對其控制;而USB RAW設備則需先使用NI-VISA來創建USB設備的驅動程序[3],創建正確后才能利用LabVIEW調用USB RAW類函數實現對其控制。
使用NI-VISA軟件包中的VISA Interactive Control測試可知,本設計中的USB設備屬于USB RAW類設備,因此需要通過NI-VISA來創建驅動程序。驅動程序設計的任務是制作INF文件、配置USB設備及安裝驅動程序并驗證其正確安裝,可分為以下3個步驟[4]:(1)使用VISA驅動開發向導(Driver Development Wizard)創建INF文件;(2)使用INF文件安裝驅動程序和USB設備;(3)使用NI-VISA交互式控制測試設備。
2.3 應用程序設計
當正確安裝VISA驅動程序之后,便可通過LabVIEW程序調用USB RAW類函數來完成與USB設備的通信[5]。本應用程序設計的主要任務有兩個:(1)PC接收由單片機采集的溫度數據,并通過LabVIEW顯示;(2)PC通過LabVIEW軟件發送指定的指令點亮單片機的LED燈。
由于本設計中的RAW設備編程較為復雜,不像INSTR設備那樣可以使用USBTMC協議直接調用VISA常用函數,故需重新編寫程序。編寫本設計主要用到的控件為:VISA打開、VISA啟用事件、VISA等待事件、VISA獲取USB中斷數據、VISA寫和VISA關閉。
PC通過USB向單片機發送指令的流程圖如圖4所示,PC接收單片機通過USB傳送來的數據的流程圖如圖5所示。
根據圖4和圖5的流程圖進行LabVIEW編程,其后面板的核心代碼分別如圖6和7所示。
3 系統功能測試
在完成各個模塊的設計后,需進行系統集成。結合硬件框圖進行實物連接,依次完成固件程序下載、驅動程序安裝和應用程序整合。
(1)單片機將所采集的溫度信息通過USB將數據傳送給PC,其LabVIEW前面板及測試結果如圖8所示。
單片機的核心代碼如下:
In_Packet[0] = Switch1State;
In_Packet[1] = Switch2State;
In_Packet[2] = (P0 & 0x0F);
In_Packet[3] = Potentiometer;
In_Packet[4] = Temperature;
通過與單片機發送數據的格式對比可知,所傳送數據的格式正確,使用“Bus Hound”軟件驗證了所傳送的數據正確無誤。
(2)PC機通過USB將指定的數據傳送給單片機,可觀察到正常點亮單片機的LED燈。
本文介紹了如何在LabVIEW環境下基于NI-VISA實現PC與單片機C8051F320的USB通信,并給出系統實現方案。實驗測試表明,該方案能夠實現USB通信,且方案實現難度較低。本系統可為USB應用系統的設計提供參考。
參考文獻
[1] 佘志榮,楊莉.基于NI-VISA與LabVIEW的USB接口應用設計[J].單片機與嵌入式系統應用,2007(1):66-68.
[2] 趙宏斌,全厚德.基于C8051F320的數據采集系統USB接口設計[J].單片機開發與應用,2009,25(9):92-94.
[3] 蔡共宣.基于LabVIEW的單片機USB數據采集系統設計[J].實驗科學與技術,2009,8(1):58-59.
[4] National Instruments.USB儀器控制教程[Z],2009.
[5] 張桐,陳國順.精通LabVIEW程序設計[M].北京:電子工業出版社,2008.