譚靖宇 施偉斌
摘 要:隨著嵌入式技術的不斷發(fā)展,智能設備逐漸成為研究熱點,解決智能設備軟件版本升級問題至關重要。節(jié)點軟件升級系統(tǒng)一般分為主計算機、網(wǎng)關節(jié)點和傳感器節(jié)點3個部分。主計算機通過串口將要更新的軟件代碼發(fā)送到網(wǎng)關節(jié)點,網(wǎng)關節(jié)點通過無線傳感器網(wǎng)絡傳遞軟件代碼到傳感器節(jié)點并控制節(jié)點,以完成新版本升級。研究了CC2430芯片所適用的軟件升級系統(tǒng)。主計算機使用基于C#語言的窗體應用程序,將代碼的iHex文件分割成可變長數(shù)據(jù)包,提高主機和網(wǎng)關節(jié)點之間的代碼傳輸速率。實驗證明,該方法有效減少了主機與網(wǎng)關節(jié)點的代碼傳輸時間,提高了寫數(shù)據(jù)效率,可廣泛應用于智能家居及醫(yī)療監(jiān)測等領域。
關鍵詞:無線傳感器網(wǎng)絡;C#;可變長數(shù)據(jù)包;軟件升級系統(tǒng);TinyOS;CC2430
DOI:10. 11907/rjdk. 182765 開放科學(資源服務)標識碼(OSID):
中圖分類號:TP393文獻標識碼:A 文章編號:1672-7800(2019)008-0191-05
Research on Software Upgrade Technology of Wireless Sensor Network Based on C#
TAN Jing-yu,SHI Wei-bin
(College of Photoelectric Information and Computer Engineering,
University of Shanghai for Science and Techology,Shanghai 200093,China)
Abstract: With the continuous development of embedded technology, smart devices for application chips have gradually become a hot field of research, and it is very important to solve the problem of software version upgrade on smart devices. A node software upgrade system can be generally divided into three parts: upper computer, gateway node and sensor node. The host computer transmits the software code to be updated to the gateway node through the serial port, and the gateway node sends the software code to the sensor node through the wireless sensor network and controls the node to complete the new version upgrade. The software upgrade system applied to the CC2430 chip is studied. The form application that is based on the C# language is used to divide the iHex file of the code into variable-length data packets, which improves the code transmission rate between the host computer and the gateway node. The experiment proves that the method effectively reduces the code transmission time of the host computer and the gateway node, improves the efficiency of writing data, and can be widely used in the fields of smart home and medical monitoring.
Key Words:? WSNs;C#;variable length packet;software upgrade system;TinyOS; CC2430
作者簡介:譚靖宇(1993-),女,上海理工大學光電信息與計算機工程學院碩士研究生,研究方向為無線傳感器網(wǎng)絡;施偉斌(1967-),男,上海理工大學光電信息與計算機工程學院副教授、碩士生導師,研究方向為無線傳感器網(wǎng)絡。本文通訊作者:譚靖宇。
0 引言
隨著無線通信技術、傳感器技術、嵌入式技術的日趨進步,具有小尺寸、低功耗、價格低廉等優(yōu)點的微型傳感器節(jié)點越來越多地運用在各種場景中。這些節(jié)點分布于檢測區(qū)域內,能以無線方式自組成傳感器網(wǎng)絡(Wireless Sensor Networks,WSNs)[1]。由于這些節(jié)點能夠感知和處理周圍環(huán)境消息并將數(shù)據(jù)通過無線的方式傳播,因此針對這一特點的研究很多,推動了環(huán)境監(jiān)測、智能家居、醫(yī)療健康等領域的發(fā)展[2]。
代碼分發(fā)[3-4]是大量嵌入式設備升級軟件時面臨的首要問題。在一些檢測場景中節(jié)點數(shù)量龐大,部署環(huán)境惡劣,手動升級節(jié)點程序不但效率低下,而且任務繁重,通過無線傳感器網(wǎng)絡實現(xiàn)遠程軟件升級能較好解決這一問題。
代碼分發(fā)代表性研究有:針對新版本程序比舊版本改動較少的情況,文獻[5-6]計算新舊鏡像的差異,只傳輸少量差異數(shù)據(jù),減少了能耗,但增大了恢復代碼時的計算能耗和實現(xiàn)難度;文獻[7]基于模塊化分析了不同的分發(fā)方法,提出了免重啟代碼更新方式,提高了代碼更新效率;文獻[8]基于多跳的Deluge協(xié)議提出了一種防止DoS攻擊的分發(fā)協(xié)議,利用信息驗證機制保證代碼分發(fā)過程安全。
隨著WSN的發(fā)展,進入遠程代碼分發(fā)技術研究階段。文獻[9]提出了基于多播樹的分發(fā)協(xié)議,各節(jié)點建立分發(fā)的路由方法,每個節(jié)點基于該路由將新數(shù)據(jù)傳輸給當前節(jié)點的子節(jié)點,最后完成整個代碼的傳輸;西安電子科技大學研究人員[10]把分發(fā)過程分為5個階段,以保證數(shù)據(jù)能完整傳輸?shù)礁鞴?jié)點,并用TOSSIM[11]進行了仿真實驗;浙江大學研究人員[12]將ELF文件格式(可執(zhí)行與可鏈接格式)特點與WSN結合,使節(jié)點接收到新版本文件后再進行鏈接,實現(xiàn)了模塊化更新功能,可適用傳輸差異模塊,達到降低傳輸量的目的;文獻[13-14]同樣利用ELF文件進行代碼差異分析,僅傳輸補丁文件,到達節(jié)點后再修補鏈接。
目前研究重點基本都在分發(fā)數(shù)據(jù)的處理方式和分發(fā)協(xié)議上,一些方式雖然減少了傳輸時間和能耗,但增大了鏈接運算,如ELF為中間文件,需要額外的存儲空間,鏈接完成后不能刪除,要進一步基于文件進行分發(fā)。本文在分析代碼分發(fā)協(xié)議[15-16]基礎上,針對存儲空間較小的芯片進行WSN軟件升級技術研究,將主要的計算任務交給主機,避免了節(jié)點做大量運算,提高了軟件升級時代碼傳輸效率。同時將可變長數(shù)據(jù)包概念引入到代碼分發(fā)過程中,通過傳輸更多代碼,減少設備執(zhí)行次數(shù),提高了效率。
1 軟件升級過程
本文研究的軟件升級系統(tǒng)由主計算機、網(wǎng)關節(jié)點和傳感器節(jié)點3部分組成。主計算機程序用C#語言編寫,采用Windows平臺的Visual Studio2017進行設計。網(wǎng)關節(jié)點和傳感器節(jié)點安裝TI的CC2430微控制芯片[17],內置128kB閃存,可存儲多個版本的應用程序。該節(jié)點的軟件平臺選用加州大學伯克利分校研發(fā)的TinyOS操作系統(tǒng)[11],節(jié)點程序用nesC語言編寫[18]。為實現(xiàn)WSN軟件升級,需要對主計算機、網(wǎng)關節(jié)點以及傳感器節(jié)點分別設計,最終實現(xiàn)代碼從主計算機完整傳給網(wǎng)關節(jié)點,網(wǎng)關節(jié)點再分發(fā)給全網(wǎng)絡的傳感器節(jié)點過程。主機使用控制程序通過串口發(fā)送命令設置波特率,重啟、分配、停止等到網(wǎng)關節(jié)點;網(wǎng)關節(jié)點接到指令后作出相應動作,將需要廣播的指令或代碼分發(fā)到全網(wǎng)的傳感器節(jié)點;傳感器節(jié)點1,2使用分發(fā)協(xié)議接收完整程序,節(jié)點3從節(jié)點2接收轉發(fā)的新版本程序,并在接收到的整個網(wǎng)絡上重啟指令后啟用新版本程序,代碼分發(fā)過程如圖1所示。
圖1 WSN軟件升級過程
1.1 主計算機代碼傳輸
代碼分發(fā)系統(tǒng)主計算機由C#語言編寫窗體應用程序,包含設置傳輸波特率、設置數(shù)據(jù)包大小,以及發(fā)送分發(fā)、重啟、停止命令等功能,如圖2所示。
圖2 主計算機窗體軟件界面
可根據(jù)iHex文件的結構特點調整每個數(shù)據(jù)包的大小。圖3為iHex文件存儲格式。iHex文件是一個十六進制文件,每行第一字節(jié)為起始符號“:”,之后每兩個十六進制數(shù)代表一個字節(jié)。第一個字節(jié)代表本行所含數(shù)據(jù)字節(jié)的個數(shù),第二第三字節(jié)代表本行的存儲地址。大部分數(shù)據(jù)的存儲地址是連續(xù)的,基于這個特點,可將多行合并為同一個數(shù)據(jù)包傳輸。本文主計算機軟件可選擇每個數(shù)據(jù)包中包含的行數(shù),1-12行不等。
圖3 iHex文件存儲格式
1.2 存儲空間映射
CC2430的存儲器空間映射為外部數(shù)據(jù)存儲空間和代碼存儲空間兩個部分。CC2430有16位尋址能力,無論映射到哪個存儲空間,最大可訪問64KB,最大可訪問地址為0xFFFF,必須通過Bank映射方式才能訪問到整個128KB的Flash。
代碼存儲空間分為統(tǒng)一映射和非統(tǒng)一映射,由MEMCTR寄存器的MUNIF位進行控制。芯片復位時從0x0000開始運行。
外部數(shù)據(jù)存儲器主要對硬件寄存器以及SRAM進行讀寫操作。讀取Flash需要改變代碼存儲空間的映射方式,把高位地址映射到對應的Bank,即可從此Bank里讀取數(shù)據(jù),讀取數(shù)據(jù)后要返回代碼運行現(xiàn)場。因為代碼存儲器為只讀形式,所以對Flash執(zhí)行寫操作只能通過CC2430內部的Flash控制器進行。在寫Flash過程中不能執(zhí)行讀Flash操作,而正常情況下讀操作的代碼在Flash內部,為了順利寫入代碼,需要把寫操作相關的函數(shù)以十六進制符號的形式存入CC2430的SRAM中,具體寫操作代碼如下:
將寫代碼放入SRAM中,用統(tǒng)一的方式映射代碼存儲空間,程序跳轉至SRAM的寫函數(shù)執(zhí)行寫操作,完成后跳回Flash內的代碼處,并改為非統(tǒng)一映射方式。
此外,為了增加代碼存儲空間,需添加啟動引導模塊。啟動引導程序作為一個完整的程序放在 Bank0中,節(jié)點啟動后讀取啟動信息,按啟動信息進行設置并跳轉。啟動引導程序有讀取版本信息、映射到版本所在 Bank、跳轉到0x8000地址執(zhí)行新版本程序3個步驟,如圖4所示。
圖4 Flash存儲器空間配置
1.3 代碼分發(fā)協(xié)議
TinyOS系統(tǒng)自帶Trickle[19]及Deluge[20]兩種分發(fā)協(xié)議,兩種協(xié)議都有優(yōu)點和缺點,將其結合能更好地發(fā)揮作用。
Trickle協(xié)議是一種通過動態(tài)調整參數(shù)適應不同網(wǎng)絡環(huán)境的自適應協(xié)議。該協(xié)議分為維護階段和更新階段。協(xié)議中每個節(jié)點周期性對外廣播信息。維護階段全網(wǎng)絡節(jié)點版本一致,不需要傳輸新數(shù)據(jù),所以應盡可能延長廣播周期以降低開銷,分發(fā)階段要盡可能縮短廣播周期以便快速分發(fā)。因為Trickle協(xié)議具有動態(tài)調整廣播周期的能力,使用偵聽和抑制發(fā)送技術,所以即使在節(jié)點密度較高的環(huán)境下也可實現(xiàn)高效率運行。
Deluge協(xié)議屬于泛洪式分發(fā)協(xié)議,即分發(fā)代碼時通過廣播的形式擴散至各節(jié)點。Deluge協(xié)議有對全網(wǎng)絡節(jié)點下達分發(fā)代碼、重啟節(jié)點和啟用新版本命令的功能;還擁有將代碼分割成多頁,進行代碼分發(fā)的功能。其中代碼分發(fā)過程為流水線模式,即使節(jié)點沒有接收到全部的頁,也可以廣播已完整接收的頁,顯著提高了更新效率。
本遠程軟件升級系統(tǒng)中的節(jié)點使用CC2430芯片,將分發(fā)過程分為維護、RX和TX階段。由于Deluge協(xié)議的管道技術不會提高代碼傳輸速率,因此系統(tǒng)取消了管道技術。在節(jié)點接收到所有頁面然后分發(fā)它們之后,減輕了接收端負擔。Trickle協(xié)議適用于少量數(shù)據(jù)分發(fā),如所有節(jié)點重新啟動、切換版本、分發(fā)代碼等,并且控制命令的內容包含要分發(fā)的代碼及版本信息。通過將網(wǎng)絡中的版本信息與節(jié)點的當前版本進行比較,可以確定節(jié)點是接收還是分發(fā)狀態(tài)。 更新過程如圖5所示,由網(wǎng)關節(jié)點、傳感器節(jié)點A、B、C和4個節(jié)點組成。其中,節(jié)點A和B在網(wǎng)關節(jié)點的一跳范圍內,節(jié)點C遠離網(wǎng)關節(jié)點,不能直接通信。最初,每個節(jié)點處于維護狀態(tài)并隨機廣播ADV消息,以確保整個網(wǎng)絡中的節(jié)點版本一致。某一刻主計算機傳輸新版本代碼至網(wǎng)關節(jié)點并發(fā)出代碼分發(fā)控制命令時,則分發(fā)階段開始。分發(fā)過程如下:
(1)網(wǎng)關節(jié)點利用Trickle協(xié)議發(fā)送CTL消息,將該消息發(fā)送至整個網(wǎng)絡,其中包含最新版本號和最新版本文件大小。
(2)各節(jié)點隨機發(fā)送ADV消息,ADV消息中包含當前節(jié)點的版本信息。在節(jié)點發(fā)現(xiàn)網(wǎng)絡中存在新版本信息后會盡快廣播ADV消息,以便周圍節(jié)點知道是最新版本。
(3)節(jié)點A、B接收到網(wǎng)關節(jié)點發(fā)送的ADV消息,得知網(wǎng)關節(jié)點有待發(fā)送的新版本文件后即進入RX狀態(tài),節(jié)點A先一步向網(wǎng)關節(jié)點發(fā)送REQ消息。
(4)從節(jié)點A接收到REQ消息后,網(wǎng)關節(jié)點進入TX狀態(tài)并廣播Data數(shù)據(jù)。
圖5 WSN軟件升級流程
2 實驗
對WSN軟件升級過程進行實驗,首先對主計算機使用可變長數(shù)據(jù)包傳輸代碼至網(wǎng)關節(jié)點的過程進行實驗。在9 600bps的串口傳輸速率下,可變長數(shù)據(jù)包傳輸與傳統(tǒng)按行傳輸效率(當數(shù)據(jù)包大小為一行數(shù)據(jù)時,傳輸時間和傳統(tǒng)按行傳輸時間一致,即表1第1行)對比如表1所示。可以看出使用可變長數(shù)據(jù)包傳輸代碼最高能節(jié)省80.61%的時間,且丟包率極低。
以最高115 200bps的串口傳輸速率,每個數(shù)據(jù)包最大包含12行數(shù)據(jù)情況下耗時最少,為7.042s,證明使用可變長數(shù)據(jù)包的傳輸方式最高能節(jié)省93.87%的傳輸時間。
表1 波特率為9600時不同包大小傳輸情況
再對網(wǎng)關節(jié)點通過WSN分發(fā)程序代碼進行實驗。使用SmartRF[21]進行調試,使用網(wǎng)關節(jié)點和多個傳感器節(jié)點,傳感器節(jié)點隨機分布在網(wǎng)關節(jié)點周圍,可直接與網(wǎng)關節(jié)點通信及相互通信。實驗分發(fā)代碼大小為29.34KB,傳感器節(jié)點的數(shù)量從1開始到24逐漸增加,分發(fā)位置如圖6所示。網(wǎng)關節(jié)點從主計算機接收指令并進行分發(fā)。
圖6 單跳節(jié)點位置
圖7顯示更新整個網(wǎng)絡中不同數(shù)量節(jié)點的代碼所需時間。當網(wǎng)絡中只有一個節(jié)點時,需要140s。發(fā)送REQ的等待時間是隨機的,當整個網(wǎng)絡中的節(jié)點數(shù)量增加時,整個REQ時間將相對減少,并且分發(fā)速度將更快。當網(wǎng)絡中存在丟包情況時,如果一個節(jié)點接收到ADV消息而另一個節(jié)點沒有接收到,則仍然可以確保該節(jié)點向網(wǎng)關節(jié)點發(fā)送REQ消息,不必等待網(wǎng)關節(jié)點第二次發(fā)送ADV消息,這也加快了分發(fā)速度。
圖7 節(jié)點更新時間
當傳感器節(jié)點數(shù)增加到11時,分配速度開始下降。無線信道相對于有線傳輸?shù)姆€(wěn)定性差,當節(jié)點數(shù)量增加時,分組丟失的可能性增加,即網(wǎng)絡中的重傳次數(shù)增加,導致分發(fā)速度降低。在同時更新多個節(jié)點過程中,如果節(jié)點A沒有接收到某個分組,則其對重傳信息的請求可能被其它節(jié)點淹沒。也就是說,其它節(jié)點搶先從網(wǎng)關節(jié)點請求數(shù)據(jù)分組。如果節(jié)點A不需要其它節(jié)點請求的數(shù)據(jù)包,則節(jié)點A不能直接從網(wǎng)關節(jié)點獲取數(shù)據(jù)包,必須等到其它節(jié)點更新后才能繼續(xù)從丟失數(shù)據(jù)的位置接收新數(shù)據(jù)。因此,在節(jié)點數(shù)量增加后,單個節(jié)點的數(shù)據(jù)包丟失將增加整個網(wǎng)絡更新時間。
在無線信道環(huán)境足夠理想的情況,更新數(shù)量較多的節(jié)點(如19個以上),其更新速度與更新節(jié)點數(shù)量無關。
在多跳實驗中,每個節(jié)點位于圖8位置,并且網(wǎng)關節(jié)點和上位計算機放置在實驗室中,傳感器節(jié)點A放置在實驗室門上,傳感器節(jié)點B放置在走廊中。傳感器節(jié)點A可直接與網(wǎng)關節(jié)點和傳感器節(jié)點B通信,網(wǎng)關節(jié)點和傳感器節(jié)點B不能直接相互通信。在更新過程中,網(wǎng)關節(jié)點首先將代碼分發(fā)給傳感器節(jié)點A,然后傳感器節(jié)點A將代碼分發(fā)給傳感器節(jié)點B,待更新代碼的大小同樣為29.34KB。
圖8 多跳節(jié)點位置
在分發(fā)過程中,為了形成多跳網(wǎng)絡,節(jié)點之間的距離被設置得很遠,接收信號強度被削弱,更容易受到干擾,因此丟包的概率顯著增加。傳感器節(jié)點A多次向網(wǎng)關節(jié)點發(fā)送重發(fā)請求, 225s后,網(wǎng)關節(jié)點到傳感器節(jié)點A的更新完成,另外使用了508s完成所有更新,共計733s。
將一跳的節(jié)點放置在傳感器節(jié)點A和傳感器節(jié)點B的旁邊,此時完成多跳網(wǎng)絡更新時間縮短為487s。與僅有的2個傳感器節(jié)點相比,更新速度得到較大提高。當節(jié)點數(shù)量增加時,接收分組的概率也相對增加,從而縮短了更新所花費的時間。多跳網(wǎng)絡的理想更新時間是當前網(wǎng)絡跳躍乘以單跳網(wǎng)絡時間。通常會發(fā)生丟包,并且當數(shù)據(jù)無法正常傳輸?shù)焦?jié)點時更新時間會延長。
3 結語
本文研究了基于C#的無線傳感網(wǎng)絡軟件升級技術,通過C#編寫窗體應用程序實現(xiàn)可變長數(shù)據(jù)包傳輸功能,提高了主計算機與網(wǎng)關節(jié)點通過串口傳輸數(shù)據(jù)的效率,在最好的情況下代碼傳輸時長僅為7.042s,對比傳統(tǒng)的按行傳輸方式節(jié)省了高達93.87%的傳輸時間,效果顯著。整個WSN軟件升級系統(tǒng)基于CC2430芯片的存儲特點,將存儲空間劃分為引導部分和程序部分,方便根據(jù)不同存儲器映射方式進行版本切換。此外還對TinyOS操作系統(tǒng)自有代碼分發(fā)協(xié)議進行改進,結合Trickle協(xié)議和Deluge協(xié)議,增加軟件升級系統(tǒng)在維護狀態(tài)和更新狀態(tài)時切換的靈活性。通過實驗驗證了本文WSN軟件升級系統(tǒng)的更新功能,從單個節(jié)點更新到多個節(jié)點更新乃至多跳更新,系統(tǒng)都能順利完成。
參考文獻:
[1] 錢志鴻,王義君. 面向物聯(lián)網(wǎng)的無線傳感器網(wǎng)絡綜述[J]. 電子與信息學報,2013,35(1):215-227.
[2] 孫龍. 無線傳感器網(wǎng)絡應用系統(tǒng)最新進展綜述[J]. 中國新通信,2015,17(6):112-115.
[3] 任萬春. 無線傳感器網(wǎng)絡重編程技術研究與設計[D]. 南京:南京信息工程大學,2014.
[4] 張國萍. 無線傳感器網(wǎng)絡在線代碼分發(fā)最新研究進展[J]. 浙江理工大學學報,2015,33(2):219-227.
[5] CHIANG M L,LU T L. Two-stage diff:an efficient dynamic software update mechanism for wireless sensor networks[C].? 2011 IFIP Ninth International Conference on Embedded and Ubiquitous Computing. IEEE Computer Society,2011:294-299.
[6] LIEN S L,CHIANG M L. Recovery mechanism for diff-based reprogramming in WSNS[C]. Ubiquitous Intelligence&Computing and 9th International Conference on Autonomic&Trusted Computing(UIC/ATC),2012:835-840.
[7] LAW Y W,WANG W C,KUO S Y. Ubiquitous Intelligence&Computing[M]. Berlin:Springer,2011.
[8] CHI T Y,ZHANG Y,JIN J,et al. Secure rateless deluge:pollution-resistant reprogramming and data dissemination for wireless sensor networks[J]. Eurasip Journal on Wireless Communications & Networking, 2011(3):204-218.
[9] 任萬春,馬廷淮,劉琦. 一種基于多播分發(fā)樹的無線傳感器網(wǎng)絡代碼分發(fā)協(xié)議[J]. 傳感器與微系統(tǒng),2014,33(11):149-152.
[10] 侯彤. 無線傳感器網(wǎng)絡空中加載技術的研究[D]. 西安:西安電子科技大學, 2011.
[11] UNIVERSITY OF CALIFORNIA AT BERKELEY. Tinyos document[EB/OL]. http://tinyos.stanford.edu/tinyos-wiki/index.php/TinyOS_ Tutorials.
[12] 孟碩培. 無線傳感器網(wǎng)絡節(jié)點重編程研究與設計[D]. 杭州:浙江大學,2008.
[13] 汪治理,張勇,劉紅. 一種基于代碼克隆檢測技術的WSNs重編程方法[J]. 傳感技術學報,2014, 26(9):1288-1292.
[14] 何偉賢,劉建明,李宏周,等. TinyOS遠程動態(tài)代碼更新方法[J]. 儀表技術與傳感器,2013(1):19-22.
[15] 吳濤,施偉斌,張磊. 基于CC2430的代碼更新系統(tǒng)設計[J]. 電子科技,2017,30(1):123-125.
[16] 錢歡,施偉斌. 基于Android的無線傳感器網(wǎng)絡代碼更新系統(tǒng)設計[J]. 軟件導刊,2017,16(12):125-127.
[17] 高山,袁杰. 基于無線傳感器網(wǎng)絡節(jié)點的串行通信技術[J]. 現(xiàn)代電子技術,2010,33(18):151-153.
[18] 何偉賢,劉建明,彭智勇,等. TinyOS跨平臺移植方法研究與實現(xiàn)[J]. 微計算機信息,2012,28(9):356-358.
[19] LEVIS P,PATEL N,SHENKER S,et al. Trickle:a self-regulating algorithm for code propagation and maintenance in wireless sensor networks technical report[R]. California: University of California at Berkeley,2003.
[20] CHLIPALA A,HUI J,TOLLE G. Deluge:data dissemination in multi-hop sensor networks[R]. California:University of California at Berkeley,2003.
[21] TEXAS INSTRUMENTS. SmartRFTM packet sniffer user's manual (Rev. G)[EB/OL]. http://www.ti.com/tool/packet-sniffer.
(責任編輯:杜能鋼)