《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于CDMA網(wǎng)絡(luò)的嵌入式設(shè)備遠(yuǎn)程升級系統(tǒng)
基于CDMA網(wǎng)絡(luò)的嵌入式設(shè)備遠(yuǎn)程升級系統(tǒng)
來源:電子技術(shù)應(yīng)用2014年第2期
朱偉斌1,張 濤2,顧海濤2,鄧新欣2
1. 杭州電子科技大學(xué) 電子信息學(xué)院, 浙江 杭州310018; 2. 聚光科技(杭州)股份有限公司, 浙江 杭州310018
摘要: 針對利用仿真器更新程序繁瑣的問題,提出了一種全新的基于CDMA網(wǎng)絡(luò)的遠(yuǎn)程升級解決方案。通過特殊的“常量定位”方式,實現(xiàn)引導(dǎo)升級合一和內(nèi)嵌到應(yīng)用程序的目的。采用虛擬復(fù)位技術(shù),簡化了升級流程。上位機通過Internet和CDMA網(wǎng)絡(luò)與終端通信,支持?jǐn)?shù)據(jù)包的斷點續(xù)傳,通過查看數(shù)據(jù)窗口中解析的數(shù)據(jù)包,實時了解升級的進度。測試結(jié)果表明,該方案提高了固件升級的便捷性,降低了升級的成本,有一定的參考價值。
中圖分類號: TN92
文獻標(biāo)識碼: 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

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

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

1.2 升級實現(xiàn)原理介紹
    本方案將程序存儲空間劃分為Boot區(qū)、Code區(qū)、Temp區(qū)、Flag區(qū)和Vector區(qū)。Boot區(qū)存放基本的Flash讀寫、標(biāo)志判斷等代碼(不含通信處理及基本操作);Code區(qū)存放完整的應(yīng)用程序工程代碼(含通信處理及基本操作);Temp區(qū)用于備份程序區(qū)的代碼;Flag區(qū)是專門存放升級標(biāo)志位的特殊區(qū)域;Vector區(qū)用于備份程序區(qū)的中斷向量。其中Boot區(qū)代碼使用特殊的“常量定位”方式添加到應(yīng)用程序中,與Code區(qū)的應(yīng)用程序一次編譯完成,且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。由于要程序升級可恢復(fù),故做成備份的模式,這樣就達到了Temp區(qū)和Code區(qū)均為(256 KB-23KB-1 KB-16 KB)/2=108 KB的最佳效果。
    在應(yīng)用程序中下載完代碼并校驗正確后置位升級進度,通過虛擬復(fù)位跳轉(zhuǎn)到Boot區(qū),讀取升級標(biāo)志位來選擇相應(yīng)的處理。如果置位的是下載完成標(biāo)志,則按照分塊交換的理念,逐個相對應(yīng)地交換,待全部交換完成,則跳轉(zhuǎn)到應(yīng)用程序入口,開始執(zhí)行交換后的新應(yīng)用程序,如圖2所示。

 

 

2 關(guān)鍵技術(shù)
2.1 常量定位技術(shù)

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

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

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

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