一種無(wú)線傳感器網(wǎng)絡(luò)CSMA協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)
本文參照CCA的閾值機(jī)制,設(shè)置上下閾值并利用CC2420讀取RSSI采樣值的命令,用軟件來(lái)完成信道監(jiān)測(cè)工作。本文使用的信道監(jiān)測(cè)及判定的基本原理就是: 先設(shè)置兩個(gè)適當(dāng)?shù)男盘?hào)強(qiáng)度閾值,一個(gè)是最小信號(hào)強(qiáng)度minSignal,其含義是信道中有數(shù)據(jù)發(fā)送時(shí)的最小信號(hào)強(qiáng)度值;另一個(gè)是噪聲強(qiáng)度noiseStrength,其含義是信道空閑時(shí)的信號(hào)強(qiáng)度值。然后物理層在一段時(shí)間內(nèi)不斷地進(jìn)行RSSI采樣,并把采樣結(jié)果按照某種規(guī)則(在實(shí)現(xiàn)中有具體說(shuō)明)與閾值進(jìn)行比較,從而得到信道的活動(dòng)狀態(tài)。而且為了更準(zhǔn)確地反映信道狀態(tài),在不能判斷信道活動(dòng)狀態(tài)時(shí),還應(yīng)有擴(kuò)展采樣機(jī)制。
另外,這兩個(gè)信號(hào)強(qiáng)度閾值并不是一直不變的,它們必須根據(jù)信道一段時(shí)期的信號(hào)強(qiáng)度情況來(lái)動(dòng)態(tài)更新,因此本文還實(shí)現(xiàn)了一種閾值更新機(jī)制,它能根據(jù)當(dāng)前的信道信號(hào)強(qiáng)度和一些強(qiáng)度統(tǒng)計(jì)信息來(lái)動(dòng)態(tài)地更新閾值。
從接口上看,物理層的信道監(jiān)測(cè)只是提供給MAC層的CSMA協(xié)議一個(gè)探測(cè)信道的接口。為了設(shè)計(jì)一個(gè)靈活的信道探測(cè)接口給上層,就必須給上層一些調(diào)整的接口,例如可以讓上層來(lái)設(shè)定具體某次監(jiān)測(cè)的采樣次數(shù),這樣上層就可以根據(jù)不同的實(shí)際情況來(lái)設(shè)定采樣數(shù)。圖2為物理層信道監(jiān)測(cè)提供的接口與MAC層CSMA的關(guān)系簡(jiǎn)圖。
圖2 信道監(jiān)測(cè)接口與CSMA關(guān)系簡(jiǎn)圖
2 信道監(jiān)測(cè)的實(shí)現(xiàn)
2.1 信道活動(dòng)狀態(tài)判斷的基本規(guī)則
采樣得到的RSSI值是一個(gè)有符號(hào)的振幅值,它只有一個(gè)字節(jié)。這樣的值并不利于分析,所以統(tǒng)一將其值上升128,即對(duì)讀出的RSSI值統(tǒng)一加上128,因此轉(zhuǎn)換后的值都是為正的,后面提到的RSSI值指的都是轉(zhuǎn)換后的值。
假設(shè)上層設(shè)定信道采樣窗口數(shù)為N。為了完成連續(xù)的N次采樣,需要使用一個(gè)采樣定時(shí)器。CC2420的RSSI采樣時(shí)間約為128 μs,再加上硬件延遲以及軟件處理延遲時(shí)間,采樣定時(shí)器設(shè)置為1 ms循環(huán)觸發(fā)(這1 ms的采樣在CSMA中稱(chēng)為“采樣窗口”)。每次定時(shí)器觸發(fā)后,就向CC2420發(fā)送命令讀取當(dāng)前信道的RSSI值,然后采用如下規(guī)則進(jìn)行信道活動(dòng)狀態(tài)判斷:
① 如果采樣到的RSSI值大于等于閾值minSignal,那么就判定信道正被其他節(jié)點(diǎn)使用,即使采樣未滿(mǎn)N次也不再采樣,并立即通知上層協(xié)議信道正被使用。反之如果該次采樣監(jiān)測(cè)岀的值小于或等于minSignal,那么本次采樣不做任何判斷,繼續(xù)下次的采樣。
② 如果一直采樣到最后,且最后一次的RSSI值小于noiseLevel(噪聲強(qiáng)度),那么就判定信道為空閑,并給出修改閾值標(biāo)志,通知上層可以發(fā)送數(shù)據(jù)。注意,只要判定為信道空閑,就要給出更新閾值標(biāo)志,原因?qū)⒃诤竺娴拈撝稻S護(hù)中說(shuō)明。
如上所述,只要采樣值大于等于minSignal,就判定信道是繁忙的,而判定信道空閑時(shí)卻要求所有的采樣都小于minSignal,且最后一次的采樣值要小于noiseLevel。然而上面兩個(gè)規(guī)則并不完善,并不能處理任何情況,以下兩種情況就不能得出結(jié)論: 最后一次采樣岀錯(cuò)沒(méi)有得到RSSI值,或者最后一次采樣的RSSI值介于noiseLevel和minSignal之間。此時(shí)就必須使用擴(kuò)展規(guī)則。
2.2 信道活動(dòng)狀態(tài)判斷的擴(kuò)展規(guī)則
擴(kuò)展規(guī)則是為了處理基本規(guī)則不能解決的問(wèn)題。擴(kuò)展規(guī)則其實(shí)就是擴(kuò)展m次采樣,在這m次的擴(kuò)展采樣中使用對(duì)應(yīng)的擴(kuò)展規(guī)則來(lái)判定信道狀態(tài)。擴(kuò)展規(guī)則涉及一些統(tǒng)計(jì)的方法,需要維護(hù)一個(gè)extCSVal的統(tǒng)計(jì)變量。擴(kuò)展規(guī)則如下:
① 擴(kuò)展采樣中,判定信道繁忙的規(guī)則與基本規(guī)則一樣。只要檢查到采樣RSSI值大于等于minSignal,就判定為信道忙,然后結(jié)束擴(kuò)展采樣。
② 信道空閑的判定與基本規(guī)則不同,因?yàn)橐呀?jīng)處于擴(kuò)展采樣,所以只要檢查到采樣RSSI值小于noiseLevel,就可判定信道為空閑,同時(shí)給出更新閾值的標(biāo)志。
③ 如果在擴(kuò)展采樣中并沒(méi)有出現(xiàn)以上兩種情況,那么就必須要計(jì)算extCSVal來(lái)做判斷。先說(shuō)明賦給extCSVal的初值,如果最后一次基本采樣的RSSI值介于兩閾值之間,那么直接將這個(gè)RSSI值賦給extCSVal;如果最后一次基本采樣讀取RSSI失敗,那么將第一次擴(kuò)展采樣得到的介于兩閾值之間的RSSI值賦給extCSVal。如果extCSVal已經(jīng)賦值,而擴(kuò)展采樣中又得到了介于兩閾值之間的RSSI值,那么更新extCSVal值:extCSVal = (extCSVal + RSSI)1(即取平均值)。
④ 如果m次擴(kuò)展采樣,依靠前兩個(gè)規(guī)則仍然不能判斷信道狀態(tài),且最后一次擴(kuò)展采樣的結(jié)果仍然介于兩者之間,那就使用統(tǒng)計(jì)值extCSVal來(lái)輔助判斷。規(guī)則如下:如果extCSVal> = ((minSignal + noiseLevel)1),那么就判定信道忙;反之,則判定信道空閑。
⑤ 最后是最壞的一種情況:當(dāng)擴(kuò)展采樣的最后一次采樣發(fā)生錯(cuò)誤,讀取RSSI值失敗時(shí),并不知道信道的實(shí)際狀況,但也不能一直擴(kuò)展下去,所以判斷為信道繁忙以避免出錯(cuò)。
評(píng)論