牛軍浩 張少壯 馮怡凱 覃小梅 蒙遠鍵


摘? 要:嵌入式產品投入市場后,由于需求的改進或者應用程序BUG的修補,仍需要對產品上的應用程序進行維護、更新,但工程師到現場更新應用程序比較麻煩,嵌入式軟件的遠程在線升級功能可以使工程師不用親臨現場,直接將編譯好的程序通過網絡傳輸給產品,產品上的無線模塊接收到應用軟件程序包之后自動保存到程序區,由此實現應用程序的遠程更新。本課題重點研究和實現了STM32的應用程序遠程升級功能模塊的方案,主控板通過無線模塊與服務器端連接,當主控板運行應用程序時,服務器端可以查看主控板當前的應用軟件狀態,并向主控板發送升級請求,主控板接受請求后自動進入引導升級程序,接收來自服務器端的應用程序包,完成應用程序的更新。
關鍵詞:遠程升級;網絡傳輸;固件更新
中圖分類號:TP368.1;TN929.532? ? ? 文獻標識碼:A 文章編號:2096-4706(2019)23-0055-03
STM32 Firmware Remote Upgrade System Based on GPRS
NIU Junhao,ZHANG Shaozhuang,FENG Yikai,QIN Xiaomei,MENG Yuanjian
(Guilin University of Electronic Technology,Guilin? 541004,China)
Abstract:After the embedded product is put into the market,due to the improvement of the requirement or the repair of the application program BUG,the application program on the product needs to be maintained and updated. But it’s hard for engineers to update the application on site,the remote on-line upgrade function of the embedded software can enable the engineer to transmit the compiled program directly to the product through the network without being on-site,and the wireless module on the product is automatically saved to the program area after the application software package is received,thereby realizing the remote update of the application program. This project focuses on the research and implementation of the STM32 application remote upgrade function module. The main control board is connected with the server end through the wireless module,and when the main control board runs the application program,the server side can view the current application software state of the main control board,and sends an upgrade request to the main control board,the master control board automatically enters the boot upgrade program after receiving the request,receives the application package from the server side,and finishes the update of the application program.
Keywords:remote upgrade;network transmission;firmware update
1? 緒論
1.1? 課題的背景及意義
如今一些產品投放市場后仍需要工程師親臨現場維護,部分是由于應用軟件的BUG需要修補,部分是用戶需求的改進,還有部分是市場需求的提高等等,諸多原因都需要更新應用程序,若可以遠程對應用程序進行更新,則可以節省很多的人力、物力以及時間,給產品維護帶來很大的方便。尤其是對于一些無人值守的產品,只需要在遠程給產品發送升級申請,產品對版本號進行判斷后自行選擇是否進行更新,無需人為操作,更新完成后直接運行應用程序,智能化使產品維護更加便捷。
1.2? 應用軟件遠程升級功能的研究現狀及發展趨勢
1.2.1? 應用軟件遠程升級的研究現狀
應用軟件遠程升級功能目前大多是依賴于無線通信,單片機可以通過各種接口與無線模塊進行數據傳輸,如今網絡已覆蓋國內大部分地區,通信穩定、速度快、可永遠在線等優點為應用軟件的傳輸提供了十分良好的環境。
借由無線模塊將應用軟件包傳輸到單片機上,單片機即可執行自我升級,也就是在應用升級(In Application Programming,IAP)。當單片機在運行程序的時候可以提供一種改變FLASH數據的方法,也就是說程序自己可以往程序存儲器里寫數據或修改程序。這種方式的典型應用是用一小段代碼來實現程序的下載。
1.2.2? 應用軟件遠程升級的發展趨勢
應用軟件遠程升級的未來發展趨勢是向著智能化的方向發展。無需人為操作,一鍵升級,自動備份老版本程序,防止突發故障丟失升級程序包,使得升級的可靠性得到很好的保障。這對于產品應用程序的維護和更新均有有很大的意義。
2? 應用軟件遠程升級相關技術與原理分析
2.1? C#搭建Socket服務器平臺
Socket是面向客戶/服務器模型設計的,針對客戶和服務器程序提供不同的Socket系統調用。客戶隨機申請一個Socket(相當于一個想打電話的人可以在任何一臺入網電話上撥號呼叫),系統為之分配一個Socket號;服務器擁有全局公認的Socket,任何客戶都可以向它發出連接請求和信息請求。.net平臺封裝了建立Socket通信所使用的類,在VS2010上利用C#語言可以很方便地把服務器搭建起來。
2.2? TCP/IP協議
Transmission Control Protocol/Internet Protocol,即傳輸控制協議/因特網互聯協議,又名網絡通訊協議。簡單來說:TCP控制傳輸數據,負責發現傳輸的問題,一旦有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地,而IP是負責給因特網中的每一臺電腦定義一個地址,以便傳輸。相較于UDP協議,TCP傳輸速度比較慢,但其可靠性較高。
2.3? CRC校驗
CRC(Cyclic Redundancy Check)即循環冗余校驗碼,是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,并將得到的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。
2.4? IAP技術
IAP(In-Application Programming)即在應用編程,指單片機可以在系統中獲取新代碼并對自己重新編程,即可用程序來改變程序。單片機通過串口接收新代碼,將其寫入對應的FLASH分區,設置地址偏移并移動PC指針,使程序在對應的分區內運行。
將FLASH的主存儲器分成五個部分,最初的區域為BootLoader區(起始于0x08000000),這里放置BootLoader程序,由JTAG燒錄,其作用是接收應用程序包、備份應用程序、存儲應用程序等。一般情況下,程序文件從此地址開始寫入;其次是應用程序區,應用程序主要存放在這個地址段,升級完成后將PC指針指向該地址段的首地址,使應用程序在這里運行;再往后是應用程序的備份區,為防止升級過程中出現故障,所以在FLASH中開辟出一片區域將當前版本的應用程序存儲起來,當終端重新上電或者升級超時之后再將APP從中恢復出來,以免系統丟失應用程序無法正常工作;隨后是公共指令區,一些指令、標志將會存在這片區域,應用程序或者BootLoader都可以訪問這片區域,如升級標志,進入升級之前在應用程序中將升級標志置1,進入BootLoader升級成功之后將其置0,系統去讀這個標志的時候就知道將要運行哪個區域的程序了。
3? 系統整體框架
系統整體的框架如圖1所示,通過服務器端點擊按鍵進行操作,打開服務器,等待無線模塊的連接。無線模塊與服務器端連接上之后,點擊按鍵通過Socket給無線模塊發送請求(包含版本號),無線模塊將服務器端傳輸過來的信息通過串口發送給單片機。當接收到升級請求時,單片機在FLASH公共命令區寫下升級標記并告知服務器端,隨后跳轉至BootLoader程序。若單片機進入了BootLoader程序,點擊開始升級的按鍵之后,服務器端讀取應用程序文件,將其發送給終端,BootLoader程序接收這個程序包,并對其進行校驗、保存。為保證數據的可靠傳輸,采用Ymodem協議進行文件的傳輸,單片機要先給服務器端發送請求,服務器端才開始傳輸文件,等待終端收到數據包并且校驗通過之后,終端會進行應答,此時服務器端才開始發送下一幀數據。應用程序升級成功后,BootLoader才會置位FLASH公共命令區中的標記,將PC指針指向APP程序區的首地址。
3.1? 服務器
服務器端的主要功能是將應用程序文件通過網絡發送給終端,并觀察終端應用程序升級的過程中每一個階段的狀態。在Visual studio 2010中建立一個窗體,搭建友好的人機交互界面,利用.net平臺上封裝好的Socket類庫新建一個服務器。
各個階段終端反饋回來的信息都顯示在服務器端的消息窗口上,如圖2所示,如此可以直觀地了解終端的各個狀態。
3.2? 終端設計
3.2.1? Bootloader
終端負責接收來自服務器端的升級請求,進行判斷之后進行應答,能對當前應用程序進行備份與恢復,成功升級以及應對升級過程中的突發事件。
在FLASH中的公共指令區存放了一個切換程序的標志,保證BootLoader和APP都能訪問。系統上電之后首先會在BootLoader程序中讀出這個標志,若判定要進入APP程序,則檢查APP程序區存放的棧頂地址是否合法(中斷向量表中的第一個放的是棧頂地址),只有APP程序的棧頂地址合法的情況下才會去執行APP,否則就從備份區中把上一次備份的APP調出來執行。將PC指針指向APP程序的起始地址,使程序在APP程序中運行。
應用程序的備份與恢復是一樣的過程,備份要求從APP程序區將數據讀取出來,保存到備份區,而恢復則是把數據從備份區讀出來,保存到APP程序區。
在BootLoader中接收數據時,會把數據的長度length寫入FLASH中,在進行數據的備份和恢復時,去訪問FLASH中指定數據區域的首地址,讀取逐個地址的數據,再逐個寫到備份區或者APP程序區中,直到讀出的數據長度滿足等于length時,說明已經完整地讀取出了APP數據包,并成功寫入指定分區。清除備份標志或者恢復標志,成功完成備份或恢復。
數據包傳輸結束之后,服務器端會發送一個EOT信號,此時數據傳輸進入第三階段,收到這個信號時,除了回復應答信號之外,還要發送請求,等待服務器端發送全零數據包,收到這個全零數據包意味著所有數據已經成功傳輸。每次接收數據都判斷是否超過10秒,計超過的次數,當超過6次(1分鐘)則判定為升級超時。
3.2.2? APP
封裝了一個函數加入到APP中,在APP程序中,設置程序起始地址和中斷向量表偏移,利用串口與無線模塊連接,在程序中將串口傳過來的數據緩存起來,調用封裝好的Request函數,解析緩存區中的數據,即可進行應用程序的升級。Request函數的具體流程首先在數據緩存區中找到數據頭,數據頭由0xAA和0xF6兩個字節組成,第三個字節為功能指令,這里定義0x01為升級指令,第四個字節為新的APP的版本號,最后一個字節為和校驗,數據頭找到之后,往下找到和校驗,將數據頭到和校驗之間(包含數據頭,不包含校驗)的數據相加,結果取低八位,拿去與和校驗進行對比,若一樣,則表示數據沒有出錯,判斷功能指令處是否為0x01,確定為0x01,則提取出新的APP版本,與當前的版本號(保存在FLASH中)進行對比,若新的版本號大于當前版本號,將備份標志和升級標志置1,記錄新的版本號,將這些信息存入FLASH中,舒適化堆棧指針,使其指向BootLoader的首地址,執行BootLoader程序,進行應用軟件升級。
4? 結? 論
完成的工作:成功進入BootLoader并進行備份,服務器端請求升級,進入BootLoader并成功執行備份操作。舊版本的APP讓兩個LED快速循環閃爍,BootLoader中令一個LED快速閃爍,新版本的APP讓兩個APP慢速循環閃爍。在終端可以看到由兩個LED快速循環閃爍變為一個快速閃爍,表明終端以進入BootLoader程序。成功升級,實現遠程、在線升級應用程序,升級成功自動運行最新的程序,升級成功率為90%以上。數據傳輸完成后,服務器端會有提示:“APP成功升級至新版本”,終端的表現為從BootLoader(一個LED快閃)轉化成新的APP版本(兩個ALED循環閃爍)。升級超時、升級失敗、校驗失敗等故障,超過一分鐘不給終端發送程序包,服務器端窗口提示超時,自動從備份區中恢復并執行舊版本程序。
存在的問題:單次只能升級一個終端的應用程序,無法進行批量升級。
未來的研究方向:優化服務器端程序,實現多線程操作,同步升級多個終端;在服務器端后臺進行優化,自動判斷是否可以升級,并確定發送程序包。
參考文獻:
[1] 曾自怡,李靖沙.GPRS通信技術在五凌電力水情測報系統中的應用 [J].水電站機電技術,2019,42(9):29-31.
[2] 鄭歡歡,錢宇坤.基于GPRS的遠程抄表系統的設計 [J].工業計量,2019,29(4):23-26.
[3] 李坊玉.STM32 ST-LINK Utility應用功能及使用方法(三) [N].電子報,2019-09-15(007).
[4] 劉定良,陳文科.基于GPRS和PLC的大學校園配電網遠程監控系統設計 [J].智庫時代,2018(47):163-164.
[5] 謝世春,陳露,李繼揚.大數據時代下計算機網絡信息安全問題 [J].電子技術與軟件工程,2019(19):178-179.
作者簡介:牛軍浩(1981-),男,漢族,河南林州人,就職于測控技術與儀器系,主任,高級實驗師,工學碩士,研究方向:智能儀器、自動測試總線。