ZigBee空中下載技術(shù)研究及其優(yōu)化設(shè)計(jì)
4 驗(yàn)證與分析
4.1 功能驗(yàn)證
為了驗(yàn)證OTA功能,在CC2530F256平臺(tái)上搭建一個(gè)小型樹狀網(wǎng)絡(luò),并使用Packet Sniffer對(duì)OTA更新時(shí)的節(jié)點(diǎn)進(jìn)行抓包分析。4個(gè)傳感節(jié)點(diǎn)的固件并沒有添加溫度采集功能,所以溫度顯示為0。在新的固件中添加了溫度采集函數(shù),用于驗(yàn)證OTA更新成功。
對(duì)于某些特定應(yīng)用,需要節(jié)點(diǎn)更新固件后能夠保持原來的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。內(nèi)部Flash的NV區(qū)能夠保存節(jié)點(diǎn)的網(wǎng)絡(luò)信息,只要在工程添加NV_INIT與NV_RESTORE預(yù)編譯項(xiàng),節(jié)點(diǎn)在掉電后還能恢復(fù)原來網(wǎng)絡(luò)信息。
對(duì)4個(gè)傳感節(jié)點(diǎn)進(jìn)行OTA更新。OTA更新后,溫度采集功能成功添加,而且傳感節(jié)點(diǎn)的網(wǎng)絡(luò)短地址沒有發(fā)生變化,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)保持完整,驗(yàn)證了進(jìn)行OTA鏡像升級(jí)過程中,并不會(huì)對(duì)NV區(qū)進(jìn)行擦除,有利于節(jié)點(diǎn)網(wǎng)絡(luò)信息的恢復(fù)。
OTA服務(wù)器被配置為路由器(0x06BC),對(duì)傳感節(jié)點(diǎn)(0x0002)進(jìn)行點(diǎn)對(duì)點(diǎn)更新。第一條短幀是子路由向OTA服務(wù)器發(fā)送Image Block Reque st,應(yīng)用層載荷從第4字節(jié)開始記錄了新鏡像的制造商ID(0x5678)、鏡像類型(0x1234)、版本號(hào)(0x00000002)和鏡像塊偏移量。最后1個(gè)字節(jié)記錄了每次傳送最大鏡像塊大小(OTA_MAX_MTU),默認(rèn)為0x20,即為32字節(jié)。第二條長(zhǎng)幀是OTA服務(wù)器發(fā)送的Image Block Response,載荷記錄格式與前者類似,并在最大鏡像塊大小字節(jié)后面附上32字節(jié)鏡像塊信息,從而完成一個(gè)鏡像塊傳輸周期。
4.2 效率分析
搭建一個(gè)星形網(wǎng)絡(luò),把OTA服務(wù)器配置成協(xié)調(diào)器,把所有OTA客戶端配置成節(jié)點(diǎn),并進(jìn)行如下兩個(gè)實(shí)驗(yàn)。
4.2.1 實(shí)驗(yàn)一
為了對(duì)比分析兩種更新手段的效率,分別使用鏡像塊請(qǐng)求命令與鏡像頁(yè)請(qǐng)求命令,對(duì)節(jié)點(diǎn)進(jìn)行OTA更新。星形網(wǎng)絡(luò)中,通過廣播Image Notify,能夠?qū)Χ喙?jié)點(diǎn)進(jìn)行批量更新。網(wǎng)絡(luò)規(guī)模分別為1~6個(gè)節(jié)點(diǎn),測(cè)量了不同規(guī)模網(wǎng)絡(luò)下節(jié)點(diǎn)完成更新傳輸所需的時(shí)間。Min與Max分別
指最快與最慢完成更新傳輸?shù)墓?jié)點(diǎn)對(duì)應(yīng)的時(shí)間,Ave指平均每個(gè)節(jié)點(diǎn)完成更新傳輸所需時(shí)間(使用Max值計(jì)算)。
其中,鏡像頁(yè)請(qǐng)求設(shè)置的Response Spacing為100 ms,鏡像頁(yè)大小為640字節(jié)。鏡像大小統(tǒng)一為113 KB,并修改OTA_MAX_MTU大小為64字節(jié)。節(jié)點(diǎn)與OTA服務(wù)器間隔均為5 m。鏡像塊、鏡像頁(yè)請(qǐng)求的傳輸時(shí)間分別如表1、表2所列,響應(yīng)間隔均為100 ms。本文引用地址:http://www.biyoush.com/article/153699.htm
實(shí)驗(yàn)一中,使用鏡像塊請(qǐng)求,節(jié)點(diǎn)發(fā)送鏡像塊請(qǐng)求所需時(shí)間為15.5 ms,OTA服務(wù)器返回鏡像塊響應(yīng)所需時(shí)間實(shí)際為96 ms,來回確認(rèn)幀時(shí)間大概為1.92+3.84=5.76ms。一個(gè)更新周期傳輸鏡像塊大小為64字節(jié),完成113KB大小的鏡像傳送需要1765個(gè)周期??倳r(shí)間為(96+15.5 +5.76)×1765=206 963 ms,這與表1中的測(cè)量值207.2 s基本符合。
本文設(shè)計(jì)的鏡像頁(yè)請(qǐng)求中鏡像頁(yè)大小為640字節(jié),每次傳輸鏡像塊大小為64字節(jié),即節(jié)點(diǎn)發(fā)送1次頁(yè)請(qǐng)求可以得到10次塊響應(yīng)。當(dāng)更新1個(gè)節(jié)點(diǎn)時(shí),使用鏡像頁(yè)請(qǐng)求可以把原來的1 765條請(qǐng)求命令和1 765條確認(rèn)幀減少9/10,共減少3 177條傳輸幀。減少的傳輸幀數(shù)量隨著節(jié)點(diǎn)數(shù)目成比例增長(zhǎng)。
對(duì)比表1與表2,可以發(fā)現(xiàn)無(wú)論節(jié)點(diǎn)數(shù)目為多少,頁(yè)請(qǐng)求的平均每個(gè)節(jié)點(diǎn)的更新傳輸時(shí)間都比塊請(qǐng)求的要短。其中,發(fā)送鏡像頁(yè)請(qǐng)求時(shí)間為15.5 ms,請(qǐng)求確認(rèn)幀時(shí)間為1.92 ms,節(jié)點(diǎn)為1時(shí),共減少時(shí)間為(15.5+1.92)×1765×0.9=27 672 ms,此值與表1和表2的測(cè)量值207.2-179.6=27.6 s基本符合。
4.2.2 實(shí)驗(yàn)二
為了測(cè)試鏡像頁(yè)請(qǐng)求在點(diǎn)對(duì)點(diǎn)更新情況下的最高效率,設(shè)定最短的響應(yīng)間隔為10 ms,分別測(cè)量不同鏡像頁(yè)大小的單個(gè)節(jié)點(diǎn)更新傳輸時(shí)間。使用CC2531(支持USB)作為OTA服務(wù)器,能夠縮短服務(wù)器向應(yīng)用控制臺(tái)索取鏡像塊數(shù)據(jù)的時(shí)間,進(jìn)一步加快更新傳輸效率。鏡像大小統(tǒng)一為113 KB,OTA_MAX_MTU大小為64字節(jié),節(jié)點(diǎn)與OTA服務(wù)器間隔均為5 m。不同鏡像頁(yè)大小下的傳輸時(shí)間如表3所列。
實(shí)驗(yàn)二中,由于采用了支持USB的CC2531,能夠把OTA服務(wù)器返回的鏡像塊響應(yīng)所需時(shí)間縮短為22.5ms,節(jié)點(diǎn)發(fā)送鏡像頁(yè)請(qǐng)求所需時(shí)間保持為15.5 ms不變,來回確認(rèn)幀時(shí)間為5.76 ms。當(dāng)鏡像頁(yè)大小為64字節(jié)時(shí),傳輸所需時(shí)間為(22.5+15.5+5.76)×1765=77 236ms,也與表3中的測(cè)量值77.2 s基本相符。當(dāng)鏡像頁(yè)大小為6 400字節(jié)時(shí),即請(qǐng)求命令減少到原來的1/100,時(shí)間縮短了50 s,更新效率大幅度提高,基本達(dá)到了單個(gè)節(jié)點(diǎn)更新速度的極限。
結(jié)語(yǔ)
通過無(wú)線更新固件,免去了回收更新節(jié)點(diǎn)所需時(shí)間,可以達(dá)到更新完成后不破壞當(dāng)前網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的效果。另外,在Z-Stack協(xié)議棧設(shè)計(jì)了一種鏡像頁(yè)請(qǐng)求更新方式,實(shí)驗(yàn)結(jié)果表明,當(dāng)批量更新整個(gè)網(wǎng)絡(luò)時(shí),既可以提高節(jié)點(diǎn)的更新效率,又可以大大減小網(wǎng)絡(luò)的更新流量,并節(jié)省節(jié)點(diǎn)的功耗。當(dāng)進(jìn)行點(diǎn)對(duì)點(diǎn)更新時(shí),如果把響應(yīng)間隔縮減為10 ms,并把鏡像頁(yè)設(shè)置得足夠大,單個(gè)節(jié)點(diǎn)的更新時(shí)間可以縮減為27.3 s,接近單個(gè)節(jié)點(diǎn)更新速度的極限。至于使用批量的更新方式還是點(diǎn)對(duì)點(diǎn)的更新方式,視具體的應(yīng)用場(chǎng)合而定。
評(píng)論