《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 無線傳感器網(wǎng)絡(luò)CSMA協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)
無線傳感器網(wǎng)絡(luò)CSMA協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)
Icbuy
Icbuy
摘要:  本文使用TI公司的MSP4301611超低功耗MCU,以及CC2420射頻芯片作為硬件實(shí)驗(yàn)平臺(tái),充分利用CC2420部分IEEE 802.15.4協(xié)議MAC封裝的特性,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)全新的、靈活的CSMA協(xié)議。
Abstract:
Key words :
  CSMA協(xié)議是網(wǎng)絡(luò)中運(yùn)用得最為廣泛的競爭協(xié)議,因此無線傳感器網(wǎng)絡(luò)的MAC層大多使用CSMA機(jī)制來提供競爭信道的功能。隨著IEEE 802.15.4標(biāo)準(zhǔn)的制定,各射頻芯片廠家也紛紛推出了性能更好、功能更強(qiáng)的射頻芯片。TI公司(原Chipcon)推出CC2420來替代原來無線傳感器網(wǎng)絡(luò)使用最多的射頻芯片CC1000。由于各射頻芯片特性功能各不相同,為了使CSMA協(xié)議達(dá)到更好的性能,根據(jù)射頻芯片的具體特性來重新優(yōu)化設(shè)計(jì)CSMA機(jī)制也就變得很有必要。

  本文使用TI公司的MSP4301611超低功耗MCU,以及CC2420射頻芯片作為硬件實(shí)驗(yàn)平臺(tái),充分利用CC2420部分IEEE 802.15.4協(xié)議MAC封裝的特性,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)全新的、靈活的CSMA協(xié)議。

  1信道監(jiān)測的設(shè)計(jì)

  實(shí)現(xiàn)CSMA協(xié)議的最基本的條件就是物理層必須提供可靠、實(shí)用的信道監(jiān)測手段,因此首先要了解射頻芯片的一些特性。

  1.1CC2420的相關(guān)特性

  CC2420是TI公司推出的2.4 GHz射頻芯片,其硬件封裝支持部分IEEE 802.15.4的MAC層協(xié)議規(guī)定。CC2420的功能結(jié)構(gòu)如圖1所示,CC2420的數(shù)字接口具有自動(dòng)CRC校驗(yàn)、自動(dòng)加密的功能,并維護(hù)兩個(gè)緩沖區(qū)(一個(gè)接收FIFO,一個(gè)發(fā)送FIFO)。數(shù)字接口通過SPI通信接口與微處理器相連。CC2420是以數(shù)據(jù)包為單位的射頻芯片,即必須從微處理器收滿一個(gè)數(shù)據(jù)包,才會(huì)發(fā)送該數(shù)據(jù)包。數(shù)字接口收滿一整包后,自動(dòng)添加CRC校驗(yàn),并送入調(diào)制模塊進(jìn)行數(shù)據(jù)調(diào)制和整形,最后發(fā)送出去。當(dāng)監(jiān)測到信道有數(shù)據(jù)時(shí),將數(shù)據(jù)經(jīng)過模/數(shù)轉(zhuǎn)換后送入數(shù)字解調(diào)器中進(jìn)行幀同步;如果同步就將數(shù)據(jù)填入接收緩沖區(qū)中,最后填充當(dāng)前信道內(nèi)的RSSI(Receive Signal Strength Indicator,接收信號(hào)強(qiáng)度指示器)信息。

按此在新窗口瀏覽圖片

圖1CC2420功能結(jié)構(gòu)圖

  CC2420提供一個(gè)讀取RSSI值的命令,開發(fā)者可以調(diào)用該命令來得到當(dāng)前信道的信號(hào)強(qiáng)度值,并通過對(duì)該值的解析來判定當(dāng)前信道是空閑還是繁忙。另外,CC2420在接收到數(shù)據(jù)包時(shí),可以自動(dòng)在數(shù)據(jù)包的倒數(shù)第二個(gè)字節(jié)里填充當(dāng)前接收數(shù)據(jù)包時(shí)的RSSI值。這種特性對(duì)于信號(hào)強(qiáng)度閾值的更新維護(hù)十分有用。

  1.2信道監(jiān)測的設(shè)計(jì)

  CC2420提供了一項(xiàng)CSMACA的功能,稱為CCA(Clear Channel Assessment,空閑信道評(píng)估),它使用一個(gè)寄存器來設(shè)置閾值。當(dāng)CC2420收到CCA命令后,就開始采樣RSSI值,只有采樣到的RSSI值小于寄存器中的閾值時(shí)才允許發(fā)送數(shù)據(jù)。CCA雖然實(shí)現(xiàn)了信道監(jiān)測的基本功能,但是也有其自身的缺點(diǎn): 不夠靈活且開放程度不夠,只能進(jìn)行一次完整的通道監(jiān)測,并不能設(shè)置采樣次數(shù)。這就限制了它在其他協(xié)議中的使用,例如在LPL(Low Power Listening,低功耗偵聽)協(xié)議中,只需要進(jìn)行一次采樣作為偵聽。另外,它的判定機(jī)制并不夠完善,只有一個(gè)閾值,因而開發(fā)者難以找到合適的閾值。

  本文參照CCA的閾值機(jī)制,設(shè)置上下閾值并利用CC2420讀取RSSI采樣值的命令,用軟件來完成信道監(jiān)測工作。本文使用的信道監(jiān)測及判定的基本原理就是: 先設(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)中有具體說明)與閾值進(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)度情況來動(dòng)態(tài)更新,因此本文還實(shí)現(xiàn)了一種閾值更新機(jī)制,它能根據(jù)當(dāng)前的信道信號(hào)強(qiáng)度和一些強(qiáng)度統(tǒng)計(jì)信息來動(dòng)態(tài)地更新閾值。

  從接口上看,物理層的信道監(jiān)測只是提供給MAC層的CSMA協(xié)議一個(gè)探測信道的接口。為了設(shè)計(jì)一個(gè)靈活的信道探測接口給上層,就必須給上層一些調(diào)整的接口,例如可以讓上層來設(shè)定具體某次監(jiān)測的采樣次數(shù),這樣上層就可以根據(jù)不同的實(shí)際情況來設(shè)定采樣數(shù)。圖2為物理層信道監(jiān)測提供的接口與MAC層CSMA的關(guān)系簡圖。

按此在新窗口瀏覽圖片

圖2信道監(jiān)測接口與CSMA關(guān)系簡圖

  2信道監(jiān)測的實(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中稱為“采樣窗口”)。每次定時(shí)器觸發(fā)后,就向CC2420發(fā)送命令讀取當(dāng)前信道的RSSI值,然后采用如下規(guī)則進(jìn)行信道活動(dòng)狀態(tài)判斷:

 ?、偃绻蓸拥降腞SSI值大于等于閾值minSignal,那么就判定信道正被其他節(jié)點(diǎn)使用,即使采樣未滿N次也不再采樣,并立即通知上層協(xié)議信道正被使用。反之如果該次采樣監(jiān)測岀的值小于或等于minSignal,那么本次采樣不做任何判斷,繼續(xù)下次的采樣。

 ?、谌绻恢辈蓸拥阶詈?,且最后一次的RSSI值小于noiseLevel(噪聲強(qiáng)度),那么就判定信道為空閑,并給出修改閾值標(biāo)志,通知上層可以發(fā)送數(shù)據(jù)。注意,只要判定為信道空閑,就要給出更新閾值標(biāo)志,原因?qū)⒃诤竺娴拈撝稻S護(hù)中說明。

  如上所述,只要采樣值大于等于minSignal,就判定信道是繁忙的,而判定信道空閑時(shí)卻要求所有的采樣都小于minSignal,且最后一次的采樣值要小于noiseLevel。然而上面兩個(gè)規(guī)則并不完善,并不能處理任何情況,以下兩種情況就不能得出結(jié)論: 最后一次采樣岀錯(cuò)沒有得到RSSI值,或者最后一次采樣的RSSI值介于noiseLevel和minSignal之間。此時(shí)就必須使用擴(kuò)展規(guī)則。

  2.2信道活動(dòng)狀態(tài)判斷的擴(kuò)展規(guī)則

  擴(kuò)展規(guī)則是為了處理基本規(guī)則不能解決的問題。擴(kuò)展規(guī)則其實(shí)就是擴(kuò)展m次采樣,在這m次的擴(kuò)展采樣中使用對(duì)應(yīng)的擴(kuò)展規(guī)則來判定信道狀態(tài)。擴(kuò)展規(guī)則涉及一些統(tǒng)計(jì)的方法,需要維護(hù)一個(gè)extCSVal的統(tǒng)計(jì)變量。擴(kuò)展規(guī)則如下:

 ?、贁U(kuò)展采樣中,判定信道繁忙的規(guī)則與基本規(guī)則一樣。只要檢查到采樣RSSI值大于等于minSignal,就判定為信道忙,然后結(jié)束擴(kuò)展采樣。

 ?、谛诺揽臻e的判定與基本規(guī)則不同,因?yàn)橐呀?jīng)處于擴(kuò)展采樣,所以只要檢查到采樣RSSI值小于noiseLevel,就可判定信道為空閑,同時(shí)給出更新閾值的標(biāo)志。

  ③如果在擴(kuò)展采樣中并沒有出現(xiàn)以上兩種情況,那么就必須要計(jì)算extCSVal來做判斷。先說明賦給extCSVal的初值,如果最后一次基本采樣的RSSI值介于兩閾值之間,那么直接將這個(gè)RSSI值賦給extCSVal;如果最后一次基本采樣讀取RSSI失敗,那么將第一次擴(kuò)展采樣得到的介于兩閾值之間的RSSI值賦給extCSVal。如果extCSVal已經(jīng)賦值,而擴(kuò)展采樣中又得到了介于兩閾值之間的RSSI值,那么更新extCSVal值:extCSVal = (extCSVal + RSSI)?1(即取平均值)。

 ?、苋绻鹠次擴(kuò)展采樣,依靠前兩個(gè)規(guī)則仍然不能判斷信道狀態(tài),且最后一次擴(kuò)展采樣的結(jié)果仍然介于兩者之間,那就使用統(tǒng)計(jì)值extCSVal來輔助判斷。規(guī)則如下:如果extCSVal> = ((minSignal + noiseLevel)?1),那么就判定信道忙;反之,則判定信道空閑。

 ?、葑詈笫亲顗牡囊环N情況:當(dāng)擴(kuò)展采樣的最后一次采樣發(fā)生錯(cuò)誤,讀取RSSI值失敗時(shí),并不知道信道的實(shí)際狀況,但也不能一直擴(kuò)展下去,所以判斷為信道繁忙以避免出錯(cuò)。

  通過基本規(guī)則和擴(kuò)展規(guī)則已經(jīng)可以得出一個(gè)準(zhǔn)確性較高的信道活動(dòng)狀態(tài)判定,擴(kuò)展規(guī)則彌補(bǔ)了基本規(guī)則可能會(huì)出現(xiàn)的錯(cuò)誤。在實(shí)際的測試中,如果兩個(gè)閾值的初值選擇得很合適,那么一般并不會(huì)進(jìn)入擴(kuò)展采樣。若閾值初值選擇得不貼切,如mingSignal初值過大,則noiseLevel初值過小時(shí)都會(huì)導(dǎo)致進(jìn)入擴(kuò)展采樣。

  這里還需要說明的是m的取值。本文中采樣定時(shí)器設(shè)置為1 ms,即1 ms采樣一次。擴(kuò)展采樣次數(shù)m取值越大,準(zhǔn)確性自然就越高,但是整個(gè)網(wǎng)絡(luò)性能有所下降(花去的額外時(shí)間過多)。m的值也不能過小,不然extCSVal統(tǒng)計(jì)值就不能發(fā)揮其作用。由于本文使用的初始閾值是經(jīng)過大量測試確定的精確值(參照信號(hào)強(qiáng)度閾值初值的選擇),因此使用該初始閾值進(jìn)行的測試結(jié)果顯示: 只有極少情況進(jìn)入擴(kuò)展采樣(約5 000次監(jiān)測進(jìn)入一次擴(kuò)展采樣)。鑒于這種實(shí)際情況,m的取值不需要很大,本文取其值為3。如果初始閾值不能精確設(shè)定,那么可將m值放大。

  3信號(hào)強(qiáng)度閾值的選擇和更新維護(hù)

  從信道監(jiān)測的基本規(guī)則和擴(kuò)展規(guī)則可以看出,信號(hào)強(qiáng)度的兩個(gè)閾值對(duì)信道狀態(tài)的判定十分重要,因此這兩個(gè)閾值的初始值選擇必須十分慎重;而且必須要根據(jù)當(dāng)前信道狀態(tài)動(dòng)態(tài)更新閾值的機(jī)制。

  3.1信號(hào)強(qiáng)度閾值的更新機(jī)制

  閾值的動(dòng)態(tài)更新必須使用大量的實(shí)時(shí)RSSI值作為統(tǒng)計(jì)值,且需要把RSSI值分為兩類: 一類是信道繁忙時(shí)的RSSI,本文稱為busyRSSI;另一類是信道空閑時(shí)的RSSI值,本文稱為noiseRSSI。這兩個(gè)值可以在物理層每接收到一個(gè)數(shù)據(jù)包時(shí)獲取,因?yàn)镃C2420接收到一個(gè)數(shù)據(jù)包時(shí)將在數(shù)據(jù)包的倒數(shù)第二個(gè)字節(jié)(FCS域)自動(dòng)填充接收時(shí)的RSSI值,因此busyRSSI值就無條件地得到了;而在剛接收完數(shù)據(jù)包后信道一般都是空閑的,所以這時(shí)立即讀取當(dāng)前的RSSI值,就可以得到noiseRSSI值。為避免例外,可將得到的noiseRSSI值與minSignal進(jìn)行比較,如果大于等于minSignal就丟棄。

  在獲得busyRSSI和noiseRSSI后就對(duì)其進(jìn)行統(tǒng)計(jì)操作,為實(shí)現(xiàn)這個(gè)目的需要維護(hù)一個(gè)統(tǒng)計(jì)變量avgSignal,用來統(tǒng)計(jì)所有的busyRSSI值。avgSignal的初值等于minSignal的初值即初始閾值,并按1/4的權(quán)重進(jìn)行統(tǒng)計(jì),即avgSignal = (avgSignal?1) + ((avgSignal + busyRSSI)?2)。noiseRSSI的值并不需要統(tǒng)計(jì),這是因?yàn)樽x出noiseRSSI的值很穩(wěn)定幾乎不變。

  noiseLevel閾值的更新相對(duì)簡單,因?yàn)樵肼曅盘?hào)強(qiáng)度十分穩(wěn)定,因此不必對(duì)noiseRSSI做統(tǒng)計(jì),每次讀取noiseRSSI后可直接對(duì)noiseLevel進(jìn)行更新。更新規(guī)則也是采用1/4權(quán)重,即noiseLevel = (noiseLevel-1) + ((noiseLevel + noiseRSSI)-2)。

  minSignal閾值需要針對(duì)兩種互補(bǔ)的情況來進(jìn)行更新調(diào)整。第一種情況是一段時(shí)間內(nèi)的采樣結(jié)果全是信道空閑,說明所有的采樣值都小于minSignal,因此有可能minSignal的值過高,應(yīng)對(duì)其調(diào)整將其適當(dāng)降低。該情況在監(jiān)測信道結(jié)果為空閑時(shí)觸發(fā)更新,更新方法是直接利用當(dāng)前的busyRSSI來更新;只要busyRSSI的值小于當(dāng)前的minSignal值,那么就將busyRSSI的值作為最新的minSignal值。這樣做是因?yàn)樵赽usyRSSI的信號(hào)強(qiáng)度下已經(jīng)能夠接收數(shù)據(jù)了,而busyRSSI又比當(dāng)前的minSignal要小,所以更接近實(shí)際的閾值。

  第二種情況是對(duì)第一種情況的補(bǔ)充。在做了第一種情況的修改后,如果長時(shí)間內(nèi)監(jiān)測到的都是信道繁忙(如載波監(jiān)聽幾次回退后都返回繁忙),那么就可能是minSignal的值設(shè)置得太低,因此要適當(dāng)調(diào)高該值,以避免使用第一種更新方式后由于設(shè)置的minSignal值太低而導(dǎo)致不能使用信道的情況。該情況提供一個(gè)接口由上層(MAC層)來調(diào)用更新。更新需要借助統(tǒng)計(jì)量avgSignal,更新的偽代碼如下(其中initBusySingal指的是minSignal的最初值):

  //如果minSignal大于或等于初值,就說明沒有進(jìn)行第一種

  //更新,所以沒有進(jìn)行第二種更新的必要

  if (minSignal < initBusySignal){

  //更合理地提高minSignal值,不能一下將minSignal大幅度提

  //高,且要保證更新后minSignal比initBusySignal小

    if (avgSignal < initBusySignal){

      minSignal = (minSignal + avgSignal)-1;

    }

    else{

      minSignal = (minSignal + initBusySignal)-1;

    }

  }

  initBusySignal的選擇將在后面介紹,它的選擇對(duì)更新機(jī)制尤為重要。因?yàn)閙inSignal的更新機(jī)制建立的基礎(chǔ)就是initBusySignal非常接近實(shí)際臨界值。initBusySignal本身也是經(jīng)過大量測試后選擇的一個(gè)信道活動(dòng)最小強(qiáng)度值,而它肯定會(huì)大于(最小等于)實(shí)際的臨界值,所以minSignal更新后應(yīng)該比initBusySignal小才對(duì)。

  3.2信號(hào)強(qiáng)度閾值初始值的選擇

  信號(hào)強(qiáng)度閾值的初始值必須根據(jù)實(shí)際測試岀的大量強(qiáng)度值來設(shè)定,如果設(shè)置失誤,將導(dǎo)致信道狀態(tài)判斷不準(zhǔn)確。本文假設(shè)兩個(gè)初值分別是initNoiseSignal和initBusySignal。下面給出部分測試強(qiáng)度的數(shù)據(jù),如表1所列。測試時(shí)使用兩個(gè)節(jié)點(diǎn),且兩個(gè)節(jié)點(diǎn)都是使用新電池(即電源充沛)。表中,“阻隔”指的是一堵大約10 cm厚的墻。

表1信號(hào)強(qiáng)度測試數(shù)據(jù)   

按此在新窗口瀏覽圖片

  在雙方節(jié)點(diǎn)能通信的前提下,本文測到的busyRSSI的最小值為0x54。根據(jù)上一小節(jié)的論述,initBusySignal的值可以略高,但因?yàn)樵撝凳窃陔娏砍渥闱矣凶韪舻那闆r下測試岀的最小強(qiáng)調(diào)值,因此可以直接取為busyRSSI的最小值,即initBusySignal的值設(shè)置為0x54。對(duì)于initNoiseSignal的取值,從表1可以看出,檢測到的RSSI值非常穩(wěn)定,信道空閑時(shí)噪聲強(qiáng)度幅度不大,因此取值比0x4D略大就可以了。本文中initNoiseSignal取值為0x4E。

  3.3本文實(shí)現(xiàn)的信道監(jiān)測機(jī)制的優(yōu)點(diǎn)

  本文實(shí)現(xiàn)的信道監(jiān)測機(jī)制比較完善且十分靈活。完善是指信道活動(dòng)狀態(tài)判定規(guī)則十分完備,不僅有基本判定和擴(kuò)展判定,而且還有閾值更新機(jī)制,進(jìn)一步確保了判定結(jié)果的正確性;靈活是指向調(diào)用方提供了采樣窗口數(shù)的設(shè)置,使得調(diào)用方可以在每次監(jiān)測時(shí)使用不同的采樣窗口數(shù),可以被LPL、BMAC等有特殊要求的基于競爭的MAC協(xié)議直接調(diào)用。

  4  CSMA協(xié)議的實(shí)現(xiàn)

  本文實(shí)現(xiàn)的CAMA協(xié)議是基于使用廣泛的非持續(xù)性CSMA協(xié)議的,即節(jié)點(diǎn)在發(fā)送數(shù)據(jù)包之前先監(jiān)測信道,如果監(jiān)測到信道空閑,則該節(jié)點(diǎn)就自己開始發(fā)送數(shù)據(jù)包。反之,如果監(jiān)測結(jié)果為信道繁忙,即信道已經(jīng)被鄰居節(jié)點(diǎn)占用,則該節(jié)點(diǎn)回退一段隨機(jī)時(shí)間后,再次開始監(jiān)測,重復(fù)上面的操作。

  在具體實(shí)現(xiàn)CSMA協(xié)議時(shí),本文結(jié)合信道監(jiān)測提供的接口對(duì)協(xié)議做了一些優(yōu)化調(diào)整。另外,由于無線傳感器網(wǎng)絡(luò)中節(jié)點(diǎn)間距離很短,一般忽略傳播延遲,因此具體的實(shí)現(xiàn)與標(biāo)準(zhǔn)的CSMA協(xié)議有些不同,但原理一致,其實(shí)現(xiàn)如下:

  如果節(jié)點(diǎn)要發(fā)送數(shù)據(jù)包,需要先進(jìn)行載波監(jiān)聽,首先隨機(jī)選擇一個(gè)采樣窗口數(shù)(即信道采樣次數(shù)),該采樣數(shù)屬于某一個(gè)范圍,本文選擇為8~32。采樣數(shù)隨機(jī)選擇的目的是減少?zèng)_突,舉例說明:假設(shè)信道目前空閑,A、B、C三個(gè)節(jié)點(diǎn)都是鄰居節(jié)點(diǎn),且A、B節(jié)點(diǎn)有數(shù)據(jù)包要發(fā)送給節(jié)點(diǎn)C;A、B兩個(gè)鄰居節(jié)點(diǎn)同時(shí)開始監(jiān)測,如果采樣窗口數(shù)固定,根據(jù)信道監(jiān)測的規(guī)則,信道空閑必須等到采樣數(shù)用完才能下結(jié)論,那么A、B節(jié)點(diǎn)都在用完所有的采樣數(shù)后得岀信道空閑的結(jié)論,然后都發(fā)送數(shù)據(jù)包,這樣數(shù)據(jù)在節(jié)點(diǎn)C處就發(fā)生了沖突,最后A、B兩節(jié)點(diǎn)就必須依靠隨機(jī)回退一段時(shí)間后再次監(jiān)測信道。采用隨機(jī)的采樣窗口數(shù)可以降低上面情況的發(fā)生率。因?yàn)椴蓸哟翱跀?shù)小的節(jié)點(diǎn)(假設(shè)為節(jié)點(diǎn)A)先得出信道空閑的結(jié)論并發(fā)送數(shù)據(jù)包,采樣窗口數(shù)大的節(jié)點(diǎn)B在后面的采樣中發(fā)現(xiàn)信道繁忙(因?yàn)楣?jié)點(diǎn)A已經(jīng)占用了信道)就回退,避免了發(fā)生沖突。

  回退時(shí)間的選擇也是值得推敲的一個(gè)參數(shù)。CC2420是以數(shù)據(jù)包為單位發(fā)送的射頻芯片,其最大數(shù)據(jù)包的長度為128字節(jié),加上同步頭5字節(jié),總共是133字節(jié)。CC2420的發(fā)送速率是250 kb/s,即發(fā)送一個(gè)字節(jié)的時(shí)間為32 μs,因此發(fā)送一個(gè)最大數(shù)據(jù)包的時(shí)間為133×32=4 256 μs。根據(jù)信道采樣規(guī)則,只要一采樣到信道占用,就可以結(jié)束本次監(jiān)測并得出信道繁忙的結(jié)論,因此回退時(shí)間應(yīng)該要大于數(shù)據(jù)包的發(fā)送時(shí)間。又因?yàn)椴蓸哟翱跀?shù)已經(jīng)采用了隨機(jī)選取,所以回退時(shí)間可以使用固定值。因此可以將回退時(shí)間固定為4.5 ms,回退功能的具體實(shí)現(xiàn)只需要一個(gè)定時(shí)器輔助就可以了。

  最后,要處理信道強(qiáng)度閾值更新的問題。如果MAC層連續(xù)對(duì)信道監(jiān)測的結(jié)果都是繁忙,且累計(jì)超過一個(gè)預(yù)設(shè)的閾值Y,就必須要調(diào)用MAC層提供的接口來對(duì)minSignal閾值進(jìn)行更新,參照上節(jié)信號(hào)強(qiáng)度閾值的更新機(jī)制。根據(jù)實(shí)際的測試分析,Y的取值一般為30~60。

  結(jié)語

  本文靈活利用CC2420射頻芯片的特點(diǎn),設(shè)計(jì)并實(shí)現(xiàn)了一整套從物理層到MAC層的無線傳感器網(wǎng)絡(luò)CSMA協(xié)議的實(shí)現(xiàn);并詳細(xì)闡述了協(xié)議中信道監(jiān)測使用的所有判定規(guī)則及各關(guān)鍵閾值參數(shù)的選擇。經(jīng)過實(shí)際的多節(jié)點(diǎn)通信測試,該CSMA協(xié)議可以正確、穩(wěn)定地進(jìn)行信道活動(dòng)監(jiān)測,并實(shí)時(shí)動(dòng)態(tài)地調(diào)整閾值;并且該CSMA協(xié)議的設(shè)計(jì)可以完全嵌入應(yīng)用到其他MAC層協(xié)議中,輔助其他協(xié)議完成信道競爭或信道檢測。



 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。