文獻(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)有程序版本更高的程序,靈活性較差?;贕PRS(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ū),一塊被稱(chēng)為Boot Loader區(qū);另外一塊被稱(chēng)為用戶(hù)裝載程序區(qū)。設(shè)備上電運(yùn)行在Boot Loader區(qū),如果滿(mǎn)足外部改寫(xiě)程序的條件,則對(duì)用戶(hù)裝載程序區(qū)的程序進(jìn)行改寫(xiě)操作,程序指針跳到用戶(hù)裝載程序區(qū)完成程序切換。本系統(tǒng)所涉及的關(guān)鍵技術(shù)主要包括:無(wú)線通信協(xié)議、內(nèi)存映射、用戶(hù)裝載程序代碼的生成和中斷向量的處理。
(1) 無(wú)線通信協(xié)議
本系統(tǒng)采用點(diǎn)對(duì)點(diǎn)無(wú)線通信協(xié)議。通信時(shí)首先采用基本的請(qǐng)求/應(yīng)答握手機(jī)制來(lái)占用通信媒介(類(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ū)和用戶(hù)裝載程序代碼區(qū)。Boot Loader代碼區(qū)用來(lái)存放Boot Loader代碼,由于單片機(jī)結(jié)構(gòu)及軟件編程的特點(diǎn)將Boot Loader代碼區(qū)開(kāi)辟在0X0000~0X1FFF區(qū)域[8-9],用戶(hù)需要裝載的程序存儲(chǔ)在0X2000~0X7FFF區(qū)域。
(3) 用戶(hù)裝載程序代碼的生成
為了使裝載程序有效地運(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ū)域和用戶(hù)裝載程序在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ā)生在用戶(hù)裝載程序時(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程序,等待用戶(hù)按鍵選擇裝載程序類(lèi)型。選定裝載程序后,將裝載請(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ù)男试降?。因此用?hù)可以根據(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.