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