文獻標識碼: A
文章編號: 0258-7998(2011)07-0045-03
無線傳感器綜合了傳感器技術(shù),、嵌入式計算機技術(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)安裝好的傳感器進行軟件升級更新,,就需要拆卸連接,,顯得不方便。本文針對一個自行設(shè)計的基于MSP430的無線傳感器,,設(shè)計了一種非接觸的軟件升級方法,,實現(xiàn)了無線傳感器不拆卸的情況下應(yīng)用軟件的升級。
1 無線傳感器的整體結(jié)構(gòu)
本文涉及的無線測量系統(tǒng)整體結(jié)構(gòu)設(shè)計如圖1所示,,主要由無線傳感器,、無線收發(fā)器和計算機三部分組成。無線傳感器采集現(xiàn)場的數(shù)據(jù),,通過無線的方式發(fā)送給無線收發(fā)器,,無線收發(fā)器再將數(shù)據(jù)發(fā)送給計算機,計算機接收到數(shù)據(jù)后進行分析計算,、顯示,、存儲等工作。
2 硬件結(jié)構(gòu)
2.1 無線傳感器硬件結(jié)構(gòu)
無線傳感器硬件結(jié)構(gòu)如圖2所示,,傳感器工作過程是單片機讀取傳感器采集的測量數(shù)據(jù),,再通過無線模塊發(fā)送給上位PC機。
本系統(tǒng)的傳感器是一個多通道的應(yīng)變測量傳感器,由于本文主要討論如何更新無線傳感器軟件,,所以不對傳感器設(shè)計做過多的介紹,。
無線傳感器中的單片機采用TI公司的MSP430F2274芯片,此芯片是一款性能優(yōu)異的超低功耗16位單片機,,帶有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的無線通信,。無線通信速度最高可以達到2 Mb/s。只需要單片機系統(tǒng)預(yù)留5個GPIO,,1個中斷輸入引腳,,就可以很容易實現(xiàn)無線通信的功能。而且具有極低的電流消耗,,當(dāng)工作在發(fā)射模式下發(fā)射功率為-6 dBm時電流消耗為9.0 mA,,工作在接收模式時電流為12.3 mA,在掉電模式和待機模式下電流消耗更低,。
2.2 無線收發(fā)器的硬件結(jié)構(gòu)
無線收發(fā)器硬件結(jié)構(gòu)如圖3所示,。無線收發(fā)器主要用做數(shù)據(jù)轉(zhuǎn)發(fā),功能較簡單,,所以選取只有20Pin的AT89C2051為控制器件,,通過MAX3232與計算機串口相連并收發(fā)數(shù)據(jù);通過模擬SPI接口與nRF24L01相連,,與無線傳感器交換數(shù)據(jù),。
3 軟件設(shè)計
3.1 MSP430單片機軟件設(shè)計
MSP430的軟件設(shè)計包括無線傳感器程序設(shè)計和軟件更新引導(dǎo)程序設(shè)計。軟件更新引導(dǎo)程序的目的就是完成無線傳感器軟件通過無線的方式升級更新,。
3.1.1 軟件更新引導(dǎo)程序的流程
軟件更新引導(dǎo)程序的流程如圖4所示,。
上電初始化過程首先是穩(wěn)定系統(tǒng)時鐘,然后通過SPI接口對nRF24L01進行初始化配置,,配置的內(nèi)容包括工作模式,、發(fā)送地址和接收地址、收發(fā)通道的設(shè)置、傳輸?shù)乃俾屎桶l(fā)射功率,、自動重發(fā)的次數(shù)等,。這些參數(shù)的設(shè)置要與無線收發(fā)器相對應(yīng),才能保證無線數(shù)據(jù)收發(fā)準確,。
單片機對外圍設(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ù),則認為是重復(fù)的數(shù)據(jù)包,,從而丟棄,。利用指令編碼也可以檢測有無丟包。對于傳輸數(shù)據(jù)出錯,,由于nRF24L01無線傳輸中,,可以設(shè)置自動CRC校驗,保證數(shù)據(jù)包傳輸出錯概率很低,。
在程序更新時,,要檢測寫入的Flash區(qū)必須在無線傳感器軟件代碼區(qū)或中斷向量區(qū)中,如果超出,,則不能再進行寫入,,并設(shè)置更新出錯,以保護其他代碼區(qū)的數(shù)據(jù)。在程序更新完畢后,,將中斷向量區(qū)的0FFFEh地址的16位數(shù)據(jù)設(shè)置為0F000h,,這樣傳感器再重啟后,將首先運行軟件更新引導(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”文件中對代碼地址進行設(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ā)送給計算機,;當(dāng)計算機有數(shù)據(jù)通過RS232接口發(fā)送給無線收發(fā)器時,,將數(shù)據(jù)打包,通過nRF24L01無線發(fā)送,。
3.3 計算機的升級軟件設(shè)計
首先要在計算機端生成無線傳感器應(yīng)用程序的文件,。無線傳感器應(yīng)用軟件編譯是在“project->option->link->output”標簽中,將“Format”設(shè)置為“other”,,“output”設(shè)置為“map430-txt”,,這樣在IAR中程序編譯完,就會產(chǎn)生“map430-txt”格式的msp430應(yīng)用程序,。其內(nèi)容為“@+地址”表示后面程序的起始地址,,后面緊跟字節(jié)型的數(shù)據(jù),當(dāng)有字母‘q’時,,表示文件結(jié)束,。
計算機的升級軟件首先發(fā)送系統(tǒng)重啟命令,并發(fā)送程序更新命令,在收到無線傳感器準備好的指令后,,讀取無線傳感器應(yīng)用程序的msp430-txt格式的文件,,將讀取的文件進行轉(zhuǎn)換,發(fā)送給無線傳感器,。如果收到更新成功的回復(fù)指令,,則提示程序更新成功,否則程序更新失敗,。
3.4 計算機與傳感器的數(shù)據(jù)傳輸協(xié)議設(shè)計
計算機與無線傳感器的數(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)編程的其他系列的單片機系統(tǒng)中同樣適用,具有很高的實用性和通用性,。
參考文獻
[1] 秦龍.MSP430單片機應(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.