李健行 黎 英 郭志偉
(1.昆明理工大學信息工程與自動化學院,昆明 650504;2.北京安控科技股份有限公司,北京 100095)
基于ZigBee的MSP430單片機無線升級技術
李健行1黎 英1郭志偉2
(1.昆明理工大學信息工程與自動化學院,昆明 650504;2.北京安控科技股份有限公司,北京 100095)
為了彌補油氣田儀表程序傳統更新方式的不足,提高更新效率,從安全、穩定及異常處理等方面考慮,通過ZigBee模塊的通信功能和MSP430單片機的Flash存儲機制,設計實現了對MSP430系列單片機程序的無線下載技術?,F場應用驗證了該技術的可靠性、高效性和普適性。
MSP430單片機 ZigBee 程序無線升級 網絡安全
我國石油開采設備數量多、分布廣、地處偏遠、環境特殊,傳統的相對落后的監測手段需要投入大量的人力、物力和財力來維護生產設備的正常運轉[1]。為此,大量基于ZigBee技術的無線儀表已經被運用到油氣田設備上,由于每個井場都有大量的儀表設備,并且用戶需求的變化也需要對儀表程序進行適當更新。而現場儀表往往裝配在不易手工連線之處,傳統的程序更新方式是通過預留在單片機上的JTAG接口或BSL接口通過有線方式進行升級,但這兩種升級方式都必須要拆卸儀表,同時由于儀表對防水性要求很高而且電路板接線復雜,接線拆線過程中可能會引起一些意想不到的問題,不但會嚴重影響工作效率,而且會縮減儀表的使用壽命。
為了彌補油氣田儀表程序傳統更新方式的不足,提高更新效率,從安全、穩定及異常處理等方面考慮,通過ZigBee模塊的通信功能和MSP430的Flash存儲機制,設計實現了對MSP430系列單片機程序的無線下載技術。基于ZigBee標準的無線儀表之間沒有物理連線,并且每個ZigBee模塊都有自己的通道號和PID號,將手操器和儀表配置到同一網絡中,利用手操器向儀表發送要更新的程序,可靠又快捷地完成程序的下載。
MSP430系列單片機的Flash存儲器模塊是一個可獨立操作的物理存儲單元。全部模塊安排在同一個線性地址空間中,存儲器被分為多個512Byte的段和兩個64Byte或128Byte的信息段。各段可單獨擦除,并且在正常工作電壓下程序可對Flash進行擦寫操作。
基于ZigBee的MSP430單片機無線升級技術就是在Flash主存中定義一段用于升級應用程序的代碼,再結合USART模塊就可以方便地檢測Flash存儲單元的內容或更改Flash程序代碼,只需配合PC機的串口調試軟件即可實現,因此特別適合現場儀表的無線升級。
基于ZigBee的無線下載主要是利用現有的RS-485串口方式通過自編通信軟件對無線儀表進行遠程升級,其實現機制就是在目標芯片中放置兩段代碼:一段為應用程序,一段為監控程序。兩者的地址段不能重疊,然后利用串行通信接口通過ZigBee模塊與儀表進行通信,這樣就可以利用監控程序擦除應用程序并寫入新的代碼,并且保證監控程序不會被擦除。
PC機通過串口與ZigBee通信,儀表端的MSP430單片機也通過串口與ZigBee通信,將PC端的ZigBee與儀表端的ZigBee配置在同一個網絡后,兩端就能進行數據傳輸,從而進行程序的下載和對儀表的控制。程序升級通信路徑如圖1所示。

圖1 程序升級的通信路徑
ZigBee是一種短距離雙向無線通信技術,其協議依據802.15.4標準,通過無線電波以接力方式將數據從一個傳感器傳送到另一個傳感器,使數千個微小傳感器間實現相互協調的通信[2],由于其復雜度低、功耗低、網絡容量大、可靠性高且成本低,特別適用于油氣田現場儀表與RTU之間的通信。
ZigBee協議棧提供的安全服務有數據加密、完整性校驗及鑒權等功能。ZigBee安全機制采用了AES加密算法,其使用128位密鑰對稱加密機制,還設置有計數器,并且對信息數據進行完整性檢測,防止對通信網絡的反復攻擊和篡改信息數據。如圖2所示,ZigBee的MAC層、NWK層和應用層都提供了安全服務機制,所以采用ZigBee進行數據傳輸能夠有效地提高傳輸數據的正確性[3]。

圖2 ZigBee安全體系結構
除了ZigBee自身具有的可靠的發送接收握手機制和重傳機制外,筆者還通過程序手段加強了傳輸的可靠性和穩定性,通信雙方發送的每個數據包都必須等待接收方的確認信息,并進行信息回復,才可以正常通信,當發送方收不到接收方的確認時,則再次重發;若重發5次仍無應答,則儀表的通信效率下降,如果通信效率降為零,則儀表進入深度休眠狀態,待發送方發送數據后方可喚醒。
3.1上位機通信的實現機制
PC端的儀表遠程下載軟件以9 600bit/s與MSP430單片機通過配置為同一通道號和PID的ZigBee模塊進行通信。下載軟件每次傳輸128Byte,每次發送完延時1ms再進行下一次傳輸,一直到傳輸結束。
將要升級的應用程序進行編譯連接,并生成TXT文件,打開上位機軟件,當上位機與儀表建立通信后,選擇要升級的TXT的應用程序,點擊下載,待下載完成并且校驗成功后,點擊退出即完成本次升級。具體流程如圖3所示。

圖3 上位機傳輸程序流程
3.2下位機實現機制
3.2.1應用程序寫入Flash的過程
監控程序在儀表復位后開始工作,程序首先要關閉看門狗等中斷模塊,配置Flash的操作時鐘,然后設置USART的波特率為9 600bit/s,7位數據位、一個停止位、一個奇偶校驗位,然后配置ZigBee模塊,最后等待上位機的命令并作出響應,具體流程如圖4所示。

圖4 下位機接收程序流程
程序升級完成后檢測應用程序的復位向量,如果復位向量為空,說明應用程序不存在,則監控程序返回到自身的主循環程序;如果復位向量存在,則通過跳轉指令將PC值轉移到相應的應用程序復位向量,執行應用程序。具體的匯編指令如下:
asm("mov &0xEFFE,PC");
3.2.2.xcl文件解析
通過IAR編譯器生成的TXT文件中的代碼的存放地址、復位向量和中斷向量都可以通過配置該文件修改,.xcl文件存放在目錄的IAR SystemsEmbedded Workbench 6.4 Evaluation430config中。筆者使用的配置文件是MSP430F1611.xcl,在編譯器的Options→Linker→Config→Linker command file選項中指定所對應單片機型號的.xcl文件。部分內容如下:
// Constant data
//-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=4000-FFDF
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=4000-EFDF
// Code
//-Z(CODE)CSTART,ISR_CODE,CODE_ID=4000-FFDF
//-P(CODE)CODE=4000-FFDF
-Z(CODE)CSTART,ISR_CODE,CODE_ID=4000-EFDF
-P(CODE)CODE=4000-EFDF
// Interrupt vectors
-Z(CODE)INTVEC=EFE0-EFFF
-Z(CODE)RESET=EFFE-EFFF
上面是應用程序的配置文件,其中代碼(Code)和數據常量(Constant data)放在4000~EFDF空間中;中斷向量的地址是EFE0~EFFF,其中復位向量的地址是EFFE~EFFF。
3.2.3監控程序和應用程序地址的分配
正常使用時應用程序的代碼區間為4000h~FFDFh,中斷向量為FFE0~FFFF,但是含有監控程序的Flash分配就不一樣了。為了防止監控程序和應用程序的覆蓋,需將二者分開存儲,即將代碼區分為3個部分,除了存放監控程序和應用程序外,還要開辟空間單獨存放應用程序的中斷向量。地址空間分配如圖5所示。

圖5 地址空間的分配
從圖5中可以看出,監控程序的中斷向量(FFE0~FFFF)和復位地址(FFFE~FFFF)是沒有改變的,是真實向量,也就是說單片機上電的起始地址和中斷向量實質是以監控程序為主的,而應用程序是被調用的。因此應用程序中的復位向量和中斷向量都是虛擬的,當單片機接收到中斷時,單片機先跳去真正的中斷向量中,然后再被轉移到用戶應用程序虛擬的中斷向量地址中。因此需要在監控程序中將除復位中斷外的所有中斷映射到應用程序中,具體如下:
#pragma vector = DACDMA_VECTOR
__interrupt void int0_irq(void)
{
asm("br &0xEFE0");
}
#pragma vector = PORT2_VECTOR
__interrupt void int1_irq(void)
{
asm("br &0xEFE2");
}
升級程序整個過程中是不允許有中斷打擾的,整個升級程序一定要關掉中斷。
3.3上位機軟件的編寫
上位機軟件是用Visual 2008開發的,采用MFC對話框編程,通過串口來配置ZigBee模塊實現與儀表的通信。上位機軟件設計的關鍵是對TXT格式的應用程序的處理。下面就是一個生成的TXT文件的內容:
@4000
01 00 A7 0A B4 0A BF 0A AD 0A A6 0A 9A 0A A3 0A
9F 0A 87 0A 92 0A 7F 0A 67 0A C7 0A 82 0A AD 0A
BD 0A 8F 0A A0 0A 4E 0A 82 0A 76 0A 8A 0A 90 0A
B0 12 A6 8C 0C 43 0C 63 30 41 F2 C0 40 00 00 00
30 41 82 43 10 11 30 41 30 40 EA 92 30 40 18 94
30 40 0C 94 30 40 60 89 FF 3F
@EFEE
B6 93
q
文件中自動包含了“@”和“q”指令,@后面的字符表示地址,q表示文件結束。@4000表示起始地址,接下來的內容需要一次寫入4000開始的地址中;@EFEE表示應用程序的復位程序入口地址。TXT文件的讀取采用ifstream流十六進制輸出,每幀的總字節為128個,開始時調用計算函數統計@的個數來確定文件結束的標志,然后開始發送,待檢測到字符q則發送結束,然后調用校驗函數,如果發送正確則退出,否則重新發送[4~10]。
基于ZigBee的MSP430單片機無線升級方案結合了單片機與ZigBee技術,MSP430單片機內通過采用與一般方式不同的程序架構、Flash中的分區存儲和無線通信安全性的設計,利用此升級技術,已經實現了在勝利油田儀表程序的無線升級,20KByte的程序代碼大概3min就可以更新完畢,并且此方案適用于所有的MSP430系列單片機,整個過程既高效,又節省了大量的人力和財力,具有廣泛的應用前景。
[1] 潘崢嶸,騰尚偉,尹曉霈,等.基于GPRS的油田抽油機遠程在線監控系統的設計與實現[J].化工自動化及儀表,2008,35(1):75~77.
[2] 劉川來,郭藍天,秦浩華,等.一種改進的ZigBee無線傳感器網絡定位算法及應用[J].化工自動化及儀表,2012,39(2):204~208.
[3] 任秀麗,于海斌.基于ZigBee技術的無線傳感網的安全分析[J].計算機科學,2006,33(10):111~113.
[4] 陶維青,王付軍.基于GPRS網絡的MSP430單片機Flash遠程更新方法[J].電測與儀表,2007,(7):1389~1390.
[5] 袁璐,宋華.基于ZigBee和IAP的在線升級方案[J].測控技術,2008,(10):79~82.
[6] 姜曉梅,李祥和,任朝榮,等.基于ARM的IAP在線及遠程升級技術[J].計算機應用,2008,(2):519~521.
[7] Paolo B,Prashant P,Vince W,et al.Wireless Sensor Networks:a Survey on the State of the Art and the 802.15.4 and ZigBee Standards[J].Computer Communication,2007,30(7):1655~1695.
[8] 潘偉,黃東.基于ZigBee技術的無線傳感網絡研究[J].計算機技術與發展,2008,18(9):244~247.
[9] 胡靜靜.實現基于GPRS的無線遠程IAP功能[J].單片機與嵌入式系統應用,2005,(6):22~25.
[10] 彭華成,何嶺松,許曉暉,等.智能儀表軟件遠程升級的技術實現[J].機械與電子,2007,(6):61~63.
ZigBee-basedWirelessUpgradeTechnologyforMSP430MCU
LI Jian-hang1, LI Ying1, GUO Zhi-wei2
(1.CollgegofInformationEngineeringandAutomation,KunmingUniversityofScienceandTechnology,Kunming650504,China; 2.BeijingEtrolTechnologiesCo.,Ltd.,Beijing100095,China)
For purpose of remedying the deficiency of traditional upgrade methods for the instrument applied in oil-gas fields and considering the safety, stability and exception handling in the upgrading operation, having ZigBee communication feature and MSP430 MCU’s flash memory storage employed to design and implement wireless downloaded technology for the MSP430 MCUs. The field application proves its reliability and efficiency.
MSP430 MCU, ZigBee, wireless upgrade, network security
TH865
B
1000-3932(2016)01-0076-05
2015-11-03(修改稿)