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