杭州浙達精益機電技術股份有限公司 鄭俊翔 陳朱峰 朱 偉
隨著4G網(wǎng)絡的普及,使野外實時監(jiān)測設備得以方便的實現(xiàn),但是安裝野外的設備存在著兩個問題:(1)設備一般安裝的比較偏遠;(2)設備一般成分布式排布,每臺設備間相距比較遠;這樣使設備的系統(tǒng)升級極不方便。文章提出了通過4G網(wǎng)絡實現(xiàn)以STM32為微控制器的設備的遠程系統(tǒng)升級方案。從而實現(xiàn)遠程對野外設備的系統(tǒng)升級,大大的提高了生產(chǎn)效率,并且可以及時對設備運行過程中發(fā)現(xiàn)的bug進行修復。
在鐵軌斷軌監(jiān)測,水源水質監(jiān)測,輸油管道結構健康監(jiān)測等監(jiān)測系統(tǒng)中,都需要在野外安裝設備,并且存在儀器多,分布廣等現(xiàn)象,同時個別監(jiān)測系統(tǒng),還會存在著分布式設備之間彼此需要協(xié)調交互工作。當出現(xiàn)各種原因,需要對儀器設備固件進行升級時,需要工作人員到現(xiàn)場進行升級,將會嚴重影響工作效率,并且需要消耗大量的人力物力。本文提出的基于4G網(wǎng)絡和STM32的遠程升級方案,能有效的解決人員到現(xiàn)場升級設備,并且能夠更快更便捷的實現(xiàn)系統(tǒng)的升級,極大的減少了生產(chǎn)成本。
遠程升級儀器是基于STM32微控制器,整個儀器的硬件組成包括太陽能供電,電源管理系統(tǒng),GPRS_4G通信部分,EEPROM外部存儲器和其他用戶功能模塊。圖1所示為升級功能部分的的主要硬件組成。
圖1 升級功能模塊硬件框圖
STM32通過串口和GPRS_4G模塊進行連接。GPRS_4G通信模塊可以實現(xiàn)串口到網(wǎng)絡的雙向數(shù)據(jù)透明傳輸,可以通過此模塊實現(xiàn)發(fā)送數(shù)據(jù)到網(wǎng)絡上指定的服務器。模塊也可以接收來自服務器的數(shù)據(jù),并將信息通過串口發(fā)送至STM32,如圖2所示。
EEPROM(Electrically Erasable Programmable read only memory)是指帶電可擦可編程只讀存儲器。是一種掉電后數(shù)據(jù)不丟失的存儲芯片。做為外部的一個獨立存儲器,可以在程序升級前后保存系統(tǒng)配置數(shù)據(jù),保證系統(tǒng)升級前后數(shù)據(jù)的一致性。同時也可以為升級提供一些輔助標志功能。
IAP即應用編程,本系統(tǒng)中設計兩個程序:Bootloader(引導加載程序)程序和APP(應用程序)程序。Bootloader程序不執(zhí)行應用的用戶功能操作,只負責接收服務器發(fā)送過來的系統(tǒng)升級的數(shù)據(jù),并跳轉到對應的APP程序。APP程序為用戶功能代碼,執(zhí)行用戶功能操作,同時可以接收服務器的升級請求,跳轉到Bootloader程序進行升級操作。
表1 STM32啟動方式選擇
圖2 4G網(wǎng)絡傳輸示意圖
STM32有三種啟動模式,用戶可以通過設置BOOT0和BOOT1的引腳電平狀態(tài),來選擇復位后的啟動模式,如表1所示。
圖3 FLASH存儲器空間分配
STM32的FLASH地址起始于0x08000000,正常工作模式下,程序文件就從此地址開始寫入。那么棧頂?shù)刂反娣庞?x8000000處,而“中斷向量表”的起始地址為0x8000004處。當STM32遇到復位信號后,則從“中斷向量表”處取出復位中斷服務入口地址,繼而執(zhí)行復位中斷服務程序,然后跳轉__main函數(shù)。
本系統(tǒng)中使用STM32的FLASH存儲器大小是512K,此空間被劃分為三大塊,分別用于運行Bootloader程序,APP程序1,APP程序2,如圖3所示。
遠程升級系統(tǒng),存在著一定的不確定性,如通信中斷,儀器缺電等情況,這些情況都會導致系統(tǒng)升級失敗,則在升級的過程中,不能把原來的APP程序給擦除了。所以用戶功能代碼區(qū)分為APP程序1和APP程序2兩個區(qū)域。其中一個區(qū)域用于當前運行的程序,另外一個區(qū)域用于裝載升級程序代碼。
圖4 Bootloader 程序流程圖
因為Bootloader程序只負責升級部分代碼,代碼量相對APP程序來說較小,這里分配的地址為0x8000000至0x8012000區(qū)間,大小為72K。而APP程序為用戶代碼,需要實現(xiàn)各種實際應用中的功能,代碼量相對較大。則把FLASH剩余的空間對半分,分別分配給APP程序1和APP程序2,分配地址為0x8012000至0x8049000和0x8049000至0x8080000,各220K大小的存儲空間。
遠程升級系統(tǒng)開機啟動時,首先運行的是Bootloader程序。程序首先在外部EEPROM里面讀取當前APP程序運行的FLASH存儲器空間標志信息,再檢測程序是否需要升級。當檢測到程序需要升級,則GPRS_4G模塊通過網(wǎng)絡從服務器上接收升級固件,并存儲到當前未被使用的APP程序存儲空間里。升級固件接收完畢后,跳轉到升級固件存儲的APP程序存儲空間,運行更新后的程序。如果沒有檢測到升級,則直接跳轉到當前APP程序存儲器空間,運行當前APP程序,流程圖如圖4所示。
表2 通信協(xié)議表和示例
當升級過程中出現(xiàn)異常,如升級過程中,網(wǎng)絡通信出現(xiàn)中斷,長時間接收不到升級固件,則直接跳回到當前APP程序存儲器空間,運行當前的APP程序。
圖5 APP程序流程圖
APP程序流程圖如圖5所示,首先復位存在外部EEPROM里的升級請求信號,然后在EEPROM里面置位當前使用FLASH的標志位。這樣下次再進入升級程序后,可以根據(jù)EEPROM里的FLASH的使用標志信息,判斷升級固件應存放那塊APP程序區(qū)域。最后進入用戶程序,用戶程序實時監(jiān)聽是否有升級請求,當有接收到升級請求信號后,跳轉到Bootloader程序。
分布式系統(tǒng)中,由于儀器眾多,在進行固件升級時,需要遵循一定的通信協(xié)議,才能正確的進行升級。服務器發(fā)送的數(shù)據(jù)分9部分,如表2所示。
為了降低遠程傳輸數(shù)據(jù)出現(xiàn)的誤碼率,把升級固件拆分成小包進行傳輸。包的長度可以根據(jù)實際使用的情況,在通信協(xié)議里進行設置,如在表2的例子,固件數(shù)據(jù)包的長度設置為1024個字節(jié)。索引號表示當前傳輸?shù)臄?shù)據(jù)包是第幾包,當出現(xiàn)傳輸錯誤,CRC32效驗不正確時,終端儀器會返回錯誤接收的數(shù)據(jù)包的索引號,服務器根據(jù)索引號,重新發(fā)送此索引號的數(shù)據(jù)包。當終端儀器正確接收完當前包數(shù)據(jù)后,給服務器返回應答信號,直到固件升級完成。
結束語:本文著重講述了基于4G網(wǎng)絡和STM32遠程系統(tǒng)升級的硬件設計框架,IAP的遠程升級原理,系統(tǒng)的程序邏輯設計和固件升級的通信協(xié)議。在野外分布式監(jiān)控系統(tǒng)中,該遠程升級系統(tǒng)的運用,極大的提高了生產(chǎn)效率。此設計方案也可以運用到其他的一些需要遠程操作的應用場合。