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