吳 濤,施偉斌,張 磊
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
基于CC2430的代碼更新系統(tǒng)設(shè)計(jì)
吳 濤,施偉斌,張 磊
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
針對(duì)傳統(tǒng)的節(jié)點(diǎn)更新方式枯燥繁重、效率低、特殊區(qū)域無(wú)法更新等缺陷,文中基于存儲(chǔ)空間較小的CC2430芯片,設(shè)計(jì)了遠(yuǎn)程代碼更新系統(tǒng),該系統(tǒng)分為3個(gè)部分,分別為上位機(jī)、網(wǎng)關(guān)節(jié)點(diǎn)以及傳感器節(jié)點(diǎn)。上位機(jī)將新版本代碼通過(guò)串口下載至網(wǎng)關(guān)節(jié)點(diǎn),網(wǎng)關(guān)節(jié)點(diǎn)利用分發(fā)協(xié)議將更新代碼分發(fā)至整個(gè)網(wǎng)絡(luò),并將節(jié)點(diǎn)的存儲(chǔ)空間分為引導(dǎo)部分和程序部分,利用不同的存儲(chǔ)器映射進(jìn)行版本切換。經(jīng)多次實(shí)驗(yàn)更新單個(gè)節(jié)點(diǎn)用時(shí)約為139 s。實(shí)驗(yàn)證明,該系統(tǒng)占用硬件資源少,可廣泛應(yīng)用于環(huán)境、軍事監(jiān)測(cè)及醫(yī)護(hù)系統(tǒng)等領(lǐng)域。
無(wú)線傳感器網(wǎng)絡(luò);遠(yuǎn)程代碼更新;TinyOS;CC2430
WSN技術(shù)廣泛應(yīng)用于智能家居、智能穿戴設(shè)備、環(huán)境監(jiān)測(cè)、醫(yī)療衛(wèi)生以及城市交通等領(lǐng)域[1]。由于WSN需要在探測(cè)區(qū)域內(nèi)部署大量節(jié)點(diǎn),需要經(jīng)常更新應(yīng)用程序。傳統(tǒng)方法將PC機(jī)與傳感器節(jié)點(diǎn)通過(guò)連接線進(jìn)行連接,手動(dòng)逐個(gè)的進(jìn)行程序下載。對(duì)于不能到達(dá)場(chǎng)景無(wú)法使用手工的方式進(jìn)行下載。采用遠(yuǎn)程代碼更新技術(shù)能夠很好的解決傳感器節(jié)點(diǎn)軟件更新的問(wèn)題,減少無(wú)意義的重復(fù)性勞動(dòng),并且提高了更新效率。文獻(xiàn)[2]中的協(xié)議是一種可靠協(xié)議,可擁有多個(gè)源節(jié)點(diǎn),并通過(guò)多跳的方式傳輸?shù)秸麄€(gè)網(wǎng)絡(luò)。文獻(xiàn)[3~4]采用了自適應(yīng)的機(jī)制,計(jì)算各節(jié)點(diǎn)的剩余能量,讓剩余能量較多的節(jié)點(diǎn)擔(dān)當(dāng)分發(fā)節(jié)點(diǎn),提高了整個(gè)網(wǎng)絡(luò)的生存時(shí)間。文獻(xiàn)[5~6]通過(guò)比對(duì)新舊鏡像的不同,計(jì)算出差異數(shù)據(jù),在代碼更新時(shí)只傳輸少量差異數(shù)據(jù),從而達(dá)到減少能耗的效果。文獻(xiàn)[7]對(duì)整個(gè)TinyOS進(jìn)行了模塊分解,將整個(gè)運(yùn)行的程序分為多個(gè)模塊。文獻(xiàn)[8~12]總結(jié)了國(guó)內(nèi)外團(tuán)隊(duì)研究成果,為國(guó)內(nèi)對(duì)代碼更新課題研究奠定了基礎(chǔ)。浙江大學(xué)[13]利用ELF(可執(zhí)行與可鏈接格式)文件格式,將ELF的特點(diǎn)與WSN結(jié)合起來(lái),達(dá)到降低傳輸量的效果。
1.1 系統(tǒng)整體設(shè)計(jì)
遠(yuǎn)程代碼更新過(guò)程如圖1所示。(1)在上位機(jī)編寫帶有分發(fā)協(xié)議的基本程序,將基本程序通過(guò)串口燒寫至各個(gè)節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)在網(wǎng)絡(luò)上正常工作;(2)需要進(jìn)行代碼更新時(shí),在上位機(jī)編寫新的程序,編譯完成后通過(guò)串口燒入網(wǎng)關(guān)節(jié)點(diǎn);(3)上位機(jī)通過(guò)串口向網(wǎng)關(guān)節(jié)點(diǎn)發(fā)送分發(fā)指令,網(wǎng)關(guān)節(jié)點(diǎn)收到指令后,將指令消息廣播至整個(gè)網(wǎng)絡(luò);(4)節(jié)點(diǎn)A、B利用分發(fā)協(xié)議先接收到完整程序,啟用新版本程序;(5)節(jié)點(diǎn)C從節(jié)點(diǎn)B接收新版本程序,并重啟更新。
圖1 遠(yuǎn)程代碼更新系統(tǒng)示意圖
1.2 硬件平臺(tái)
在WSN中,使用的硬件平臺(tái)通常有兩類[14],一類節(jié)點(diǎn)是以ARM處理器為代表的高端處理器,另一類節(jié)點(diǎn)是以8051單片機(jī)為代表的微控制器處理模塊。本代碼更新系統(tǒng)的硬件平臺(tái)主要包括網(wǎng)關(guān)節(jié)點(diǎn)與傳感器節(jié)點(diǎn)兩部分。硬件平臺(tái)采用億道公司設(shè)計(jì)的節(jié)點(diǎn)模塊,其核心芯片均采用TI公司生產(chǎn)的微控制類型的CC2430芯片。本課題Flash中需要能同時(shí)存放多個(gè)版本的應(yīng)用程序,故采用的芯片為內(nèi)置128 kB型號(hào)的芯片。
1.2.1 CC2430存儲(chǔ)器映射
CC2430的存儲(chǔ)器映射分為兩個(gè)部分,外部數(shù)據(jù)存儲(chǔ)器空間與代碼存儲(chǔ)器空間。外部數(shù)據(jù)存儲(chǔ)器空間在匯編指令上對(duì)應(yīng)于MOVX指令,而代碼存儲(chǔ)器空間的指令對(duì)應(yīng)與MOV指令。CC2430的尋址能力是16位的,無(wú)論映射到哪個(gè)存儲(chǔ)空間,最大可訪問(wèn)的地址均為0xFFFF,通過(guò)Bank映射方式使得芯片可訪問(wèn)到整個(gè)Flash。CC2430將DATA空間、XDATA空間與SFR空間統(tǒng)一映射到外部數(shù)據(jù)存儲(chǔ)器空間。代碼存儲(chǔ)空間的映射方式分為統(tǒng)一映射與非統(tǒng)一映射兩種,映射方式由MEMCTR寄存器的MUNIF位進(jìn)行控制。
1.2.2 網(wǎng)關(guān)節(jié)點(diǎn)
網(wǎng)關(guān)節(jié)點(diǎn)與傳感器節(jié)點(diǎn)均采用NesC語(yǔ)言進(jìn)行編程,網(wǎng)關(guān)節(jié)點(diǎn)負(fù)責(zé)與上位機(jī)通過(guò)串口進(jìn)行通信,將新版本代碼臨時(shí)存放到Flash內(nèi),由上位機(jī)發(fā)送控制命令后,將存儲(chǔ)的新版本代碼通過(guò)分發(fā)協(xié)議分發(fā)至各個(gè)節(jié)點(diǎn)。在網(wǎng)關(guān)節(jié)點(diǎn)啟動(dòng)后,首先開(kāi)啟串口通信功能,等待上位機(jī)發(fā)送數(shù)據(jù)或指令。Flash及串口管理模塊將會(huì)響應(yīng)上位機(jī)指令,接收每一串?dāng)?shù)據(jù)的流程如圖2所示。
圖2 串口接收流程
1.2.3 傳感器節(jié)點(diǎn)
為實(shí)現(xiàn)代碼更新,將Flash的4個(gè)Bank分為兩大部分,如圖3所示。Bank0作為Bootloader,用于引導(dǎo)啟動(dòng),每當(dāng)節(jié)點(diǎn)啟動(dòng)時(shí),首先運(yùn)行Bootloader程序,利用Bootloade r程序引導(dǎo)跳轉(zhuǎn)到正確的運(yùn)行程序。引導(dǎo)程序讀取存放于0x6FF0地址上的引導(dǎo)信息,從引導(dǎo)信息中得到運(yùn)行版本所在Bank,根據(jù)版本信息對(duì)寄存器進(jìn)行設(shè)置,并引導(dǎo)節(jié)點(diǎn)跳轉(zhuǎn)到相應(yīng)的版本。Bank1~3作為各個(gè)版本的存放位置,每個(gè)Bank可存放一個(gè)版本的內(nèi)容,可同時(shí)存在3個(gè)不同版本的程序。
圖3 存儲(chǔ)器空間配置
1.3 軟件平臺(tái)
基于本課題使用的硬件平臺(tái),選用加州大學(xué)伯克利分校設(shè)計(jì)的TinyOS操作系統(tǒng)進(jìn)行程序設(shè)計(jì),該操作系統(tǒng)具有簡(jiǎn)單的任務(wù)調(diào)度功能。(1)TinyOS系統(tǒng)擁有任務(wù)調(diào)度、內(nèi)存管理以及網(wǎng)絡(luò)協(xié)議處理等能力。在進(jìn)程管理中,TinyOS采用任務(wù)和事件同時(shí)進(jìn)行的模型[15]。TinyOS系統(tǒng)由主組件、應(yīng)用組件、感知組件、執(zhí)行組件、通信組件及硬件抽象組件構(gòu)成,各個(gè)層次獨(dú)立開(kāi)發(fā),利用接口將應(yīng)用程序與系統(tǒng)各個(gè)層次連接在一起。(2)上位機(jī)使用C#語(yǔ)言進(jìn)行編程,使用.net平臺(tái),可以方便快捷地編寫界面程序。
1.4 代碼分發(fā)協(xié)議設(shè)計(jì)
分發(fā)協(xié)議主要模塊如圖4所示,總模塊利用Trickle接收到的信息進(jìn)行判定分發(fā)方式,Object分發(fā)模塊負(fù)責(zé)對(duì)整個(gè)版本的分發(fā)或接收,調(diào)用頁(yè)分發(fā)模塊進(jìn)行每一頁(yè)的分發(fā)或接收,當(dāng)新版本程序接收完成后進(jìn)行重啟。新版本程序裝入節(jié)點(diǎn),并成功重啟后,將作為分發(fā)節(jié)點(diǎn),將新版本程序分發(fā)到更遠(yuǎn)的節(jié)點(diǎn)。
圖4 代碼分發(fā)模塊
2.1 實(shí)驗(yàn)平臺(tái)搭建
上位機(jī)下載軟件使用Microsoft Visual Studio2013集成環(huán)境開(kāi)發(fā),使用C#語(yǔ)言進(jìn)行開(kāi)發(fā)。網(wǎng)關(guān)節(jié)點(diǎn)與傳感器節(jié)點(diǎn)硬件平臺(tái)采用億道公司生產(chǎn)的基于CC2430的硬件平臺(tái)。網(wǎng)關(guān)節(jié)點(diǎn)與傳感器節(jié)點(diǎn)均采用NesC語(yǔ)言進(jìn)行開(kāi)發(fā),在編譯過(guò)程中使用Keil進(jìn)行局部調(diào)整,包括代碼位置以及中斷向量表等。
2.2 代碼更新流程
代碼更新流程實(shí)驗(yàn)采用網(wǎng)關(guān)節(jié)點(diǎn)到傳感器節(jié)點(diǎn)的更新,更新代碼大小為25 872 Byte,網(wǎng)絡(luò)傳輸以頁(yè)為單位,分發(fā)過(guò)程中共需要傳輸26頁(yè),即總共需傳輸26.65 kB。具體更新步驟如下:(1)啟動(dòng)上位機(jī)程序,打開(kāi)網(wǎng)關(guān)節(jié)點(diǎn)對(duì)應(yīng)串口,重啟網(wǎng)關(guān)節(jié)點(diǎn);(2)上位機(jī)與網(wǎng)關(guān)節(jié)點(diǎn)能夠正常通信后,點(diǎn)擊打開(kāi)文件,選擇將發(fā)送的新版本程序iHex文件;(3)網(wǎng)關(guān)節(jié)點(diǎn)在接收過(guò)程中,會(huì)將接收到的數(shù)據(jù)放入0x18000起始的位置。上位機(jī)將完整程序通過(guò)串口傳輸給網(wǎng)關(guān)節(jié)點(diǎn)后,將命令字設(shè)置為分發(fā)模式,設(shè)置uid編號(hào)以及待分發(fā)程序的大小。上位機(jī)向網(wǎng)關(guān)節(jié)點(diǎn)發(fā)送控制命令,網(wǎng)關(guān)節(jié)點(diǎn)響應(yīng)后將控制命令通過(guò)trickle協(xié)議分發(fā)至整個(gè)網(wǎng)絡(luò);(4)網(wǎng)關(guān)節(jié)點(diǎn)收到控制命令后,進(jìn)入分發(fā)狀態(tài),利用偵聽(tīng)軟件可看到網(wǎng)關(guān)節(jié)點(diǎn)廣播數(shù)據(jù)包;(5)傳感器節(jié)點(diǎn)請(qǐng)求當(dāng)前頁(yè)的更新數(shù)據(jù);(6)網(wǎng)關(guān)節(jié)點(diǎn)發(fā)送更新數(shù)據(jù);(7)若有丟包情況,重復(fù)第(5)和第(6)步,直到接受完整頁(yè)數(shù)據(jù);(8)重復(fù)第(5)~(7)步,直到完整接受新版本代碼映像的所有數(shù)據(jù);(9)傳感器節(jié)點(diǎn)接收到完整的新映像后,自動(dòng)設(shè)置啟動(dòng)信息并重啟節(jié)點(diǎn)。實(shí)驗(yàn)表明,代碼更新系統(tǒng)能完成代碼更新功能,分發(fā)代碼大小為26.65 kB時(shí),所用時(shí)間約為139 s。
2.3 多節(jié)點(diǎn)更新實(shí)驗(yàn)
實(shí)驗(yàn)采用一個(gè)網(wǎng)關(guān)節(jié)點(diǎn)、多個(gè)傳感器節(jié)點(diǎn)。分發(fā)代碼的大小為26.65 kB,傳感器節(jié)點(diǎn)數(shù)量從一個(gè)逐步增加至20個(gè)。圖5表示了分發(fā)至不同數(shù)量節(jié)點(diǎn)所需使用的時(shí)間。當(dāng)更新一個(gè)節(jié)點(diǎn)時(shí)需使用的時(shí)間為139 s,隨著節(jié)點(diǎn)數(shù)量的增多,分發(fā)時(shí)間略有下降,時(shí)間約穩(wěn)定在115 s。
圖5 節(jié)點(diǎn)更新時(shí)間
本文描述了基于CC2430實(shí)現(xiàn)的遠(yuǎn)程代碼更新系統(tǒng),可較好地適用于單跳的網(wǎng)絡(luò),并可支持多跳網(wǎng)絡(luò)的更新,能保證節(jié)點(diǎn)完成代碼更新的功能。
[1] 李麗娜.無(wú)線傳感器網(wǎng)絡(luò)代碼更新技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2006.
[2] Chlipala A,Hui J,Tolle G.Deluge: data dissemination in multi-hop sensor networks[R].California: University of California at Berkeley,2003.
[3] Kulik J,Heinzelman W,Balakrishnan H.Negotiation-based protocols for disseminating information in wireless sensor networks[J].Wireless Networks,1999,8(2/3):169-185.
[4] Seo J,Kim M,Cho S H,et al.An energy and distance aware data dissemination protocol based on SPIN in wireless sensor networks[C].Grace:Computational Science and Its Applications - ICCSA,Springer Berlin Heidelberg,2008.
[5] Chiang M L,Lu T L.Two-stage diff: an efficient dynamic software update mechanism for wireless sensor networks[C].Beijing:2011 IFIP Ninth International Conference on Embedded and Ubiquitous Computing, IEEE Computer Society,2011.
[6] Lien S L,Chiang M L.Recovery mechanism for diff-based reprogramming in WSNs[C].Berlin:Ubiquitous Intelligence & Computing and 9th International Conference on Autonomic & Trusted 9th International Conference on Computing (UIC/ATC),IEEE,2012.
[7] Gauger M,MarroóN P J,Niedermeier C.TinyModules: code module exchange in TinyOS[C].MA,USA:Proceedings of the 6th International Conference on Networked Sensing Systems, IEEE Press,2009.
[8] 李麗娜.無(wú)線傳感器網(wǎng)絡(luò)代碼更新技術(shù)分析[J].吉林省經(jīng)濟(jì)管理干部學(xué)院學(xué)報(bào),2007, 21(6):84-86.
[9] 曾照星,蔣澤軍,王麗芳,等.無(wú)線傳感器網(wǎng)絡(luò)代碼更新協(xié)議研究[J].計(jì)算機(jī)測(cè)量與控制,2008,16(9):1359-1362.
[10] 況曉輝,許飛,劉麗.無(wú)線傳感器網(wǎng)絡(luò)遠(yuǎn)程代碼更新技術(shù)研究進(jìn)展[J].計(jì)算機(jī)科學(xué), 2013,40(z1):255-261.
[11] 潘淵洋,李光輝.無(wú)線傳感器網(wǎng)絡(luò)遠(yuǎn)程軟件更新技術(shù)[J].軟件導(dǎo)刊,2011,10(2):113-115.
[12] 張國(guó)萍.無(wú)線傳感器網(wǎng)絡(luò)在線代碼分發(fā)最新研究進(jìn)展[J].浙江理工大學(xué)學(xué)報(bào):自然科學(xué)版,2015,33(2):219-227.
[13] 孟碩培.無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)重編程研究與設(shè)計(jì)[D].杭州:浙江大學(xué),2008.
[14] 崔遜雪,左從菊,高浩珉.物聯(lián)網(wǎng)技術(shù)案例教程[M].北京:北京大學(xué)出版社,2013.
[15] 唐宏,謝靜,魯玉芳,等.無(wú)線傳感器網(wǎng)絡(luò)原理及應(yīng)用[M].北京:人民郵電出版社,2010.
Design of Code Update System on CC2430
WU Tao,SHI Weibin,ZHANG Lei
(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology,Shanghai 200093, China)
In view of the traditional way of node updates dull heavy ,low efficiency and cannot update defects such as special area .This paper addressing the CC2430 chip with small memory, designs a remote code update system, the remote code update system in this paper can be categorized into three parts: the upper computer, the gateway node and the sensor node. The upper computer download the updated code to gateway node by com port. The gateway node utilizes the distribution protocol to distribute the updated code to the whole network. The memory of the node is classified into guide section and program section. Different map of the memory is utilized to convert the version. And the experimental results verify the function. This system does not need off-chip memory, and it costs less resource. Through the experiment many times to update a single node with about 139 seconds. It can be widely applied to the monitor of environment, the military monitoring and nursing information system and so on.
wireless sensor network; code update; TinyOS; CC2430
2016- 03- 15
吳濤(1991-),男,碩士研究生。研究方向:無(wú)線傳感器網(wǎng)絡(luò)。施偉斌(1967-),男,副教授。研究方向:無(wú)線傳感器網(wǎng)絡(luò)等。張磊(1991-),男,碩士。研究方向:無(wú)線傳感器網(wǎng)絡(luò)。
10.16180/j.cnki.issn1007-7820.2017.01.034
TN926
A
1007-7820(2017)01-123-04