版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
物聯(lián)網(wǎng)通信技術(shù)第三章Zigbee網(wǎng)絡(luò)原理及開發(fā)趙建立山東科技大學(xué)主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡(luò)高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡(luò)管理3.7Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)實例主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡(luò)高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡(luò)管理3.7Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)實例ZigBee是IEEE802.15.4協(xié)議的代名詞。根據(jù)這個協(xié)議規(guī)定的技術(shù)是一種短距離、低功耗的無線通信技術(shù)。這一名稱來源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飛翔和“嗡嗡”(zig)地抖動翅膀的“舞蹈”來與同伴傳遞花粉所在方位信息,也就是說蜜蜂依靠這樣的方式構(gòu)成了群體中的通信網(wǎng)絡(luò)。ZigBee簡介ZigBee簡介ZigBee技術(shù)發(fā)展歷程1.ZigBee的前身是1998年由INTEL、IBM等產(chǎn)業(yè)巨頭發(fā)起的“HomeRFLite”技術(shù)。2.2000年12月成立了工作小組起草IEEE802.15.4標(biāo)準(zhǔn)3.Zigbee聯(lián)盟成立于2001年8月。2002年下半年,英國Invensys公司、日本三菱電氣公司、美國摩托羅拉公司以及荷蘭飛利浦半導(dǎo)體公司四大巨頭共同宣布加盟“Zigbee聯(lián)盟”,以研發(fā)名為“Zigbee”的下一代無線通信標(biāo)準(zhǔn),這一事件成為該項技術(shù)發(fā)展過程中的里程碑。4.2004年12月ZigBee1.0標(biāo)準(zhǔn)(又稱為ZigBee2004)敲定,這使得ZigBee有了自己的發(fā)展基本標(biāo)準(zhǔn)。5.2005年9月公布ZigBee1.0標(biāo)準(zhǔn)并提供下載。在這一年里,華為技術(shù)有限公司和IBM公司加入了ZigBee聯(lián)盟。但是基于該版本的應(yīng)用很少,與后面的版本也不兼容。6.2006年12月進(jìn)行標(biāo)準(zhǔn)修訂,推出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)、先進(jìn)抄表基礎(chǔ)建設(shè)(AdvancedMeterInfrastructure;AMI);ZigBee簡介1.1無線網(wǎng)絡(luò)數(shù)據(jù)傳輸協(xié)議對比
1.1無線網(wǎng)絡(luò)數(shù)據(jù)傳輸協(xié)議對比Zigbee與現(xiàn)有標(biāo)準(zhǔn)傳輸協(xié)議的比較:1.1無線網(wǎng)絡(luò)數(shù)據(jù)傳輸協(xié)議對比因此:Zigbee數(shù)據(jù)速率較低,不適用于傳輸大數(shù)據(jù)量的應(yīng)用領(lǐng)域。1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.2短距離無線網(wǎng)絡(luò)的分類1.3zigbee版本介紹2001年8月,ZigBeeAlliance成立。該聯(lián)盟致力于促進(jìn)在全球的消費電子、能源、住宅、商業(yè)和工業(yè)領(lǐng)域廣泛采用ZigBee作為領(lǐng)先的無線網(wǎng)絡(luò)、傳感和控制標(biāo)準(zhǔn)。2004年,ZigBeeV1.0誕生。它是Zigbee規(guī)范的第一個版本。由于推出倉促,存在一些錯誤。2006年,推出ZigBee2006,比較完善。2007年底,ZigBeePRO推出。目前已經(jīng)吸引了一些最具創(chuàng)新性和在世界知名的組織,如華為、羅格朗、施耐德、飛利浦、霍尼韋爾等知名企業(yè),一個由400多家企業(yè)和其他組織構(gòu)成的非營利性開放聯(lián)合體,1.4zigbee無線網(wǎng)絡(luò)通信信道分析注:2.4GHZ是全球通用的ISM頻段,915MHZ是北美的ISM頻段,896MHZ是歐洲認(rèn)可的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)絡(luò)拓?fù)浣Y(jié)構(gòu)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu):星狀、網(wǎng)狀、簇狀節(jié)點類型:協(xié)調(diào)器、路由器、終端節(jié)點ZigBee協(xié)調(diào)器(Coordinator)它包含所有的網(wǎng)絡(luò)信息,是3種設(shè)備中最復(fù)雜的,存儲容量大、計算能力最強。它主要用于發(fā)送網(wǎng)絡(luò)信標(biāo)、建立一個網(wǎng)絡(luò)、管理網(wǎng)絡(luò)節(jié)點、存儲網(wǎng)絡(luò)節(jié)點信息、尋找一對節(jié)點間的路由信息并且不斷的接收信息。一旦網(wǎng)絡(luò)建立完成,這個協(xié)調(diào)器的作用就像路由器節(jié)點。1.5zigbee無線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)ZigBee路由器(Router)
它執(zhí)行的功能包括允許其它設(shè)備加入這個網(wǎng)絡(luò),中繼路由,輔助子樹下終端設(shè)備的通信。通常,路由器全時間處在活動狀態(tài),因此為主供電。但是在樹狀拓?fù)渲?允許路由器操作周期運行,因此這個情況下允許路由器電池供電.1.5zigbee無線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)ZigBee終端設(shè)備(End-device)一個終端設(shè)備對于維護這個網(wǎng)絡(luò)設(shè)備沒有具體的責(zé)任,所以它可以睡眠和喚配,看它自己的選擇。因此它能作為電池供電節(jié)點。1.5zigbee無線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)設(shè)備類型拓?fù)漕愋褪欠癯蔀閰f(xié)調(diào)器通話對象全功能設(shè)備(FFD)星型、樹狀、網(wǎng)狀可以與任何ZigBee設(shè)備通話簡化功能設(shè)備(RFD)星型不可以與協(xié)調(diào)器、路由器通話,不能與終端設(shè)備通話1.5zigbee無線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)1.6zigbee技術(shù)的應(yīng)用領(lǐng)域ZigBee應(yīng)用場合低速無線設(shè)備·
TV·
VCR·
DVD·
CD
·
鼠標(biāo)·
鍵盤·
操作桿
·
保安·
HVAC·
照明·
門禁
·
玩具·
游戲器具
·
監(jiān)視·
診斷·
傳感器·
監(jiān)視·
傳感器·
自動化·控制工業(yè)、農(nóng)業(yè)和商業(yè)消費電子PC機的外圍設(shè)備玩具和游戲個人健康監(jiān)護ZigBee應(yīng)用實例結(jié)合ZigBee和GPRS的無線數(shù)據(jù)傳輸網(wǎng)絡(luò)1.6zigbee技術(shù)的應(yīng)用領(lǐng)域ZigBee應(yīng)用實例ZigBee技術(shù)在石油石化行業(yè)的應(yīng)用液化天然氣罐遠(yuǎn)程監(jiān)控汽油管線的腐蝕監(jiān)測潤滑油供應(yīng)鏈汽油管線侵入者監(jiān)測液化天然氣容器跟蹤1.6zigbee技術(shù)的應(yīng)用領(lǐng)域ZigBee應(yīng)用實例基于ZigBee技術(shù)的管道監(jiān)測無線數(shù)據(jù)傳輸網(wǎng)絡(luò)1.6zigbee技術(shù)的應(yīng)用領(lǐng)域ZigBee應(yīng)用實例ZigBee智能交通控制系統(tǒng)無線通信方案ZIGBEE無線通信的交通信號控制系統(tǒng)-交通路口控制通信1.6zigbee技術(shù)的應(yīng)用領(lǐng)域ZigBee應(yīng)用實例ZIGBEE無線通信的交通信號控制系統(tǒng)-交通路口控制通信ZigBee智能交通控制系統(tǒng)無線通信方案1.6zigbee技術(shù)的應(yīng)用領(lǐng)域ZigBee應(yīng)用實例基于ZigBee技術(shù)的無線三表遠(yuǎn)程抄表系統(tǒng)采用MESH網(wǎng)狀網(wǎng)絡(luò)結(jié)構(gòu),保證數(shù)據(jù)傳輸?shù)目煽啃浴C看眴卧獦窃O(shè)置一個ZigBee遠(yuǎn)端節(jié)點一個小區(qū)設(shè)置一個ZigBee中心節(jié)點ZigBee中心節(jié)點數(shù)據(jù)通過GPRS/CDMA或ADSL上傳到集抄中心1.6zigbee技術(shù)的應(yīng)用領(lǐng)域主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡(luò)高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡(luò)管理3.7Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)實例1.1IAR集成開發(fā)環(huán)境介紹ZigBee無線網(wǎng)絡(luò)節(jié)點開發(fā)平臺軟件開發(fā)平臺IAREmbeddedWorkbench(簡稱EW)的C/C++交叉編譯器和調(diào)試器是今天世界最完整的和最容易使用專業(yè)嵌入式應(yīng)用開發(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個復(fù)位按鍵和一根仿真線。1.2仿真與調(diào)試USB接口:通過USB接口可以把仿真器與計算機有機地連接起來。仿真器通過此接口與計算機進(jìn)行通信,要在CC2430/CC2530的ZigBee模塊上實現(xiàn)下載、調(diào)試(Debug)、仿真等功能都通過此接口來實現(xiàn)。
復(fù)位按鍵:此按鍵用來實現(xiàn)仿真器的復(fù)位,當(dāng)需要重新下載、調(diào)試、仿真時,可通過此按鍵來實現(xiàn)硬復(fù)位。仿真線:這是一根10芯的下載、調(diào)試(DEBUG)、仿真線,通過它與CC2430/CC2530的ZigBee模塊進(jìn)行連接。1.2仿真與調(diào)試仿真器具有以下特點:USB接口,使開發(fā)與計算機連接更加簡單快捷2)高速代碼下載,提供高達(dá)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è)設(shè)計,系統(tǒng)穩(wěn)定可靠,噪聲干擾小1.2仿真與調(diào)試連接好仿真器和zigbee節(jié)點,復(fù)位一下仿真器,然后點擊Project中的DownloadandDebug,就實現(xiàn)了下載程序,當(dāng)程序下載完后,軟件進(jìn)入在線仿真模式。1.3一個例程這個代碼的意思是將P1口設(shè)置為輸出,將P1口置0,中軟國際教育集團開發(fā)的模塊和開發(fā)板中有小燈在P1口上,當(dāng)執(zhí)行這個代碼的時候,小燈會點亮1.3一個例程在上面的介紹中,大家對IAR的使用方法已經(jīng)有了一定的認(rèn)識,但是在一個項目中,尤其是無線項目中,涉及到的設(shè)備不會僅僅只有一個,如在ZigBee設(shè)備中的協(xié)調(diào)器、路由器和終端設(shè)備,雖然設(shè)備不相同但它們的功能和協(xié)議棧底層卻基本相同,所以在里面只需要定義些條件編譯就可以設(shè)定好,如果將每一個設(shè)備都重新建立一個工程的話,這樣寄浪費空間,代碼也很混亂,所以我們就需要使用IAR的模塊設(shè)備功能。1.3一個例程
我們通過上面的點亮LED例子來說明這個功能的使用方法。
首先修改工程的代碼,在這里我們要實現(xiàn)兩個設(shè)備在一個工程中實現(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ù)下面的圖片進(jìn)行配置,首先是打開小燈,打開小燈的是在沒有定義Blink_LED的情況下實現(xiàn)的,所以我們只需要直接選擇Open_LED模塊,不需要任何修改就可以完成該功能。主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡(luò)高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡(luò)管理3.7Zigbee無線傳感器網(wǎng)絡(luò)開發(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實際應(yīng)用的一些問題做了一些改進(jìn),緩存加大了,存儲容量最大支持到256K,CC2530的通信距離可以達(dá)到400m,不用再用CC2430外加功放來擴展距離CC2530的主要特點:◆高性能和低功耗的8051微控制器核。◆集成符合IEEE802.15.4標(biāo)準(zhǔn)的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功能?!艟哂须姵乇O(jiān)測和溫度感測功能。◆集成了14位模數(shù)轉(zhuǎn)換的ADC。◆集成AES安全協(xié)處理器。◆帶有2個強大的支持幾組協(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)絡(luò)開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡(luò)高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡(luò)管理3.7Zigbee無線傳感器網(wǎng)絡(luò)開發(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é)議棧進(jìn)行講解。ZigBee2007協(xié)議棧ZStack-CC2530-2.5.1a要安裝以后才能使用,下面講解安裝步驟。1、可以直接到TI官方網(wǎng)站下載zigbee2007協(xié)議棧2、打開光盤目錄:ETC-WSN物聯(lián)網(wǎng)光盤資料\ZigBee網(wǎng)絡(luò)\tools,雙擊ZStack-CC2530-2.5.1a.exe即可進(jìn)行協(xié)議棧的安裝,默認(rèn)是安裝到c盤。然后在路徑C:\TexasInstruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\GenericApp\CC2530DB下找到GenericApp.eww,打開該工程。打開該工程后,可以看到GenericApp工程文件布局,如圖所示。在圖中所示的文件布局中,左側(cè)有很多文件夾,如App,HAL,MAC等;這些文件夾對應(yīng)了ZigBee協(xié)議中不同的層,使用ZigBee協(xié)議棧進(jìn)行應(yīng)用程序的開發(fā),一般只需要修改App目錄下的文件即可。1.3Zigbee協(xié)議棧的安裝APP:對應(yīng)開發(fā)的應(yīng)用模塊;HAL模塊直接操作外設(shè)寄存器,完成外設(shè)的驅(qū)動程序。向上層提供外設(shè)驅(qū)動的接口函數(shù)MT(MonitorTest,監(jiān)控測試)模塊為上位機提供通過串口監(jiān)測節(jié)點運行情況的方式??梢酝ㄟ^串口請求AF、ZDO、NWK和MAC模塊進(jìn)行特定操作;MAC模塊實現(xiàn)IEEE802.15.4標(biāo)準(zhǔn)的MAC層服務(wù);NWK(Network,網(wǎng)絡(luò))模塊實現(xiàn)ZigBee規(guī)范中的網(wǎng)絡(luò)層服務(wù),包括網(wǎng)絡(luò)的配置、節(jié)點的加入/離開網(wǎng)絡(luò)、地址分配、路由發(fā)現(xiàn)、網(wǎng)絡(luò)層協(xié)議數(shù)據(jù)單元的傳輸?shù)取?.3Zigbee協(xié)議棧的安裝1.3zigbee協(xié)議棧安裝ZDO(ZigBeeDeviceObject,ZigBee設(shè)備對象)模塊實現(xiàn)ZigBee規(guī)范中的ZDO定義的功能,包括應(yīng)用支持子層和網(wǎng)絡(luò)層的初始化,并通過向用戶定義的應(yīng)用對象收集相關(guān)信息來實現(xiàn)設(shè)備和服務(wù)發(fā)現(xiàn)、安全管理、網(wǎng)絡(luò)管理、綁定管理等。OSAL(OperatingSystemAbstractionLayer,操作系統(tǒng)抽象層)模塊定義了其它模塊中的事件的處理機制。它將每一模塊內(nèi)的所有事件放在一個任務(wù)中進(jìn)行處理,任務(wù)間的通信通過傳遞系統(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)絡(luò)號等有關(guān)的鏈接命令。例如:下列代碼定義了建立網(wǎng)絡(luò)的信道默認(rèn)為11,即從11信道上建立ZigBee無線網(wǎng)絡(luò),第59行定義了ZigBee無線網(wǎng)絡(luò)的網(wǎng)絡(luò)號。1.3zigbee協(xié)議棧安裝(3)f8wCoord.cfg----定義了設(shè)備類型前文講到zigbee無線網(wǎng)絡(luò)中的設(shè)備類型有協(xié)調(diào)器,路由器和終端節(jié)點。下述代碼就定義了該設(shè)備具有協(xié)調(diào)器和路由器的功能。第一個zigbee實驗兩個ZigBee節(jié)點進(jìn)行點對點通信,ZigBee節(jié)點2每隔5s向節(jié)點1發(fā)送一次“ChinaSofti”字符,同時LED綠燈閃爍兩下表示成功發(fā)送。ZigBee節(jié)點1收到節(jié)點2發(fā)送過來的數(shù)據(jù)后,對接收到的數(shù)據(jù)進(jìn)行判斷,如果收到的數(shù)據(jù)是“ChinaSofti”,則使開發(fā)板上的LED紅燈閃爍兩下表示成功接收。第一個zigbee實驗ZigBee節(jié)點1配置為1個協(xié)調(diào)器,負(fù)責(zé)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é)點上的端口之間可以進(jìn)行通信,如節(jié)點1的端口1可以給節(jié)點2的端口1發(fā)送控制命令來點亮LED,節(jié)點1的端口1也可以給節(jié)點2的端口2發(fā)送命令進(jìn)行數(shù)據(jù)采集操作,但是節(jié)點2上端口1和端口2的網(wǎng)絡(luò)地址是相同的,所以僅僅通過網(wǎng)絡(luò)地址無法區(qū)分,所以,在發(fā)送數(shù)據(jù)時不但要指定網(wǎng)絡(luò)地址,還要指定端口號。第一個zigbee實驗-Coordinator.c第一個zigbee實驗-Coordinator.c第一個zigbee實驗-Coordinator.c:包含的頭文件是從刪除的GenericApp.c文件復(fù)制得到的。GENERICAPP_MAX_CLUSTERS是在GenericApp.h文件中定義的宏,這主要是為了跟協(xié)議棧里面數(shù)據(jù)的定義格式保持一致,代碼中的常量都是以宏定義的形式實現(xiàn)的。第一個zigbee實驗-
Coordinator.c
第一個zigbee實驗-Coordinator.c上述代碼定義了三個變量,一個是節(jié)點描述符GGenericApp_epDesc,一個是任務(wù)優(yōu)先級GenencApp_TaskID,最后一個是數(shù)據(jù)發(fā)送序列號GenericApp_TransID。第一個zigbee實驗-Coordinator.c上述代碼聲明了一個消息處理函數(shù)GenericApp_MessageMSGCB。第一個zigbee實驗-Coordinator.c第36行,初始化了任務(wù)優(yōu)先級(任務(wù)優(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é)點描述符進(jìn)行的初始化,上述初始化格式較為固定,一般不需要修改。第44行,使用afRegister函數(shù)將節(jié)點描述符進(jìn)行注冊,只有注冊以后,才可以使用OSAL提供的系統(tǒng)服務(wù)。第一個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,任務(wù)優(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行,將設(shè)備狀態(tài)初始化為DEV_INIT,表示該節(jié)點沒有連接到網(wǎng)絡(luò)。第42行,將發(fā)送地址模式設(shè)置為單播(Addr16Bit表示單播)。第44行,協(xié)調(diào)器的網(wǎng)絡(luò)地址為0x0000;第51行,使用afRegister函數(shù)將節(jié)點描述符進(jìn)行注冊。第一個zigbee實驗-Enddevice.c第一個zigbee實驗-Enddevice.c第64行,讀取節(jié)點的設(shè)備類型。第65行,對節(jié)點設(shè)備類型進(jìn)行判斷,如果是終端節(jié)點(設(shè)備類型碼為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進(jìn)行無線數(shù)據(jù)的發(fā)送。第一個zigbee實驗-Enddevice.c此時分別編譯、下載程序到Zigbee節(jié)點,實現(xiàn)預(yù)定功能?。〉幾g的時候注意:第一個zigbee實驗協(xié)調(diào)器上電后,會按照編譯時給定的參數(shù),選擇合適的信道、合適的網(wǎng)絡(luò)號,建立ZigBee無線網(wǎng)絡(luò),這部分內(nèi)容讀者不需要寫代碼實現(xiàn),ZigBee協(xié)議棧已經(jīng)實現(xiàn)了。終端節(jié)點則是加入網(wǎng)絡(luò)后定期發(fā)送數(shù)據(jù)。流程圖與協(xié)調(diào)器類似。終端節(jié)點上電后,會進(jìn)行硬件電路的初始化,然后搜索是否有ZigBee無線網(wǎng)絡(luò),如果有ZigBee無線網(wǎng)絡(luò)再自動加入(這是最簡單的情況,當(dāng)然可以控制節(jié)點加入網(wǎng)絡(luò)時要符合編譯時確定的網(wǎng)絡(luò)號等),然后發(fā)送數(shù)據(jù)到協(xié)調(diào)器,最后使LED閃爍。Zigbee數(shù)據(jù)通訊實驗原理
在zigbee協(xié)議棧中進(jìn)行數(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)絡(luò)地址以及發(fā)送數(shù)據(jù)的格式,如廣播、單播或多播等。②endPointDesc_t*srcEP----在ZigBee無線網(wǎng)絡(luò)中,通過網(wǎng)絡(luò)地址可以找到某個具體的節(jié)點,如協(xié)調(diào)器的網(wǎng)絡(luò)地址是0x0000,但是具體到某一個節(jié)點,還有不同的端口(endpoint),每個節(jié)點上最多支持240個端口(endpoint)。Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)發(fā)送③uint16cID----這個參數(shù)描述的是命令號,在ZigBee協(xié)議里的命令主要用來標(biāo)識不同的控制操作,不問的命令號代表了不同的控制命令,如終端節(jié)點在發(fā)送數(shù)據(jù)時使用的命令I(lǐng)D是GENERICAPP_CLUSTERID,它的值為1。④uint16len----該參數(shù)標(biāo)志了發(fā)送數(shù)據(jù)的長度。⑤uint8*buf----該參數(shù)是指向發(fā)送數(shù)據(jù)緩沖區(qū)的指針。發(fā)送數(shù)據(jù)函數(shù)會從該指針指向的地址按照指定的長度取得發(fā)送數(shù)據(jù)進(jìn)行發(fā)送。⑥uint8*transID----該參數(shù)是一個指向發(fā)送序號的指針,每次發(fā)送數(shù)據(jù)時,發(fā)送序號會自動加1(協(xié)議棧里面實現(xiàn)的該功能),在接收端可以通過發(fā)送序號來判斷是否丟包,同時可以計算出丟包率。⑦uint8options和uint8radius----這兩個參數(shù)取默認(rèn)值即可Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)發(fā)送當(dāng)協(xié)調(diào)器接收到數(shù)據(jù)后,操作系統(tǒng)會將該數(shù)據(jù)封裝成一個消息,然后放入消息隊列中,每個消息都有自己的消息ID,標(biāo)志接收到新數(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當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化時,會產(chǎn)生該事件,如節(jié)點加入網(wǎng)絡(luò)時,就可以通過判斷該事件來決定何時向協(xié)調(diào)器發(fā)送數(shù)據(jù)包。Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)接收首先使用osal_msg_receive函數(shù)從消息隊列中接收一個消息,然后使用switch-case語句對消息類型進(jìn)行判斷(判斷消息ID),如果消息ID是AF_INCOMlNG_MSG_CMD則進(jìn)行相應(yīng)的數(shù)據(jù)處理。Zigbee數(shù)據(jù)通訊實驗原理—數(shù)據(jù)接收1.4Zigbee組網(wǎng)過程1個是64位的IEEE地址,通常也叫作MAC地址或者擴展地址(Extendedaddress),另一個是16位的網(wǎng)絡(luò)地址,也叫做邏輯地址(Logicaladdress)或者短地址64位長地址是全球唯一的地址,并且終身分配給設(shè)備。這個地址可由制造商設(shè)定或者在安裝的時候設(shè)置,是由IEEE來提供當(dāng)設(shè)備加入ZigBee網(wǎng)絡(luò)被分配一個短地址,在其所在的網(wǎng)絡(luò)中是唯一的。這個地址主要用來在網(wǎng)絡(luò)中辨識設(shè)備,數(shù)據(jù)傳輸和數(shù)據(jù)包路由等一個節(jié)點是一個設(shè)備,有一個射頻端,一個64位IEEE地址,一個16位網(wǎng)絡(luò)地址IEEE802.15.4網(wǎng)絡(luò)的建立過程首先,每個設(shè)備的協(xié)議棧必須要對其PHY和MAC層初始化每個網(wǎng)絡(luò)必須有一個也只能有一個PANCo-ordinatorPANID作為網(wǎng)絡(luò)標(biāo)識,可以被人為的預(yù)定義除64位IEEEMAC地址外,還須分配一個16位的短地址例如Zigbee技術(shù)選擇2.4GHz設(shè)備以Co-ordinator的模式啟動,然后就開放請求應(yīng)答有可以利用的Co-ordinator,設(shè)備就可以申請加入網(wǎng)絡(luò)設(shè)備被Co-ordinator接受,將獲得短地址作為標(biāo)識,便可傳輸數(shù)據(jù)
組建一個完整的Zigbee網(wǎng)絡(luò)分為兩步:第一步是協(xié)調(diào)器初始化一個網(wǎng)絡(luò);第二步是路由器或終端加入網(wǎng)絡(luò)。加入網(wǎng)絡(luò)又有兩種方法,一種是子設(shè)備通過使用MAC層的連接進(jìn)程加入網(wǎng)絡(luò),另一種是子設(shè)備通過與一個先前指定的父設(shè)備直接加入網(wǎng)絡(luò)。
1.4Zigbee組網(wǎng)過程協(xié)調(diào)器初始化網(wǎng)絡(luò)1、
檢測協(xié)調(diào)器建立一個新的網(wǎng)絡(luò)是通過原語NLME_NETWORK_FORMATION.request發(fā)起的,但發(fā)起NLME_NETWORK_FORMATION.request原語的節(jié)點必須具備兩個條件,一是這個節(jié)點具有ZigBee協(xié)調(diào)器功能,二是這個節(jié)點沒有加入到其它網(wǎng)絡(luò)中。任何不滿足這兩個條件的節(jié)點發(fā)起建立一個新網(wǎng)絡(luò)的進(jìn)程都會被網(wǎng)絡(luò)層管理實體終止,網(wǎng)絡(luò)層管理實體將通過參數(shù)值為INVALID_REQUEST的NLME_NETWORK_FORMATION.confirm的原語來通知上層這是一個非法請求。協(xié)調(diào)器初始化網(wǎng)絡(luò)2、
信道掃描協(xié)調(diào)器發(fā)起建立一個新網(wǎng)絡(luò)的進(jìn)程后,網(wǎng)絡(luò)層管理實體將請求MAC子層對信道進(jìn)行掃描。信道掃描包括能量掃描和主動掃描兩個過程。首先對用戶指定的信道或物理層所有默認(rèn)的信道進(jìn)行一個能量掃描,以排除干擾。網(wǎng)絡(luò)層管理實體將根據(jù)信道能量測量值對信道進(jìn)行一個遞增排序,并且拋棄能量值超過了可允許能量值的信道,保留可允許能量值內(nèi)的信道等待進(jìn)一步處理。接著在可允許能量值內(nèi)的信道執(zhí)行主動掃描,網(wǎng)絡(luò)層管理實體通過審查返回的PAN描述符列表,確定一個用于建立新網(wǎng)絡(luò)的信道,該信道中現(xiàn)有的網(wǎng)絡(luò)數(shù)目是最少的,網(wǎng)絡(luò)層管理實體將優(yōu)先選擇沒有網(wǎng)絡(luò)的信道。如果沒有掃描到一個合適的信道,進(jìn)程將被終止,網(wǎng)絡(luò)層管理實體通過參數(shù)值為STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原語來通知上層初始化啟動網(wǎng)絡(luò)失敗。協(xié)調(diào)器初始化網(wǎng)絡(luò)3、配置網(wǎng)絡(luò)參數(shù)如果掃描到一個合適的信道,網(wǎng)絡(luò)層管理實體將為新網(wǎng)絡(luò)選擇一個PAN描述符,該PAN描述符可以是由設(shè)備隨機選擇的,也可以是在NLME_NETWORK_FORMATION.request里指定的,但必須滿足PAN描述符小于或等于0x3fff,不等于0xffff,并且在所選信道內(nèi)是唯一的PAN描述符,沒有任何其它PAN描述符與之是重復(fù)的。如果沒有符合條件的PAN描述符可選擇,進(jìn)程將被終止,網(wǎng)絡(luò)層管理實體通過參數(shù)值為STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原語來通知上層初始化啟動網(wǎng)絡(luò)失敗。確定好PAN描述符后,網(wǎng)絡(luò)層管理實體為協(xié)調(diào)器選擇16位網(wǎng)絡(luò)地址0x0000,MAC子層的macPANID參數(shù)將被設(shè)置為PAN描述符的值,macShortAddressPIB參數(shù)設(shè)置為協(xié)調(diào)器的網(wǎng)絡(luò)地址。協(xié)調(diào)器初始化網(wǎng)絡(luò)4、運行新網(wǎng)絡(luò)網(wǎng)絡(luò)參數(shù)配置好后,網(wǎng)絡(luò)層管理實體通過MLME_START.request原語通知MAC層啟動并運行新網(wǎng)絡(luò),啟動狀態(tài)通過MLME_START.confirm原語通知網(wǎng)絡(luò)層,網(wǎng)絡(luò)層管理實體再通過NLME_NETWORK_FORMATION.confirm原語通知上層協(xié)調(diào)器初始化的狀態(tài)。協(xié)調(diào)器初始化網(wǎng)絡(luò)5、允許設(shè)備加入網(wǎng)絡(luò)只有ZigBee協(xié)調(diào)器或路由器才能通過NLME_PERMIT_JOINING.request原語來設(shè)置節(jié)點處于允許設(shè)備加入網(wǎng)絡(luò)的狀態(tài)。當(dāng)發(fā)起這個進(jìn)程時,如果PermitDuration參數(shù)值為0x00,網(wǎng)絡(luò)層管理實體將通過MLME_SET.request原語把MAC層的macAssociationPermitPIB屬性設(shè)置為FALSE,禁止節(jié)點處于允許設(shè)備加入網(wǎng)絡(luò)的狀態(tài);如果PermitDuration參數(shù)值介于0x01和0xfe之間,網(wǎng)絡(luò)層管理實體將通過MLME_SET.request原語把macAssociationPermitPIB屬性設(shè)置為TRUE,并開啟一個定時器,定時時間為PermitDuration,在這段時間內(nèi)節(jié)點處于允許設(shè)備加入網(wǎng)絡(luò)的狀態(tài),定時時間結(jié)束,網(wǎng)絡(luò)層管理實體把MAC層的macAssociationPermitPIB屬性設(shè)置為FALSE;協(xié)調(diào)器初始化網(wǎng)絡(luò)5、允許設(shè)備加入網(wǎng)絡(luò)如果PermitDuration參數(shù)的值為0xff,網(wǎng)絡(luò)層管理實體將通過MLME_SET.request原語把macAssociationPermitPIB屬性設(shè)置為TRUE,表示節(jié)點無限期處于允許設(shè)備加入網(wǎng)絡(luò)的狀態(tài),除非有另外一個NLME_PERMIT_JOINING.request原語被發(fā)出。
節(jié)點加入網(wǎng)絡(luò)一個節(jié)點加入網(wǎng)絡(luò)有兩種方法,一種是通過使用MAC層關(guān)聯(lián)進(jìn)程加入網(wǎng)絡(luò),另一種是通過與先前指定父節(jié)點連接而加入網(wǎng)絡(luò)。1、
子節(jié)點發(fā)起信道掃描子節(jié)點通過NLME_NETWORK_DISCOVERY.request原語發(fā)起加入網(wǎng)絡(luò)的進(jìn)程,網(wǎng)絡(luò)層接收到這個原語后通過發(fā)起MLME_SCAN.request原語請求MAC層執(zhí)行一個主動掃描或被動掃描以接收包含了PAN標(biāo)志符的信標(biāo)幀,掃描的信道以及每個信道的掃描時間分別由NLME_NETWORK_DISCOVERY.request原語的參數(shù)ScanChannels和ScanDuration決定。
1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡(luò)2、
子節(jié)點存儲各PAN信息MAC層通過MLME_BEACONNOTIFY.indication原語將掃描中接收到的信標(biāo)幀信息發(fā)送到網(wǎng)絡(luò)層管理實體,信標(biāo)幀信息包括信標(biāo)設(shè)備的地址、是否允許連接以及信標(biāo)凈載荷。如果信標(biāo)凈載荷域里的協(xié)議ID域與自己的協(xié)議ID相同,子設(shè)備就將每個匹配的信標(biāo)幀相關(guān)信息保存在鄰居表中。信道掃描完成后,MAC層通過MLME_SCAN.confirm原語通知網(wǎng)絡(luò)層管理實體,網(wǎng)絡(luò)層再通過NLME_NETWORK_DISCOVERY.confirm原語通知上層,該原語包含了每個掃描到的網(wǎng)絡(luò)的描述符,以便上層選擇一個網(wǎng)絡(luò)加入。
1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡(luò)3、
子節(jié)點選擇PAN如果上層需要發(fā)現(xiàn)更多網(wǎng)絡(luò),則可以重新執(zhí)行網(wǎng)絡(luò)發(fā)現(xiàn),如果不需要,則通過NLME_JOIN.request原語從被掃描到的網(wǎng)絡(luò)中選擇一個網(wǎng)絡(luò)加入。參數(shù)PANID設(shè)置為被選擇網(wǎng)絡(luò)的PAN標(biāo)識符。
1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡(luò)4、
子節(jié)點選擇父節(jié)點一個合適的父節(jié)點需要滿足三個條件:匹配的PAN標(biāo)志符、鏈路成本最大為3、允許連接,為了尋找合適的父節(jié)點,NLME_JOIN.request原語請求網(wǎng)絡(luò)層搜索它的鄰居表,如果鄰居表中不存在這樣的父節(jié)點則通知上層,如果存在多個合適的父節(jié)點則選擇具有最小深度的父節(jié)點,如果存在多個具有最小深度的合適的父節(jié)點則隨機選擇一個父節(jié)點。
1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡(luò)5、
子節(jié)點請求MAC關(guān)聯(lián)確定好合適的父節(jié)點后,網(wǎng)絡(luò)層管理實體發(fā)送一個MLME_ASSOCIATE.request原語到MAC層,地址參數(shù)設(shè)置為已選擇的父節(jié)點的地址,嘗試通過父節(jié)點加入網(wǎng)絡(luò)。
1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡(luò)6、
父節(jié)點響應(yīng)MAC關(guān)聯(lián)父節(jié)點通過MLME_ASSOCIATE.indication原語通知網(wǎng)絡(luò)層管理實體一個節(jié)點正嘗試加入網(wǎng)絡(luò),網(wǎng)絡(luò)層管理實體將搜索它的鄰居表查看是否有一個與嘗試加入節(jié)點相匹配的64位擴展地址,以便確定該節(jié)點是否已經(jīng)存在于它的網(wǎng)絡(luò)中了。如果有匹配的擴展地址,網(wǎng)絡(luò)層管理實體獲取相應(yīng)的16位網(wǎng)絡(luò)地址并發(fā)送一個連接響應(yīng)到MAC層。如果沒有匹配的擴展地址,在父節(jié)點的地址分配空間還沒耗盡的條件下網(wǎng)絡(luò)層管理實體將為嘗試加入的節(jié)點分配一個16位網(wǎng)絡(luò)地址。如果父節(jié)點地址分配空間耗盡,將拒絕節(jié)點加入請求。當(dāng)同意節(jié)點加入網(wǎng)絡(luò)的請求后,父節(jié)點網(wǎng)絡(luò)層管理實體將使用加入節(jié)點的信息在鄰居表中產(chǎn)生一個新的項,并通過MLME_ASSOCIATE.request原語通知MAC層連接成功。
1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡(luò)7、
子節(jié)點響應(yīng)連接成功如果子節(jié)點接收到父節(jié)點發(fā)送的連接成功信息,發(fā)送一個傳輸成功響應(yīng)信息以確認(rèn)接收,然后子節(jié)點MAC層將通過MLME_ASSOCIATE.confirm原語通知網(wǎng)絡(luò)層,原語包含了父節(jié)點為子節(jié)點分配的網(wǎng)內(nèi)唯一的16位網(wǎng)絡(luò)地址,然后網(wǎng)絡(luò)層管理實體設(shè)置鄰居表相應(yīng)鄰居設(shè)備為它的父設(shè)備,并通過NLME_JOIN.confirm原語通知上層節(jié)點成功加入網(wǎng)絡(luò)。8、
父節(jié)點響應(yīng)連接成功父節(jié)點接收到子節(jié)點的傳輸成功響應(yīng)信息后,將通過MLME_COMM_STATUS.indication原語將傳輸成功的響應(yīng)狀態(tài)發(fā)送給網(wǎng)絡(luò)層,網(wǎng)絡(luò)層管理實體通過NLME_JOIN.indication原語通知上層一個節(jié)點已經(jīng)加入了網(wǎng)絡(luò)。
1)通過MAC層關(guān)聯(lián)加入網(wǎng)絡(luò)1、
父節(jié)點處理子設(shè)備直接加入網(wǎng)絡(luò)父節(jié)點通過NLME_DIRECT_JOIN.request原語開始處理一個設(shè)備直接加入網(wǎng)絡(luò)的進(jìn)程。父節(jié)點網(wǎng)絡(luò)層管理實體將首先搜索它的鄰居表查看是否存在一個與子節(jié)點相匹配的64位擴展地址,以便確定該節(jié)點是否已經(jīng)存在于它的網(wǎng)絡(luò)中了。如果存在匹配的擴展地址,網(wǎng)絡(luò)層管理實體將終止這個進(jìn)程并告訴上層該設(shè)備已經(jīng)存在于設(shè)備列表中了。如果不存在匹配的擴展地址,在父節(jié)點的地址分配空間還沒耗盡的條件下網(wǎng)絡(luò)層管理實體將為子節(jié)點分配一個16位網(wǎng)絡(luò)地址,并使用子節(jié)點的信息在鄰居表中產(chǎn)生一個新的項。然后通過NLME_DIRECT_JOIN.confirm原語上層設(shè)備已經(jīng)加入網(wǎng)絡(luò)。
2)通過與先前指定父節(jié)點連接加入網(wǎng)絡(luò)子節(jié)點通過與指定的父節(jié)點直接連接加入網(wǎng)絡(luò),這個時候父節(jié)點預(yù)先配置了
子節(jié)點的64位擴展地址。2、
子節(jié)點連接父節(jié)點確認(rèn)父子關(guān)系子節(jié)點通過NLME_JOIN.request原語發(fā)起孤立掃描來建立它與父節(jié)點之間的關(guān)系。這時網(wǎng)絡(luò)層管理實體將通過MLME_SCAN.request請求MAC層對物理層所默認(rèn)的所有信道進(jìn)行孤立掃描,如果掃描到父設(shè)備,MAC層通過MLME_SCAN.confirm原語通知網(wǎng)絡(luò)層,網(wǎng)絡(luò)層管理實體再通過NLME_JOIN.confirm原語通知上層節(jié)點請求加入成功,即與父節(jié)點建立了父子關(guān)系,可以互相通信。
2)通過與先前指定父節(jié)點連接加入網(wǎng)絡(luò)子節(jié)點通過與指定的父節(jié)點直接連接加入網(wǎng)絡(luò),這個時候父節(jié)點預(yù)先配置了
子節(jié)點的64位擴展地址。主要內(nèi)容3.1Zigbee簡介3.2Zigbee開發(fā)環(huán)境及調(diào)試3.3Zigbee硬件簡介3.4Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)基礎(chǔ)3.5Zigbee無線傳感器網(wǎng)絡(luò)高級開發(fā)3.6Zigbee無線傳感器網(wǎng)絡(luò)管理3.7Zigbee無線傳感器網(wǎng)絡(luò)開發(fā)實例應(yīng)用層應(yīng)用匯聚層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層LLCMAC物理層應(yīng)用層定義了各種類型的應(yīng)用業(yè)務(wù),是協(xié)議棧的最上層用戶。應(yīng)用匯聚層負(fù)責(zé)把不同的應(yīng)用映射到ZigBee網(wǎng)絡(luò)層上,主要有安全與鑒權(quán)、多個業(yè)務(wù)數(shù)據(jù)流的匯聚、設(shè)備發(fā)現(xiàn)和業(yè)務(wù)發(fā)現(xiàn)。網(wǎng)絡(luò)層的功能包括拓?fù)涔芾怼AC管理、路由管理和安全管理。1.1物理服務(wù)規(guī)范IEEE802.15.4定義了2.4GHz和868/915三個物理層標(biāo)準(zhǔn),均采用了DSSS(DirectSequenceSpreadSpectrum,直接序列擴頻,DSSS)技術(shù),采用相同的數(shù)據(jù)包格式,但他們的工作頻率、調(diào)制技術(shù)、擴頻碼片長度和傳輸速率有所不同。物理層提供了MAC和物理信道之間的接口,物理層的管理實體提供了用于調(diào)用物理層管理功能的管理服務(wù)接口,物理層的參考模型如圖5.4所示。PLME(PhysicalLayerManagementEntity,PLME)為管理實體;PD-SAP(PhysicalDataServiceAccessPoint,PD-SAP)為物理層數(shù)據(jù)服務(wù)接入點;PIB(PANInformationBase)為物理層的個域網(wǎng)信息庫。物理層提供了物理層數(shù)據(jù)服務(wù)和物理層管理服務(wù)。物理層數(shù)據(jù)服務(wù)是由PD-SAP(物理層數(shù)據(jù)服務(wù)接入點)提供的,物理層管理服務(wù)是由PLME中的PD-SAP提供的。物理層數(shù)據(jù)服務(wù)從無線信道上收發(fā)數(shù)據(jù),通過PD-SAP實現(xiàn)對等MAC層實體間的MPDU(MACProtocolDataUnit,MPDU)傳輸。
物理層管理服務(wù)維護物理層相關(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é)組成前導(dǎo)碼,前導(dǎo)碼由32個“0”組成,用于收發(fā)器的通信同步。第二個字段為幀的起始分割字段,由1個字節(jié)組成,其固定為0xA7,作為幀開始的標(biāo)志。第三個字段為幀長度字段,由1個字節(jié)組成,字節(jié)的低7位表示幀的長度,其余1為保留,幀的長度表示幀的負(fù)載長度,一般不超過127個字節(jié)。第四個字段為數(shù)據(jù)字段,它的長度可變,主要用來承載MAC幀。幀起始分割符SFD由8bit組成,表示同步結(jié)束,數(shù)據(jù)包開始傳輸。SFD(Start-of-FrameDelimiter,SFD)與前導(dǎo)碼構(gòu)成同步頭。幀長度由7bit組成,表示物理數(shù)據(jù)單元PSDU(PHYServiceDataUnit)的字節(jié)數(shù)。PSDU域是可變長度的,它攜帶了PHY數(shù)據(jù)包的數(shù)據(jù)。4字節(jié)1字節(jié)1字節(jié)可變長度前導(dǎo)碼SFD幀長7bit保留1bitPSDU同步頭物理幀頭PHY負(fù)載1.3MAC層的功能IEEE802.15.4MAC層提供了MAC層數(shù)據(jù)服務(wù)和MAC層數(shù)據(jù)管理兩種服務(wù)。這兩種服務(wù)為網(wǎng)絡(luò)層和物理層提供了一個接口。MAC層數(shù)據(jù)服務(wù)提供了數(shù)據(jù)通信功能,MPDU的接收和發(fā)送可通過物理層來進(jìn)行。MAC層數(shù)據(jù)管理服務(wù)提供了向高層訪問的功能,通過MLME的SAP來訪問高層。IEEE802.15.4主要完成聯(lián)合、分離、確認(rèn)幀傳送、信道訪問機制、幀確認(rèn)、時隙管理和信令管理等功能。MAC層在處理物理層進(jìn)行訪問時,主要完成以下功能:協(xié)調(diào)器的網(wǎng)絡(luò)結(jié)點產(chǎn)生網(wǎng)絡(luò)信標(biāo)功能;完成信標(biāo)同步功能;支持個域網(wǎng)關(guān)聯(lián)和去關(guān)聯(lián)功能;支持結(jié)點安全規(guī)范功能;執(zhí)行信道接入的CSMA-CA機制;處理和維護時隙(GTS)機制;提供等MAC實體間的可靠連接。
無線傳感器網(wǎng)絡(luò)的信標(biāo)管理、信道接入機制、保證時隙(GTS)管理、幀確認(rèn)、確認(rèn)幀傳輸、節(jié)點接入和分離、信道接人控制、廣播信息管理的功能均在IEEE802.15.4的MAC層完成。1.4MAC層的服務(wù)規(guī)范可通過MAC層的兩個SAP分別訪問IEEE802.15.4MAC層提供的MAC層數(shù)據(jù)服務(wù)和MAC層管理服務(wù)。
對于MAC層數(shù)據(jù)服務(wù),可通過MCPS-SAP(MCPS數(shù)據(jù)服務(wù)接入點)進(jìn)行訪問。網(wǎng)絡(luò)設(shè)備支持MCPS-DATA.Request原語,請求從本地SSCS實體向另外一個對等的SSCS實體傳輸數(shù)據(jù)。
對于MAC層管理服務(wù),可通過MLME的E-SAP(管理實體服務(wù)接入點)來訪問。IEEE802.15.4的MAC層支持多種LLC標(biāo)準(zhǔn)。通過SSCS(ServiceSpecificConvergenceSub-layer,SSCS,業(yè)務(wù)相關(guān)匯聚子層)協(xié)議承載IEEE802.2類型的LLC標(biāo)準(zhǔn),可同時允許其他LLC標(biāo)準(zhǔn)直接使用IEEE802.15.4的MAC層服務(wù)。SSCS與PHY層間的接口是由PD-SAP和PLME-SAP兩個接入點的接口組成的。除了這些外部接口,MLME和MCPS之間還存在一個內(nèi)部接口,MLME可以通過該接口訪問MAC數(shù)據(jù)服務(wù)。1.5MAC的幀結(jié)構(gòu)IEEE802.15.4的幀結(jié)構(gòu)是以保證在有噪聲的信道中可靠傳輸數(shù)據(jù)的基礎(chǔ)上盡量降低網(wǎng)絡(luò)的復(fù)雜度為原則而設(shè)計的。IEEE802.15.4的MAC層定義了4種基本幀結(jié)構(gòu),即:信標(biāo)幀,供協(xié)商者使用;數(shù)據(jù)幀,承載數(shù)據(jù)使用;響應(yīng)幀,用來確認(rèn)幀的可靠傳輸;命令幀,用來處理MAC對等實體間的數(shù)據(jù)傳輸控制MAC幀由幀頭MHR(MACHeader)、MAC負(fù)載和幀尾MFR(MACFooter)構(gòu)成。幀頭由控制信息、幀序列號和地址信息組成,MAC層負(fù)載的長度可變,具體長度由幀的類型來確定。幀尾是幀頭和負(fù)載數(shù)據(jù)的16位錯誤檢測碼序列。通用的MAC幀結(jié)構(gòu)如圖5.6所示。2字節(jié)1字節(jié)2字節(jié)2字節(jié)可變2字節(jié)幀控制序列號目標(biāo)PAN標(biāo)識目標(biāo)地址源PAN標(biāo)識源地址幀負(fù)載FCS地址域MHRMAC負(fù)載MFR幀控制域占用2字節(jié)長度,包含幀類型定義、尋址域以及其他控制標(biāo)志等;序列號域長度為1字節(jié),為每個幀提供唯一的序列標(biāo)識;目標(biāo)PAN標(biāo)識域占2字節(jié),內(nèi)容是指定接收方的唯一PAN標(biāo)識;目標(biāo)地址域是指定接收方的地址;
源PAN標(biāo)識域占用2字節(jié),數(shù)據(jù)發(fā)送端地址域是發(fā)送幀的設(shè)備地址;幀負(fù)載域長度可變,根據(jù)不同的幀類型其內(nèi)容各不相同;幀檢驗序列域有16位長,包含一個16位的CRC循環(huán)冗余校驗部分。(a)信標(biāo)幀信標(biāo)幀也是由三部分構(gòu)成。其中,負(fù)載部分是信標(biāo)幀的有效信息,由超幀描述字段、同步時限分配字段、待轉(zhuǎn)發(fā)數(shù)據(jù)目標(biāo)地址字段和信標(biāo)幀負(fù)載數(shù)據(jù),4個部分組成。信標(biāo)幀的結(jié)構(gòu)如圖5.7所示。2字節(jié)1字節(jié)4/102字節(jié)變長
可變可變2字節(jié)幀控制序列號尋址域超幀規(guī)范GTS域待轉(zhuǎn)地址信標(biāo)負(fù)載FCSMHRMAC負(fù)載MFR信標(biāo)幀中超幀規(guī)范描述字段規(guī)定了這個超幀的持續(xù)時間,活躍部分持續(xù)時間以及競爭訪問持續(xù)時間等信息。
同步時隙分配字段(GTS字段)將無競爭的時段劃分為若干個GTS,并把每個GTS分配給網(wǎng)絡(luò)中一個具體設(shè)備。
待轉(zhuǎn)發(fā)數(shù)據(jù)目標(biāo)地址列出了工作協(xié)同設(shè)備的設(shè)備地址。一個設(shè)備如果發(fā)現(xiàn)自己的地址出現(xiàn)在待轉(zhuǎn)發(fā)數(shù)據(jù)目標(biāo)地址字段里,即可確定協(xié)調(diào)器中存儲了該設(shè)備的數(shù)據(jù),于是就會向協(xié)調(diào)器發(fā)出請求發(fā)送數(shù)據(jù)的MAC命令幀。(b)數(shù)據(jù)幀數(shù)據(jù)幀用來傳輸上層發(fā)送到MAC層的數(shù)據(jù),數(shù)據(jù)幀的負(fù)載字段包括了上層需要傳送的數(shù)據(jù)。要傳輸?shù)臄?shù)據(jù)傳送到MAC層時,成為MAC服務(wù)數(shù)據(jù)單元,在數(shù)據(jù)的起始和結(jié)尾部分分別附加了MHR頭信息和MFR信息后,就構(gòu)成了MAC幀。 MAC幀被傳送到物理層后,成為物理幀的負(fù)載PSDU。PSDU在物理層中,首部增加了同步信息SHR和幀長度字段PHR字段后成為物理層幀。數(shù)據(jù)幀結(jié)構(gòu)如圖5.8所示。2字節(jié)1字節(jié)4/10變長
2字節(jié)幀控制序列號尋址域數(shù)據(jù)負(fù)載FCSMHRMAC負(fù)載MFR(c)確認(rèn)幀如果結(jié)點設(shè)備收到的目的地址為自己的數(shù)據(jù)幀,并且?guī)目刂菩畔⒆侄蔚拇_認(rèn)請求被置1,此時結(jié)點設(shè)備需要回復(fù)一個確認(rèn)幀。確認(rèn)幀的序列號應(yīng)與被確認(rèn)幀的序列號相同,并且負(fù)載長度應(yīng)為0。確認(rèn)幀緊接著被確認(rèn)的幀發(fā)送,不需要采用CSMA-CA機制競爭信道。確認(rèn)幀的結(jié)構(gòu)如圖5.9所示。2字節(jié)1字節(jié)2字節(jié)幀控制序列號FCSMHRMFR數(shù)據(jù)接口及網(wǎng)絡(luò)層服務(wù)
ZigBee網(wǎng)絡(luò)層的各個組成部分和彼此間的接口關(guān)系如圖5.13所示。圖中NLDE-SAP為網(wǎng)絡(luò)層數(shù)據(jù)實體的服務(wù)接入點,NLME-SAP是網(wǎng)絡(luò)層管理實體的服務(wù)接入點,MCPS-SAP是媒體接入控制公共部分子層的服務(wù)接人點,MLME-SAP是MAC層管理實體的服務(wù)接入點。1.6網(wǎng)絡(luò)層結(jié)構(gòu)網(wǎng)絡(luò)層通過兩種服務(wù)接入點提供網(wǎng)絡(luò)層數(shù)據(jù)服務(wù)和網(wǎng)絡(luò)層管理服務(wù)。網(wǎng)絡(luò)層數(shù)據(jù)服務(wù)通過網(wǎng)絡(luò)層數(shù)據(jù)實體服務(wù)接入點接入,網(wǎng)絡(luò)層管理服務(wù)通過網(wǎng)絡(luò)層管理實體服務(wù)接人點接入。網(wǎng)絡(luò)層數(shù)據(jù)實體提供以下服務(wù):產(chǎn)生網(wǎng)絡(luò)層協(xié)議數(shù)據(jù)單元(NPDU),網(wǎng)絡(luò)層數(shù)據(jù)實體通過增加一個適當(dāng)?shù)膮f(xié)議頭從應(yīng)用支持層協(xié)議數(shù)據(jù)單元中生成網(wǎng)絡(luò)層的協(xié)議數(shù)據(jù)單元;指定傳輸拓?fù)渎酚?,網(wǎng)絡(luò)層數(shù)據(jù)實體能夠發(fā)送一個網(wǎng)絡(luò)層的協(xié)議數(shù)據(jù)單元到一個數(shù)據(jù)傳輸?shù)哪繕?biāo)終端設(shè)備,目標(biāo)終端設(shè)備也可以是通信鏈路中的一個中間通信設(shè)備。網(wǎng)絡(luò)層管理實體提供如下服務(wù):配置新的設(shè)備。為保證設(shè)備正常工作的需要,設(shè)備應(yīng)具有足夠的堆棧,以滿足配置的需要。配置選項包括對一個ZigBee協(xié)調(diào)器和連接一個現(xiàn)有網(wǎng)絡(luò)設(shè)備的初始化操作;加入或離開網(wǎng)絡(luò)。具有連接或者斷開一個網(wǎng)絡(luò)的能力,以及為建立一個ZigBee協(xié)調(diào)器或者ZigBee路由器,具有要求設(shè)備同網(wǎng)絡(luò)斷開的能力;ZigBee協(xié)調(diào)器和ZigBee路由器具有為新加入網(wǎng)絡(luò)的設(shè)備分配地址能力;具有發(fā)現(xiàn)、記錄和匯報相關(guān)的一跳鄰居設(shè)備信息的能力;具有發(fā)現(xiàn)和記錄有效地傳送信息的網(wǎng)絡(luò)路由的能力;具有控制設(shè)備接收機接收狀態(tài)的能力,即控制接收機什么時間接收、接收時間的長短,以保證MAC層的同步或者正常接收等。網(wǎng)絡(luò)層幀格式ZigBee網(wǎng)絡(luò)層幀由幀報頭和可變長有效載荷組成。網(wǎng)絡(luò)層幀報頭,包含幀控制、地址和序列信息;網(wǎng)絡(luò)層幀的可變長有效載荷,包含幀類型所指定的信息。2字節(jié)2字節(jié)2字節(jié)0/1字節(jié)0/1字節(jié)變長幀控制目的地址源地址廣播半徑域序列號幀負(fù)載路由幀網(wǎng)絡(luò)層幀報頭網(wǎng)絡(luò)負(fù)荷1.7zigbee協(xié)議棧構(gòu)成(1)TI公司開發(fā)的Z-Stack是ZigBee協(xié)議棧,并且經(jīng)過了ZigBee聯(lián)盟的認(rèn)可而為全球眾多開發(fā)商所廣泛采用(2)我們沒必要弄懂zigbee協(xié)議棧所有源代碼,所謂開發(fā)或應(yīng)用主要是對主函數(shù)及操作系統(tǒng)的修改應(yīng)用,許多庫函數(shù)據(jù)項目要求而做修改即可)(3)TI公司的Z-Stack協(xié)議棧裝載在一個基于IAR開發(fā)環(huán)境的工程里(4)Z-Stack采用操作系統(tǒng)的思想來構(gòu)建,采用事件輪循機制,當(dāng)各層初始化之后,系統(tǒng)進(jìn)入低功耗模式,當(dāng)事件發(fā)生時,喚醒系統(tǒng),開始進(jìn)入中斷處理事件,結(jié)束后繼續(xù)進(jìn)入低功耗模式如果同時有幾個事件發(fā)生,判斷優(yōu)先級,逐次處理事件這種軟件構(gòu)架可以極大地降級系統(tǒng)的功耗1.7zigbee協(xié)議棧構(gòu)成(7)整個Z-stack的主要工作流程,大致分為系統(tǒng)啟動,驅(qū)動初始化,OSAL初始化和啟動,進(jìn)入任務(wù)輪循幾個階段(5)Z-Stack實際上是幫助程序員方便開發(fā)ZigBee的一套系(6)整個Z-Stack采用分層的軟件結(jié)構(gòu)硬件抽象層(HAL)提供各種硬件模塊的驅(qū)動,包括定時器Timer,通用I/O口GPIO,通用異步收發(fā)傳輸器UART,模數(shù)轉(zhuǎn)換ADC的應(yīng)用程序接口API,提供各種服務(wù)的擴展。操作系統(tǒng)抽象層OSAL實現(xiàn)了一個易用的操作系統(tǒng)平臺,通過時間片輪轉(zhuǎn)函數(shù)實現(xiàn)任務(wù)調(diào)度,提供多任務(wù)處理機制。用戶可以調(diào)用OSAL提供的相關(guān)API進(jìn)行多任務(wù)編程,將自己的應(yīng)用程序作為一個獨立的任務(wù)來實現(xiàn)1.7zigbee協(xié)議棧構(gòu)成Zigbee協(xié)議棧物理層負(fù)責(zé)將數(shù)據(jù)通過發(fā)射天線發(fā)送出去以及從天線接收數(shù)據(jù);MAC層提供點對點通信的數(shù)據(jù)確認(rèn)以及一些用于網(wǎng)絡(luò)發(fā)現(xiàn)和網(wǎng)絡(luò)形成的命令;網(wǎng)絡(luò)層(NWK)主要是對網(wǎng)型網(wǎng)絡(luò)提供支持,如在全網(wǎng)范圍內(nèi)發(fā)送廣播包,為單播數(shù)據(jù)包選擇路由,網(wǎng)絡(luò)層還具有安全特性;應(yīng)用程序支持子層主要是提供了一些API函數(shù)供用戶調(diào)用,ZigBee設(shè)備對象ZDO是運行在端口0的應(yīng)用程序,主要提供了一些網(wǎng)絡(luò)管理方面的函數(shù)。Zigbee協(xié)議棧端口0該端口用于整個ZigBee設(shè)備的配置和管理,用戶應(yīng)用程序可以通過端口0與ZigBee協(xié)議棧的應(yīng)用程序支持子層、網(wǎng)絡(luò)層進(jìn)行通信,從而實現(xiàn)對這些層的初始化工作。端口255該端口用于向所有的端口廣播。在ZigBee協(xié)議棧中,各層之間進(jìn)行數(shù)據(jù)傳遞是通過服務(wù)接入點來實現(xiàn)的。一般使用兩種類型的服務(wù)接入點:一種用于數(shù)據(jù)傳輸?shù)姆?wù)接入點,另一種用于管理的服務(wù)接入點。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有什么作用呢?下面將對上述問題進(jìn)行討論。1.7zigbee協(xié)議棧OSAL介紹1.7zigbee協(xié)議棧OSAL介紹1.7zigbee協(xié)議棧OSAL介紹1.7zigbee協(xié)議棧OSAL介紹1.7zigbee協(xié)議棧OSAL介紹那么,事件和任務(wù)的事件處理函數(shù)是如何聯(lián)系起來的昵?ZigBee中采用的方法是:建立一個事件表,保存各個任務(wù)的對應(yīng)的事件,建立另一個函數(shù)表,保存各個任務(wù)事件處理函數(shù)的地址,然后將這兩張表建立某種對應(yīng)關(guān)系,當(dāng)某一事件發(fā)生時則查找函數(shù)表找到對應(yīng)的事件處理函數(shù)即可。1.7zigbee協(xié)議棧OSAL介紹
現(xiàn)在問題轉(zhuǎn)變?yōu)椋河檬裁礃拥臄?shù)據(jù)結(jié)構(gòu)來實現(xiàn)事件表和函數(shù)表呢?如何將事件表和函數(shù)表建立對應(yīng)關(guān)系呢?可以說,只要將上述兩個問題解決,整個協(xié)議棧的開發(fā)將會變得很容易。ZigBee協(xié)議棧中,有三個變量至關(guān)重要。1.7zigbee協(xié)議棧OSAL介紹
OSAL的工作原理:通過tasksEvents指針訪問事件表的每一項,如果有事件發(fā)生,則查找函數(shù)表找到事件處理函數(shù)進(jìn)行處理,處理完后,繼續(xù)訪問事件表,查看是否有事件發(fā)生,無限循環(huán)。從這種意義上說,OSAL是一種基于事件驅(qū)動的輪詢式操作系統(tǒng)。事件驅(qū)動是指發(fā)生事件后采取相應(yīng)的事件處理方法,輪詢指的是不斷地查看是否有事件發(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)用相應(yīng)的事件處理函數(shù)。注意黑體部分的return語句,使用了異或運算,通過使用異或運算可以將處理完的事件清除,僅留下未處理的事件。串口事件定義為:0b00000001溫度事件定義為:0b000001001.7zigbee協(xié)議棧OSAL介紹從上述函數(shù)中可以看到SYS_EVENT_MSG,SYS_EVENT_MSG與AF_INCOMING_MSG_CMD有什么內(nèi)在聯(lián)系呢?前文講到可以使用一個二進(jì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當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化時,會產(chǎn)生該事件,如節(jié)點加入網(wǎng)絡(luò)時,就可以通過判斷該事件來決定何時向協(xié)調(diào)器發(fā)送數(shù)據(jù)包。(3)ZDO_CB_MSG指示每一個注冊的ZDO響應(yīng)消息。(4)AF_DATA_CONFIRM_CMD調(diào)用AF_DataRequest發(fā)送數(shù)據(jù)時,有時需要確認(rèn)信息,該事件與此有關(guān)。
1.8OSAL消息對列講解消息隊列之前需要講解一下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行業(yè)研究報告:中國共享經(jīng)濟發(fā)展年度報告
- 保險銷售技巧之-黃金促成
- 四川省石室中學(xué)2025屆高三3月份模擬考試數(shù)學(xué)試題含解析
- 2025屆西藏自治區(qū)拉薩市八校高考沖刺語文模擬試題含解析
- 山東省平度市2025屆高考臨考沖刺英語試卷含解析
- 2025屆天津市七校聯(lián)考高考英語倒計時模擬卷含解析
- 廣東清遠(yuǎn)市2025屆高考數(shù)學(xué)考前最后一卷預(yù)測卷含解析
- 2025屆浙江省天略外國語學(xué)校高三(最后沖刺)英語試卷含解析
- 北京市航空航天大學(xué)附屬中學(xué)2025屆高考語文押題試卷含解析
- 2025屆河南鄭州登封市高三下學(xué)期一??荚囌Z文試題含解析
- 化肥的發(fā)展史
- 水運工程施工組織設(shè)計
- 斑蝥的藥用價值與養(yǎng)殖
- 三維激光掃描技術(shù)與應(yīng)用實例(課堂PPT)
- 消防水池施工方案
- 小學(xué)美術(shù)《多變的紙拉花》課件ppt課件
- 《數(shù)據(jù)結(jié)構(gòu)》課程標(biāo)準(zhǔn)
- 譯林版五年級上冊英語五上《朗文閱讀》U1-2練習(xí)題
- 鍛造課設(shè)右轉(zhuǎn)向節(jié)臂說明書
- 龐中華現(xiàn)代漢語7000通用字行書鋼筆字帖(上)
- 連續(xù)油管作業(yè)問題及對策
評論
0/150
提交評論