文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)11-0139-04
隨著電子技術(shù),、計(jì)算機(jī)技術(shù)和通信技術(shù)的迅猛發(fā)展,,單片機(jī)、DSP等嵌入式系統(tǒng)已廣泛應(yīng)用于工業(yè),、軍事,、通信、及家電等領(lǐng)域,。但嵌入式設(shè)備在安裝部署方面的局限性使得傳統(tǒng)的在線升級(jí)程序的方法難以實(shí)現(xiàn),。而應(yīng)用可編程IAP(In Application Programming)技術(shù)為嵌入式系統(tǒng)無(wú)線升級(jí)程序提供了良好的解決方案,并受到廣泛關(guān)注[1-2],。
建立備份數(shù)據(jù)區(qū)的機(jī)制[3],,采用設(shè)計(jì)應(yīng)用程序鏡像文件存儲(chǔ)區(qū)的方法對(duì)Flash的布局進(jìn)行重新設(shè)計(jì),實(shí)現(xiàn)嵌入式設(shè)備遠(yuǎn)程自動(dòng)更新,達(dá)到更新升級(jí)程序的目的。但該方法只能更新比現(xiàn)有程序版本更高的程序,,靈活性較差,。基于GPRS(General Packet Radio Service)的無(wú)線升級(jí)方法[4],,通過(guò)GPRS網(wǎng)絡(luò)將要升級(jí)的程序代碼傳輸下載到目標(biāo)終端,,然后采用IAP技術(shù)進(jìn)行軟件的升級(jí),該方法具有GPRS遠(yuǎn)程、高速傳輸?shù)奶攸c(diǎn),。但采用GPRS技術(shù)需要支付相關(guān)費(fèi)用,并且對(duì)系統(tǒng)資源要求較高,。基于Zigbee的無(wú)線升級(jí)方法[5],,通過(guò)Zigbee無(wú)線網(wǎng)絡(luò)技術(shù)進(jìn)行更新程序代碼數(shù)據(jù)傳輸,,采用IAP技術(shù)對(duì)嵌入式設(shè)備進(jìn)行程序的在線升級(jí),該方法具有快捷簡(jiǎn)便、硬件成本低及通信誤碼率低等優(yōu)點(diǎn),。然而使用Zigbee協(xié)議較為復(fù)雜,,需要2.4 GHz的載波頻率,資源和能量消耗較多,。
本文提出了無(wú)線升級(jí)程序的方法,,嵌入式設(shè)備載波頻率采用ISM頻段的433 MHz,通過(guò)簡(jiǎn)單可靠的無(wú)線通信協(xié)議進(jìn)行程序代碼的傳輸,,終端設(shè)備接收到代碼數(shù)據(jù)后,采用IAP技術(shù)進(jìn)行程序的無(wú)縫切換,。該方法需要的硬件資源較少,,協(xié)議簡(jiǎn)單可靠,能夠有效減少來(lái)自同頻電波和障礙物的干擾,,裝載延時(shí)可在人們的容忍限度之內(nèi),,能量消耗較少。
1 系統(tǒng)無(wú)線升級(jí)模型與方法
1.1 無(wú)線系統(tǒng)升級(jí)模型
嵌入式設(shè)備的無(wú)線升級(jí)系統(tǒng)主要由服務(wù)器設(shè)備,、終端設(shè)備兩部分組成,。設(shè)備之間通過(guò)無(wú)線通信技術(shù)進(jìn)行裝載程序代碼的傳輸。通過(guò)IAP技術(shù)進(jìn)行程序的更新與升級(jí)[6,,10],,由此實(shí)現(xiàn)嵌入式設(shè)備的無(wú)線升級(jí), 程序結(jié)構(gòu)如圖1所示,。
1.2 無(wú)線系統(tǒng)升級(jí)方法
在IAP編程模式中,,嵌入式設(shè)備內(nèi)部在結(jié)構(gòu)上有兩塊存儲(chǔ)區(qū),一塊被稱為Boot Loader區(qū),;另外一塊被稱為用戶裝載程序區(qū),。設(shè)備上電運(yùn)行在Boot Loader區(qū),如果滿足外部改寫程序的條件,,則對(duì)用戶裝載程序區(qū)的程序進(jìn)行改寫操作,,程序指針跳到用戶裝載程序區(qū)完成程序切換。本系統(tǒng)所涉及的關(guān)鍵技術(shù)主要包括:無(wú)線通信協(xié)議,、內(nèi)存映射,、用戶裝載程序代碼的生成和中斷向量的處理。
(1) 無(wú)線通信協(xié)議
本系統(tǒng)采用點(diǎn)對(duì)點(diǎn)無(wú)線通信協(xié)議,。通信時(shí)首先采用基本的請(qǐng)求/應(yīng)答握手機(jī)制來(lái)占用通信媒介(類似于IEEE802.11協(xié)議[7]中的RTS/CTS機(jī)制),,可以有效地防止干擾信號(hào)和誤操作的產(chǎn)生。為了保證傳輸代碼的可靠性和有效性,,在通信協(xié)議中采用應(yīng)答機(jī)制和錯(cuò)誤重傳機(jī)制,。本系統(tǒng)采用的無(wú)線通信協(xié)議如圖2所示,如果終端設(shè)備發(fā)送裝載程序請(qǐng)求幀(REQ),服務(wù)器設(shè)備接收到請(qǐng)求幀后將提取幀信息發(fā)送至應(yīng)答幀(MACK),,應(yīng)答幀指示終端設(shè)備進(jìn)行接收代碼準(zhǔn)備,,并與服務(wù)器設(shè)備采用的應(yīng)答機(jī)制和錯(cuò)誤重傳機(jī)制進(jìn)行程序代碼傳輸。
(2) 內(nèi)存映射
為了保證系統(tǒng)的可靠運(yùn)行,,需要將單片機(jī)Flash內(nèi)存分為Boot Loader代碼區(qū)和用戶裝載程序代碼區(qū),。Boot Loader代碼區(qū)用來(lái)存放Boot Loader代碼,由于單片機(jī)結(jié)構(gòu)及軟件編程的特點(diǎn)將Boot Loader代碼區(qū)開(kāi)辟在0X0000~0X1FFF區(qū)域[8-9],,用戶需要裝載的程序存儲(chǔ)在0X2000~0X7FFF區(qū)域,。
(3) 用戶裝載程序代碼的生成
為了使裝載程序有效地運(yùn)行在終端設(shè)備,服務(wù)器設(shè)備中裝載程序代碼的生成同樣需要在code區(qū)開(kāi)辟的0X2000~0X7FFF區(qū)域,。生成方法即在IAR嵌入式編譯環(huán)境中,將鏈表code區(qū)的-D_CODE_START=0X0000修改為-D_CODE_START=0x2000,。
(4) 中斷向量的處理
由于Boot Loader存儲(chǔ)區(qū)域和用戶裝載程序在Flash中的code區(qū)域不同,如果程序采用中斷功能,,則會(huì)面臨中斷向量沖突問(wèn)題,。本文采用在 Boot Loader中調(diào)用仲裁函數(shù)方法進(jìn)行處理,仲裁函數(shù)就是Boot Loader中的中斷服務(wù)程序,。當(dāng)中斷發(fā)生在Boot Loader時(shí),則執(zhí)行Boot Loader中的函數(shù),,中斷發(fā)生在用戶裝載程序時(shí),則執(zhí)行跳轉(zhuǎn)指令(LJMP 0X2000+中斷向量值),跳轉(zhuǎn)到裝載執(zhí)行程序中相應(yīng)的位置。
2 無(wú)線升級(jí)系統(tǒng)的軟硬件實(shí)現(xiàn)
2.1系統(tǒng)硬件實(shí)現(xiàn)
本系統(tǒng)使用兩個(gè)TI公司提供的具有無(wú)線收發(fā)功能的CC1110F32單片機(jī)[8]作為節(jié)點(diǎn),。其中一個(gè)作為服務(wù)器節(jié)點(diǎn)(SN),,另一個(gè)作為終端節(jié)點(diǎn)(EN)。SN負(fù)責(zé)發(fā)送程序代碼,,EN就是需要裝載程序的單片機(jī),。硬件系統(tǒng)框圖如圖3所示。
通過(guò)TI提供的SmartRFStudio軟件進(jìn)行發(fā)送與接收寄存器的配置,,載波頻率為433 MHz,,無(wú)線調(diào)制方式為GFSK,數(shù)據(jù)傳輸率設(shè)置為38.4 kBaud,。
2.2 系統(tǒng)軟件設(shè)計(jì)流程
2.2.1服務(wù)器節(jié)點(diǎn)的流程
服務(wù)器節(jié)點(diǎn)用于將終端節(jié)點(diǎn)請(qǐng)求裝載的程序代碼發(fā)送到終端節(jié)點(diǎn),。服務(wù)器節(jié)點(diǎn)上電運(yùn)行(或者軟件復(fù)位)后,首先進(jìn)行硬件平臺(tái)初始化,,包括CPU及外設(shè)的初始化,、無(wú)線模塊的初始化等。然后打開(kāi)無(wú)線接收模塊,,等待接收終端節(jié)點(diǎn)的裝載代碼請(qǐng)求,,接收到請(qǐng)求后將代碼分段傳輸,無(wú)線通信采用請(qǐng)求/應(yīng)答/數(shù)據(jù)/應(yīng)答通信機(jī)制進(jìn)行代碼的傳輸,。此協(xié)議采用錯(cuò)誤重發(fā)機(jī)制保證代碼有效可靠地傳輸,。
2.2.2 終端節(jié)點(diǎn)的流程
終端節(jié)點(diǎn)即進(jìn)行無(wú)線更新升級(jí)程序的節(jié)點(diǎn),。終端節(jié)點(diǎn)上電運(yùn)行(或者軟件復(fù)位)后,首先進(jìn)行硬件平臺(tái)的初始化,包括CPU及外設(shè)的初始化,、無(wú)線模塊的初始化等,。如果需要進(jìn)行無(wú)線升級(jí),則首先將系統(tǒng)復(fù)位(按下復(fù)位按鍵進(jìn)行復(fù)位),,然后執(zhí)行Boot Loader程序,,等待用戶按鍵選擇裝載程序類型。選定裝載程序后,,將裝載請(qǐng)求發(fā)送至服務(wù)器節(jié)點(diǎn),,然后采用請(qǐng)求/應(yīng)答/數(shù)據(jù)/應(yīng)答通信機(jī)制分段接收程序代碼,并對(duì)接收的每一段代碼進(jìn)行CRC校驗(yàn),,判斷接收是否正確,,通過(guò)向服務(wù)器節(jié)點(diǎn)發(fā)送應(yīng)答信號(hào)來(lái)指示該段代碼的接收情況。終端節(jié)點(diǎn)在無(wú)線更新升級(jí)程序中的工作流程如圖4所示,。
3 實(shí)例分析及評(píng)價(jià)
3.1 程序裝載時(shí)間與裝載程序代碼長(zhǎng)度的關(guān)系
為了研究裝載時(shí)間與裝載代碼長(zhǎng)度以及傳輸數(shù)據(jù)包長(zhǎng)度的關(guān)系,采用5種不同長(zhǎng)度的裝載程序代碼進(jìn)行測(cè)試,,對(duì)于每種長(zhǎng)度的程序分別采用240 B,、128字節(jié)和64 B的數(shù)據(jù)包進(jìn)行傳輸。為了保證實(shí)驗(yàn)數(shù)據(jù)的可靠性,,對(duì)于每種長(zhǎng)度的程序采用同一數(shù)據(jù)包長(zhǎng)度傳輸時(shí),,分別進(jìn)行了10次測(cè)量,10次測(cè)量所用裝載的時(shí)間幾乎沒(méi)有差別(幾毫秒),,對(duì)10次測(cè)量數(shù)據(jù)取平均值作為此次程序的裝載時(shí)間,。在不同數(shù)據(jù)包長(zhǎng)度傳輸情況下,裝載程序所用時(shí)間與裝載程序長(zhǎng)度的關(guān)系如圖5所示,。
3.2 不同裝載代碼長(zhǎng)度與消耗能量的關(guān)系
為了研究裝載程序所用功耗與裝載代碼長(zhǎng)度以及傳輸數(shù)據(jù)包長(zhǎng)度的關(guān)系,,分別對(duì)3種不同長(zhǎng)度的程序代碼進(jìn)行裝載測(cè)試。裝載程序長(zhǎng)度分別為1 440 B,、1 024 B,、480 B。本實(shí)驗(yàn)采用數(shù)據(jù)包長(zhǎng)度(每幀傳輸?shù)拇a數(shù))分別為240 B,、200 B,、128 B和64 B。為了保證實(shí)驗(yàn)數(shù)據(jù)的可靠性,對(duì)于每種長(zhǎng)度的程序采用同一數(shù)據(jù)包長(zhǎng)度傳輸時(shí),分別進(jìn)行了10次測(cè)量,,對(duì)10次測(cè)量功耗數(shù)據(jù)取平均值作為此次程序裝載的功耗,。采用不同程序代碼長(zhǎng)度進(jìn)行傳輸時(shí),裝載程序所用功耗與每幀傳輸字節(jié)數(shù)的關(guān)系如圖6所示,。
3.3 不同功能程序裝載切換實(shí)例測(cè)試
為了驗(yàn)證系統(tǒng)的可靠性,,分別采用LED閃爍程序、按鍵中斷程序和串口通信程序進(jìn)行裝載切換測(cè)試,每種功能程序分別進(jìn)行了50次裝載測(cè)試,測(cè)試結(jié)果如表1所示,。該系統(tǒng)裝載程序的成功率達(dá)到99%以上,,并且所裝載的程序不受功能限制,具有較高的通用性,、可靠性,。由按鍵觸發(fā)裝載功能,使用方便靈活,,易于操作,。
3.4 系統(tǒng)評(píng)價(jià)
通過(guò)對(duì)程序裝載時(shí)間、裝載程序長(zhǎng)度,、以及數(shù)據(jù)包長(zhǎng)度的實(shí)驗(yàn)測(cè)試可以明顯看出,,采用同一數(shù)據(jù)包長(zhǎng)度傳輸數(shù)據(jù)時(shí),隨著裝載程序長(zhǎng)度的增加,,裝載延時(shí)也將延長(zhǎng),,基本呈線性關(guān)系。對(duì)同一程序采用不同數(shù)據(jù)包長(zhǎng)度時(shí),,數(shù)據(jù)包長(zhǎng)度越大,,則所耗費(fèi)的時(shí)間越短,裝載長(zhǎng)度為1 024 B時(shí),,若采用的數(shù)據(jù)包長(zhǎng)度為64 B,,則裝載時(shí)間為1 550 ms;而采用數(shù)據(jù)包長(zhǎng)度為240 B時(shí)的裝載時(shí)間為820 ms,。當(dāng)有沖突發(fā)生時(shí),,采用數(shù)據(jù)包越長(zhǎng),重傳時(shí)所用的無(wú)效傳輸數(shù)據(jù)越多,,傳輸?shù)男试降?。因此用戶可以根?jù)需要選擇不同的數(shù)據(jù)包長(zhǎng)度進(jìn)行傳輸,增加了系統(tǒng)的靈活性,。
傳輸數(shù)據(jù)的數(shù)據(jù)包越長(zhǎng),,程序裝載所需的功耗越低, 程序長(zhǎng)度為1 024 B,,數(shù)據(jù)包長(zhǎng)度為64 B時(shí),,平均功耗為275.8 mW;數(shù)據(jù)包長(zhǎng)度為240 B時(shí),則平均功耗為155.2 mW,。裝載同一程序時(shí),,傳輸數(shù)據(jù)的數(shù)據(jù)包越長(zhǎng),裝載時(shí)間越短,。因此可以得出隨著數(shù)據(jù)包長(zhǎng)度的增加,,裝載程序所消耗的能量越小,。對(duì)于能量消耗要求嚴(yán)格的嵌入式設(shè)備(如手持電池供電設(shè)備、無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)等)進(jìn)行無(wú)線更新升級(jí)程序時(shí),,可以采用較大的數(shù)據(jù)包來(lái)裝載程序,。
本文設(shè)計(jì)了一種基于CC1110單片機(jī)的無(wú)線更新升級(jí)程序的應(yīng)用系統(tǒng)。經(jīng)測(cè)試驗(yàn)證該系統(tǒng)具有較高的可靠性,、及時(shí)性,、靈活性、低功耗等特點(diǎn),,應(yīng)用方便靈活,。對(duì)于解決應(yīng)用中的無(wú)線嵌入式設(shè)備程序升級(jí)是一種比較理想的方法。該方法通用性較強(qiáng),,適用于任何具有無(wú)線通信功能含有Flash單片機(jī)及嵌入式設(shè)備,。
參考文獻(xiàn)
[1] 黃家升.基于IAP的單片機(jī)軟件遠(yuǎn)程升級(jí)[J]. 艦船電子對(duì)抗,2007,30(3):95-97.
[2] 冉曉蓉, 楊志義, 張凡, 等. 基于CAN總線在線更新機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與科學(xué), 2008,30(1):
125-128.
[3] 王恒,,王颋,,王泉,等. 基于Boot Loader的可靠嵌入式軟件遠(yuǎn)程更新機(jī)制[J].微計(jì)算機(jī)信息,,2007,23(20):57-59.
[4] 陶維青, 王付軍,,等.基于GPRS網(wǎng)絡(luò)的MSP430單片機(jī)Flash遠(yuǎn)程更新方法[J].電測(cè)與儀表,2007,44(7):33-36.
[5] 袁璐,,宋華. 基于Zigbee和IAP的在線升級(jí)方案.測(cè)控技術(shù)[J]. 2008,27(10):79-84.
[6] 朱飛龍,楊鳴.基于IAP功能單片機(jī)的遠(yuǎn)程更新系統(tǒng)設(shè)計(jì)[J]. 機(jī)電工程,,2010,27(9):76-79.
[7] GAST M. 802.11 wireless networks[M]. The definitive guide.O′Reilly Media, 2005.
[8] Texas Instruments. CC1110 Data sheet[EB/OL].[2008-7-11]http://www.ti.com.
[9] TI Application Note AN101.Boot loader for CC2510,CC2511,CC1110 and CC1111SoC (System-on-Chip) Transceivers [EB/OL]. [2011-09-08].http://www.ti.com.
[10] KIM J S, BROAD A. Network reprogramming [R]. University of California at Berkeley, Berkeley,CA,USA, 2003.