第三章zigbee網(wǎng)絡原理與開發(fā)_第1頁
第三章zigbee網(wǎng)絡原理與開發(fā)_第2頁
第三章zigbee網(wǎng)絡原理與開發(fā)_第3頁
第三章zigbee網(wǎng)絡原理與開發(fā)_第4頁
第三章zigbee網(wǎng)絡原理與開發(fā)_第5頁
已閱讀5頁,還剩284頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

物聯(lián)網(wǎng)通信技術(shù)第三章Zigbee網(wǎng)絡原理及開發(fā)趙建立山東科技大學主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡管理3.7Zigbee無線傳感器網(wǎng)絡開發(fā)實例主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡管理3.7Zigbee無線傳感器網(wǎng)絡開發(fā)實例ZigBee是IEEE802.15.4協(xié)議的代名詞。根據(jù)這個協(xié)議規(guī)定的技術(shù)是一種短距離、低功耗的無線通信技術(shù)。這一名稱來源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飛翔和“嗡嗡”(zig)地抖動翅膀的“舞蹈”來與同伴傳遞花粉所在方位信息,也就是說蜜蜂依靠這樣的方式構(gòu)成了群體中的通信網(wǎng)絡。ZigBee簡介ZigBee簡介ZigBee技術(shù)發(fā)展歷程1.ZigBee的前身是1998年由INTEL、IBM等產(chǎn)業(yè)巨頭發(fā)起的“HomeRFLite”技術(shù)。2.2000年12月成立了工作小組起草IEEE802.15.4標準3.Zigbee聯(lián)盟成立于2001年8月。2002年下半年,英國Invensys公司、日本三菱電氣公司、美國摩托羅拉公司以及荷蘭飛利浦半導體公司四大巨頭共同宣布加盟“Zigbee聯(lián)盟”,以研發(fā)名為“Zigbee”的下一代無線通信標準,這一事件成為該項技術(shù)發(fā)展過程中的里程碑。4.2004年12月ZigBee1.0標準(又稱為ZigBee2004)敲定,這使得ZigBee有了自己的發(fā)展基本標準。5.2005年9月公布ZigBee1.0標準并提供下載。在這一年里,華為技術(shù)有限公司和IBM公司加入了ZigBee聯(lián)盟。但是基于該版本的應用很少,與后面的版本也不兼容。6.2006年12月進行標準修訂,推出ZigBee1.1版(又稱為ZigBee2006)。該協(xié)議雖然命名為ZigBee1.1,但是與ZigBee1.0版是不兼容的。ZigBee簡介7.2007年10月完成再次修訂(稱為ZigBee2007/PRO)。能夠兼容之前的ZigBee2006版本,并且加入了ZibgeePRO部分,此時ZigBee聯(lián)盟更加專注于以下三個方面:

1)、家庭自動化(HomeAutomation;HA);2)、建筑/商業(yè)大樓自動化(BuildingAutomation;BA);3)、先進抄表基礎(chǔ)建設(AdvancedMeterInfrastructure;AMI);ZigBee簡介1.1無線網(wǎng)絡數(shù)據(jù)傳輸協(xié)議對比

1.1無線網(wǎng)絡數(shù)據(jù)傳輸協(xié)議對比Zigbee與現(xiàn)有標準傳輸協(xié)議的比較:1.1無線網(wǎng)絡數(shù)據(jù)傳輸協(xié)議對比因此:Zigbee數(shù)據(jù)速率較低,不適用于傳輸大數(shù)據(jù)量的應用領(lǐng)域。1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.2短距離無線網(wǎng)絡的分類1.3zigbee版本介紹2001年8月,ZigBeeAlliance成立。該聯(lián)盟致力于促進在全球的消費電子、能源、住宅、商業(yè)和工業(yè)領(lǐng)域廣泛采用ZigBee作為領(lǐng)先的無線網(wǎng)絡、傳感和控制標準。2004年,ZigBeeV1.0誕生。它是Zigbee規(guī)范的第一個版本。由于推出倉促,存在一些錯誤。2006年,推出ZigBee2006,比較完善。2007年底,ZigBeePRO推出。目前已經(jīng)吸引了一些最具創(chuàng)新性和在世界知名的組織,如華為、羅格朗、施耐德、飛利浦、霍尼韋爾等知名企業(yè),一個由400多家企業(yè)和其他組織構(gòu)成的非營利性開放聯(lián)合體,1.4zigbee無線網(wǎng)絡通信信道分析注:2.4GHZ是全球通用的ISM頻段,915MHZ是北美的ISM頻段,896MHZ是歐洲認可的ISM頻段。ISM:Industrial,ScientificandMedical信道編號中心頻率/MHz信道間隔/MHz頻率上限/MHz頻率下限/MHzk=0868.3--868.6868.0k=1,2,…,10906+2(k-1)2928.0902.0k=11,12,…,262401+5(k-11)52483.52400.01.5zigbee無線網(wǎng)絡拓撲結(jié)構(gòu)網(wǎng)絡拓撲結(jié)構(gòu):星狀、網(wǎng)狀、簇狀節(jié)點類型:協(xié)調(diào)器、路由器、終端節(jié)點ZigBee協(xié)調(diào)器(Coordinator)它包含所有的網(wǎng)絡信息,是3種設備中最復雜的,存儲容量大、計算能力最強。它主要用于發(fā)送網(wǎng)絡信標、建立一個網(wǎng)絡、管理網(wǎng)絡節(jié)點、存儲網(wǎng)絡節(jié)點信息、尋找一對節(jié)點間的路由信息并且不斷的接收信息。一旦網(wǎng)絡建立完成,這個協(xié)調(diào)器的作用就像路由器節(jié)點。1.5zigbee無線網(wǎng)絡拓撲結(jié)構(gòu)ZigBee路由器(Router)

它執(zhí)行的功能包括允許其它設備加入這個網(wǎng)絡,中繼路由,輔助子樹下終端設備的通信。通常,路由器全時間處在活動狀態(tài),因此為主供電。但是在樹狀拓撲中,允許路由器操作周期運行,因此這個情況下允許路由器電池供電.1.5zigbee無線網(wǎng)絡拓撲結(jié)構(gòu)ZigBee終端設備(End-device)一個終端設備對于維護這個網(wǎng)絡設備沒有具體的責任,所以它可以睡眠和喚配,看它自己的選擇。因此它能作為電池供電節(jié)點。1.5zigbee無線網(wǎng)絡拓撲結(jié)構(gòu)設備類型拓撲類型是否成為協(xié)調(diào)器通話對象全功能設備(FFD)星型、樹狀、網(wǎng)狀可以與任何ZigBee設備通話簡化功能設備(RFD)星型不可以與協(xié)調(diào)器、路由器通話,不能與終端設備通話1.5zigbee無線網(wǎng)絡拓撲結(jié)構(gòu)1.6zigbee技術(shù)的應用領(lǐng)域ZigBee應用場合低速無線設備·

TV·

VCR·

DVD·

CD

·

鼠標·

鍵盤·

操作桿

·

保安·

HVAC·

照明·

門禁

·

玩具·

游戲器具

·

監(jiān)視·

診斷·

傳感器·

監(jiān)視·

傳感器·

自動化·控制工業(yè)、農(nóng)業(yè)和商業(yè)消費電子PC機的外圍設備玩具和游戲個人健康監(jiān)護ZigBee應用實例結(jié)合ZigBee和GPRS的無線數(shù)據(jù)傳輸網(wǎng)絡1.6zigbee技術(shù)的應用領(lǐng)域ZigBee應用實例ZigBee技術(shù)在石油石化行業(yè)的應用液化天然氣罐遠程監(jiān)控汽油管線的腐蝕監(jiān)測潤滑油供應鏈汽油管線侵入者監(jiān)測液化天然氣容器跟蹤1.6zigbee技術(shù)的應用領(lǐng)域ZigBee應用實例基于ZigBee技術(shù)的管道監(jiān)測無線數(shù)據(jù)傳輸網(wǎng)絡1.6zigbee技術(shù)的應用領(lǐng)域ZigBee應用實例ZigBee智能交通控制系統(tǒng)無線通信方案ZIGBEE無線通信的交通信號控制系統(tǒng)-交通路口控制通信1.6zigbee技術(shù)的應用領(lǐng)域ZigBee應用實例ZIGBEE無線通信的交通信號控制系統(tǒng)-交通路口控制通信ZigBee智能交通控制系統(tǒng)無線通信方案1.6zigbee技術(shù)的應用領(lǐng)域ZigBee應用實例基于ZigBee技術(shù)的無線三表遠程抄表系統(tǒng)采用MESH網(wǎng)狀網(wǎng)絡結(jié)構(gòu),保證數(shù)據(jù)傳輸?shù)目煽啃浴C看眴卧獦窃O置一個ZigBee遠端節(jié)點一個小區(qū)設置一個ZigBee中心節(jié)點ZigBee中心節(jié)點數(shù)據(jù)通過GPRS/CDMA或ADSL上傳到集抄中心1.6zigbee技術(shù)的應用領(lǐng)域主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡管理3.7Zigbee無線傳感器網(wǎng)絡開發(fā)實例1.1IAR集成開發(fā)環(huán)境介紹ZigBee無線網(wǎng)絡節(jié)點開發(fā)平臺軟件開發(fā)平臺IAREmbeddedWorkbench(簡稱EW)的C/C++交叉編譯器和調(diào)試器是今天世界最完整的和最容易使用專業(yè)嵌入式應用開發(fā)工具。

EW今天已經(jīng)支持35種以上的8位/16位32位ARM的微處理器結(jié)構(gòu)。EW包括:嵌入式C/C++優(yōu)化編譯器,匯編器,連接定位器,庫管理員,編輯器,項目管理器和C-SPY調(diào)試器。使用IAR的編譯器最優(yōu)化最緊湊的代碼,節(jié)省硬件資源,最大限度地降低產(chǎn)品成本,提高產(chǎn)品競爭力。IARSystem是嵌入式領(lǐng)域唯一能夠提供這種解決方案的公司。

IAREmbeddedWorkbench是一套完整的集成開發(fā)工具集合,包括從代碼編輯器、工程建立到C/C++編譯器、連接器和調(diào)試器的各類開發(fā)工具。它和各種仿真器、調(diào)試器緊密結(jié)合,使用戶在開發(fā)和調(diào)試過程中,僅僅使用一種開發(fā)環(huán)境界面,就可以完成多種微控制器的開發(fā)工作。1.1IAR集成開發(fā)環(huán)境介紹IAR的安裝、工程的編輯和修改參見實驗手冊1.1IAR集成開發(fā)環(huán)境介紹1.1IAR集成開發(fā)環(huán)境介紹1.2仿真與調(diào)試CC2530仿真器具有在線下載、調(diào)試、仿真等功能。仿真器外形非常簡潔,只有1個USB接口、1個復位按鍵和一根仿真線。1.2仿真與調(diào)試USB接口:通過USB接口可以把仿真器與計算機有機地連接起來。仿真器通過此接口與計算機進行通信,要在CC2430/CC2530的ZigBee模塊上實現(xiàn)下載、調(diào)試(Debug)、仿真等功能都通過此接口來實現(xiàn)。

復位按鍵:此按鍵用來實現(xiàn)仿真器的復位,當需要重新下載、調(diào)試、仿真時,可通過此按鍵來實現(xiàn)硬復位。仿真線:這是一根10芯的下載、調(diào)試(DEBUG)、仿真線,通過它與CC2430/CC2530的ZigBee模塊進行連接。1.2仿真與調(diào)試仿真器具有以下特點:USB接口,使開發(fā)與計算機連接更加簡單快捷2)高速代碼下載,提供高達150KBit/s下載速度,把程序下載到CC2430/2530的ZigBee模塊只需要幾秒就完成3)在線下載、調(diào)試、仿真4)硬件斷點調(diào)試,類似JTAG的硬件斷點調(diào)試,可實現(xiàn)單步、變量觀察等全部C51源代碼水平的在線調(diào)試DEBUG功能5)支持IAR的C51編譯/調(diào)試圖形IDE開發(fā)平臺6)專業(yè)設計,系統(tǒng)穩(wěn)定可靠,噪聲干擾小1.2仿真與調(diào)試連接好仿真器和zigbee節(jié)點,復位一下仿真器,然后點擊Project中的DownloadandDebug,就實現(xiàn)了下載程序,當程序下載完后,軟件進入在線仿真模式。1.3一個例程這個代碼的意思是將P1口設置為輸出,將P1口置0,中軟國際教育集團開發(fā)的模塊和開發(fā)板中有小燈在P1口上,當執(zhí)行這個代碼的時候,小燈會點亮1.3一個例程在上面的介紹中,大家對IAR的使用方法已經(jīng)有了一定的認識,但是在一個項目中,尤其是無線項目中,涉及到的設備不會僅僅只有一個,如在ZigBee設備中的協(xié)調(diào)器、路由器和終端設備,雖然設備不相同但它們的功能和協(xié)議棧底層卻基本相同,所以在里面只需要定義些條件編譯就可以設定好,如果將每一個設備都重新建立一個工程的話,這樣寄浪費空間,代碼也很混亂,所以我們就需要使用IAR的模塊設備功能。1.3一個例程

我們通過上面的點亮LED例子來說明這個功能的使用方法。

首先修改工程的代碼,在這里我們要實現(xiàn)兩個設備在一個工程中實現(xiàn)不同的功能,兩個模塊的名稱分別定義為:Blink_LED和Open_LED。實現(xiàn)的功能是閃爍小燈和打開小燈。voidmain(void){P1DIR=0xFF;while(1){#ifndefBlink_LED

P1=0;#elseP1=~P1;for(inti=0;i<1000;i++)for(intj=0;j<1000;j++);#endif}}注:關(guān)于寄存器管腳的定義可以參見〈CC2530-ZigbeePRO接口編程實驗手冊〉1.3一個例程1.3一個例程從代碼中可以看出,根據(jù)條件的不同得到的結(jié)果也不相同,在這里實現(xiàn)的是一個閃燈的和一個打開小燈的程序,根據(jù)下面的圖片進行配置,首先是打開小燈,打開小燈的是在沒有定義Blink_LED的情況下實現(xiàn)的,所以我們只需要直接選擇Open_LED模塊,不需要任何修改就可以完成該功能。主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡管理3.7Zigbee無線傳感器網(wǎng)絡開發(fā)實例1.1CC2430與CC2530的比較項目cc2430cc2530引腳4840大小7*7mm6*6mmFlash32/64/128KB32/64/128/256KB軟件平臺IARIAR定時/計數(shù)器4個4個中斷源18個18個I/O21個21個微控制器增強型c8051增強型c8051抗干擾CSMA/CACSMA/CA功耗RX27mATX25mARX24mATX29mACC2530是TI09年推出的,在CC2430的基礎(chǔ)上根據(jù)CC2430實際應用的一些問題做了一些改進,緩存加大了,存儲容量最大支持到256K,CC2530的通信距離可以達到400m,不用再用CC2430外加功放來擴展距離CC2530的主要特點:◆高性能和低功耗的8051微控制器核?!艏煞螴EEE802.15.4標準的2.4GHz的RF無線電收發(fā)機?!魞?yōu)良的無線接收靈敏度和強大的抗干擾性?!粼谛菝吣J綍r僅1μA的流耗,外部的中斷或RTC能喚醒系統(tǒng)在待機模式時少于0.4μA的流耗,外部的中斷能喚醒系統(tǒng)◆硬件支持CSMA/CA功能。◆較寬的電壓范圍(2.0~3.6V)?!魯?shù)字化的RSSI/LQI支持和強大的DMA功能。◆具有電池監(jiān)測和溫度感測功能。◆集成了14位模數(shù)轉(zhuǎn)換的ADC。◆集成AES安全協(xié)處理器?!魩в?個強大的支持幾組協(xié)議的USART,以及2個常規(guī)的16位計時器和2個8位計時器?!魪姶蠛挽`活的開發(fā)工具Zigbee芯片CC2530主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡管理3.7Zigbee無線傳感器網(wǎng)絡開發(fā)實例1.1Zigbee協(xié)議棧什么是協(xié)議什么是協(xié)議棧兩者有什么聯(lián)系1.2怎樣使用Zigbee協(xié)議棧SOCKET編程,利用TCP/IP協(xié)議棧1.3Zigbee協(xié)議棧的安裝ZigBee協(xié)議棧具有很多版本,不同廠商提供的ZigBee協(xié)議棧有一定的區(qū)別,本課程選用的是TI推出的ZigBee2007協(xié)議棧進行講解。ZigBee2007協(xié)議棧ZStack-CC2530-2.5.1a要安裝以后才能使用,下面講解安裝步驟。1、可以直接到TI官方網(wǎng)站下載zigbee2007協(xié)議棧2、打開光盤目錄:ETC-WSN物聯(lián)網(wǎng)光盤資料\ZigBee網(wǎng)絡\tools,雙擊ZStack-CC2530-2.5.1a.exe即可進行協(xié)議棧的安裝,默認是安裝到c盤。然后在路徑C:\TexasInstruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\GenericApp\CC2530DB下找到GenericApp.eww,打開該工程。打開該工程后,可以看到GenericApp工程文件布局,如圖所示。在圖中所示的文件布局中,左側(cè)有很多文件夾,如App,HAL,MAC等;這些文件夾對應了ZigBee協(xié)議中不同的層,使用ZigBee協(xié)議棧進行應用程序的開發(fā),一般只需要修改App目錄下的文件即可。1.3Zigbee協(xié)議棧的安裝APP:對應開發(fā)的應用模塊;HAL模塊直接操作外設寄存器,完成外設的驅(qū)動程序。向上層提供外設驅(qū)動的接口函數(shù)MT(MonitorTest,監(jiān)控測試)模塊為上位機提供通過串口監(jiān)測節(jié)點運行情況的方式。可以通過串口請求AF、ZDO、NWK和MAC模塊進行特定操作;MAC模塊實現(xiàn)IEEE802.15.4標準的MAC層服務;NWK(Network,網(wǎng)絡)模塊實現(xiàn)ZigBee規(guī)范中的網(wǎng)絡層服務,包括網(wǎng)絡的配置、節(jié)點的加入/離開網(wǎng)絡、地址分配、路由發(fā)現(xiàn)、網(wǎng)絡層協(xié)議數(shù)據(jù)單元的傳輸?shù)取?.3Zigbee協(xié)議棧的安裝1.3zigbee協(xié)議棧安裝ZDO(ZigBeeDeviceObject,ZigBee設備對象)模塊實現(xiàn)ZigBee規(guī)范中的ZDO定義的功能,包括應用支持子層和網(wǎng)絡層的初始化,并通過向用戶定義的應用對象收集相關(guān)信息來實現(xiàn)設備和服務發(fā)現(xiàn)、安全管理、網(wǎng)絡管理、綁定管理等。OSAL(OperatingSystemAbstractionLayer,操作系統(tǒng)抽象層)模塊定義了其它模塊中的事件的處理機制。它將每一模塊內(nèi)的所有事件放在一個任務中進行處理,任務間的通信通過傳遞系統(tǒng)消息來完成,這使得協(xié)議棧中的事件處理更類似于一個操作系統(tǒng);同時它還定義了堆內(nèi)存管理、NV(non-volatile,非可變)存儲系統(tǒng)的管理、電源管理、時鐘管理等。1.3zigbee協(xié)議棧安裝

TOOLS文件夾里面f8w2530.xcl,f8wConfig.cfg,f8wCoord.cfg三個文件包含了節(jié)點的配置信息,具體功能如下:(1)f8w2530.xcl----包含了CC2530單片機的鏈接控制指令(如定義堆棧大小、內(nèi)存分配等),一般不需要改動。(2)f8wConfig.cfg----包含了信道選擇,網(wǎng)絡號等有關(guān)的鏈接命令。例如:下列代碼定義了建立網(wǎng)絡的信道默認為11,即從11信道上建立ZigBee無線網(wǎng)絡,第59行定義了ZigBee無線網(wǎng)絡的網(wǎng)絡號。1.3zigbee協(xié)議棧安裝(3)f8wCoord.cfg----定義了設備類型前文講到zigbee無線網(wǎng)絡中的設備類型有協(xié)調(diào)器,路由器和終端節(jié)點。下述代碼就定義了該設備具有協(xié)調(diào)器和路由器的功能。第一個zigbee實驗兩個ZigBee節(jié)點進行點對點通信,ZigBee節(jié)點2每隔5s向節(jié)點1發(fā)送一次“ChinaSofti”字符,同時LED綠燈閃爍兩下表示成功發(fā)送。ZigBee節(jié)點1收到節(jié)點2發(fā)送過來的數(shù)據(jù)后,對接收到的數(shù)據(jù)進行判斷,如果收到的數(shù)據(jù)是“ChinaSofti”,則使開發(fā)板上的LED紅燈閃爍兩下表示成功接收。第一個zigbee實驗ZigBee節(jié)點1配置為1個協(xié)調(diào)器,負責ZigBee網(wǎng)路的組建,ZigBee節(jié)點2配置為一個終端節(jié)點。創(chuàng)建協(xié)調(diào)器的程序(Coordinator.c)創(chuàng)建終端節(jié)點的程序(Enddevice.c)實驗室環(huán)境下,一定不要忘記修改PID!!如何創(chuàng)建,參見手冊P58.第一個zigbee實驗第一個zigbee實驗每個節(jié)點上的所有端口共用一個發(fā)射/接收天線,不同節(jié)點上的端口之間可以進行通信,如節(jié)點1的端口1可以給節(jié)點2的端口1發(fā)送控制命令來點亮LED,節(jié)點1的端口1也可以給節(jié)點2的端口2發(fā)送命令進行數(shù)據(jù)采集操作,但是節(jié)點2上端口1和端口2的網(wǎng)絡地址是相同的,所以僅僅通過網(wǎng)絡地址無法區(qū)分,所以,在發(fā)送數(shù)據(jù)時不但要指定網(wǎng)絡地址,還要指定端口號。第一個zigbee實驗-Coordinator.c第一個zigbee實驗-Coordinator.c第一個zigbee實驗-Coordinator.c:包含的頭文件是從刪除的GenericApp.c文件復制得到的。GENERICAPP_MAX_CLUSTERS是在GenericApp.h文件中定義的宏,這主要是為了跟協(xié)議棧里面數(shù)據(jù)的定義格式保持一致,代碼中的常量都是以宏定義的形式實現(xiàn)的。第一個zigbee實驗-

Coordinator.c

第一個zigbee實驗-Coordinator.c上述代碼定義了三個變量,一個是節(jié)點描述符GGenericApp_epDesc,一個是任務優(yōu)先級GenencApp_TaskID,最后一個是數(shù)據(jù)發(fā)送序列號GenericApp_TransID。第一個zigbee實驗-Coordinator.c上述代碼聲明了一個消息處理函數(shù)GenericApp_MessageMSGCB。第一個zigbee實驗-Coordinator.c第36行,初始化了任務優(yōu)先級(任務優(yōu)先級由協(xié)議棧的操作系統(tǒng)OSAL分配)。第37行,將發(fā)送數(shù)據(jù)包的序號初始化為0,在ZigBee協(xié)議棧中,每發(fā)送一個數(shù)據(jù)包,該發(fā)送序號自動加1(協(xié)議棧里面的數(shù)據(jù)發(fā)送函數(shù)會自動完成該功能),因此,在接收端可以查看接收數(shù)據(jù)包的序號來計算丟包率。第39—43行,對節(jié)點描述符進行的初始化,上述初始化格式較為固定,一般不需要修改。第44行,使用afRegister函數(shù)將節(jié)點描述符進行注冊,只有注冊以后,才可以使用OSAL提供的系統(tǒng)服務。第一個zigbee實驗-Coordinator.c需要修改的代碼是第58行,讀者可以修改該函數(shù)的實現(xiàn)形式,但是其功能基本都是完成對接收數(shù)據(jù)的處理。第一個zigbee實驗-Coordinator.c第79行,將收到的數(shù)據(jù)拷貝到緩沖區(qū)buf中。第80行,判斷接收到的數(shù)據(jù)是不是“ChinaSofti”,這里是選擇性判斷了4個字符。如果是則執(zhí)行第82行,使LED紅燈閃爍2次。第一個zigbee實驗-Coordinator.c到此為止,協(xié)調(diào)器的編程已經(jīng)基本結(jié)束,下面回憶一下上述代碼所做的基本工作。(1)刪除了協(xié)議棧中的GenericApp.c文件,然后添加了兩個文件:Coordinator.c和Enddevice.c。(2)給出了Coordinator.c的代碼,并給出了部分注釋,其中Coordinator.c文件中很多代碼格式是固定的,讀者只需要熟悉這些代碼格式即可。第一個zigbee實驗-Coordinator.c節(jié)點描述符GenericApp_epDesc,任務優(yōu)先級GenericApp_TaskID,保存節(jié)點狀態(tài)的變量GenericApp_NwkState,數(shù)據(jù)發(fā)送序列號GenericApp_TransID,最后一個是數(shù)據(jù)發(fā)送目的地址的變量GenericApp_DstAddr。第一個zigbee實驗-Enddevice.c聲明了數(shù)據(jù)發(fā)送函數(shù)GenericApp_SendTheMessage。第39行,將設備狀態(tài)初始化為DEV_INIT,表示該節(jié)點沒有連接到網(wǎng)絡。第42行,將發(fā)送地址模式設置為單播(Addr16Bit表示單播)。第44行,協(xié)調(diào)器的網(wǎng)絡地址為0x0000;第51行,使用afRegister函數(shù)將節(jié)點描述符進行注冊。第一個zigbee實驗-Enddevice.c第一個zigbee實驗-Enddevice.c第64行,讀取節(jié)點的設備類型。第65行,對節(jié)點設備類型進行判斷,如果是終端節(jié)點(設備類型碼為DEVE_END_DEVICE),再執(zhí)行第67行代碼,定時5s后啟動GENERICAPP_SEND_MSG_EVT事件以發(fā)送數(shù)據(jù)。第83行,無線數(shù)據(jù)發(fā)送函數(shù)。第一個zigbee實驗-Enddevice.c第93行,定義了一個數(shù)組theMessageData用于存放要發(fā)送的數(shù)據(jù)。第95行,調(diào)用數(shù)據(jù)發(fā)送函數(shù)AF_DataRequest進行無線數(shù)據(jù)的發(fā)送。第一個zigbee實驗-Enddevice.c此時分別編譯、下載程序到Zigbee節(jié)點,實現(xiàn)預定功能??!但編譯的時候注意:第一個zigbee實驗協(xié)調(diào)器上電后,會按照編譯時給定的參數(shù),選擇合適的信道、合適的網(wǎng)絡號,建立ZigBee無線網(wǎng)絡,這部分內(nèi)容讀者不需要寫代碼實現(xiàn),ZigBee協(xié)議棧已經(jīng)實現(xiàn)了。終端節(jié)點則是加入網(wǎng)絡后定期發(fā)送數(shù)據(jù)。流程圖與協(xié)調(diào)器類似。終端節(jié)點上電后,會進行硬件電路的初始化,然后搜索是否有ZigBee無線網(wǎng)絡,如果有ZigBee無線網(wǎng)絡再自動加入(這是最簡單的情況,當然可以控制節(jié)點加入網(wǎng)絡時要符合編譯時確定的網(wǎng)絡號等),然后發(fā)送數(shù)據(jù)到協(xié)調(diào)器,最后使LED閃爍。Zigbee數(shù)據(jù)通訊實驗原理

在zigbee協(xié)議棧中進行數(shù)據(jù)發(fā)送可以調(diào)用AF_Dataquest函數(shù)實現(xiàn),該函數(shù)會調(diào)用協(xié)議棧里面與硬件相關(guān)的函數(shù)最終將數(shù)據(jù)通過天線發(fā)送出去,這里面涉及對射頻模塊的操作,例如:打開發(fā)射機,調(diào)整發(fā)射機的發(fā)送功率等內(nèi)容,這些部分協(xié)議棧已經(jīng)實現(xiàn)了,用戶不需自己寫代碼去實現(xiàn),只需要掌握AF_DataRequest函數(shù)的使用方法即可。下面簡要講解一下AF_DataRequest數(shù)據(jù)發(fā)送函數(shù)中各個參數(shù)的具體含義。Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)發(fā)送在TI提供的Zstack協(xié)議棧中,數(shù)據(jù)發(fā)送函數(shù)定義如下:

afStatus_tAF_DataRequest( afAddrType_t*dstAddr, endPointDesc_t*srcEP,

uint16cID,uint16len, uint8*buf, uint8*transID, uint8options, uint8radius)最核心的兩個參數(shù):·uint16len-----發(fā)送數(shù)據(jù)的長度;·uint8*buf-----指向存放發(fā)送數(shù)據(jù)的緩沖區(qū)的指針。Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)發(fā)送①afAddrType_t*dstAddr----該參數(shù)包含了目的節(jié)點的網(wǎng)絡地址以及發(fā)送數(shù)據(jù)的格式,如廣播、單播或多播等。②endPointDesc_t*srcEP----在ZigBee無線網(wǎng)絡中,通過網(wǎng)絡地址可以找到某個具體的節(jié)點,如協(xié)調(diào)器的網(wǎng)絡地址是0x0000,但是具體到某一個節(jié)點,還有不同的端口(endpoint),每個節(jié)點上最多支持240個端口(endpoint)。Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)發(fā)送③uint16cID----這個參數(shù)描述的是命令號,在ZigBee協(xié)議里的命令主要用來標識不同的控制操作,不問的命令號代表了不同的控制命令,如終端節(jié)點在發(fā)送數(shù)據(jù)時使用的命令I(lǐng)D是GENERICAPP_CLUSTERID,它的值為1。④uint16len----該參數(shù)標志了發(fā)送數(shù)據(jù)的長度。⑤uint8*buf----該參數(shù)是指向發(fā)送數(shù)據(jù)緩沖區(qū)的指針。發(fā)送數(shù)據(jù)函數(shù)會從該指針指向的地址按照指定的長度取得發(fā)送數(shù)據(jù)進行發(fā)送。⑥uint8*transID----該參數(shù)是一個指向發(fā)送序號的指針,每次發(fā)送數(shù)據(jù)時,發(fā)送序號會自動加1(協(xié)議棧里面實現(xiàn)的該功能),在接收端可以通過發(fā)送序號來判斷是否丟包,同時可以計算出丟包率。⑦uint8options和uint8radius----這兩個參數(shù)取默認值即可Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)發(fā)送當協(xié)調(diào)器接收到數(shù)據(jù)后,操作系統(tǒng)會將該數(shù)據(jù)封裝成一個消息,然后放入消息隊列中,每個消息都有自己的消息ID,標志接收到新數(shù)據(jù)的消息的ID是AF_INCOMING_MSG_CMD,其中AF_INCOMING_MSG的值是0x1a,用戶不可更改,ZigBee協(xié)議棧中AF_INCOMlNG_MSG_CMD宏的定義如下(在Zcomdef.h文件中定義的):#defineAF_INCOMING_MSG_CMD0x1AZDO_STATE_CHANGE當網(wǎng)絡狀態(tài)發(fā)生變化時,會產(chǎn)生該事件,如節(jié)點加入網(wǎng)絡時,就可以通過判斷該事件來決定何時向協(xié)調(diào)器發(fā)送數(shù)據(jù)包。Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)接收首先使用osal_msg_receive函數(shù)從消息隊列中接收一個消息,然后使用switch-case語句對消息類型進行判斷(判斷消息ID),如果消息ID是AF_INCOMlNG_MSG_CMD則進行相應的數(shù)據(jù)處理。Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)接收1.4Zigbee組網(wǎng)過程1個是64位的IEEE地址,通常也叫作MAC地址或者擴展地址(Extendedaddress),另一個是16位的網(wǎng)絡地址,也叫做邏輯地址(Logicaladdress)或者短地址64位長地址是全球唯一的地址,并且終身分配給設備。這個地址可由制造商設定或者在安裝的時候設置,是由IEEE來提供當設備加入ZigBee網(wǎng)絡被分配一個短地址,在其所在的網(wǎng)絡中是唯一的。這個地址主要用來在網(wǎng)絡中辨識設備,數(shù)據(jù)傳輸和數(shù)據(jù)包路由等一個節(jié)點是一個設備,有一個射頻端,一個64位IEEE地址,一個16位網(wǎng)絡地址IEEE802.15.4網(wǎng)絡的建立過程首先,每個設備的協(xié)議棧必須要對其PHY和MAC層初始化每個網(wǎng)絡必須有一個也只能有一個PANCo-ordinatorPANID作為網(wǎng)絡標識,可以被人為的預定義除64位IEEEMAC地址外,還須分配一個16位的短地址例如Zigbee技術(shù)選擇2.4GHz設備以Co-ordinator的模式啟動,然后就開放請求應答有可以利用的Co-ordinator,設備就可以申請加入網(wǎng)絡設備被Co-ordinator接受,將獲得短地址作為標識,便可傳輸數(shù)據(jù)

組建一個完整的Zigbee網(wǎng)絡分為兩步:第一步是協(xié)調(diào)器初始化一個網(wǎng)絡;第二步是路由器或終端加入網(wǎng)絡。加入網(wǎng)絡又有兩種方法,一種是子設備通過使用MAC層的連接進程加入網(wǎng)絡,另一種是子設備通過與一個先前指定的父設備直接加入網(wǎng)絡。

1.4Zigbee組網(wǎng)過程協(xié)調(diào)器初始化網(wǎng)絡1、

檢測協(xié)調(diào)器建立一個新的網(wǎng)絡是通過原語NLME_NETWORK_FORMATION.request發(fā)起的,但發(fā)起NLME_NETWORK_FORMATION.request原語的節(jié)點必須具備兩個條件,一是這個節(jié)點具有ZigBee協(xié)調(diào)器功能,二是這個節(jié)點沒有加入到其它網(wǎng)絡中。任何不滿足這兩個條件的節(jié)點發(fā)起建立一個新網(wǎng)絡的進程都會被網(wǎng)絡層管理實體終止,網(wǎng)絡層管理實體將通過參數(shù)值為INVALID_REQUEST的NLME_NETWORK_FORMATION.confirm的原語來通知上層這是一個非法請求。協(xié)調(diào)器初始化網(wǎng)絡2、

信道掃描協(xié)調(diào)器發(fā)起建立一個新網(wǎng)絡的進程后,網(wǎng)絡層管理實體將請求MAC子層對信道進行掃描。信道掃描包括能量掃描和主動掃描兩個過程。首先對用戶指定的信道或物理層所有默認的信道進行一個能量掃描,以排除干擾。網(wǎng)絡層管理實體將根據(jù)信道能量測量值對信道進行一個遞增排序,并且拋棄能量值超過了可允許能量值的信道,保留可允許能量值內(nèi)的信道等待進一步處理。接著在可允許能量值內(nèi)的信道執(zhí)行主動掃描,網(wǎng)絡層管理實體通過審查返回的PAN描述符列表,確定一個用于建立新網(wǎng)絡的信道,該信道中現(xiàn)有的網(wǎng)絡數(shù)目是最少的,網(wǎng)絡層管理實體將優(yōu)先選擇沒有網(wǎng)絡的信道。如果沒有掃描到一個合適的信道,進程將被終止,網(wǎng)絡層管理實體通過參數(shù)值為STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原語來通知上層初始化啟動網(wǎng)絡失敗。協(xié)調(diào)器初始化網(wǎng)絡3、配置網(wǎng)絡參數(shù)如果掃描到一個合適的信道,網(wǎng)絡層管理實體將為新網(wǎng)絡選擇一個PAN描述符,該PAN描述符可以是由設備隨機選擇的,也可以是在NLME_NETWORK_FORMATION.request里指定的,但必須滿足PAN描述符小于或等于0x3fff,不等于0xffff,并且在所選信道內(nèi)是唯一的PAN描述符,沒有任何其它PAN描述符與之是重復的。如果沒有符合條件的PAN描述符可選擇,進程將被終止,網(wǎng)絡層管理實體通過參數(shù)值為STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原語來通知上層初始化啟動網(wǎng)絡失敗。確定好PAN描述符后,網(wǎng)絡層管理實體為協(xié)調(diào)器選擇16位網(wǎng)絡地址0x0000,MAC子層的macPANID參數(shù)將被設置為PAN描述符的值,macShortAddressPIB參數(shù)設置為協(xié)調(diào)器的網(wǎng)絡地址。協(xié)調(diào)器初始化網(wǎng)絡4、運行新網(wǎng)絡網(wǎng)絡參數(shù)配置好后,網(wǎng)絡層管理實體通過MLME_START.request原語通知MAC層啟動并運行新網(wǎng)絡,啟動狀態(tài)通過MLME_START.confirm原語通知網(wǎng)絡層,網(wǎng)絡層管理實體再通過NLME_NETWORK_FORMATION.confirm原語通知上層協(xié)調(diào)器初始化的狀態(tài)。協(xié)調(diào)器初始化網(wǎng)絡5、允許設備加入網(wǎng)絡只有ZigBee協(xié)調(diào)器或路由器才能通過NLME_PERMIT_JOINING.request原語來設置節(jié)點處于允許設備加入網(wǎng)絡的狀態(tài)。當發(fā)起這個進程時,如果PermitDuration參數(shù)值為0x00,網(wǎng)絡層管理實體將通過MLME_SET.request原語把MAC層的macAssociationPermitPIB屬性設置為FALSE,禁止節(jié)點處于允許設備加入網(wǎng)絡的狀態(tài);如果PermitDuration參數(shù)值介于0x01和0xfe之間,網(wǎng)絡層管理實體將通過MLME_SET.request原語把macAssociationPermitPIB屬性設置為TRUE,并開啟一個定時器,定時時間為PermitDuration,在這段時間內(nèi)節(jié)點處于允許設備加入網(wǎng)絡的狀態(tài),定時時間結(jié)束,網(wǎng)絡層管理實體把MAC層的macAssociationPermitPIB屬性設置為FALSE;協(xié)調(diào)器初始化網(wǎng)絡5、允許設備加入網(wǎng)絡如果PermitDuration參數(shù)的值為0xff,網(wǎng)絡層管理實體將通過MLME_SET.request原語把macAssociationPermitPIB屬性設置為TRUE,表示節(jié)點無限期處于允許設備加入網(wǎng)絡的狀態(tài),除非有另外一個NLME_PERMIT_JOINING.request原語被發(fā)出。

節(jié)點加入網(wǎng)絡一個節(jié)點加入網(wǎng)絡有兩種方法,一種是通過使用MAC層關(guān)聯(lián)進程加入網(wǎng)絡,另一種是通過與先前指定父節(jié)點連接而加入網(wǎng)絡。1、

子節(jié)點發(fā)起信道掃描子節(jié)點通過NLME_NETWORK_DISCOVERY.request原語發(fā)起加入網(wǎng)絡的進程,網(wǎng)絡層接收到這個原語后通過發(fā)起MLME_SCAN.request原語請求MAC層執(zhí)行一個主動掃描或被動掃描以接收包含了PAN標志符的信標幀,掃描的信道以及每個信道的掃描時間分別由NLME_NETWORK_DISCOVERY.request原語的參數(shù)ScanChannels和ScanDuration決定。

1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡2、

子節(jié)點存儲各PAN信息MAC層通過MLME_BEACONNOTIFY.indication原語將掃描中接收到的信標幀信息發(fā)送到網(wǎng)絡層管理實體,信標幀信息包括信標設備的地址、是否允許連接以及信標凈載荷。如果信標凈載荷域里的協(xié)議ID域與自己的協(xié)議ID相同,子設備就將每個匹配的信標幀相關(guān)信息保存在鄰居表中。信道掃描完成后,MAC層通過MLME_SCAN.confirm原語通知網(wǎng)絡層管理實體,網(wǎng)絡層再通過NLME_NETWORK_DISCOVERY.confirm原語通知上層,該原語包含了每個掃描到的網(wǎng)絡的描述符,以便上層選擇一個網(wǎng)絡加入。

1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡3、

子節(jié)點選擇PAN如果上層需要發(fā)現(xiàn)更多網(wǎng)絡,則可以重新執(zhí)行網(wǎng)絡發(fā)現(xiàn),如果不需要,則通過NLME_JOIN.request原語從被掃描到的網(wǎng)絡中選擇一個網(wǎng)絡加入。參數(shù)PANID設置為被選擇網(wǎng)絡的PAN標識符。

1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡4、

子節(jié)點選擇父節(jié)點一個合適的父節(jié)點需要滿足三個條件:匹配的PAN標志符、鏈路成本最大為3、允許連接,為了尋找合適的父節(jié)點,NLME_JOIN.request原語請求網(wǎng)絡層搜索它的鄰居表,如果鄰居表中不存在這樣的父節(jié)點則通知上層,如果存在多個合適的父節(jié)點則選擇具有最小深度的父節(jié)點,如果存在多個具有最小深度的合適的父節(jié)點則隨機選擇一個父節(jié)點。

1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡5、

子節(jié)點請求MAC關(guān)聯(lián)確定好合適的父節(jié)點后,網(wǎng)絡層管理實體發(fā)送一個MLME_ASSOCIATE.request原語到MAC層,地址參數(shù)設置為已選擇的父節(jié)點的地址,嘗試通過父節(jié)點加入網(wǎng)絡。

1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡6、

父節(jié)點響應MAC關(guān)聯(lián)父節(jié)點通過MLME_ASSOCIATE.indication原語通知網(wǎng)絡層管理實體一個節(jié)點正嘗試加入網(wǎng)絡,網(wǎng)絡層管理實體將搜索它的鄰居表查看是否有一個與嘗試加入節(jié)點相匹配的64位擴展地址,以便確定該節(jié)點是否已經(jīng)存在于它的網(wǎng)絡中了。如果有匹配的擴展地址,網(wǎng)絡層管理實體獲取相應的16位網(wǎng)絡地址并發(fā)送一個連接響應到MAC層。如果沒有匹配的擴展地址,在父節(jié)點的地址分配空間還沒耗盡的條件下網(wǎng)絡層管理實體將為嘗試加入的節(jié)點分配一個16位網(wǎng)絡地址。如果父節(jié)點地址分配空間耗盡,將拒絕節(jié)點加入請求。當同意節(jié)點加入網(wǎng)絡的請求后,父節(jié)點網(wǎng)絡層管理實體將使用加入節(jié)點的信息在鄰居表中產(chǎn)生一個新的項,并通過MLME_ASSOCIATE.request原語通知MAC層連接成功。

1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡7、

子節(jié)點響應連接成功如果子節(jié)點接收到父節(jié)點發(fā)送的連接成功信息,發(fā)送一個傳輸成功響應信息以確認接收,然后子節(jié)點MAC層將通過MLME_ASSOCIATE.confirm原語通知網(wǎng)絡層,原語包含了父節(jié)點為子節(jié)點分配的網(wǎng)內(nèi)唯一的16位網(wǎng)絡地址,然后網(wǎng)絡層管理實體設置鄰居表相應鄰居設備為它的父設備,并通過NLME_JOIN.confirm原語通知上層節(jié)點成功加入網(wǎng)絡。8、

父節(jié)點響應連接成功父節(jié)點接收到子節(jié)點的傳輸成功響應信息后,將通過MLME_COMM_STATUS.indication原語將傳輸成功的響應狀態(tài)發(fā)送給網(wǎng)絡層,網(wǎng)絡層管理實體通過NLME_JOIN.indication原語通知上層一個節(jié)點已經(jīng)加入了網(wǎng)絡。

1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡1、

父節(jié)點處理子設備直接加入網(wǎng)絡父節(jié)點通過NLME_DIRECT_JOIN.request原語開始處理一個設備直接加入網(wǎng)絡的進程。父節(jié)點網(wǎng)絡層管理實體將首先搜索它的鄰居表查看是否存在一個與子節(jié)點相匹配的64位擴展地址,以便確定該節(jié)點是否已經(jīng)存在于它的網(wǎng)絡中了。如果存在匹配的擴展地址,網(wǎng)絡層管理實體將終止這個進程并告訴上層該設備已經(jīng)存在于設備列表中了。如果不存在匹配的擴展地址,在父節(jié)點的地址分配空間還沒耗盡的條件下網(wǎng)絡層管理實體將為子節(jié)點分配一個16位網(wǎng)絡地址,并使用子節(jié)點的信息在鄰居表中產(chǎn)生一個新的項。然后通過NLME_DIRECT_JOIN.confirm原語上層設備已經(jīng)加入網(wǎng)絡。

2)通過與先前指定父節(jié)點連接加入網(wǎng)絡子節(jié)點通過與指定的父節(jié)點直接連接加入網(wǎng)絡,這個時候父節(jié)點預先配置了

子節(jié)點的64位擴展地址。2、

子節(jié)點連接父節(jié)點確認父子關(guān)系子節(jié)點通過NLME_JOIN.request原語發(fā)起孤立掃描來建立它與父節(jié)點之間的關(guān)系。這時網(wǎng)絡層管理實體將通過MLME_SCAN.request請求MAC層對物理層所默認的所有信道進行孤立掃描,如果掃描到父設備,MAC層通過MLME_SCAN.confirm原語通知網(wǎng)絡層,網(wǎng)絡層管理實體再通過NLME_JOIN.confirm原語通知上層節(jié)點請求加入成功,即與父節(jié)點建立了父子關(guān)系,可以互相通信。

2)通過與先前指定父節(jié)點連接加入網(wǎng)絡子節(jié)點通過與指定的父節(jié)點直接連接加入網(wǎng)絡,這個時候父節(jié)點預先配置了

子節(jié)點的64位擴展地址。主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡管理3.7Zigbee無線傳感器網(wǎng)絡開發(fā)實例應用層應用匯聚層網(wǎng)絡層數(shù)據(jù)鏈路層LLCMAC物理層應用層定義了各種類型的應用業(yè)務,是協(xié)議棧的最上層用戶。應用匯聚層負責把不同的應用映射到ZigBee網(wǎng)絡層上,主要有安全與鑒權(quán)、多個業(yè)務數(shù)據(jù)流的匯聚、設備發(fā)現(xiàn)和業(yè)務發(fā)現(xiàn)。網(wǎng)絡層的功能包括拓撲管理、MAC管理、路由管理和安全管理。1.1物理服務規(guī)范IEEE802.15.4定義了2.4GHz和868/915三個物理層標準,均采用了DSSS(DirectSequenceSpreadSpectrum,直接序列擴頻,DSSS)技術(shù),采用相同的數(shù)據(jù)包格式,但他們的工作頻率、調(diào)制技術(shù)、擴頻碼片長度和傳輸速率有所不同。物理層提供了MAC和物理信道之間的接口,物理層的管理實體提供了用于調(diào)用物理層管理功能的管理服務接口,物理層的參考模型如圖5.4所示。PLME(PhysicalLayerManagementEntity,PLME)為管理實體;PD-SAP(PhysicalDataServiceAccessPoint,PD-SAP)為物理層數(shù)據(jù)服務接入點;PIB(PANInformationBase)為物理層的個域網(wǎng)信息庫。物理層提供了物理層數(shù)據(jù)服務和物理層管理服務。物理層數(shù)據(jù)服務是由PD-SAP(物理層數(shù)據(jù)服務接入點)提供的,物理層管理服務是由PLME中的PD-SAP提供的。物理層數(shù)據(jù)服務從無線信道上收發(fā)數(shù)據(jù),通過PD-SAP實現(xiàn)對等MAC層實體間的MPDU(MACProtocolDataUnit,MPDU)傳輸。

物理層管理服務維護物理層相關(guān)數(shù)據(jù)組成的數(shù)據(jù)庫,通過PLME-SAP在MLME(MACLayerManagementEntity,MLME)和管理實體PLME之間的傳輸管理命令。1.2物理層幀結(jié)構(gòu)IEEE802.15.4物理層的幀結(jié)構(gòu)如圖5.5所示,由4個字段組成。第一個字段由4個字節(jié)組成前導碼,前導碼由32個“0”組成,用于收發(fā)器的通信同步。第二個字段為幀的起始分割字段,由1個字節(jié)組成,其固定為0xA7,作為幀開始的標志。第三個字段為幀長度字段,由1個字節(jié)組成,字節(jié)的低7位表示幀的長度,其余1為保留,幀的長度表示幀的負載長度,一般不超過127個字節(jié)。第四個字段為數(shù)據(jù)字段,它的長度可變,主要用來承載MAC幀。幀起始分割符SFD由8bit組成,表示同步結(jié)束,數(shù)據(jù)包開始傳輸。SFD(Start-of-FrameDelimiter,SFD)與前導碼構(gòu)成同步頭。幀長度由7bit組成,表示物理數(shù)據(jù)單元PSDU(PHYServiceDataUnit)的字節(jié)數(shù)。PSDU域是可變長度的,它攜帶了PHY數(shù)據(jù)包的數(shù)據(jù)。4字節(jié)1字節(jié)1字節(jié)可變長度前導碼SFD幀長7bit保留1bitPSDU同步頭物理幀頭PHY負載1.3MAC層的功能IEEE802.15.4MAC層提供了MAC層數(shù)據(jù)服務和MAC層數(shù)據(jù)管理兩種服務。這兩種服務為網(wǎng)絡層和物理層提供了一個接口。MAC層數(shù)據(jù)服務提供了數(shù)據(jù)通信功能,MPDU的接收和發(fā)送可通過物理層來進行。MAC層數(shù)據(jù)管理服務提供了向高層訪問的功能,通過MLME的SAP來訪問高層。IEEE802.15.4主要完成聯(lián)合、分離、確認幀傳送、信道訪問機制、幀確認、時隙管理和信令管理等功能。MAC層在處理物理層進行訪問時,主要完成以下功能:協(xié)調(diào)器的網(wǎng)絡結(jié)點產(chǎn)生網(wǎng)絡信標功能;完成信標同步功能;支持個域網(wǎng)關(guān)聯(lián)和去關(guān)聯(lián)功能;支持結(jié)點安全規(guī)范功能;執(zhí)行信道接入的CSMA-CA機制;處理和維護時隙(GTS)機制;提供等MAC實體間的可靠連接。

無線傳感器網(wǎng)絡的信標管理、信道接入機制、保證時隙(GTS)管理、幀確認、確認幀傳輸、節(jié)點接入和分離、信道接人控制、廣播信息管理的功能均在IEEE802.15.4的MAC層完成。1.4MAC層的服務規(guī)范可通過MAC層的兩個SAP分別訪問IEEE802.15.4MAC層提供的MAC層數(shù)據(jù)服務和MAC層管理服務。

對于MAC層數(shù)據(jù)服務,可通過MCPS-SAP(MCPS數(shù)據(jù)服務接入點)進行訪問。網(wǎng)絡設備支持MCPS-DATA.Request原語,請求從本地SSCS實體向另外一個對等的SSCS實體傳輸數(shù)據(jù)。

對于MAC層管理服務,可通過MLME的E-SAP(管理實體服務接入點)來訪問。IEEE802.15.4的MAC層支持多種LLC標準。通過SSCS(ServiceSpecificConvergenceSub-layer,SSCS,業(yè)務相關(guān)匯聚子層)協(xié)議承載IEEE802.2類型的LLC標準,可同時允許其他LLC標準直接使用IEEE802.15.4的MAC層服務。SSCS與PHY層間的接口是由PD-SAP和PLME-SAP兩個接入點的接口組成的。除了這些外部接口,MLME和MCPS之間還存在一個內(nèi)部接口,MLME可以通過該接口訪問MAC數(shù)據(jù)服務。1.5MAC的幀結(jié)構(gòu)IEEE802.15.4的幀結(jié)構(gòu)是以保證在有噪聲的信道中可靠傳輸數(shù)據(jù)的基礎(chǔ)上盡量降低網(wǎng)絡的復雜度為原則而設計的。IEEE802.15.4的MAC層定義了4種基本幀結(jié)構(gòu),即:信標幀,供協(xié)商者使用;數(shù)據(jù)幀,承載數(shù)據(jù)使用;響應幀,用來確認幀的可靠傳輸;命令幀,用來處理MAC對等實體間的數(shù)據(jù)傳輸控制MAC幀由幀頭MHR(MACHeader)、MAC負載和幀尾MFR(MACFooter)構(gòu)成。幀頭由控制信息、幀序列號和地址信息組成,MAC層負載的長度可變,具體長度由幀的類型來確定。幀尾是幀頭和負載數(shù)據(jù)的16位錯誤檢測碼序列。通用的MAC幀結(jié)構(gòu)如圖5.6所示。2字節(jié)1字節(jié)2字節(jié)2字節(jié)可變2字節(jié)幀控制序列號目標PAN標識目標地址源PAN標識源地址幀負載FCS地址域MHRMAC負載MFR幀控制域占用2字節(jié)長度,包含幀類型定義、尋址域以及其他控制標志等;序列號域長度為1字節(jié),為每個幀提供唯一的序列標識;目標PAN標識域占2字節(jié),內(nèi)容是指定接收方的唯一PAN標識;目標地址域是指定接收方的地址;

源PAN標識域占用2字節(jié),數(shù)據(jù)發(fā)送端地址域是發(fā)送幀的設備地址;幀負載域長度可變,根據(jù)不同的幀類型其內(nèi)容各不相同;幀檢驗序列域有16位長,包含一個16位的CRC循環(huán)冗余校驗部分。(a)信標幀信標幀也是由三部分構(gòu)成。其中,負載部分是信標幀的有效信息,由超幀描述字段、同步時限分配字段、待轉(zhuǎn)發(fā)數(shù)據(jù)目標地址字段和信標幀負載數(shù)據(jù),4個部分組成。信標幀的結(jié)構(gòu)如圖5.7所示。2字節(jié)1字節(jié)4/102字節(jié)變長

可變可變2字節(jié)幀控制序列號尋址域超幀規(guī)范GTS域待轉(zhuǎn)地址信標負載FCSMHRMAC負載MFR信標幀中超幀規(guī)范描述字段規(guī)定了這個超幀的持續(xù)時間,活躍部分持續(xù)時間以及競爭訪問持續(xù)時間等信息。

同步時隙分配字段(GTS字段)將無競爭的時段劃分為若干個GTS,并把每個GTS分配給網(wǎng)絡中一個具體設備。

待轉(zhuǎn)發(fā)數(shù)據(jù)目標地址列出了工作協(xié)同設備的設備地址。一個設備如果發(fā)現(xiàn)自己的地址出現(xiàn)在待轉(zhuǎn)發(fā)數(shù)據(jù)目標地址字段里,即可確定協(xié)調(diào)器中存儲了該設備的數(shù)據(jù),于是就會向協(xié)調(diào)器發(fā)出請求發(fā)送數(shù)據(jù)的MAC命令幀。(b)數(shù)據(jù)幀數(shù)據(jù)幀用來傳輸上層發(fā)送到MAC層的數(shù)據(jù),數(shù)據(jù)幀的負載字段包括了上層需要傳送的數(shù)據(jù)。要傳輸?shù)臄?shù)據(jù)傳送到MAC層時,成為MAC服務數(shù)據(jù)單元,在數(shù)據(jù)的起始和結(jié)尾部分分別附加了MHR頭信息和MFR信息后,就構(gòu)成了MAC幀。 MAC幀被傳送到物理層后,成為物理幀的負載PSDU。PSDU在物理層中,首部增加了同步信息SHR和幀長度字段PHR字段后成為物理層幀。數(shù)據(jù)幀結(jié)構(gòu)如圖5.8所示。2字節(jié)1字節(jié)4/10變長

2字節(jié)幀控制序列號尋址域數(shù)據(jù)負載FCSMHRMAC負載MFR(c)確認幀如果結(jié)點設備收到的目的地址為自己的數(shù)據(jù)幀,并且?guī)目刂菩畔⒆侄蔚拇_認請求被置1,此時結(jié)點設備需要回復一個確認幀。確認幀的序列號應與被確認幀的序列號相同,并且負載長度應為0。確認幀緊接著被確認的幀發(fā)送,不需要采用CSMA-CA機制競爭信道。確認幀的結(jié)構(gòu)如圖5.9所示。2字節(jié)1字節(jié)2字節(jié)幀控制序列號FCSMHRMFR數(shù)據(jù)接口及網(wǎng)絡層服務

ZigBee網(wǎng)絡層的各個組成部分和彼此間的接口關(guān)系如圖5.13所示。圖中NLDE-SAP為網(wǎng)絡層數(shù)據(jù)實體的服務接入點,NLME-SAP是網(wǎng)絡層管理實體的服務接入點,MCPS-SAP是媒體接入控制公共部分子層的服務接人點,MLME-SAP是MAC層管理實體的服務接入點。1.6網(wǎng)絡層結(jié)構(gòu)網(wǎng)絡層通過兩種服務接入點提供網(wǎng)絡層數(shù)據(jù)服務和網(wǎng)絡層管理服務。網(wǎng)絡層數(shù)據(jù)服務通過網(wǎng)絡層數(shù)據(jù)實體服務接入點接入,網(wǎng)絡層管理服務通過網(wǎng)絡層管理實體服務接人點接入。網(wǎng)絡層數(shù)據(jù)實體提供以下服務:產(chǎn)生網(wǎng)絡層協(xié)議數(shù)據(jù)單元(NPDU),網(wǎng)絡層數(shù)據(jù)實體通過增加一個適當?shù)膮f(xié)議頭從應用支持層協(xié)議數(shù)據(jù)單元中生成網(wǎng)絡層的協(xié)議數(shù)據(jù)單元;指定傳輸拓撲路由,網(wǎng)絡層數(shù)據(jù)實體能夠發(fā)送一個網(wǎng)絡層的協(xié)議數(shù)據(jù)單元到一個數(shù)據(jù)傳輸?shù)哪繕私K端設備,目標終端設備也可以是通信鏈路中的一個中間通信設備。網(wǎng)絡層管理實體提供如下服務:配置新的設備。為保證設備正常工作的需要,設備應具有足夠的堆棧,以滿足配置的需要。配置選項包括對一個ZigBee協(xié)調(diào)器和連接一個現(xiàn)有網(wǎng)絡設備的初始化操作;加入或離開網(wǎng)絡。具有連接或者斷開一個網(wǎng)絡的能力,以及為建立一個ZigBee協(xié)調(diào)器或者ZigBee路由器,具有要求設備同網(wǎng)絡斷開的能力;ZigBee協(xié)調(diào)器和ZigBee路由器具有為新加入網(wǎng)絡的設備分配地址能力;具有發(fā)現(xiàn)、記錄和匯報相關(guān)的一跳鄰居設備信息的能力;具有發(fā)現(xiàn)和記錄有效地傳送信息的網(wǎng)絡路由的能力;具有控制設備接收機接收狀態(tài)的能力,即控制接收機什么時間接收、接收時間的長短,以保證MAC層的同步或者正常接收等。網(wǎng)絡層幀格式ZigBee網(wǎng)絡層幀由幀報頭和可變長有效載荷組成。網(wǎng)絡層幀報頭,包含幀控制、地址和序列信息;網(wǎng)絡層幀的可變長有效載荷,包含幀類型所指定的信息。2字節(jié)2字節(jié)2字節(jié)0/1字節(jié)0/1字節(jié)變長幀控制目的地址源地址廣播半徑域序列號幀負載路由幀網(wǎng)絡層幀報頭網(wǎng)絡負荷1.7zigbee協(xié)議棧構(gòu)成(1)TI公司開發(fā)的Z-Stack是ZigBee協(xié)議棧,并且經(jīng)過了ZigBee聯(lián)盟的認可而為全球眾多開發(fā)商所廣泛采用(2)我們沒必要弄懂zigbee協(xié)議棧所有源代碼,所謂開發(fā)或應用主要是對主函數(shù)及操作系統(tǒng)的修改應用,許多庫函數(shù)據(jù)項目要求而做修改即可)(3)TI公司的Z-Stack協(xié)議棧裝載在一個基于IAR開發(fā)環(huán)境的工程里(4)Z-Stack采用操作系統(tǒng)的思想來構(gòu)建,采用事件輪循機制,當各層初始化之后,系統(tǒng)進入低功耗模式,當事件發(fā)生時,喚醒系統(tǒng),開始進入中斷處理事件,結(jié)束后繼續(xù)進入低功耗模式如果同時有幾個事件發(fā)生,判斷優(yōu)先級,逐次處理事件這種軟件構(gòu)架可以極大地降級系統(tǒng)的功耗1.7zigbee協(xié)議棧構(gòu)成(7)整個Z-stack的主要工作流程,大致分為系統(tǒng)啟動,驅(qū)動初始化,OSAL初始化和啟動,進入任務輪循幾個階段(5)Z-Stack實際上是幫助程序員方便開發(fā)ZigBee的一套系(6)整個Z-Stack采用分層的軟件結(jié)構(gòu)硬件抽象層(HAL)提供各種硬件模塊的驅(qū)動,包括定時器Timer,通用I/O口GPIO,通用異步收發(fā)傳輸器UART,模數(shù)轉(zhuǎn)換ADC的應用程序接口API,提供各種服務的擴展。操作系統(tǒng)抽象層OSAL實現(xiàn)了一個易用的操作系統(tǒng)平臺,通過時間片輪轉(zhuǎn)函數(shù)實現(xiàn)任務調(diào)度,提供多任務處理機制。用戶可以調(diào)用OSAL提供的相關(guān)API進行多任務編程,將自己的應用程序作為一個獨立的任務來實現(xiàn)1.7zigbee協(xié)議棧構(gòu)成Zigbee協(xié)議棧物理層負責將數(shù)據(jù)通過發(fā)射天線發(fā)送出去以及從天線接收數(shù)據(jù);MAC層提供點對點通信的數(shù)據(jù)確認以及一些用于網(wǎng)絡發(fā)現(xiàn)和網(wǎng)絡形成的命令;網(wǎng)絡層(NWK)主要是對網(wǎng)型網(wǎng)絡提供支持,如在全網(wǎng)范圍內(nèi)發(fā)送廣播包,為單播數(shù)據(jù)包選擇路由,網(wǎng)絡層還具有安全特性;應用程序支持子層主要是提供了一些API函數(shù)供用戶調(diào)用,ZigBee設備對象ZDO是運行在端口0的應用程序,主要提供了一些網(wǎng)絡管理方面的函數(shù)。Zigbee協(xié)議棧端口0該端口用于整個ZigBee設備的配置和管理,用戶應用程序可以通過端口0與ZigBee協(xié)議棧的應用程序支持子層、網(wǎng)絡層進行通信,從而實現(xiàn)對這些層的初始化工作。端口255該端口用于向所有的端口廣播。在ZigBee協(xié)議棧中,各層之間進行數(shù)據(jù)傳遞是通過服務接入點來實現(xiàn)的。一般使用兩種類型的服務接入點:一種用于數(shù)據(jù)傳輸?shù)姆战尤朦c,另一種用于管理的服務接入點。1.7zigbee協(xié)議棧構(gòu)成整個協(xié)議棧是從哪里開始執(zhí)行的呢?在Zmain文件夾下有個Zmain.c件,打開該文件可以找到main()函數(shù),這就是整個協(xié)議棧的入口點,即從此開始執(zhí)行!1.7zigbee協(xié)議棧構(gòu)成Z-stack流程圖1.7zigbee協(xié)議棧OSAL介紹ZigBee協(xié)議棧包含了ZigBee協(xié)議所規(guī)定的基本功能,這些功能是以函數(shù)的形式實現(xiàn)的,為了便于管理這些函數(shù)集,從ZigBee2006協(xié)議棧開始,ZigBee協(xié)議內(nèi)加入了實時操作系統(tǒng),稱為OSAL(操作系統(tǒng)抽象層,OperatingSystemAbstractionLayer)。OSAL(OperatingSystemAbstractionLayer),即操作系統(tǒng)抽象層,如何理解OSAL呢?從字面意思看是跟操作系統(tǒng)有關(guān),但是后面為什么又加上“抽象層”呢?在ZigBee協(xié)議棧中,OSAL有什么作用呢?下面將對上述問題進行討論。1.7zigbee協(xié)議棧OSAL介紹1.7zigbee協(xié)議棧OSAL介紹1.7zigbee協(xié)議棧OSAL介紹1.7zigbee協(xié)議棧OSAL介紹1.7zigbee協(xié)議棧OSAL介紹那么,事件和任務的事件處理函數(shù)是如何聯(lián)系起來的昵?ZigBee中采用的方法是:建立一個事件表,保存各個任務的對應的事件,建立另一個函數(shù)表,保存各個任務事件處理函數(shù)的地址,然后將這兩張表建立某種對應關(guān)系,當某一事件發(fā)生時則查找函數(shù)表找到對應的事件處理函數(shù)即可。1.7zigbee協(xié)議棧OSAL介紹

現(xiàn)在問題轉(zhuǎn)變?yōu)椋河檬裁礃拥臄?shù)據(jù)結(jié)構(gòu)來實現(xiàn)事件表和函數(shù)表呢?如何將事件表和函數(shù)表建立對應關(guān)系呢?可以說,只要將上述兩個問題解決,整個協(xié)議棧的開發(fā)將會變得很容易。ZigBee協(xié)議棧中,有三個變量至關(guān)重要。1.7zigbee協(xié)議棧OSAL介紹

OSAL的工作原理:通過tasksEvents指針訪問事件表的每一項,如果有事件發(fā)生,則查找函數(shù)表找到事件處理函數(shù)進行處理,處理完后,繼續(xù)訪問事件表,查看是否有事件發(fā)生,無限循環(huán)。從這種意義上說,OSAL是一種基于事件驅(qū)動的輪詢式操作系統(tǒng)。事件驅(qū)動是指發(fā)生事件后采取相應的事件處理方法,輪詢指的是不斷地查看是否有事件發(fā)生。1.7zigbee協(xié)議棧OSAL介紹前文提到,在main函數(shù)中,直到調(diào)用osal_start_system函數(shù),整個ZigBee協(xié)議棧才算是真正地運行起來了,下面將深入osal_start_system函數(shù)的內(nèi)部去探究協(xié)議棧是如何被調(diào)動起來的。1.7zigbee協(xié)議棧OSAL介紹第3行,定義了一個變量idx,用來在事件表中索引。第4、5兩行,更新系統(tǒng)時鐘,同時查看硬件方面是否有事件發(fā)生。第6--9行,使用do-while循環(huán)查看事件表是否有事件發(fā)生。第11和12行,讀取該事件。第13行,將事件表中該項清零,注意有可能幾個事件同時發(fā)生,這里清零暫時的,第15行會將未處理的事件存放在事件表中。

1.7zigbee協(xié)議棧OSAL介紹現(xiàn)在遇到的問題是;如何在事件處理函數(shù)中返回未處理的事件呢?下面結(jié)合GenericApp_ProcessEvent函數(shù),講解一下。1.7zigbee協(xié)議棧OSAL介紹GenericApp_ProcessEvent函數(shù)的基本實現(xiàn)方法是:使用osal_msg_receive函數(shù)從消息隊列上接收一個消息(在該消息中包含了事件以及接收到的數(shù)據(jù)),然后使用swich-case語句判斷事件類型,如果是接收到新數(shù)據(jù)事件AF_INCOMING_MSG_CMD,則調(diào)用相應的事件處理函數(shù)。注意黑體部分的return語句,使用了異或運算,通過使用異或運算可以將處理完的事件清除,僅留下未處理的事件。串口事件定義為:0b00000001溫度事件定義為:0b000001001.7zigbee協(xié)議棧OSAL介紹從上述函數(shù)中可以看到SYS_EVENT_MSG,SYS_EVENT_MSG與AF_INCOMING_MSG_CMD有什么內(nèi)在聯(lián)系呢?前文講到可以使用一個二進制位表示一個事件,因此在ZigBee協(xié)議棧中,用戶可以自己定義事件,但是,協(xié)議棧同時也給出了幾個己經(jīng)定義好的事件,SYS_EVENT_MSG就是其中的一個事件,SYSEVENTMSG的定義如下:

#defineSYS_EVENT_MSG0x8000

1.7zigbee協(xié)議棧OSAL介紹由協(xié)議棧定義的事件成為系統(tǒng)強制事件(MandatoryEvents),SYS_EVENT_MSG是一個事件集合,主要包括以下幾個事件(其中前兩個較為常用):(1)AF_INCOMING_MSG_CMD表示收到了一個新的無線數(shù)據(jù)(2)ZDO_STATE_CHANGE當網(wǎng)絡狀態(tài)發(fā)生變化時,會產(chǎn)生該事件,如節(jié)點加入網(wǎng)絡時,就可以通過判斷該事件來決定何時向協(xié)調(diào)器發(fā)送數(shù)據(jù)包。(3)ZDO_CB_MSG指示每一個注冊的ZDO響應消息。(4)AF_DATA_CONFIRM_CMD調(diào)用AF_DataRequest發(fā)送數(shù)據(jù)時,有時需要確認信息,該事件與此有關(guān)。

1.8OSAL消息對列講解消息隊列之前需要講解一下

溫馨提示

  • 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

提交評論