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