《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于CDMA網(wǎng)絡的嵌入式設備遠程升級系統(tǒng)
基于CDMA網(wǎng)絡的嵌入式設備遠程升級系統(tǒng)
來源:電子技術應用2014年第2期
朱偉斌1,張 濤2,顧海濤2,鄧新欣2
1. 杭州電子科技大學 電子信息學院, 浙江 杭州310018; 2. 聚光科技(杭州)股份有限公司, 浙江 杭州310018
摘要: 針對利用仿真器更新程序繁瑣的問題,提出了一種全新的基于CDMA網(wǎng)絡的遠程升級解決方案。通過特殊的“常量定位”方式,實現(xiàn)引導升級合一和內(nèi)嵌到應用程序的目的。采用虛擬復位技術,簡化了升級流程。上位機通過Internet和CDMA網(wǎng)絡與終端通信,支持數(shù)據(jù)包的斷點續(xù)傳,通過查看數(shù)據(jù)窗口中解析的數(shù)據(jù)包,實時了解升級的進度。測試結果表明,該方案提高了固件升級的便捷性,降低了升級的成本,有一定的參考價值。
中圖分類號: TN92
文獻標識碼: B
文章編號: 0258-7998(2014)02-0135-04
Embedded device remote upgrade system based on CDMA network
Zhu Weibin1, Zhang Tao2, Gu Haitao2, Deng Xinxin2
1. Department of Electrical Information, Hangzhou Electronic and Information University, Hangzhou 310018, China;2. Focused Photonics(Hangzhou), Inc., Hangzhou 310018, China
Abstract: In this paper, we propose an absolutely new remote upgrade solution for embedded device based on CDMA network in order to solve the problem of fussy process in using the emulator. The method can reach the goal of the combination of bootloader and upgrading program. At the same time, they can be embedded into application program by special“constant position” pattern. What’s more, we simplify the upgrading process by adopting virtual reset technology. The upper computer will communicate with terminal via Internet and CDMA network, support breakpoint resume and can achieve the updating schedule viewing parsed packets in data window. The experimental results prove that the solution is useful to improve the facility of firmware upgrade and can reduce the cost.
Key words : embedded device; remote upgrade; virtual reset; breakpoint resume ;CDMA

    近年來,隨著計算機技術及集成電路技術的發(fā)展,嵌入式設備廣泛應用于通信、網(wǎng)絡、工控、醫(yī)療、電子等領域。隨著用戶需求的提升,設備的升級越來越頻繁。然而有些設備安裝在高空高壓環(huán)境下,作業(yè)危險性很大。因此,需要一套行之有效的設備管理及升級方案,讓操作人員可以通過無線的方式[1]進行產(chǎn)品的升級和維護。
    本文的軟件升級方案以TI公司的MSP430F5438A[2]為例,通過片內(nèi)Flash備份,引導升級合一,常量定位,虛擬復位等方式,避免了程序升級需要上電復位及設備意外掉電導致升級失敗等風險,使終端設備實現(xiàn)了軟件升級遠程化,無需引導等待,掉電可恢復,數(shù)據(jù)包可斷點續(xù)傳,穩(wěn)定可靠的目的。
1 基本原理
1.1遠程升級系統(tǒng)介紹

    CDMA2000 1X是CDMA2000第三代無線通信系統(tǒng)的第一個階段,完全兼容IS-95,采用碼分和頻分結合的多址技術。CDMA2000 1X的空中信道支持的調(diào)制方式在兼容CDMAOne的基礎上進行了極大的增強,單個用于傳輸分組數(shù)據(jù)的空中信道的最大傳輸速率可以達到307.2 kb/s,是真正意義上的第三代移動通信系統(tǒng)[3]。如圖1所示,本方案中上位機作為網(wǎng)絡服務器,將升級代碼借助Internet、CDMA網(wǎng)絡發(fā)送到遠程終端的CDMA模塊中。MSP430讀取模塊中的緩存,存入到內(nèi)部的Flash中,待遠程終端接收完全部的升級代碼并校驗正確后開始升級。

1.2 升級實現(xiàn)原理介紹
    本方案將程序存儲空間劃分為Boot區(qū)、Code區(qū)、Temp區(qū)、Flag區(qū)和Vector區(qū)。Boot區(qū)存放基本的Flash讀寫、標志判斷等代碼(不含通信處理及基本操作);Code區(qū)存放完整的應用程序工程代碼(含通信處理及基本操作);Temp區(qū)用于備份程序區(qū)的代碼;Flag區(qū)是專門存放升級標志位的特殊區(qū)域;Vector區(qū)用于備份程序區(qū)的中斷向量。其中Boot區(qū)代碼使用特殊的“常量定位”方式添加到應用程序中,與Code區(qū)的應用程序一次編譯完成,且Boot區(qū)提供UpdateAPI函數(shù)供Code區(qū)調(diào)用。
    MSP430F543A的Code Flash最多為256 KB,共128段,擦除的時候必須按段擦除,寫入或者讀出的時候按字或者字節(jié)進行操作。在Main Flash 中每段seg均為512 B,在Information Flash中每段為128 B。由于BankA分為0x40000-0x45bff和0x5c00-0xffff兩部分,段擦除會將兩部分都擦除,故在BankA中不使用0x40000-0x45bff(共23 KB),用戶中斷向量和備份中斷向量各為512 B,占據(jù)1 KB,Boot區(qū)分配16 KB。由于要程序升級可恢復,故做成備份的模式,這樣就達到了Temp區(qū)和Code區(qū)均為(256 KB-23KB-1 KB-16 KB)/2=108 KB的最佳效果。
    在應用程序中下載完代碼并校驗正確后置位升級進度,通過虛擬復位跳轉到Boot區(qū),讀取升級標志位來選擇相應的處理。如果置位的是下載完成標志,則按照分塊交換的理念,逐個相對應地交換,待全部交換完成,則跳轉到應用程序入口,開始執(zhí)行交換后的新應用程序,如圖2所示。

 

 

2 關鍵技術
2.1 常量定位技術

    一個函數(shù)的入口地址稱為函數(shù)的指針??梢杂靡粋€指針變量指向函數(shù),然后通過該指針變量調(diào)用此函數(shù)。而Const常量定位技術就是從此衍生出來的。
 在本方案中首先建立一個完整的工程,編寫B(tài)oot區(qū)代碼。開辟一段專門空間(0x5c00-0x5cff)來存儲Boot區(qū)函數(shù)的入口地址,得到Boot區(qū)txt格式的文件,轉換成16進制數(shù)據(jù)文件后,通過靜態(tài)存儲的方式定位到實際運行程序中在Boot區(qū)開辟的固定區(qū)間內(nèi)(0x5c00-0x9bff),Code區(qū)通過Boot區(qū)提供的UpdateAPI函數(shù)入口地址,將其轉換成Code區(qū)函數(shù)后供自己調(diào)用。
    為了防止誤升級,在Boot區(qū)定義一個讀取軟件版本信息的函數(shù)int s_Boot_GetUpdateVersion( ),此函數(shù)在Boot區(qū)的入口地址是56 6d,把它存放在0x5c00-0x5c01的空間內(nèi)。在Code區(qū)中加入轉換后的Boot區(qū)代碼后,再自定義函數(shù)int(*Boot_GetUpdateVersion)(),然后將存儲在0x5c00-0x5c01處的s_Boot_GetUpdateVersion入口地址賦給該函數(shù),接著調(diào)用Code區(qū)的(*Boot_GetUpdateVersion)()函數(shù)即可實現(xiàn)軟件版本信息讀取的功能。
   可見通過常量定位這種方式,可以將應用程序和Boot程序一次編譯完成,Boot區(qū)提供UpdateAPI函數(shù)供Code區(qū)調(diào)用。
2.2 虛擬復位技術
    所謂的虛擬復位不是通過產(chǎn)生外部的復位信號來迫使單片機復位,而是通過改變PC指針實現(xiàn)程序的跳轉。通常的方法是在C語言中內(nèi)嵌匯編語言來實現(xiàn)。只要在需要復位的地方嵌入?yún)R編語言[4] asm("mov &0xFFFE,PC")即可實現(xiàn)虛擬復位[3]。然而內(nèi)嵌匯編總是存在諸多麻煩,因此,提出一種新的虛擬復位方法:
    ((void (*)(void))0x5d00)();
    由于0x5d00是復位地址,故把它強制轉換成指向函數(shù)的指針,然后調(diào)用此函數(shù),達到程序復位的目的。同時這種方法也解決了升級中存在的一個比較嚴重的問題:由于虛擬復位是通過內(nèi)嵌的方式提供API函數(shù)供Code區(qū)函數(shù)調(diào)用的,而Code區(qū)的起始地址是0x9c00,則虛擬復位后的PC指針指向就是0x9c00,而不是Boot區(qū)的0x5d00。所以Code區(qū)的應用程序在執(zhí)行虛擬復位時,無法跳轉到Boot區(qū),這樣在Boot區(qū)要完成的代碼交換也將無法進行??梢姶朔N無需嵌入?yún)R編的方法,簡單方便且切實可行。
2.3 斷點續(xù)傳技術
    UDP協(xié)議被稱為一種不可靠的傳輸協(xié)議,因為從發(fā)送方到接收方的傳遞過程中出現(xiàn)數(shù)據(jù)包的丟失,協(xié)議本身并不能做出任何檢測和提示,但具有TCP所望塵莫及的速度優(yōu)勢。為了使遠程升級系統(tǒng)既獲得實時的性能,又獲得相對可靠性,必須在上層應用程序中完成安全和排序等功能,并建立可靠傳遞機制。
    在本方案設計中,專門在Information Flash中開辟一段空間0x1800—0x187f,用來記錄當前經(jīng)過CRC16校驗正確后的數(shù)據(jù)包數(shù)。為了保證Flash擦除的方便和穩(wěn)定,規(guī)定數(shù)據(jù)包中數(shù)據(jù)的長度必須為128 B、256 B或者512 B,若所要傳輸?shù)臄?shù)據(jù)小于規(guī)定字節(jié)數(shù),需在數(shù)據(jù)包中填充0xff方法以保證數(shù)據(jù)的一致性。當由于網(wǎng)絡不穩(wěn)定或者斷電等突發(fā)情況下導致升級失敗時,若再次啟動升級,終端設備要首先讀取當前數(shù)據(jù)包數(shù),擦除Flash中空余的存儲空間,然后發(fā)送含有當前數(shù)據(jù)包數(shù)的升級配置數(shù)據(jù)包給上位機,上位機在獲得當前命令包后計算下一數(shù)據(jù)包在解析文件中的位置,并組包發(fā)送。從而避免了相同數(shù)據(jù)包的重復發(fā)送和Flash的全部擦除。
3 上位機軟件設計
 上位機方案采用Visual C++中的MFC對話框編程,其中的關鍵是對升級文件TXT文件的處理。@為地址引導符,其后數(shù)據(jù)為地址,即接下來代碼所存入的Flash地址起始位置。如果地址為0xFF80-0xFFFF,則為中斷向量地址,特別@后面的FFFE是應用程序中斷向量表中的復位地址。q為結束字符,表明文件結束。
    上位機完成對文件的解析后,通過數(shù)據(jù)包與終端進行交互。數(shù)據(jù)包定義如表1所示。

    其中命令碼是用來區(qū)分數(shù)據(jù)包所要執(zhí)行的具體操作。由于尋址范圍超過了64 KB,故采用4 B來表示地址信息。
4 風險避免措施
    升級中不可避免地存在各種風險,本方案采取如下措施: (1)將Code區(qū)和Temp劃分為若干塊,每次完成塊交換后,都將置備份標志,如果交換過程中有一塊交換不成功則再次虛擬復位,通過升級標志位的判斷進行恢復處理,將已經(jīng)和Temp交換的部分再次交換回來保證原程序依然可用。(2)在下載代碼的過程中,每一包數(shù)據(jù)在上位機都計算CRC16校驗值,然后單片機接收數(shù)據(jù)后重新計算CRC16值,如果兩者相等才認為這包數(shù)據(jù)正確,給出正確回應[5]。(3)遇到在應用程序中代碼下載不完整或者代碼下載時斷電的情況,可通過讀取升級進度標志,單片機重新復位后不會在Boot區(qū)中進行代碼交換。(4)專門劃分一個區(qū)域用于記錄升級進度信息,通過修改進度信息來進行相應的處理[5]。(5)在等待升級完成的過程中,發(fā)送一定數(shù)目的升級完成確認包(地址信息為01 01 01 01,命令碼為88),如果收到回應,則確認升級完成。(6)本方案并不擦除原來的程序,只是將Code區(qū)和Temp區(qū)互換,所以可以實現(xiàn)升級區(qū)變?yōu)閭浞輩^(qū),備份區(qū)變?yōu)樯墔^(qū),等待下次文件的寫入,也可以按照需求還原程序。通過這種校驗、存儲、替換的方式,可以有效地降低由于傳輸錯誤導致升級失敗的風險。
5 測試結果及總結
 為了保證通信的速率和穩(wěn)定,本測試設置通信超時為5 s,重發(fā)次數(shù)為5次。即發(fā)送的數(shù)據(jù)包如果5 s內(nèi)沒有回應,則重發(fā)。重發(fā)次數(shù)最多為5次,否則提示升級失敗。打開端口后,等待設備的登錄,登錄成功且升級文件解析正確后才可進行升級。點擊“程序升級”按鈕,上位機和終端開始交互。終端接收完正確數(shù)據(jù)后,虛擬復位完成Code區(qū)和Temp區(qū)的代碼交換。運行新程序后終端重啟CDMA模塊仍然發(fā)送包含新IP地址和終端ID的通信連接數(shù)據(jù)包給上位機。若終端ID前后一致且對升級完成確認包的回應正確,則表明升級成功。測試結果如圖3所示。

    本方案借助Internet、CDMA網(wǎng)絡成功地實現(xiàn)了遠程終端的軟件升級。同時運用常量定位技術達到了升級無需引導等待的目的;虛擬復位、斷點續(xù)傳和升級進度標志的應用增加了升級程序抗風險的能力;采用片內(nèi)Flash備份的方式,支持升級和備份恢復的功能。隨著通信技術和自編程序技術的發(fā)展,本方案對嵌入式終端設備的軟件更新具有極大的參考意義。
參考文獻
[1] 唐文, 劉芳伶. MSP430系列單片機軟件在線升級設計與實現(xiàn)[J].通信技術,2012,45(1):144-146.
[2] 美國德州儀器.MSP430 Flash SelfProgramming Technique[Z]. SLLAA103.2004.
[3] 張云. 第三代移動通信技術特點、后續(xù)演進及其全球競爭格局[J]. 中國集成電路, 2009(2):67-72.
[4] 孫亞萍, 張慧熙.一種新型DSP軟件在線升級方法的研究與實現(xiàn)[J].微型機與應用,2010,29(5):72-74.
[5] 羅文, 王莉娜, 肖鯤.基于GPRS的嵌入式系統(tǒng)遠程監(jiān)控和升級[J].電子技術應用, 2010,36(5):159-162.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載。