蔣存波 焦 陽
(桂林理工大學信息科學與工程學院 廣西 桂林 541004)
?
基于STM32處理器的WSN節點固件在線系統升級方法
蔣存波焦陽
(桂林理工大學信息科學與工程學院廣西 桂林 541004)
摘要為滿足無線傳感網中節點設備的功能升級和系統重構需要,研究基于Cortex-Mx核的嵌入式系統固件IAP更新升級方法。利用命令請求加身份驗證的方式觸發升級,利用分拆函數將代碼拆分成128字節信息塊并將其組成138字節的ModBus報文進行傳輸,利用CRC進行數據校驗,采用應答機制實現流量控制,利用Flash識別函數區分不同的Flash類型,利用Flash寫入函數滿足片內片外Flash、不同參數NorFlash和NandFlash編程需要。經實驗測試,該方案能夠實現WSN節點的固件升級與WSN在系統動態重構需要。
關鍵詞嵌入式系統WSN固件在線升級ModBus協議
0引言
隨著現代電子技術、計算機技術、控制技術的發展,物聯網技術得到迅速發展及應用。在物聯網系統中有許多基于ARM-Cortex-Mx(x=0,1,3)核的WSN節點,這些節點在布置完畢后,依據應用要求的變化需要在線進行固件更新升級[1,2],由于固件大小差異很大,一些可存儲于片內Flash中,還有一些需要存儲于外擴NorFlash或NandFlash中。ISP(in-system programming)方法可以實現在系統編程,但需要配置處理器的boot引腳,不適用WSN節點等的在系統升級要求。ST提供的IAP方法,不支持Flash擴展,亦不能完全滿足用戶對產品的升級需要。本文介紹一種IAP方法,可以在應用系統中實現處理器片內Flash和片外擴展Flash固件的在線升級,可滿足WSN節點的在線固件更新與WSN在系統動態重構需要。
1STM32處理器在線編程特點
STM32F*使用Cortex-Mx內核,具有體積小、功耗低、實時性好、處理能力強、支持多種可編程IO接口的特點[3],STM32F*片內具有64~512 KB 的Flash和8~64 KB的SRAM,基于M3內核的大容量產品利用FSMC還可以擴展外部Flash。
STM32可使用ISP和IAP兩種在線編程方法。ISP方法需要通過配置boot引腳激活,使用USART接口下載程序。IAP方式通過設計者設計的操作命令進入,通過執行IAP功能程序利用MCU支持的所有通信接口(I/Os,USB,CAN,UART,I2C,SPI等)接收命令、更新數據或代碼[4]。
2IAP軟件設計
2.1Flash編程方法
STM32的片內Flash以扇區為單位設置寫保護,每扇區4 KB,根據Flash容量不同,頁大小分為1和2 KB兩種情況。復位后,Flash存儲器默認為寫保護狀態,也可通過軟件設置FLASH_CR寄存器中的LOCK位進行寫保護。在寫保護狀態下只能按序在FLASH_KEYR寄存器中寫入控制字CW1=0x45670123和CW2=0xCDEF89AB才能開啟對FLASH_CR的訪問權限。Flash需要擦除后再編程,最小擦除單位為頁,也可以整片擦除,編程后將Flash進行上鎖保護以防止意外寫入。STM32通過FSMC對NorFlash進行編程,由FSMC的NorFlash控制器進行管理和控制,片外NandFlash的編程方法類似于片內Flash[5,6]。本方法采用按頁擦除的方式。片內Flash編程函數采用(頁號+頁內偏移)形式的邏輯地址,處理器使用線性物理地址訪問片內Flash,需要將其轉換成邏輯地址,兩者之間的關系為:物理地址=Flash基地址+頁地址+頁內偏移。具體可由式(1)得出:
(1)
其中Oreal表示Flash基地址偏移,Waddr為實際寫入地址,Fbase為Flash基地址,Pno為頁號,Psize為頁容量,Poffset為頁內偏移,‘’為取余,Premain為頁內剩余的半字容量。
片外NorFlash使用物理線性地址[7],片外NandFlash的編程函數采用(單元號:塊號:頁號)形式的邏輯地址,編寫NAND_ADDRESS結構體,通過配置結構體確定寫入位置。
2.2IAP設計思路

圖1 User Flash空間分配
將User Flash劃分為三個區域,Boot區、File區和Code區[8,9],Boot區用于存放IAP相關功能程序[10]:基本硬件驅動程序、Flash操作相關程序、通信接口管理程序、通信協議棧等,在線升級禁止對該區域進行擦除與寫操作。File區用于存放文件記錄表,大小為一頁,本文只有一條記錄,存放了應用程序的文件名和起始地址。Code區存放WSN相關功能程序、用戶其它應用程序。STM32F*中的用戶程序塊劃分如圖1所示。程序在更新過程中若出現掉電,失聯等情況,系統仍可運行Boot區的代碼,保證系統的穩定性。
在需要更新程序時,發送方服務器通過選定的通信方式向特定設備地址(ID)發送升級命令,升級命令采用RTU形式的ModBus報文傳輸,選擇功能碼42H作為升級報文,命令字CV=01作為升級命令,如表1所示。設備收到升級命令后向用戶發送身份驗證報文,在成功驗證身份后可獲得對設備的升級權限,被尋址設備進入IAP功能,以此提高程序更新的安全性。采用ModBus協議進行數據傳輸,設備在收到2 KB有效數據時進行Flash編程操作。

表1 命令報文
對于一個任意長度的數據文件,發送方服務器利用報文組織函數Protocol_Packed(*pBuffer)將其拆分成n個128 bit的信息塊,并為每個信息塊添加首部和校驗值組織成138 bit的RTU形式的ModBus數據幀[10],*pBuffer為數據文件的首地址。通過應答機制實現發送方與接收方的速度傳輸協調,實現流量控制。
接收方利用解包函數Protocol_Unpacked()得到有效數據,并將其存儲到SRAM的緩沖池中,緩沖池大小為2 KB,緩沖池滿即將數據寫入Flash。利用Flash識別函數Flash_rec(Flash_ID,Psize)識別片內Flash、擴展NorFlash和NandFlash,Flash_ID為Flash類型號,0表示片內Flash,1表示NandFlash,2表示NorFlash,Psize為頁大小。通過配置不同的存儲器訪問時序參數匹配不同Flash的寫入速度,考慮到最大的讀/寫訪問時間,FSMC內部各部分的延遲,存儲器內部各部分的延遲,NorFlash由式(2)、式(3)得出,NandFlash由式(2)、式(3)、式(4)得出。
(2)
(3)
(4)
其中,Twc,Trc為所選芯片的寫/讀操作周期長度,Twp為所選信號的寫信號持續長度,TAVQV為地址有效到數據有效的時間域,Tsu(Data_NE),Ttv(A_NE)為STM32特征參數,分別表示從數據有效到FSMC片選有效與從FSMC片選有效到地址有效。
根據Flash_rec的識別的結果調用不同的Flash寫函數STMFLASH_Write(WriteAddr,*pBuffer,NumToWriter)寫入Flash,若為片內Flash,WriteAddr需由式(1)轉換為邏輯地址,若為NorFlash,WriteAddr為物理線性地址,若為NandFlash,WriteAddr為NAND_ADDRESS結構體指針。*puffer為數據指針,NumToWriter為數據長度。利用STMFLASH_Read(WriteAddr,*pBuffer,NumToRead)進行回讀校驗,在數據傳輸完畢后調用庫函數中的上鎖函數設置寫保護并返回成功標志,完成本次升級。
2.3數據傳輸協議及校驗機制
數據傳輸使用的協議為半雙工傳輸的send-ack模式,基于ModBus協議[11]的RTU傳輸模式,利用留給用戶的功能編號41H~48H定義:傳輸命令與應答等用戶報文。選擇功能碼F_C=65(41H)作為傳輸命令與應答報文,其報文格式如表2、表3所示。

表2 數據幀報文

表3 響應幀報文
發送方服務器發送數據幀,并在成功發送一幀后將幀序號自動增加,范圍為0~65 536。其數據幀長度最短為11字節,最長為259字節。
本方法采用循環冗余校驗(CRC)和延時重傳機制保證數據的可靠性。接收方調用Protocol_Unpacked()函數進行解包操作得到幀序號、有效數據長度、有效代碼、校驗值。于此同時計算數據幀的CRC16校驗碼,以幀序號和校驗值作為解包成功的判定條件。若解包成功,則發送響應報文,提示發送方準備發送下一幀,若解包失敗,則不發送響應報文,發送方在超過1000 ms仍未收到響應就會啟用重傳機制,在連續發送十次數據仍得不到響應報文的情況下則執行報錯機制。
2.4程序設計
在keil Vision4 IDE中使用C語言進行程序設計,使用ST為用戶提供的庫函數進行軟件編寫,本方法所需的目標代碼bin文件由keil內部的fromelf工具進行轉換。IAP軟件的功能主要包括ModBus報文的接收處理和響應報文的發送,Flash的擦除和重寫等,Flash編程函數流程如圖2所示,軟件的協議傳輸流程如圖3所示。

圖2 Flash編程函數流程圖

圖3 協議傳輸流程圖
利用通信接口中斷接收更新代碼,通過解包操作獲得有效數據字段,并將有效數據存入緩沖池,調用Flash編程函數,完成代碼的更新和維護工作。
3實驗驗證
選擇芯片核心為STM32F103ZET6的設備使用 IAP方法進行下載升級,為設備外接藍牙模塊,外接AM29LV800BB與K9F8G08U0M-P兩塊Flash芯片,分別對片內和片外的Flash進行測試,使用PC機發送測試代碼與測試數組,每組試驗經過兩次測試。代碼的BIN文件大小與測試結果如表4所示,測試數組為從0x5A開始的遞增序列,數組大小與測試結果如表5所示,表中Y表示進行了實驗測試,N表示未進行試驗測試。

表4 代碼測試結果

表5 數組測試結果
試驗結果表明,該IAP方法可以在藍牙環境下,通過軟件觸發的方式實現不同長度代碼的更新,能保證傳輸的可靠性,能夠滿足片內片外Flash程序升級的需要。
4結語
本文基于STM32芯片平臺設計了一種IAP在線升級方法,該方法使用ModBus協議,采用應答機制及延時重傳機制將代碼進行分段傳輸,能夠支持片內片外Flash的編程操作,并且無需改變硬件配置,解決了WSN中節點設備固件在線升級的問題,滿足了WSN在系統動態重構需要。而且此方法還可以適用于其它基于Cortex-Mx核的嵌入式產品。不足的是該方法只能適用于點對點的數據傳輸,日后可繼續改進,使其適用于廣播式數據傳播。
參考文獻
[1] 朱曉瑞,陶先平,謝宏偉,等.一種面向無線傳感網應用重編程的邏輯式編程語言[J].軟件學報,2014,25(2):326-340.
[2] Gursel Serpen,Jiakai Li.AI-WSN:Adaptive and Intelligent Wireless Sensor Network[J].Procedia Computer Science,2013(20):406-413.
[3] 李鵬.簡化家電和工業控制應用開發任務意法半導體(ST)發布STM32F0系列[J].家電科技,2012(6):28.
[4] 張舞杰,南亦民.基于STM32F103VB的應用編程技術的實現[J].計算機應用,2009,29(10):2820-2822.
[5] Guanying Wu,Ping Huang.Reducing SSD access latency via NAND flash program and erase suspension[J].Journal of Systems Architecture,2013,12(2):345-356.
[6] 劉洲洲,張捷.基于嵌入式系統的NANDFlash壞塊處理和FMM實現[J].計測技術,2006(6):42-44.
[7] 鄧中亮,孫靜.嵌入式設備在線系統升級的設計與實現[J].計算機工程與設計,2009,30(13):3085-3087.
[8] 蔣建春,王正樹,馮輝宗,等.基于軟件觸發的在應用編程在線升級技術的設計與實現[J].計算機應用,2012(6):1721-1723.
[9] 彭亮,沈安文,張寧,等.基于無線IAP的工業嵌入式系統升級技術應用[J].儀表技術與傳感器,2013(12):36-38.
[10] 蔡利平,任家富,童銳,等,基于ARM的Nand Flash啟動分析與移植[J].計算機工程與設計,2012(3):931-935.
[11] 劉桂臣,陽憲惠.Modbus報文有線/無線混合傳輸的實現[J].清華大學學報:自然科學版,2008(S2):1844-1847.
ONLINE SYSTEM UPGRADING METHOD FOR WSN NODE FIRMWARE BASED ON STM32 PROCESSOR
Jiang CunboJiao Yang
(SchoolofInformationScienceandEngineering,GuilinUniversityofTechnology,Guilin541004,Guangxi,China)
AbstractIn order to meet the needs of function upgrade and system reconstruction of the node devices in WSN (wireless sensor network), we studied the Cortex-Mx core-based renewing and upgrading method for embedded system firmware IAP. It triggers the upgrade by using the way of command requests plus authentication, splits the code into 128 byte information block by utilising partition function and then composes them into ModBus packet with 138 bytes for transmission. It employs CRC for data checking, adopts response mechanism to achieve flow control, utilises Flash recognition function to distinguish different Flash types, and applies Flash writing function to meet the programming needs of internal and external Flash, different parameters of NorFlash and NandFlash. By testing with experiment, this scheme can realise the upgrade of WSN nodes firmware and the need of WSNs in dynamic system reconstruction.
KeywordsEmbedded systemWSNOnline firmware upgradeModBus protocol
收稿日期:2014-12-15。蔣存波,教授,主研領域:嵌入式系統及應用,自動檢測與控制裝置,計算機應用。焦陽,碩士生。
中圖分類號TP368.1
文獻標識碼A
DOI:10.3969/j.issn.1000-386x.2016.05.056