第三章zigbee網絡原理與開發_第1頁
第三章zigbee網絡原理與開發_第2頁
第三章zigbee網絡原理與開發_第3頁
第三章zigbee網絡原理與開發_第4頁
第三章zigbee網絡原理與開發_第5頁
已閱讀5頁,還剩284頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

1.1無線網絡數據傳輸協議對比Zigbee與現有標準傳輸協議的比較:1.1無線網絡數據傳輸協議對比因此:Zigbee數據速率較低,不適用于傳輸大數據量的應用領域。1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.2短距離無線網絡的分類1.3zigbee版本介紹2001年8月,ZigBeeAlliance成立。該聯盟致力于促進在全球的消費電子、能源、住宅、商業和工業領域廣泛采用ZigBee作為領先的無線網絡、傳感和控制標準。2004年,ZigBeeV1.0誕生。它是Zigbee規范的第一個版本。由于推出倉促,存在一些錯誤。2006年,推出ZigBee2006,比較完善。2007年底,ZigBeePRO推出。目前已經吸引了一些最具創新性和在世界知名的組織,如華為、羅格朗、施耐德、飛利浦、霍尼韋爾等知名企業,一個由400多家企業和其他組織構成的非營利性開放聯合體,1.4zigbee無線網絡通信信道分析注: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無線網絡拓撲結構網絡拓撲結構:星狀、網狀、簇狀節點類型:協調器、路由器、終端節點ZigBee協調器(Coordinator)它包含所有的網絡信息,是3種設備中最復雜的,存儲容量大、計算能力最強。它主要用于發送網絡信標、建立一個網絡、管理網絡節點、存儲網絡節點信息、尋找一對節點間的路由信息并且不斷的接收信息。一旦網絡建立完成,這個協調器的作用就像路由器節點。1.5zigbee無線網絡拓撲結構ZigBee路由器(Router)

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

TV·

VCR·

DVD·

CD

·

鼠標·

鍵盤·

操作桿

·

保安·

HVAC·

照明·

門禁

·

玩具·

游戲器具

·

監視·

診斷·

傳感器·

監視·

傳感器·

自動化·控制工業、農業和商業消費電子PC機的外圍設備玩具和游戲個人健康監護ZigBee應用實例結合ZigBee和GPRS的無線數據傳輸網絡1.6zigbee技術的應用領域ZigBee應用實例ZigBee技術在石油石化行業的應用液化天然氣罐遠程監控汽油管線的腐蝕監測潤滑油供應鏈汽油管線侵入者監測液化天然氣容器跟蹤1.6zigbee技術的應用領域ZigBee應用實例基于ZigBee技術的管道監測無線數據傳輸網絡1.6zigbee技術的應用領域ZigBee應用實例ZigBee智能交通控制系統無線通信方案ZIGBEE無線通信的交通信號控制系統-交通路口控制通信1.6zigbee技術的應用領域ZigBee應用實例ZIGBEE無線通信的交通信號控制系統-交通路口控制通信ZigBee智能交通控制系統無線通信方案1.6zigbee技術的應用領域ZigBee應用實例基于ZigBee技術的無線三表遠程抄表系統采用MESH網狀網絡結構,保證數據傳輸的可靠性。每幢單元樓設置一個ZigBee遠端節點一個小區設置一個ZigBee中心節點ZigBee中心節點數據通過GPRS/CDMA或ADSL上傳到集抄中心1.6zigbee技術的應用領域主要內容3.1Zigbee簡介3.2Zigbee開發環境及調試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網絡開發基礎3.5Zigbee無線傳感器網絡高級開發3.6Zigbee無線傳感器網絡管理3.7Zigbee無線傳感器網絡開發實例1.1IAR集成開發環境介紹ZigBee無線網絡節點開發平臺軟件開發平臺IAREmbeddedWorkbench(簡稱EW)的C/C++交叉編譯器和調試器是今天世界最完整的和最容易使用專業嵌入式應用開發工具。

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

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

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

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

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

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

Coordinator.c

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

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

afStatus_tAF_DataRequest( afAddrType_t*dstAddr, endPointDesc_t*srcEP,

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

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

1.4Zigbee組網過程協調器初始化網絡1、

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

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

節點加入網絡一個節點加入網絡有兩種方法,一種是通過使用MAC層關聯進程加入網絡,另一種是通過與先前指定父節點連接而加入網絡。1、

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

1)通過MAC層關聯加入網絡2、

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

1)通過MAC層關聯加入網絡3、

子節點選擇PAN如果上層需要發現更多網絡,則可以重新執行網絡發現,如果不需要,則通過NLME_JOIN.request原語從被掃描到的網絡中選擇一個網絡加入。參數PANID設置為被選擇網絡的PAN標識符。

1)通過MAC層關聯加入網絡4、

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

1)通過MAC層關聯加入網絡5、

子節點請求MAC關聯確定好合適的父節點后,網絡層管理實體發送一個MLME_ASSOCIATE.request原語到MAC層,地址參數設置為已選擇的父節點的地址,嘗試通過父節點加入網絡。

1)通過MAC層關聯加入網絡6、

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

1)通過MAC層關聯加入網絡7、

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

父節點響應連接成功父節點接收到子節點的傳輸成功響應信息后,將通過MLME_COMM_STATUS.indication原語將傳輸成功的響應狀態發送給網絡層,網絡層管理實體通過NLME_JOIN.indication原語通知上層一個節點已經加入了網絡。

1)通過MAC層關聯加入網絡1、

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

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

子節點的64位擴展地址。2、

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

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

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

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

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

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

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

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

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

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

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

2字節幀控制序列號尋址域數據負載FCSMHRMAC負載MFR(c)確認幀如果結點設備收到的目的地址為自己的數據幀,并且幀的控制信息字段的確認請求被置1,此時結點設備需要回復一個確認幀。確認幀的序列號應與被確認幀的序列號相同,并且負載長度應為0。確認幀緊接著被確認的幀發送,不需要采用CSMA-CA機制競爭信道。確認幀的結構如圖5.9所示。2字節1字節2字節幀控制序列號FCSMHRMFR數據接口及網絡層服務

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

現在問題轉變為:用什么樣的數據結構來實現事件表和函數表呢?如何將事件表和函數表建立對應關系呢?可以說,只要將上述兩個問題解決,整個協議棧的開發將會變得很容易。ZigBee協議棧中,有三個變量至關重要。1.7zigbee協議棧OSAL介紹

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

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

#defineSYS_EVENT_MSG0x8000

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

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

溫馨提示

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

評論

0/150

提交評論