文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)07-0045-03
無線傳感器綜合了傳感器技術(shù)、嵌入式計算機(jī)技術(shù)、分布式信息處理技術(shù)和無線通信技術(shù),能夠?qū)崟r監(jiān)測、感知和采集網(wǎng)絡(luò)分布區(qū)內(nèi)的環(huán)境或監(jiān)測對象的信息。目前已經(jīng)在軍事、航空、環(huán)境、醫(yī)療、工業(yè)、商業(yè)等領(lǐng)域有廣泛應(yīng)用。對無線傳感器的片上系統(tǒng)軟件的更新,目前多需要有線方式,如連接JTAG口、SWB接口等,而對已經(jīng)安裝好的傳感器進(jìn)行軟件升級更新,就需要拆卸連接,顯得不方便。本文針對一個自行設(shè)計的基于MSP430的無線傳感器,設(shè)計了一種非接觸的軟件升級方法,實現(xiàn)了無線傳感器不拆卸的情況下應(yīng)用軟件的升級。
1 無線傳感器的整體結(jié)構(gòu)
本文涉及的無線測量系統(tǒng)整體結(jié)構(gòu)設(shè)計如圖1所示,主要由無線傳感器、無線收發(fā)器和計算機(jī)三部分組成。無線傳感器采集現(xiàn)場的數(shù)據(jù),通過無線的方式發(fā)送給無線收發(fā)器,無線收發(fā)器再將數(shù)據(jù)發(fā)送給計算機(jī),計算機(jī)接收到數(shù)據(jù)后進(jìn)行分析計算、顯示、存儲等工作。
2 硬件結(jié)構(gòu)
2.1 無線傳感器硬件結(jié)構(gòu)
無線傳感器硬件結(jié)構(gòu)如圖2所示,傳感器工作過程是單片機(jī)讀取傳感器采集的測量數(shù)據(jù),再通過無線模塊發(fā)送給上位PC機(jī)。
本系統(tǒng)的傳感器是一個多通道的應(yīng)變測量傳感器,由于本文主要討論如何更新無線傳感器軟件,所以不對傳感器設(shè)計做過多的介紹。
無線傳感器中的單片機(jī)采用TI公司的MSP430F2274芯片,此芯片是一款性能優(yōu)異的超低功耗16位單片機(jī),帶有32 KB Flash存儲器和1 KB的RAM存儲器,內(nèi)部集成了精度較高的16 MHz的振蕩器,16位的精簡指令集架構(gòu),還有豐富的外部接口,如UART、SPI、I2C等。本系統(tǒng)利用其SPI接口與無線模塊相連。
nRF24L01是NORDIC公司的一款無線通信芯片,采用FSK 調(diào)制,內(nèi)部集成NORDIC的Enhanced Short Burst 協(xié)議,可以實現(xiàn)點對點或是1對6的無線通信。無線通信速度最高可以達(dá)到2 Mb/s。只需要單片機(jī)系統(tǒng)預(yù)留5個GPIO,1個中斷輸入引腳,就可以很容易實現(xiàn)無線通信的功能。而且具有極低的電流消耗,當(dāng)工作在發(fā)射模式下發(fā)射功率為-6 dBm時電流消耗為9.0 mA,工作在接收模式時電流為12.3 mA,在掉電模式和待機(jī)模式下電流消耗更低。
2.2 無線收發(fā)器的硬件結(jié)構(gòu)
無線收發(fā)器硬件結(jié)構(gòu)如圖3所示。無線收發(fā)器主要用做數(shù)據(jù)轉(zhuǎn)發(fā),功能較簡單,所以選取只有20Pin的AT89C2051為控制器件,通過MAX3232與計算機(jī)串口相連并收發(fā)數(shù)據(jù);通過模擬SPI接口與nRF24L01相連,與無線傳感器交換數(shù)據(jù)。
3 軟件設(shè)計
3.1 MSP430單片機(jī)軟件設(shè)計
MSP430的軟件設(shè)計包括無線傳感器程序設(shè)計和軟件更新引導(dǎo)程序設(shè)計。軟件更新引導(dǎo)程序的目的就是完成無線傳感器軟件通過無線的方式升級更新。
3.1.1 軟件更新引導(dǎo)程序的流程
軟件更新引導(dǎo)程序的流程如圖4所示。
上電初始化過程首先是穩(wěn)定系統(tǒng)時鐘,然后通過SPI接口對nRF24L01進(jìn)行初始化配置,配置的內(nèi)容包括工作模式、發(fā)送地址和接收地址、收發(fā)通道的設(shè)置、傳輸?shù)乃俾屎桶l(fā)射功率、自動重發(fā)的次數(shù)等。這些參數(shù)的設(shè)置要與無線收發(fā)器相對應(yīng),才能保證無線數(shù)據(jù)收發(fā)準(zhǔn)確。
單片機(jī)對外圍設(shè)備的操作,例如SPI接口采用查詢式而不是中斷式,因為無線傳感器軟件和軟件更新引導(dǎo)程序用的是同一個中斷向量表,這樣就不會因中斷產(chǎn)生沖突。
對程序更新,必須保證數(shù)據(jù)通信的可靠性,所以考慮了數(shù)據(jù)包丟失、數(shù)據(jù)包重復(fù)、數(shù)據(jù)包傳輸出錯三種錯誤。對于數(shù)據(jù)包丟失,由于nRF24L01內(nèi)部集成了Enhanced Short Burst,可以讓數(shù)據(jù)發(fā)送方知道數(shù)據(jù)包是否發(fā)送成功,而重新發(fā)送數(shù)據(jù)。對于數(shù)據(jù)包重復(fù),解決方法是在數(shù)據(jù)包中設(shè)置指令編碼。指令編碼是一個8 bit的無符號整數(shù),由數(shù)據(jù)發(fā)送方將其放在數(shù)據(jù)包中,每發(fā)送一包數(shù)據(jù),將指令編碼加1,當(dāng)為255時,再從0開始。數(shù)據(jù)包傳到接收方時,如果與接收方存的指令編碼重復(fù),則認(rèn)為是重復(fù)的數(shù)據(jù)包,從而丟棄。利用指令編碼也可以檢測有無丟包。對于傳輸數(shù)據(jù)出錯,由于nRF24L01無線傳輸中,可以設(shè)置自動CRC校驗,保證數(shù)據(jù)包傳輸出錯概率很低。
在程序更新時,要檢測寫入的Flash區(qū)必須在無線傳感器軟件代碼區(qū)或中斷向量區(qū)中,如果超出,則不能再進(jìn)行寫入,并設(shè)置更新出錯,以保護(hù)其他代碼區(qū)的數(shù)據(jù)。在程序更新完畢后,將中斷向量區(qū)的0FFFEh地址的16位數(shù)據(jù)設(shè)置為0F000h,這樣傳感器再重啟后,將首先運(yùn)行軟件更新引導(dǎo)程序,在沒有軟件更新命令時自動跳轉(zhuǎn)到無線傳感器的軟件代碼區(qū)。
3.1.2 存儲器的空間分配
MSP430F2274存儲空間分配如圖5所示,將無線傳感器的32 KB的Flash存儲區(qū)分割為無線傳感器代碼區(qū)和程序更新引導(dǎo)代碼區(qū),其中08000h~0EFFFh的28 KB存儲區(qū)為無線傳感器代碼區(qū),0F000h~0EFFFh的4 KB存儲區(qū)為程序更新引導(dǎo)代碼區(qū)。兩個代碼區(qū)存放的是相互獨立的程序,在無線傳感器程序更新過程中,程序更新引導(dǎo)程序會檢測代碼寫入地址,如果是自身的代碼區(qū),則禁止寫入。在IAR編譯器中編譯程序時,需要在“.xcl”文件中對代碼地址進(jìn)行設(shè)置,對軟件更新引導(dǎo)程序的編譯CODE區(qū)為“-P(CODE)CODE=F000-FFDF”,對無線傳感器程序的編譯CODE區(qū)“-P(CODE)CODE=8000-EFFF”。
3.2 無線收發(fā)器的軟件設(shè)計
無線收發(fā)器起到信息傳遞中繼的作用,所以其軟件功能比較簡單,當(dāng)檢測到nRF24L01接收到無線數(shù)據(jù)時,將接收到的數(shù)據(jù)打包,通過RS232協(xié)議,用串口發(fā)送給計算機(jī);當(dāng)計算機(jī)有數(shù)據(jù)通過RS232接口發(fā)送給無線收發(fā)器時,將數(shù)據(jù)打包,通過nRF24L01無線發(fā)送。
3.3 計算機(jī)的升級軟件設(shè)計
首先要在計算機(jī)端生成無線傳感器應(yīng)用程序的文件。無線傳感器應(yīng)用軟件編譯是在“project->option->link->output”標(biāo)簽中,將“Format”設(shè)置為“other”,“output”設(shè)置為“map430-txt”,這樣在IAR中程序編譯完,就會產(chǎn)生“map430-txt”格式的msp430應(yīng)用程序。其內(nèi)容為“@+地址”表示后面程序的起始地址,后面緊跟字節(jié)型的數(shù)據(jù),當(dāng)有字母‘q’時,表示文件結(jié)束。
計算機(jī)的升級軟件首先發(fā)送系統(tǒng)重啟命令,并發(fā)送程序更新命令,在收到無線傳感器準(zhǔn)備好的指令后,讀取無線傳感器應(yīng)用程序的msp430-txt格式的文件,將讀取的文件進(jìn)行轉(zhuǎn)換,發(fā)送給無線傳感器。如果收到更新成功的回復(fù)指令,則提示程序更新成功,否則程序更新失敗。
3.4 計算機(jī)與傳感器的數(shù)據(jù)傳輸協(xié)議設(shè)計
計算機(jī)與無線傳感器的數(shù)據(jù)傳輸協(xié)議如表1所示,傳輸?shù)臄?shù)據(jù)包長度與傳感器工作時的數(shù)據(jù)包長度相同,為16 B的數(shù)據(jù)包。在傳輸?shù)刂泛蛿?shù)據(jù)時,將第5字節(jié)數(shù)據(jù)設(shè)置為指令編碼,每發(fā)送一個傳輸?shù)刂返臄?shù)據(jù)包或傳輸數(shù)據(jù)的數(shù)據(jù)包,都將指令編碼增1,供無線傳感器檢測是否有重復(fù)數(shù)據(jù)包或丟失數(shù)據(jù)包。
本文在基于MSP430的無線傳感器系統(tǒng)中,設(shè)計了一種無線傳感器軟件非接觸升級的方法。該方法充分利用現(xiàn)有資源,不拆卸已安裝好的無線傳感器,穩(wěn)定可靠地完成無線傳感器應(yīng)用程序的升級更新。該方法在可對Flash系統(tǒng)編程的其他系列的單片機(jī)系統(tǒng)中同樣適用,具有很高的實用性和通用性。
參考文獻(xiàn)
[1] 秦龍.MSP430單片機(jī)應(yīng)用系統(tǒng)開發(fā)典型事例[M].北京:中國電力出版社,2005.
[2] NORDIC公司.nRF24L01 Single Chip 2.4 GHz Transceiver. 2007.
[3] TI公司.MSP430x2xx Family User’s Guide.2006.
[4] TI公司.Features of the MSP430 Bootstrap Loader.2003.