基于GPRS的嵌入式系統軟件的遠程在線升級
隨著電子技術、計算機技術和通信技術的迅猛發展,嵌入式系統已經廣泛應用于工業、軍事、通信、信息家電等領域,但是面對新技術的不斷涌現和對系統功能、性能以及規模要求的不斷提高,開發者必須能夠針對客戶的需求及時對系統進行升級或維護,以延長系統使用周期,改善系統性能,增強系統適應性。
傳統的嵌入式系統升級方式通常由維護人員到達設備現場,開箱重寫或者更換FLASH存儲部件,當設備數目龐大并且分布范圍廣泛時,這種升級維護方式的工作量將非常大,而且耗費的時間長、成本高。近年來通過以太網和在FLASH上建立TFFS文件系統的方法,能很好地解決批量升級的問題。但對于野外偏遠地區或海上等有線網絡無法到達的地方,此方法也難以實現。
在此提出基于GPRS的嵌入式系統軟件的遠程在線升級方案,利用GPRS網絡無需現場布線和“實時在線”、“按量計費”、“快捷登錄”、“高速傳輸”的特點,只要遠程終端在移動公網覆蓋的范圍內,均可實現升級數據的遠程傳輸;為了克服無線網絡相對有線網絡因地形或環境等因素造成誤碼或掉線的不足,采用應答機制與斷點續傳技術,確保數據傳輸的準確性和可靠性;通過對嵌入式芯片內部FLASH存儲器的存儲空間進行劃分和升級文件傳輸的數據格式進行定義,再利用IAP技術實現系統軟件的在線升級,較好地解決了數量龐大并且分布范圍較廣的設備在線升級或維護的問題。
1 系統結構
系統結構如圖1所示,由服務器和遠程終端組成,其中遠程終端包括基于ARM內核的嵌入式控制芯片(以下簡稱ARM芯片)和GPRS Modem模塊,兩者之間通過RS 232總線連接;服務器與遠程終端通過GPRS進行通信。用戶需要升級遠程終端時,首先將服務器端的升級標志位置1,通過GPRS將升級標志位傳給遠程終端,遠程終端上電后將自動檢測升級標志位,若標志位為1表示需要升級,否則不升級。然后,服務器將升級文件通過GPRS透明的下載到遠程終端,實現數據的傳輸及更新,從而達到遠程終端的嵌入式系統軟件的在線升級的目的。
2 遠程終端軟件升級的關鍵技術
2.1 FLASH存儲器編程
遠程終端的升級主要是對ARM芯片內部FLASH存儲器的數據進行擦除及下載,目前很多ARM芯片支持多種方式對FLASH進行編程,ARM芯片內部FLAsH存儲器的編程有JTAG,ISP和IAP三種方式:JTAG編程主要用于產品開發期的調試;ISP需要提供一定的硬件資源和中止應用軟件的運行,適用于便攜式設備的升級;IAP與ISP非常相似.主要區別是IAP允許在應用程序正常運行的情況下,對FLASH存儲器中另外一段程序進行讀/寫操作,甚至可以控制對某段、某頁的讀/寫操作,為數據存儲和固件的自動升級帶來了極大的靈活性。該方案通過GPRS網絡傳輸升級文件的程序代碼,利用ARM內部的FLASH存儲器及其IAP編程,實現終端的嵌入式系統軟件的遠程無線在線升級。有關IAP的命令碼、狀態碼和命令詳解以及IAP功能的詳細應用見參考文獻。
2.2 遠程終端的程序設計
為了在線升級,將ARM芯片內部FLASH存儲器按圖2所示劃分為啟動區、用戶代碼跳轉區、用戶代碼1區和用戶代碼2區。其中啟動區用于存放系統初始化和啟動代碼,用戶代碼跳轉區用于存放跳轉到相應用戶代碼區的指令.用戶代碼1區和用戶代碼2區用于交替存放當前終端正在執行的用戶代碼和升級的用戶代碼。若當前終端執行的用戶程序存放在1區,則將接收到的升級程序存放到2區;待升級程序接收結束后,更改用戶代碼跳轉區的指令,使其指向升級程序,即用戶代碼2區;此后用戶代碼2區的程序成為當前終端指向的用戶程序,而用戶代碼1區則用于下次升級代碼的存放區。
遠程終端上電后首先進入啟動區進行系統的初始化;接著終端從片外的E2PROM中讀取升級配置,包括升級標志位、已接收到的最后一個數據包的ID等。若終端處于升級狀態,則如圖3所示,向服務器發所要升級數據的指令,而且指令中將包含終端上次已接收到的最后一個數據包的ID,這樣可以避免已接收的數據包的重復發送,并實現續傳的功能。終端從GPRS網絡接收數據包后對數據包進行解析和校驗判斷,并與服務器形成一問一答的應答機制。FLASH中進行數據編程的最小單位是頁(512個字節),當接收到的升級數據達到1頁后.通過IAP進行編程。如果當前運行的用戶程序代碼在1區,則把升級數據保存到2區,否則保存到1區。編程成功后,將最后一條數據包的ID保存到E2PROM中。所有升級數據發送結束并編程成功后,通過IAP修改用戶代碼跳轉區的指令,使遠程終端運行新的升級代碼
3 服務器端的軟件設
3.1 升級文件傳輸的數據格式
為了達到快速準確升級的目的,首先對原始的升級代碼(Intel Hex文件)進行打包,然后加人相應的數據包ID號和校驗碼,并定義數據包長度≤256個字節,以適應G:PRS通信方式對數據包長度的要求,避免出現頻繁掉線和發送不出去的問題。具體的數據包格式如下:數據包格式:PacklD+起始地址+長度+數據+校驗碼;PackID:一個完整的數據包為一個記錄,下一個數據包的記錄號自動加1;起始地址:燒寫數據的FLASH首地址。即數據部分中包含的第一條數據的記錄地址+線性擴展地址;長度:該包數據部分的字節數;數據:同一個擴展線性地址記錄內且地址連續的數據記錄的數據域。當讀到一個擴展線性地址記錄號后,將此擴展線性地址記錄號內的數據區域打包成256個字節之內的數據包,超過256個字節或讀到下一個擴展線性記錄號時則另起一個新的數據包;校驗碼:CRC循環冗余校驗碼。
3.2 服務器端主要程序流程
服務器端主要程序流程圖如圖4和圖5所示。服務器先把升級文件的路徑配置完畢,并將要升級的目標程序代碼按照第3.1節所示的數據包格式進行打包。并對每個數據包進行編號。
接著如圖4所示,服務器發送升級指令,并通過GPRS網絡透明傳輸到遠程終端。如果當前運行的用戶程序代碼在1區,則將2區升級數據發送給遠程終端,否則將2區升級數據發送給遠程終端。由于地形和環境因素的影響,GPRS網絡在遠程通信過程中可能出現阻塞或斷開的情況。
如果服務器在一定的時間內沒有收到遠程終端的應答信號,則重發,如果三次重發失敗則保存成功接收到的數據塊ID號和數據校驗碼,進入斷點續傳。升級文件傳輸完畢則發送跳轉指令,使遠程終端執行新的程序代碼。
3.3 服務器端西己置表
服務器端升級配置表中重要字段的配置如下:
這些字段將服務器和遠程終端緊密地聯系起來,使得編程思路更加清晰,Update ID標志了用戶程序目前所在存儲區;Update User Zone為升級做好文件配置準備工作,LastOrder為斷點續傳做好準備,保證整個程序的緊密性以及可靠性。
4 結 語
該方案采用應答機制、斷點續傳、CRC校驗等技術,充分利用ARM芯片內部FLASH存儲器資源,通過GPRS網絡,實現對ARM嵌入式終端的系統軟件進行遠程在線升級,解決了大型分布式監控系統遠程嵌入式終端系統軟件的在線升級和維護問題。該方案已經成功地應用在南京航道局的航標自動監測系統中,該系統有600多盞安裝有嵌入式終端的航標燈,對該系統進行在線升級僅耗時20 min,且一次性升級成功。實踐證明,該方案的實施可有效降低工程復雜度,縮短升級時間,節約升級、維護成本,同時具有升級成功率高和升級速度快的特點。

提交
超越傳統直覺,MATLAB/Simulink助力重型機械的智能化轉型
新大陸自動識別精彩亮相2024華南國際工業博覽會
派拓網絡被Forrester評為XDR領域領導者
智能工控,存儲強基 | 海康威視帶來精彩主題演講
展會|Lubeworks路博流體供料系統精彩亮相AMTS展會