杭州浙達精益機電技術股份有限公司 鄭俊翔 陳朱峰 朱 偉
隨著4G網絡的普及,使野外實時監測設備得以方便的實現,但是安裝野外的設備存在著兩個問題:(1)設備一般安裝的比較偏遠;(2)設備一般成分布式排布,每臺設備間相距比較遠;這樣使設備的系統升級極不方便。文章提出了通過4G網絡實現以STM32為微控制器的設備的遠程系統升級方案。從而實現遠程對野外設備的系統升級,大大的提高了生產效率,并且可以及時對設備運行過程中發現的bug進行修復。
在鐵軌斷軌監測,水源水質監測,輸油管道結構健康監測等監測系統中,都需要在野外安裝設備,并且存在儀器多,分布廣等現象,同時個別監測系統,還會存在著分布式設備之間彼此需要協調交互工作。當出現各種原因,需要對儀器設備固件進行升級時,需要工作人員到現場進行升級,將會嚴重影響工作效率,并且需要消耗大量的人力物力。本文提出的基于4G網絡和STM32的遠程升級方案,能有效的解決人員到現場升級設備,并且能夠更快更便捷的實現系統的升級,極大的減少了生產成本。
遠程升級儀器是基于STM32微控制器,整個儀器的硬件組成包括太陽能供電,電源管理系統,GPRS_4G通信部分,EEPROM外部存儲器和其他用戶功能模塊。圖1所示為升級功能部分的的主要硬件組成。

圖1 升級功能模塊硬件框圖
STM32通過串口和GPRS_4G模塊進行連接。GPRS_4G通信模塊可以實現串口到網絡的雙向數據透明傳輸,可以通過此模塊實現發送數據到網絡上指定的服務器。模塊也可以接收來自服務器的數據,并將信息通過串口發送至STM32,如圖2所示。
EEPROM(Electrically Erasable Programmable read only memory)是指帶電可擦可編程只讀存儲器。是一種掉電后數據不丟失的存儲芯片。做為外部的一個獨立存儲器,可以在程序升級前后保存系統配置數據,保證系統升級前后數據的一致性。同時也可以為升級提供一些輔助標志功能。
IAP即應用編程,本系統中設計兩個程序:Bootloader(引導加載程序)程序和APP(應用程序)程序。Bootloader程序不執行應用的用戶功能操作,只負責接收服務器發送過來的系統升級的數據,并跳轉到對應的APP程序。APP程序為用戶功能代碼,執行用戶功能操作,同時可以接收服務器的升級請求,跳轉到Bootloader程序進行升級操作。

表1 STM32啟動方式選擇

圖2 4G網絡傳輸示意圖
STM32有三種啟動模式,用戶可以通過設置BOOT0和BOOT1的引腳電平狀態,來選擇復位后的啟動模式,如表1所示。

圖3 FLASH存儲器空間分配
STM32的FLASH地址起始于0x08000000,正常工作模式下,程序文件就從此地址開始寫入。那么棧頂地址存放于0x8000000處,而“中斷向量表”的起始地址為0x8000004處。當STM32遇到復位信號后,則從“中斷向量表”處取出復位中斷服務入口地址,繼而執行復位中斷服務程序,然后跳轉__main函數。
本系統中使用STM32的FLASH存儲器大小是512K,此空間被劃分為三大塊,分別用于運行Bootloader程序,APP程序1,APP程序2,如圖3所示。
遠程升級系統,存在著一定的不確定性,如通信中斷,儀器缺電等情況,這些情況都會導致系統升級失敗,則在升級的過程中,不能把原來的APP程序給擦除了。所以用戶功能代碼區分為APP程序1和APP程序2兩個區域。其中一個區域用于當前運行的程序,另外一個區域用于裝載升級程序代碼。

圖4 Bootloader 程序流程圖
因為Bootloader程序只負責升級部分代碼,代碼量相對APP程序來說較小,這里分配的地址為0x8000000至0x8012000區間,大小為72K。而APP程序為用戶代碼,需要實現各種實際應用中的功能,代碼量相對較大。則把FLASH剩余的空間對半分,分別分配給APP程序1和APP程序2,分配地址為0x8012000至0x8049000和0x8049000至0x8080000,各220K大小的存儲空間。
遠程升級系統開機啟動時,首先運行的是Bootloader程序。程序首先在外部EEPROM里面讀取當前APP程序運行的FLASH存儲器空間標志信息,再檢測程序是否需要升級。當檢測到程序需要升級,則GPRS_4G模塊通過網絡從服務器上接收升級固件,并存儲到當前未被使用的APP程序存儲空間里。升級固件接收完畢后,跳轉到升級固件存儲的APP程序存儲空間,運行更新后的程序。如果沒有檢測到升級,則直接跳轉到當前APP程序存儲器空間,運行當前APP程序,流程圖如圖4所示。

表2 通信協議表和示例
當升級過程中出現異常,如升級過程中,網絡通信出現中斷,長時間接收不到升級固件,則直接跳回到當前APP程序存儲器空間,運行當前的APP程序。

圖5 APP程序流程圖
APP程序流程圖如圖5所示,首先復位存在外部EEPROM里的升級請求信號,然后在EEPROM里面置位當前使用FLASH的標志位。這樣下次再進入升級程序后,可以根據EEPROM里的FLASH的使用標志信息,判斷升級固件應存放那塊APP程序區域。最后進入用戶程序,用戶程序實時監聽是否有升級請求,當有接收到升級請求信號后,跳轉到Bootloader程序。
分布式系統中,由于儀器眾多,在進行固件升級時,需要遵循一定的通信協議,才能正確的進行升級。服務器發送的數據分9部分,如表2所示。
為了降低遠程傳輸數據出現的誤碼率,把升級固件拆分成小包進行傳輸。包的長度可以根據實際使用的情況,在通信協議里進行設置,如在表2的例子,固件數據包的長度設置為1024個字節。索引號表示當前傳輸的數據包是第幾包,當出現傳輸錯誤,CRC32效驗不正確時,終端儀器會返回錯誤接收的數據包的索引號,服務器根據索引號,重新發送此索引號的數據包。當終端儀器正確接收完當前包數據后,給服務器返回應答信號,直到固件升級完成。
結束語:本文著重講述了基于4G網絡和STM32遠程系統升級的硬件設計框架,IAP的遠程升級原理,系統的程序邏輯設計和固件升級的通信協議。在野外分布式監控系統中,該遠程升級系統的運用,極大的提高了生產效率。此設計方案也可以運用到其他的一些需要遠程操作的應用場合。