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