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