Zigbee協(xié)議棧原理基礎_第1頁
Zigbee協(xié)議棧原理基礎_第2頁
Zigbee協(xié)議棧原理基礎_第3頁
Zigbee協(xié)議棧原理基礎_第4頁
Zigbee協(xié)議棧原理基礎_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1Zigbee協(xié)議棧相關(guān)概念1.1近距離通信技術(shù)比較:近距離無線通信技術(shù)有wifi、藍牙、紅外、zigbee,在無線傳感網(wǎng)絡中需求的網(wǎng)絡通信恰是近距離需求的,故,四者均可用做無線傳感網(wǎng)絡的通信技術(shù)。而,其中(1)紅外(infrared):能夠包含的信息過少;頻率低波衍射性不好只能視距通信;要求位置固定;點對點傳輸無法組網(wǎng)。(2)藍牙(bluetooth):可移動,手機支持;通信距離10m;芯片價格貴;高功耗(3)wifi:高帶寬;覆蓋半徑100m;高功耗;不能自組網(wǎng);(4)zigbee:價格便宜;低功耗;自組網(wǎng)規(guī)模大。ùùùùðWSN中zigb

2、ee通信技術(shù)是最佳方案,但它連接公網(wǎng)需要有專門的網(wǎng)關(guān)轉(zhuǎn)換à進一步學習stm32。1.2協(xié)議棧協(xié)議棧是網(wǎng)絡中各層協(xié)議的總和,其形象的反映了一個網(wǎng)絡中文件傳輸?shù)倪^程:由上層協(xié)議到底層協(xié)議,再由底層協(xié)議到上層協(xié)議。1.2.1Zigbee協(xié)議規(guī)范與zigbee協(xié)議棧Zigbee各層協(xié)議中物理層(phy)、介質(zhì)控制層(mac)規(guī)范由IEEE802.15.4規(guī)定,網(wǎng)絡層(NWK)、應用層(apl)規(guī)范由zigbee聯(lián)盟推出。Zigbee聯(lián)盟推出的整套zigbee規(guī)范:2005年第一版ZigBeeSpecificationV1.0,zigbee2006,zigbee2007、zigbeeprozi

3、gbee協(xié)議棧:很多公司都有自主研發(fā)的協(xié)議棧,如TI公司的:RemoTI,Z-Stack,SimpliciTI、freakz、msstatePAN等。1.2.2z-stack協(xié)議棧與zigbee協(xié)議棧z-stack協(xié)議棧與zigbee協(xié)議棧的關(guān)系:z-stack是zigbee協(xié)議棧的一種具體實現(xiàn),或者說是TI公司讀懂了zigbee協(xié)議棧,自己用C語言編寫了一個軟件-z-stack,是由全球幾千名工程師共同開發(fā)的。ZStack-CC2530-2.3.1-1.4.0軟件可與TI的SmartRF05平臺協(xié)同工作,該平臺包括MSP430超低功耗微控制器(MCU)、CC2520RF收發(fā)器以及CC2591

4、距離擴展器,通信連接距離可達數(shù)公里。Z-Stack中的很多關(guān)鍵的代碼是以庫文件的形式給出來,也就是我們只能用它們,而看不到它們的具體的實現(xiàn)。其中核心部分的代碼都是編譯好的,以庫文件的形式給出的,比如安全模塊,路由模塊,和Mesh自組網(wǎng)模塊。與z-stack相比msstatePAN、freakz協(xié)議棧都是全部真正的開源的,它們的所有源代碼我們都可以看到。但是由于它們沒有大的商業(yè)公司的支持,開發(fā)升級方面,性能方面和z-stack相比差距很大,并沒有實現(xiàn)商業(yè)應用,只是作為學術(shù)研究而已。還可以配備TI的一個標準兼容或?qū)S械木W(wǎng)絡協(xié)議棧(RemoTI,Z-Stack,或SimpliciTI)來簡化開發(fā),當

5、網(wǎng)絡節(jié)點要求不多在30個以內(nèi),通信距離500m-1000m時用simpliciti。 1.2.3IEEE802.15.4標準概述IEEE802.15.4是一個低速率無線個人局域網(wǎng)(LowRateWirelessPersonalAreaNetworks,LR-WPAN)標準。定義了物理層(PHY)和介質(zhì)訪問控制層(MAC)。LR-WPAN網(wǎng)絡具有如下特點:實現(xiàn)250kb/s,40kb/s,20kb/s三種傳輸速率。支持星型或者點對點兩種網(wǎng)絡拓撲結(jié)構(gòu)。具有16位短地址或者64位擴展地址。支持沖突避免載波多路偵聽技術(shù)(carriersensemultipleaccesswithcollisionav

6、oidance,CSMA/CA)。(mac層)用于可靠傳輸?shù)娜珣饏f(xié)議。(RTS-CTS)低功耗。能量檢測(EnergyDetection,ED)。鏈路質(zhì)量指示(LinkQualityIndication,LQI)。在2.45GHz頻帶內(nèi)定義了16個通道;在915MHz頻帶內(nèi)定義了10個通道;在868MHz頻帶內(nèi)定義了1個通道。為了使供應商能夠提供最低可能功耗的設備,IEEE(InstituteofElectricalandElectronicsEngineers,電氣及電子工程師學會)定義了兩種不同類型的設備:一種是完整功能設備(fullfunctionaldevice,F(xiàn)FD),另一種是簡

7、化功能設備(reducedfunctionaldevice,RFD)。1.2.4ZigBee協(xié)議體系結(jié)構(gòu)IEEE802.15.4定義物理層、介質(zhì)訪問控制層ZigBee聯(lián)盟定義網(wǎng)絡層(networklayer,NWK)、應用層(applicationlayer,APL)。應用層內(nèi)定義:應用支持子層(applicationsupportsublayer,APS)、ZigBee設備對象(ZigBeeDeviceObject,ZDO)(端點號0)、應用框架中用戶自定義應用對象(端點號1-240,可以定義0-240個應用)。每一層為其上層提供特定的服務-數(shù)據(jù)服務實體à數(shù)據(jù)傳輸服務;管理實體提供

8、à管理服務。每個服務實體通過相應的服務接入點(SAP)為其上層提供一個接口,每個服務接入點通過服務原語來完成所對應的功能。1.2.4.1物理層:物理層定義了物理無線信道和MAC子層之間的接口,提供物理層數(shù)據(jù)服務和物理層管理服務。具體內(nèi)容:1)ZigBee的激活;2)當前信道的能量檢測;3)接收鏈路服務質(zhì)量信息;4)ZigBee信道接入方式;5)信道頻率選擇;6)數(shù)據(jù)傳輸和接收。1.2.4.2介質(zhì)接入控制子層(MAC)MAC層負責處理所有的物理無線信道訪問,并產(chǎn)生網(wǎng)絡信號、同步信號;支持PAN連接和分離,提供兩個對等MAC實體之間可靠的鏈路。具體功能:1)網(wǎng)絡協(xié)調(diào)器產(chǎn)生信標;2)與信標

9、同步;3)支持PAN(個域網(wǎng))鏈路的建立和斷開;4)為設備的安全性提供支持(加密解密功能);5)信道接入方式采用免沖突載波檢測多址接入(CSMA-CA)機制;6)處理和維護保護時隙(GTS)機制;7)在兩個對等的MAC實體之間提供一個可靠的通信鏈路。1.2.4.3網(wǎng)絡層(NWK)ZigBee協(xié)議棧的核心部分在網(wǎng)絡層。網(wǎng)絡層主要實現(xiàn)節(jié)點加入或離開網(wǎng)絡、接收或拋棄其他節(jié)點、路由查找及傳送數(shù)據(jù)等功能。具體功能:1)網(wǎng)絡發(fā)現(xiàn);(路由器、終端)2)網(wǎng)絡形成;(協(xié)調(diào)器)3)允許設備連接;4)路由器初始化;5)設備同網(wǎng)絡連接;6)直接將設備同網(wǎng)絡連接;7)斷開網(wǎng)絡連接;8)重新復位設備;9)接收機同步;10

10、)信息庫維護。1.2.4.4應用層(APL)應用層包括:應用支持層(APS)、ZigBee設備對象(ZDO)、制造商所定義的應用對象(AF)。(1)APS功能:維持綁定表、在綁定的設備之間傳送消息。(2)ZDO功能:定義設備在網(wǎng)絡中的角色(如物理實體節(jié)點被定義為協(xié)調(diào)器、路由器還是終端設備),發(fā)起和響應綁定請求,在網(wǎng)絡設備之間建立安全機制(加解密),發(fā)現(xiàn)網(wǎng)絡中的設備并且決定向他們提供何種應用服務。SZDO使用APS層的APSDE-SAP和網(wǎng)絡層的NLME-SAP。ZDO是特殊的應用對象,它在端點(entire)0上實現(xiàn)。S遠程設備通過ZDO請求描述符信息,接收到這些請求時,ZDO會調(diào)用配置對象獲

11、取相應描述符值(eg設備什么時候出廠的、需不需要電池、傳輸距離多少、使用什么規(guī)范)。(3)AF(應用程序框架):用戶自定義的應用對象,并且遵循規(guī)范(profile)運行在端點1240上。在ZigBee應用中,提供2種標準服務類型:鍵值對(KVP)或報文(MSG)。2ZigBee基本概念2.1設備類型三種邏輯設備類型:協(xié)調(diào)器、路由器、終端設備。協(xié)調(diào)器的角色主要涉及網(wǎng)絡的啟動和配置。一旦這些都完成后,協(xié)調(diào)器的工作就像一個路由器(或者消失goaway)。由于ZigBee網(wǎng)絡本身的分布特性,因此接下來整個網(wǎng)絡的操作就不在依賴協(xié)調(diào)器是否存在。路由器一直活躍,須使用主電源供電。但當樹狀拓撲結(jié)構(gòu)時,允許其間

12、隔一定的周期操作一次,可使用電池。終端設備沒有特定的維持網(wǎng)絡結(jié)構(gòu)的責任,可以睡眠或者喚醒,可用電池供電。對存儲空間(特別是RAM的需要)比較小。2.2協(xié)議規(guī)范協(xié)議棧規(guī)范由ZigBee聯(lián)盟定義指定。在同一個網(wǎng)絡中的設備必須符合同一個協(xié)議棧規(guī)范(同一個網(wǎng)絡中所有設備的協(xié)議棧規(guī)范必須一致)。ZigBee聯(lián)盟為ZigBee協(xié)議棧2007定義了2個規(guī)范:ZigBee和ZigBeePRO。所有的設備只要遵循該規(guī)范,即使在不同廠商買的不同設備同樣可以形成網(wǎng)絡。如果應用開發(fā)者改變了規(guī)范,那么他的產(chǎn)品將不能與遵循ZigBee聯(lián)盟定義規(guī)范的產(chǎn)品組成網(wǎng)絡,也就是說該開發(fā)者開發(fā)的產(chǎn)品具有特殊性,我們稱之為“關(guān)閉的網(wǎng)絡

13、”,也就是說它的設備只有在自己的產(chǎn)品中使用,不能與其他產(chǎn)品通信。更改后的規(guī)范可以稱之為“特定網(wǎng)絡”規(guī)范。協(xié)議棧規(guī)范的ID號可以通過查詢設備發(fā)送的beacon幀獲得。在設備加入網(wǎng)絡之前,首先需要確認協(xié)議棧規(guī)范的ID。“特定網(wǎng)絡”規(guī)范ID號為0;ZigBee協(xié)議棧規(guī)范的ID號為1;ZigBeePRO協(xié)議棧規(guī)范的ID號為2。協(xié)議棧規(guī)范的ID(STACK_PROFILE_ID)在nwk_globals.h中定義:#defineNETWORK_SPECIFIC0#defineHOME_CONTROLS1/zigbee首先應用于智能家居,故直接把zigbee協(xié)議棧規(guī)范定義為home_control#def

14、ineZIGBEEPRO_PROFILE2#defineGENERIC_STAR3#defineGENERIC_TREE4#ifdefined(ZIGBEEPRO)#defineSTACK_PROFILE_IDZIGBEEPRO_PROFILE#else#defineSTACK_PROFILE_IDHOME_CONTROLS#endif2.3拓撲結(jié)構(gòu)星型、樹狀、網(wǎng)狀#defineNWK_MODE_STAR0#defineNWK_MODE_TREE1#defineNWK_MODE_MESH2#if(STACK_PROFILE_ID=ZIGBEEPRO_PROFILE)#defineNWK_MOD

15、ENWK_MODE_MESH#elif(STACK_PROFILE_ID=HOME_CONTROLS)#defineNWK_MODENWK_MODE_MESH#elif(STACK_PROFILE_ID=GENERIC_STAR)#defineNWK_MODENWK_MODE_STAR#elif(STACK_PROFILE_ID=NETWORK_SPECIFIC)#defineNWK_MODENWK_MODE_MESH#endif一般拓撲結(jié)構(gòu)定義為網(wǎng)狀網(wǎng)絡2.4信標與非信標模式Zigbee網(wǎng)絡的工作模式可以分為信標(Beaeon)和非信標(Non-beaeon)兩種模式。信標:所有設備同步工作

16、、休眠。協(xié)調(diào)器負責以一定的間隔時間(一般在15ms-4mins之間)向網(wǎng)絡廣播信標幀,兩個信標幀發(fā)送間隔之間有16個相同的時槽,這些時槽分為網(wǎng)絡休眠區(qū)和網(wǎng)絡活動區(qū)兩個部分,消息只能在網(wǎng)絡活動區(qū)的各時槽內(nèi)發(fā)送。非信標:終端可休眠,路由器、協(xié)調(diào)器一直工作。父節(jié)點為終端緩存數(shù)據(jù),終端主動向父節(jié)點提取數(shù)據(jù),故,終端大多處于休眠狀態(tài),周期性醒來與父節(jié)點握手以確認自己仍處于網(wǎng)絡中,醒來一般需要15ms。實際使用中非信標模式使用更多,因為路由器、協(xié)調(diào)器往往還要擔任一些其他功能,且常常加入功放擴大傳輸距離,一般加主電源供電。2.5地址兩種地址:64位IEEE地址,即MAC地址,16位網(wǎng)絡地址(協(xié)調(diào)器網(wǎng)絡地址為

17、0x00)。#defineNWK_PAN_COORD_ADDR0x00002.5.1網(wǎng)絡地址分配l 分布式尋址方案:ZigBee2006、ZigBee2007使用分布式尋址方案來分配網(wǎng)絡地址,保證唯一。設備只能從父設備接受網(wǎng)絡地址,不需要全網(wǎng)通訊分配,有助于測量。l 隨機地址分配機制:ZigBee2007PRO采用。新節(jié)點加入時,父節(jié)點為其隨機分配地址,然后產(chǎn)生“設備聲明”(包含分配到的網(wǎng)絡地址和IEEE地址)發(fā)送至網(wǎng)絡。若有沖突,則通過路由器廣播“網(wǎng)絡狀態(tài)-地址沖突”至網(wǎng)絡中的所有節(jié)點。所有發(fā)生沖突的節(jié)點更改自己的網(wǎng)絡地址,然后再發(fā)起“設備聲明”直到無沖突。在每個路由加入網(wǎng)絡之前,尋址方案需

18、要知道和配置一些參數(shù):MAX_DEPTH(最大網(wǎng)絡深度)、MAX_ROUTERS(最多路由數(shù))和MAX_CHILDREN(最多子節(jié)點數(shù))。這些參數(shù)是棧配置的一部分,ZigBee2007協(xié)議棧已經(jīng)規(guī)定了這些參數(shù)的值:如果要改動,首先要確保整個地址空間不能超過216,這就限制了參數(shù)能夠設置的最大值??梢允褂胮rojectsZStacktools文件夾下的CSkip.xls文件來確認這些值是否合法。當在表格中輸入了這些數(shù)據(jù)后,如果你的數(shù)據(jù)不合法的話就會出現(xiàn)錯誤信息。當選擇了合法的數(shù)據(jù)后,開發(fā)人員還要保證不再使用標準的棧配置,取而代之的是網(wǎng)絡自定義棧配置(例如:在nwk_globals.h文件中將ST

19、ACK_PROFILE_ID改為NETWORK_SPECIFIC)。然后nwk_globals.h文件中的MAX_DEPTH參數(shù)將被設置為合適的值。此外,還必須設置nwk_globals.c文件中的Cskipchldrn數(shù)組和CskipRtrs數(shù)組。這些數(shù)組的值由MAX_CHILDREN和MAX_ROUTER構(gòu)成。2.5.2尋址應用程序通常使用AF_DataRequest()函數(shù)發(fā)送數(shù)據(jù),給一個afAddrType_t(在ZComDef.h中定義)類型的目標設備。目標設備網(wǎng)絡地址目標設備模式數(shù)據(jù)包傳送模式分三種:(1) 單點傳送(Unicast):發(fā)給已知網(wǎng)絡地址的網(wǎng)絡設備。將afAddrMo

20、de設置為Addr16Bit并且在數(shù)據(jù)包中攜帶目標設備地址。(2) 間接傳送(Indirect):應用程序不知道目標設備位置時。將模式設置為AddrNotPresent,目標地址沒有指定,而是從發(fā)送設備的棧的綁定表中查找目標設備。這種特點稱之為源綁定。數(shù)據(jù)到達棧中后,從綁定表中查找并使用目標設備地址,這樣,數(shù)據(jù)包將被處理成為一個標準的單點傳送數(shù)據(jù)包。如果在綁定表中找到多個設備,則向每個設備都發(fā)送一個數(shù)據(jù)包的拷貝?!綵igBee2004中有一個選項可以講綁定表保存在協(xié)調(diào)器(Coordinator)當中。發(fā)送設備將數(shù)據(jù)包發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器查找它棧中的綁定表,然后將數(shù)據(jù)發(fā)送給最終的目標設備。這個附

21、加的特性叫做協(xié)調(diào)器綁定(CoordinatorBinding)。2004中綁定表只能在協(xié)調(diào)器,2006和2007中可以將綁定表放在任意節(jié)點】(3) 廣播傳送(broadcast):應用程序?qū)?shù)據(jù)包發(fā)給每一個設備。地址模式設置為AddrBroadcast。目標地址可以設置為下面廣播地址的一種:NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)發(fā)給所有設備,包括睡眠中的設備。對于睡眠中的設備,數(shù)據(jù)包將被保留在其父親節(jié)點直到查詢到它,或者消息超時(NWK_INDIRECT_MSG_TIMEOUT在f8wConifg.cfg中)。NWK_BROADCAST_SHORTADDR

22、_DEVRXON(0xFFFD)發(fā)給所有除睡眠之外的所有設備。NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)發(fā)給所有路由器、協(xié)調(diào)器。(4) 組尋址(GroupAddressing):發(fā)送給網(wǎng)絡上的一組設備。地址模式設置為afAddrGroup并且addr.shortAddr設置為組ID。使用這個功能,必須先定義組。(參見Z-stackAPI文檔中的aps_AddGroup()函數(shù))。2.5.3重要設備地址(ImportantDeviceAddresses)應用程序可能需要知道它的設備地址和父親地址。使用下面的函數(shù)獲取設備地址(在ZStackAPI中定義):NLM

23、E_GetShortAddr()返回本設備的16位網(wǎng)絡地址NLME_GetExtAddr()返回本設備的64位擴展地址使用下面的函數(shù)獲取該設備的父親設備的地址:NLME_GetCoordShortAddr()返回本設備的父親設備的16位網(wǎng)絡地址NLME_GetCoordExtAddr()返回本設備的父親設備的64位擴展地址2.6zigbee術(shù)語一個節(jié)點:一個射頻收發(fā)器、多個設備(最常見的為僅一個),一個設備中包含端點0(ZDO),端點1-端點240一個端點中包含群集(按功能分為輸入群集、輸出群集)一個群集中包含多個屬性(1) 屬性Attribute:是一個反映物理數(shù)量或狀態(tài)的數(shù)據(jù)值,比如開關(guān)值

24、(On/Off),溫度值、百分比等。(2) 群集Cluster:是包含一個或多個屬性(attribute)的集合。每個群集都被分配一個唯一的群集ID且每個群集最多有65536個屬性。(3) 端點EndPoint:是協(xié)議棧應用層的入口,也可以理解應用對象(ApplicationObject)存在的地方,它是為實現(xiàn)一個設備描述而定義的一組群集。每個ZigBee設備可以最多支持240這樣的端點,這也意味著在每個設備上可以定義240個應用對象。端點0被保留用于與ZDO接口,這是每個ZigBee設備必須使用的端點,而端點255被保留用于廣播,端點241-254則被保留用于將來做擴展使用(4) 設備描述D

25、eviceDescription:是指一個大型目標應用的一部分,包括一個或多個群集,并且指定群集是輸入還是輸出。描述符有:節(jié)點描述符、電源描述符、簡單描述符、端點描述符。(5)節(jié)點Node:也可以理解為一個容器,包含一組ZigBee設備,分享一個無線信道。每個節(jié)點有且只有一個無線信道使用。2.7綁定通過使用 ClusterID為不同節(jié)點上的獨立端點建立一個邏輯上的連接。要實現(xiàn)綁定操作,端點必須向協(xié)調(diào)器發(fā)送綁定請求,協(xié)調(diào)器在有限的時間間隔內(nèi)接收到兩個端點的綁定請求后,便通過建立端點之間的綁定表在這兩個不同的端點之間形成了一個邏輯鏈路。因此,在綁定后的兩個端點之間進行消息傳送的過程屬于消息的間接傳

26、送。其中一個端點首先會將信息發(fā)送到 ZigBee 協(xié)調(diào)器中,ZigBee 協(xié)調(diào)器在接收到消息后會通過查找綁定表,將消息發(fā)送到與這個端點相綁定的所有端點中,從而實現(xiàn)了綁定端點之間的間接通信。也可以不在協(xié)調(diào)器中建立綁定表,而在任意一個路由器中建立。2.8路由Zstack協(xié)議棧的路由代碼我們不需要寫,也無法寫(已被封裝)。整個路由功能如何實現(xiàn)的需要了解,有助于對zigbee協(xié)議棧進行整體的把握。 zigbee路由還能夠自愈網(wǎng)絡,如果某個無線連接斷開了,路由功能又能自動尋找一條新的路徑避開那個斷開的網(wǎng)絡連接。這就極大的提高了網(wǎng)絡的可靠性,同時也是 ZigBee 網(wǎng)絡的一個關(guān)鍵特性。2.8.1 路由協(xié)議

27、(Routing ProtocolZigBee 執(zhí)行基于用于 AODV 專用網(wǎng)絡的路由協(xié)議。簡化后用于傳感器網(wǎng)絡。ZigBee 路由議有助于網(wǎng)絡環(huán)境有能力支持移動節(jié)點,連接失敗和數(shù)據(jù)包丟失。當路由器從他自身的應用程序或者別的設備那里收到一個單點發(fā)送的數(shù)據(jù)包,則網(wǎng)絡層NWK Layer)根據(jù)一下程序?qū)⑺^續(xù)傳遞下去。如果目標節(jié)點是它相鄰路由器中的一個,則數(shù)據(jù)包直接被傳送給目標設備。否則,路由器將要檢索它的路由表中與所要傳送的數(shù)據(jù)包的目標地址相符合的記錄。如果存在與目標地址相符合的活動路由記錄,則數(shù)據(jù)包將被發(fā)送到存儲在記錄中的下一級地址中去。如果沒有發(fā)現(xiàn)任何相關(guān)的路由記錄,則路由器發(fā)起路徑尋找,數(shù)

28、據(jù)包存儲在緩沖區(qū)中知道路徑尋找結(jié)束。 ZigBee終端節(jié)點不執(zhí)行任何路由功能。終端節(jié)點要向任何一個設備傳送數(shù)據(jù)包,它只需簡單的將數(shù)據(jù)向上發(fā)送給它的父親設備,由它的父親設備以它自己的名義執(zhí)行路由。同樣的,任何一個設備要給終端節(jié)點發(fā)送數(shù)據(jù),發(fā)起路由尋找,終端節(jié)的的父親節(jié)點都已它的名義來回應。 注意 ZigBee 地址分配方案使得對于任何一個目標設備,根據(jù)它的地址都可以得到一條路徑。在 Z-Stack 中,如果萬一正常的路徑尋找過程不能啟動的話(通常由于缺少路由表空間),那么Z-Stack 擁有自動回退機制。 此外,在 Z-Stack 中,執(zhí)行的路由已經(jīng)優(yōu)化了路由表記錄。通常,每一個目標設備都需要一

29、條路由表記錄。但是,通過把一定父親節(jié)點記錄與其子所有子結(jié)點的記錄合并,這樣既可以優(yōu)化路徑也可以不喪失任何功能。 ZigBee 路由器,包括協(xié)調(diào)器執(zhí)行下面的路由函數(shù):(i)路徑發(fā)現(xiàn)和選擇;(ii)路徑保持維護;(iii)路徑期滿。2.8.2 路徑的發(fā)現(xiàn)和選擇(Route Discovery and Selection)路徑發(fā)現(xiàn)是網(wǎng)絡設備憑借網(wǎng)絡相互協(xié)作發(fā)現(xiàn)和建立路徑的一個過程。路由發(fā)現(xiàn)可以由任意一個路由設備發(fā)起,并且對于某個特定的目標設備一直執(zhí)行。路徑發(fā)現(xiàn)機制尋找源地址和目標地址之間的所有路徑,并且試圖選擇可能的最好的路徑。 路徑選擇就是選擇出可能的最小成本的路徑。每一個結(jié)點通常持有跟它所有鄰接

30、點的“連接成本(link costs)”。通常,連接成本的典型函數(shù)是接收到的信號的強度。沿著路徑,求出所有連接的連接成本總和,便可以得到整個路徑的“路徑成本”。路由算法試圖尋找到擁有最小路徑成本的路徑。 路徑通過一系列的請求和回復數(shù)據(jù)包被發(fā)現(xiàn)。源設備通過向它的所有鄰接節(jié)點廣播一個路由請求數(shù)據(jù)包,來請求一個目標地址的路徑。當一個節(jié)點接收到 RREQ 數(shù)據(jù)包,它依次轉(zhuǎn)發(fā)REQ數(shù)據(jù)包。但是在轉(zhuǎn)發(fā)之前,它要加上最新的連接成本,然后更新 RREQ數(shù)據(jù)包中的成本值。這樣,沿著所有它通過的連接,RREQ數(shù)據(jù)包攜帶著連接成本的總和。這個過程一直持續(xù)到 RREQ 數(shù)據(jù)包到達目標設備。通過不同的路由器,許多 RR

31、EQ 副本都將到達目標設備。目標設備選擇最好的RREQ數(shù)據(jù)包,然后發(fā)回一個路徑答復數(shù)據(jù)包(a Route Reply)RREP給源設備.RREP 數(shù)據(jù)包是一個單點發(fā)送數(shù)據(jù)包,它沿著中間節(jié)點的相反路徑傳送直到它到達原來發(fā)送請求的節(jié)點為止。一旦一條路徑被創(chuàng)建,數(shù)據(jù)包就可以發(fā)送了。當一個結(jié)點與它的下一級相鄰節(jié)點失去了連接(當它發(fā)送數(shù)據(jù)時,沒有收到 MAC ACK),該節(jié)點向所有等待接收它的 RREQ數(shù)據(jù)包的節(jié)點發(fā)送一個 RERR數(shù)據(jù)包,將它的路徑設為無效。各個結(jié)點根據(jù)收到的數(shù)據(jù)包 RREQ、RREP 或者RERR 來更新它的路由表。2.8.3 路徑保持維護(Route maintenance)網(wǎng)狀網(wǎng)

32、提供路徑維護和網(wǎng)絡自愈功能。中間節(jié)點沿著連接跟蹤傳送失敗,如果一個連接被認定是壞鏈,那么上游節(jié)點將針對所有使用這條連接的路徑啟動路徑修復。節(jié)點發(fā)起重新發(fā)現(xiàn)直到下一次數(shù)據(jù)包到達該節(jié)點,標志路徑修復完成。如果不能夠啟動路徑發(fā)現(xiàn)或者由于某種原因失敗了,節(jié)點則向數(shù)據(jù)包的源節(jié)點發(fā)送一個路徑錯誤包(RERR),它將負責啟動新路徑的發(fā)現(xiàn)。這兩種方法,路徑都自動重建。2.8.4 路徑期滿(Route expiry)路由表為已經(jīng)建立連接路徑的節(jié)點維護路徑記錄。如果在一定的時間周期內(nèi),沒有數(shù)據(jù)通過沿著這條路徑發(fā)送,這條路徑將被表示為期滿。期滿的路徑一直保留到它所占用的空間要被使用為止。這樣,路徑在絕對不使用之前不

33、會被刪除掉的。在配置文件 f8wConfig.cfg 文件中配置自動路徑期滿時間。設置 ROUTE_EXPIRY_TIME 為期滿時間,單位為秒。如果設置為 0,則表示關(guān)閉自動期滿功能。2.9zigbee原語ZigBee協(xié)議按照開放系統(tǒng)互聯(lián)的 7 層模型將協(xié)議分成了一系列的層結(jié)構(gòu),各層之間通過相應的服務訪問點來提供服務。這樣使得處于協(xié)議中的不同層能夠根據(jù)各自的功能進行獨立的運作,從而使整個協(xié)議棧的結(jié)構(gòu)變得清晰明朗。另一方面,由于 ZigBee 協(xié)議棧是一個有機的整體,任何 ZigBee 設備要能夠正確無誤的工作,就要求協(xié)議棧各層之間共同協(xié)作。因此,層與層之問的信息交互就顯得十分重要。ZigBe

34、e協(xié)議為了實現(xiàn)層與層之間的關(guān)聯(lián),采用了稱為服務“原語"的操作。利用下圖來說明原語操作的概念。服務由 N 用戶和 N 層之問信息流的描述來指定。這個信息流由離散瞬時事件構(gòu)成,以提供服務的特征。每個事件由服務原語組成,它將在一個用戶的某一 層,通過與該層相關(guān)聯(lián)的層服務訪問 A(SAP)與建立對等連接的用戶的相同層之 問傳送。層與層之間的原語一般情況下可以分為 4 種類型: 請求:請求原語從 NI 用戶發(fā)送到它的 N層,請求發(fā)起一個服務。 指示:指示原語從 N層到N2 用戶,指示一個對 N2 用戶有重要意義外部 N 層事件。這個事件可能與一個遠程的服務請求有關(guān),或者由內(nèi)部事件產(chǎn)生。 響應:

35、響應原語由 N2 用戶向它的 N層傳遞,用來響應上一個由指示原語引 起的過程。 確認:確認原語由 N層向Nl 用戶傳遞,用來傳遞與前面一個或多個服務請 求相關(guān)的執(zhí)行結(jié)果。 3Z-Stack 協(xié)議棧總體設計Chipcon 公司為自己設計的 Z-Stack 協(xié)議棧中提供了一個名為操作系統(tǒng)抽象層OSAL 的協(xié)議棧調(diào)度程序。對于用戶來說,除了能夠看到這個調(diào)度程序外,其它任何協(xié)議棧操作的具體實現(xiàn)細節(jié)都被封裝在庫代碼中。用戶在進行具體的應用開發(fā)時只能夠通過調(diào)用 API接口來進行,而無權(quán)知道 Zig,Bee 協(xié)議棧實現(xiàn)的具體細節(jié)。(即物理層、mac層、網(wǎng)絡層封裝到庫函數(shù)中,無法查看;應用層的aps、zdo代

36、碼完全開源)Z-Stack 由 main()函數(shù)開始執(zhí)行, main()函數(shù)共做了 2 件事:一是系統(tǒng)初始化,一是輪轉(zhuǎn)查詢式操作系統(tǒng),如下圖所示:Osal初始化完成后,一經(jīng)進入操作系統(tǒng)則永遠無休止執(zhí)行下去,除非板子壞掉。void osalInitTasks( void ) uint8 taskID = 0; tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt); macTaskInit( ta

37、skID+ ); nwk_init( taskID+ ); Hal_Init( taskID+ );#if defined( MT_TASK )/通過串口調(diào)試的一個任務 MT_TaskInit( taskID+ );#endif APS_Init( taskID+ );#if defined ( ZIGBEE_FRAGMENTATION )/如果定義了數(shù)據(jù)分割的分包,則執(zhí)行分包初始化 APSF_Init( taskID+ );#endif ZDApp_Init( taskID+ );#if defined ( ZIGBEE_FREQ_AGILITY ) | defined ( ZIGBEE_P

38、ANID_CONFLICT )/如果定義了調(diào)頻初始化,和個域網(wǎng)id沖突初始化,則執(zhí)行網(wǎng)絡管理層初始化 ZDNwkMgr_Init( taskID+ );#endif SampleApp_Init( taskID );/應用對象初始化3.1osal初始化:3.2任務調(diào)度ZigBee 協(xié)議棧中的每一層都有很多原語操作要執(zhí)行,因此對于整個協(xié)議棧來說,就會有很多并發(fā)操作要執(zhí)行。協(xié)議棧中的每一層都設計了一個事件處理函數(shù),用來處理與這一層操作相關(guān)的各種事件。將這些事件處理函數(shù)看成是與協(xié)議棧每一層相對應的任務,由 ZigBee 協(xié)議棧中調(diào)度程序 OSAL 來進行管理。這樣,對于協(xié)議棧來說,無論何時發(fā)生了何種

39、事件,我們都可以通過調(diào)度協(xié)議棧相應層的任務,即事件處理函數(shù)來進行處理。這樣,整個協(xié)議棧便會按照時間順序有條不紊的運行。ZigBee 協(xié)議棧的實時性要求并不高,因此在設計任務調(diào)度程序時, OSAL 只采用了輪詢?nèi)蝿照{(diào)度隊列的方法來進行任務調(diào)度管理。任務列表:const pTaskEventHandlerFn tasksArr = macEventLoop, nwk_event_loop, Hal_ProcessEvent,#if defined( MT_TASK ) MT_ProcessEvent,#endif APS_event_loop,#if defined ( ZIGBEE_FRAGME

40、NTATION ) APSF_ProcessEvent,#endif ZDApp_event_loop,#if defined ( ZIGBEE_FREQ_AGILITY ) | defined ( ZIGBEE_PANID_CONFLICT ) ZDNwkMgr_event_loop,#endif SampleApp_ProcessEvent;void osal_start_system( void ) for(;) / Forever Loopuint8 idx = 0; osalTimeUpdate(); Hal_ProcessPoll(); / This replaces MT_Ser

41、ialPoll() and osal_check_timer(). do if (tasksEventsidx) / Task is highest priority that is ready. break; while (+idx < tasksCnt); if (idx < tasksCnt) uint16 events; halIntState_t intState; HAL_ENTER_CRITICAL_SECTION(intState); events = tasksEventsidx; tasksEventsidx = 0; / Clear the Events fo

42、r this task. HAL_EXIT_CRITICAL_SECTION(intState); events = (tasksArridx)( idx, events ); HAL_ENTER_CRITICAL_SECTION(intState); tasksEventsidx |= events; / Add back unprocessed events to the current task. HAL_EXIT_CRITICAL_SECTION(intState); #if defined( POWER_SAVING ) else / Complete pass through all task events with no activity? osal_pwrmgr_powerconserve(); / Put the processor/system into sleep #endif /* Yield in case cooperative scheduling is being used. */#if defined (configUSE_PREEMPTION) && (configUSE_PREEMPTION

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論