ZigBee協(xié)議棧
ZigBee堆棧是IEEE 802.15.4標(biāo)準(zhǔn)基礎(chǔ)上建立的,定義了協(xié)議的MAC和PHY層。ZigBee設(shè)備應(yīng)該包括IEEE802.15.4(該標(biāo)準(zhǔn)定義了RF射頻以及與相鄰設(shè)備之間的通信)的PHY與MAC層,以及ZigBee堆棧層:網(wǎng)絡(luò)層(NWK)、應(yīng)用層和安全服務(wù)提供層。
從應(yīng)用的角度看,通信的本質(zhì)就是端點(diǎn)到端點(diǎn)的連接。 端點(diǎn)之間的通信是通過(guò)稱之為簇的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的。這些簇是應(yīng)用對(duì)象之間共享信息所需的全部屬性的容器。 每個(gè)端口都能接收(用于輸入)或發(fā)送(用于輸出)簇格式的數(shù)據(jù)。一共有兩個(gè)特殊的端點(diǎn),即端點(diǎn)0和端點(diǎn)255。端點(diǎn)0用于整個(gè)ZigBee設(shè)備的配置和管理。應(yīng)用程序通過(guò)端點(diǎn)0與ZigBee堆棧的其他層通信,從而實(shí)現(xiàn)對(duì)這些層的初始化和配置。負(fù)數(shù)在端點(diǎn)0的對(duì)象被稱為ZigBee設(shè)備對(duì)象(ZDO)。端點(diǎn)255用于向所有端點(diǎn)的廣播。端點(diǎn)241到254是保留端點(diǎn)。
ZigBee術(shù)語(yǔ)
1、屬性
屬性Attribute是一個(gè)反映物理數(shù)量或狀態(tài)的數(shù)據(jù)值,比如開(kāi)關(guān)值(On/Off) ,溫度值、百分比等。
2、群集
群集Cluster是包含一個(gè)或多個(gè)屬性(attribute)的群組。簡(jiǎn)單的說(shuō),群集就是屬性的集合。每個(gè)群集都被分配一個(gè)唯一的群集ID 且每個(gè)群集最多有65536個(gè)屬性。
3、設(shè)備描述
設(shè)備描述Device Description是指一個(gè)大型目標(biāo)應(yīng)用的一部分,包括一個(gè)或多個(gè)群集,并且指定群集是輸入還是輸出。
4、端點(diǎn)
端點(diǎn)EndPoint是協(xié)議棧應(yīng)用層的入口,也可以理解應(yīng)用對(duì)象(Application Object)存在的地方,它是為實(shí)現(xiàn)一個(gè)設(shè)備描述而定義的一組群集。每個(gè)ZigBee設(shè)備可以最多支持240這樣的端點(diǎn),這也意味著在每個(gè)設(shè)備上可以定義240個(gè)應(yīng)用對(duì)象。端點(diǎn)0被保留用于與ZDO接口而端點(diǎn)255被保留用于廣播,端點(diǎn)241-254則被保留用于將來(lái)做擴(kuò)展使用。
5、配置文件
配置文件Profile可以理解為共同促成交互式應(yīng)用的多個(gè)設(shè)備描述項(xiàng)的集合。 ZigBee聯(lián)盟已經(jīng)定義了部分標(biāo)準(zhǔn)的配置文件,比如遠(yuǎn)程控制開(kāi)關(guān)配置文件和光傳感器配置文件等。任何遵循某一標(biāo)準(zhǔn)配置文件的節(jié)點(diǎn)都可以與實(shí)現(xiàn)相同配置文件的節(jié)點(diǎn)進(jìn)行互操作。用戶也可以創(chuàng)建自己的配置文件然后遞交ZigBee聯(lián)盟測(cè)試、審核批準(zhǔn)。
配置文件是對(duì)邏輯設(shè)備及其接口描述的集合,是面向某個(gè)應(yīng)用類別的公約、準(zhǔn)則。設(shè)備描述符是為分布應(yīng)用提供的描述項(xiàng),多種描述項(xiàng)共同組成描述集合Profile。定義Profile的目的就是使得不同廠商生產(chǎn)的ZigBee設(shè)備能夠?qū)崿F(xiàn)互操作。
6、節(jié)點(diǎn)
節(jié)點(diǎn)Node也可以理解為一個(gè)容器,包含一組ZigBee設(shè)備,分享一個(gè)無(wú)線信道。每個(gè)節(jié)點(diǎn)有且只有一個(gè)無(wú)線信道使用。
7、綁定(Binding)
ZigBee定義了一個(gè)稱為端點(diǎn)綁定的特殊過(guò)程。綁定即在源節(jié)點(diǎn)的某個(gè)端點(diǎn)( EndPoint)和目標(biāo)節(jié)點(diǎn)的某個(gè)端點(diǎn)之間創(chuàng)建一條邏輯鏈路。綁定可以發(fā)生在兩個(gè)或多個(gè)設(shè)備之間。協(xié)調(diào)器節(jié)點(diǎn)維護(hù)一個(gè)基本上包括兩個(gè)或多個(gè)端點(diǎn)之間的邏輯鏈路的綁定表。
在綁定表中,包含如下信息,源節(jié)點(diǎn)和目的節(jié)點(diǎn)的IEEE地址、Endpoint號(hào)以及ClusterID。對(duì)于可以建立綁定關(guān)系的兩個(gè)節(jié)點(diǎn),它們的Cluster的屬性必須一個(gè)選擇“輸入”,另一個(gè)選擇“輸出”,而且ClusterID值相等,只有這樣,它們彼此才能建立綁定。如果目標(biāo)設(shè)備的擴(kuò)展地址是已知的,則調(diào)用zb_BindDeviceRequest( )函數(shù)可以創(chuàng)建一個(gè)綁定條目。
8、尋址(Addressing)
在ZigBee網(wǎng)絡(luò)中,使用兩種地址:
一種是64位的IEEE Address,也叫物理地址,64位地址在所有ZigBee設(shè)備之中是唯一,其中包含一個(gè)由IEEE分配、也是全球唯一的24位制造商特定組織標(biāo)識(shí)符OUI(Organizationally Unique Identifier)。
另一種是16位的NWK Address即網(wǎng)絡(luò)地址,當(dāng)設(shè)備加入ZigBee網(wǎng)絡(luò)時(shí),從允許其加入的父設(shè)備上獲取16位網(wǎng)絡(luò)地址。該地址在ZigBee網(wǎng)絡(luò)中唯一,用于數(shù)據(jù)傳輸和數(shù)據(jù)包路由。
在ZigBee中,數(shù)據(jù)包可以單點(diǎn)傳送(unicast),多點(diǎn)傳送(multicast)或者廣播傳送(broadcast),所以必須有地址模式參數(shù)。一個(gè)單點(diǎn)傳送數(shù)據(jù)包只發(fā)送給一個(gè)設(shè)備,多點(diǎn)傳送數(shù)據(jù)包則要傳送給一組設(shè)備,而廣播數(shù)據(jù)包則要發(fā)送給整個(gè)網(wǎng)絡(luò)的所有節(jié)點(diǎn)。當(dāng)應(yīng)用程序需要將數(shù)據(jù)包發(fā)送給網(wǎng)絡(luò)上的一組設(shè)備時(shí),還可以使用組尋址方式(Group Addressing)。
802.15.4 MAC層
MAC層負(fù)責(zé)相鄰設(shè)備間的單跳數(shù)據(jù)通信。他負(fù)責(zé)建立與網(wǎng)絡(luò)的同步,支持關(guān)聯(lián)和去關(guān)聯(lián)以及MAC層安全:他能提供兩個(gè)設(shè)備間的可靠連接。
ZigBee堆棧的大多數(shù)層有兩個(gè)接口:數(shù)據(jù)實(shí)體接口和管理實(shí)體接口。數(shù)據(jù)實(shí)體接口的目標(biāo)是向上層提供所需的常規(guī)數(shù)據(jù)服務(wù)。管理實(shí)體接口的目標(biāo)是向上測(cè)提供訪問(wèn)內(nèi)部層參數(shù)、配置和管理數(shù)據(jù)的機(jī)制。
ZigBee網(wǎng)絡(luò)和樹(shù)形網(wǎng)絡(luò)可以有多個(gè)ZigBee路由器。ZigBee星型網(wǎng)絡(luò)不支持ZigBee路由器。
NWK支持的網(wǎng)絡(luò)拓?fù)溆行切汀?shù)形和網(wǎng)格型。其中,星型網(wǎng)絡(luò)對(duì)資源的要求最低。
ZDO ZigBee Device Object ZigBee設(shè)備對(duì)象
描述了一個(gè)基本的功能函數(shù), 這個(gè)功能在應(yīng)用對(duì)象、設(shè)備profile和APS之間提供了一個(gè)接口。ZDO位于應(yīng)用框架和應(yīng)用支持子層之間。它滿足左右ZigBee協(xié)議棧中應(yīng)用操作的一般需要。此外ZDO還有以下作用:
(1)初始化支持子層(APS),網(wǎng)絡(luò)層(NWK),安全服務(wù)規(guī)范(SSS)。
(2)從終端應(yīng)用集合中配置的信息來(lái)確定和執(zhí)行安全管理、發(fā)現(xiàn)、網(wǎng)絡(luò)管理、以及綁定管理。 ZDO描述了應(yīng)用框架層中應(yīng)用對(duì)象的公用接口以及控制設(shè)備和應(yīng)用對(duì)象的網(wǎng)絡(luò)功能。 在終端節(jié)點(diǎn)0,ZDO提供了與協(xié)議棧中與低一層連接的接口,如果是數(shù)據(jù)則通過(guò)APS數(shù)據(jù)實(shí)體(APSDE-SAP),如果是控制信息則通過(guò)APS管理實(shí)體(APSME-SAP)。
在ZigBee網(wǎng)絡(luò)中兩個(gè)設(shè)備之間通信的關(guān)鍵是同一一個(gè)profile。
端點(diǎn):這是一個(gè)8位的域,描述了不同的應(yīng)用程序,這些應(yīng)用都是有單個(gè)無(wú)線電來(lái)維持的。端點(diǎn)0x00用來(lái)尋址設(shè)備profile,設(shè)備profile是每個(gè)ZigBee設(shè)備必須使用的;端點(diǎn)0xff用來(lái)尋址所有活動(dòng)的端點(diǎn)(廣播端點(diǎn)),且端點(diǎn)0xf1-0xfe保留。結(jié)果一個(gè)單獨(dú)的物理ZigBee無(wú)線電能維持最多240個(gè)應(yīng)用程序在端點(diǎn)0x01-0xf0.
1. 設(shè)備類型(Device Types)
在ZigBee網(wǎng)絡(luò)中存在三種邏輯設(shè)備類型:Coordinator(協(xié)調(diào)器)、 Router(路由器)、End-Device(終端設(shè)備)。
ZigBee網(wǎng)絡(luò)由一個(gè)Coordinator以及多個(gè)Router和多個(gè)End-Device組成。
1.1 Coordinator(協(xié)調(diào)器)
協(xié)調(diào)器負(fù)責(zé)啟動(dòng)整個(gè)網(wǎng)絡(luò)。它也是網(wǎng)絡(luò)的第一個(gè)設(shè)備。協(xié)調(diào)器選擇一個(gè)信道和一個(gè)網(wǎng)絡(luò)ID(也稱之為PAN ID, 即Personal Area Network ID), 隨后啟動(dòng)整個(gè)網(wǎng)絡(luò)。
協(xié)調(diào)器也可以用來(lái)協(xié)助建立網(wǎng)絡(luò)中安全層和應(yīng)用層的綁定(bindings)。
注意,協(xié)調(diào)器的角色主要涉及網(wǎng)絡(luò)的啟動(dòng)和配置。一旦這些都完成,協(xié)調(diào)器的工作就像一個(gè)路由器(或者消失go away)。由于ZigBee網(wǎng)絡(luò)本身的分布特性,因此接下來(lái)整個(gè)網(wǎng)絡(luò)的操作就不在以來(lái)協(xié)調(diào)器是否存在。
1.2 Router(路由器)
路由器的功能主要是:允許其他設(shè)備加入網(wǎng)絡(luò),多跳路由器和協(xié)助它自己的由電池供電的子終端設(shè)備的通訊。
通常,路由器希望是一直處于活動(dòng)狀態(tài),因此它必須使用主電源供電。但是當(dāng)使用樹(shù)狀網(wǎng)絡(luò)模式時(shí),允許路由器有間隔一定的周期操作一次,這樣就可以使用電池給其供電。
1.3 End-Device(終端設(shè)備)
終端設(shè)備沒(méi)有特定的維持網(wǎng)絡(luò)結(jié)構(gòu)的責(zé)任,他可以睡眠或者喚醒,因此他可以是一個(gè)電池供電設(shè)備。
通常,終端設(shè)備對(duì)存儲(chǔ)空間(特別是RAM的需要)比較小。
注意:在Z-Stack1.4.1中一個(gè)設(shè)備的類型通常在編譯的時(shí)候通過(guò)編譯選項(xiàng)(ZDO_COORDINATOR 和 RTR_NWK)確定。所有的應(yīng)用例子都提供獨(dú)立的項(xiàng)目文件來(lái)編譯每一種設(shè)備類型。
2. 尋址(Addressing)
ZigBee設(shè)備有兩種類型的地址: 一、64位IEEE地址,即MAC地址,二、16位網(wǎng)絡(luò)地址。
64位地址是全球唯一的地址,設(shè)備將在他的生命周期內(nèi)一直擁有它。它通常有制造商或者被安裝時(shí)設(shè)置。這些地址由IEEE來(lái)維護(hù)和分配。
16位網(wǎng)絡(luò)地址是當(dāng)設(shè)備加入網(wǎng)絡(luò)后分配的。它在網(wǎng)絡(luò)中是唯一的,用來(lái)在網(wǎng)絡(luò)中鑒別設(shè)備和發(fā)送數(shù)據(jù)。
ZigBee使用分布式尋址方案來(lái)分配網(wǎng)絡(luò)地址。這個(gè)方案保證在整個(gè)網(wǎng)絡(luò)中所有分配的地址是唯一的,這點(diǎn)是必須的,
TI Z-Stack協(xié)議棧架構(gòu)分析
協(xié)議棧定義通信硬件和軟件在不同級(jí)如何協(xié)調(diào)工作。在網(wǎng)絡(luò)通信領(lǐng)域,在每個(gè)協(xié)議層的實(shí)體們通過(guò)對(duì)信息打包與對(duì)等實(shí)體通信。在通信的發(fā)送方,用戶需要傳遞的數(shù)據(jù)包按照從高層到低層的順序依次通過(guò)各個(gè)協(xié)議層,每一層的實(shí)體按照最初預(yù)定消息格式向數(shù)據(jù)信息中加入自己的信息,比如每一層的頭信息和校驗(yàn)等終抵達(dá)最低的物理層,變成數(shù)據(jù)位流,在物理連接間傳遞。在通信的接收方數(shù)據(jù)包依次向上通過(guò)協(xié)議棧,每一層的實(shí)體能夠根據(jù)預(yù)定的格式準(zhǔn)確的提取需要在本層處理的數(shù)據(jù)信息,最終用戶應(yīng)用程序得到最終的數(shù)據(jù)信息進(jìn)行處理。
ZigBee無(wú)線網(wǎng)絡(luò)的實(shí)現(xiàn),是建立在ZigBee協(xié)議棧的基礎(chǔ)上的,協(xié)議棧采用分層的結(jié)構(gòu)協(xié)議分層的目的是為了使各層相對(duì)獨(dú)立,每一層都提供一些服務(wù),服務(wù)由協(xié)議定義,程序員只需關(guān)心與他的工作直接相關(guān)的那些層的協(xié)議,它們向高層提供服務(wù),并由低層提供服務(wù)。
在ZigBee協(xié)議棧中,PHY、MAC層位于最低層,且與硬件相關(guān);NWK、APS, APL層以及安全層建立在PHY和MAC層之上,并且完全與硬件無(wú)關(guān)。分層的結(jié)構(gòu)脈絡(luò)清晰、一目了然,給設(shè)計(jì)和調(diào)試帶來(lái)極大的方便。
整個(gè)Z-Stack采用分層的軟件結(jié)構(gòu),硬件抽象層(HAL)提供各種硬件模塊的驅(qū)動(dòng),包括定時(shí)器Timer,通用I/O口GPIO,通用異步收發(fā)傳輸器UART,模數(shù)轉(zhuǎn)換ADC的應(yīng)用程序接口API,提供各種服務(wù)的擴(kuò)展集。操作系統(tǒng)抽象層OSAL實(shí)現(xiàn)了一個(gè)易用的操作系統(tǒng)平臺(tái),通過(guò)時(shí)間片輪轉(zhuǎn)函數(shù)實(shí)現(xiàn)任務(wù)調(diào)度,提供多任務(wù)處理機(jī)制。用戶可以調(diào)用OSAL提供的相關(guān)API進(jìn)行多任務(wù)編程,將自己的應(yīng)用程序作為一個(gè)獨(dú)立的任務(wù)來(lái)實(shí)現(xiàn)。
Z-stack OSAL API 介紹
OSAL層是與協(xié)議棧獨(dú)立的,但是整個(gè)協(xié)議都要基于OS才能運(yùn)行。OSAL提供如下服務(wù)和管理:信息管理、任務(wù)同步、時(shí)間管理、中斷管理、任務(wù)管理、內(nèi)存管理、電源管理以及非易失存儲(chǔ)管理。
1、信息管理API
信息管理為任務(wù)間的信息交換或者外部處理事件(例如:中斷服務(wù)程序或一個(gè)控制循環(huán)內(nèi)的函數(shù)調(diào)用等)提供一種管理機(jī)制。包括允許任務(wù)分配或不分配信息緩存、發(fā)送命令信息到其他任務(wù)、接受應(yīng)答信息等API函數(shù)。
2、同步任務(wù)API
該API允許一個(gè)任務(wù)等待某個(gè)事件的發(fā)生并返回等待期間的控制。該API的功能是為某個(gè)任務(wù)設(shè)置事件,一旦任何一個(gè)事件被設(shè)置就修改該任務(wù)。
3、時(shí)間管理API
該API允許定時(shí)器被內(nèi)部(Z-Stack)任務(wù)和外部任務(wù)使用。該API提供開(kāi)始和停止一個(gè)定時(shí)器的功能,這些定時(shí)器能用毫秒(ms)設(shè)置。
4、中斷管理API
這些API是外部中斷和任務(wù)的接口。這些API函數(shù)允許一個(gè)任務(wù)為每個(gè)中斷分配指定服務(wù)程序。這些中斷能被允許或禁止。在服務(wù)程序內(nèi),可為其他的任務(wù)設(shè)置事件。
5、任務(wù)管理API
該API用在管理OSAL中的任務(wù),包括系統(tǒng)任務(wù)和用戶自定義任務(wù)的創(chuàng)建、管理和信息處理等。
6、內(nèi)存管理API
該API描繪了簡(jiǎn)單的存儲(chǔ)分配系統(tǒng)。這些函數(shù)允許動(dòng)態(tài)存儲(chǔ)分配。
7、電源管理API
這里描寫(xiě)了OSAL的電源管理系統(tǒng)。當(dāng)OSAL安全地關(guān)閉接收器與外部硬件并使處理器進(jìn)入休眠模式時(shí),該系統(tǒng)提供向應(yīng)用/任務(wù)通告該事務(wù)的方式。