當前位置:
首頁 >
zigbee协议栈学习(二)
發布時間:2025/7/14
29
豆豆
生活随笔
收集整理的這篇文章主要介紹了
zigbee协议栈学习(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
協議棧規范的 ID號可以通過查詢設備發送的 beacon 幀獲得。在設備加入網絡之前,首先
需要確認協議棧規范的 ID。“特定網絡”規范 ID號為0; ZigBee協議棧規范的 ID號為1; ZigBee
RO 協議棧規范的 ID 號為 2。協議棧規范的 ID(STACK_PROFILE_ID)在 nwk_globals.h 中
// Controls the operational mode of network
#define NWK_MODE_STAR ? ? ? ? 0
#define NWK_MODE_TREE ? ? ? ? 1
#define NWK_MODE_MESH ? ? ? ? 2
// Controls various stack parameter settings ?id
#define NETWORK_SPECIFIC ? ? ?0
#define HOME_CONTROLS ? ? ? ? 1
#define ZIGBEEPRO_PROFILE ? ? 2
#define GENERIC_STAR ? ? ? ? ?3
#define GENERIC_TREE ? ? ? ? ?4
地址定義:
ZigBee 設備有兩種類型的地址。一種是 64 位 IEEE 地址,即 MAC 地址,另一種是 16 位網絡地址。?
16 位網絡地址是當設備加入網絡后分配的。它在網絡中是唯一的,用來在網絡中鑒別設備
和發送數據。其中,協調器的網絡地址為 0x00?
#define NWK_PAN_COORD_ADDR 0x0000?
地址的的分配:ZigBee 2007 PRO ?使用的隨機地址分配機制,對新加入的節點使用隨機地址分配
當一個節點加入時,將接收到父節點的隨機分配地址,然后產生“設備聲明”(包含分配到的網絡地
址和 IEEE 地址)發送至網絡中的其余節點。“設備聲明”檢測新的網絡地址是否沖突。
在每個路由加入網絡之前,尋址方案需要知道和配臵一些參數。這些參數是 MAX_DEPTH
最大網絡深度) 、MAX_ROUTERS(最多路由數)和 MAX_CHILDREN(最多子節點數) 。
這些參數是棧配臵的一部分,ZigBee2007 協議棧已經規定了這些參數的值:
MAX_DEPTH 決定了網絡的最大深度。協調器(Coordinator)位于深度 0,它的兒子位于深
度1,他的兒子的的兒子位于深度 2,以此類推。MAX_DEPTH 參數限制了網絡在物理上的長度。 ? ?
MAX_CHILDREN 決定了一個路由(Router)或者一個協調器節點可以處理的兒子節點的最大個數。?
MAX_ROUTER 決定了一個路由(Router)或者一個協調器(Coordinator)節點可以處理的具有
路由功能的兒子節點的最大個數。這個參數是 MAX_CHILDREN 的一個子集,終端節點使用
(MAX_CHILDREN – MAX_ROUTER)剩下的地址空間。?
還必須設臵 nwk_globals.c 文件中的 Cskipchldrn 數組和 CskipRtrs 數組這些數組的
值由MAX_CHILDREN 和MAX_ROUTER 構成
為了向一個在 ZigBee 網絡中的設備發送數據,應用程序通常使用 AF_DataRequest()函數
數據包將要發送給一個 afAddrType_t(在ZComDef.h 中定義)類型的目標設備。?
typedef struct?
{?
? ?union?
? ?{?
? ? ? ? uint16 ? ? ? ? ? ?shortAddr;?
? ? ? ? ZLongAddr_t extAddr;?
? ?} addr;?
? ?afAddrMode_t addrMode;?
? ?byte endPoint;?
? ?uint16 panId; ? ?// used for the INTER_PAN feature?
} afAddrType_t;?
注意,除了網路地址之外,還要指定地址模式參數。目的地址模式可以設臵為以下幾個值:
typedef enum?
{?
? ?afAddrNotPresent = AddrNotPresent,?
? ?afAddr16Bit ? ? ? ? ? ?= Addr16Bit,?
? ?afAddr64Bit ? ? ? ? ? ?= Addr64Bit,?
? ?afAddrGroup ? ? ? ? ? ?= AddrGroup,?
? ?afAddrBroadcast ? ?= AddrBroadcast?
} afAddrMode_t;?
發送方式有數據包可以單點傳送(unicast),多點傳送(multicast)或者廣播傳送
一單點傳送(Unicast)?
Uicast 是標準尋址模式,它將數據包發送給一個已經知道網絡地址的網絡設備。將
afAddrMode 設置為 Addr16Bit 并且在數據包中攜帶目標設備地址。?
二間接傳送(Indirect)
當應用程序不知道數據包的目標設備在哪里的時候使用的模式。將模式設臵為
AddrNotPresent并且目標地址沒有指定。取代它的是從發送設備的棧的綁定表中查找目標設備。
這種特點稱之為源綁定。?
三 廣播傳送(broadcast)?
當應用程序需要將數據包發送給網絡的每一個設備時,使用這種模式。地址模式設臵為
AddrBroadcast。目標地址可以設臵為下面廣播地址的一種:?
NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——數據包將被傳送到網絡上的所有設
備,包括睡眠中的設備。對于睡眠中的設備,數據包將被保留在其父親節點直到查詢到它,或
者消息超時(NWK_INDIRECT_MSG_TIMEOUT 在f8wConifg.cfg 中)。?
NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——數據包將被傳送到網絡上的所
有在空閑時打開接收的設備(RXONWHENIDLE),也就是說,除了睡眠中的所有設備。?
NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——數據包發送給所有的路由器,包
括協調器。
需要確認協議棧規范的 ID。“特定網絡”規范 ID號為0; ZigBee協議棧規范的 ID號為1; ZigBee
RO 協議棧規范的 ID 號為 2。協議棧規范的 ID(STACK_PROFILE_ID)在 nwk_globals.h 中
// Controls the operational mode of network
#define NWK_MODE_STAR ? ? ? ? 0
#define NWK_MODE_TREE ? ? ? ? 1
#define NWK_MODE_MESH ? ? ? ? 2
// Controls various stack parameter settings ?id
#define NETWORK_SPECIFIC ? ? ?0
#define HOME_CONTROLS ? ? ? ? 1
#define ZIGBEEPRO_PROFILE ? ? 2
#define GENERIC_STAR ? ? ? ? ?3
#define GENERIC_TREE ? ? ? ? ?4
地址定義:
ZigBee 設備有兩種類型的地址。一種是 64 位 IEEE 地址,即 MAC 地址,另一種是 16 位網絡地址。?
16 位網絡地址是當設備加入網絡后分配的。它在網絡中是唯一的,用來在網絡中鑒別設備
和發送數據。其中,協調器的網絡地址為 0x00?
#define NWK_PAN_COORD_ADDR 0x0000?
地址的的分配:ZigBee 2007 PRO ?使用的隨機地址分配機制,對新加入的節點使用隨機地址分配
當一個節點加入時,將接收到父節點的隨機分配地址,然后產生“設備聲明”(包含分配到的網絡地
址和 IEEE 地址)發送至網絡中的其余節點。“設備聲明”檢測新的網絡地址是否沖突。
在每個路由加入網絡之前,尋址方案需要知道和配臵一些參數。這些參數是 MAX_DEPTH
最大網絡深度) 、MAX_ROUTERS(最多路由數)和 MAX_CHILDREN(最多子節點數) 。
這些參數是棧配臵的一部分,ZigBee2007 協議棧已經規定了這些參數的值:
MAX_DEPTH 決定了網絡的最大深度。協調器(Coordinator)位于深度 0,它的兒子位于深
度1,他的兒子的的兒子位于深度 2,以此類推。MAX_DEPTH 參數限制了網絡在物理上的長度。 ? ?
MAX_CHILDREN 決定了一個路由(Router)或者一個協調器節點可以處理的兒子節點的最大個數。?
MAX_ROUTER 決定了一個路由(Router)或者一個協調器(Coordinator)節點可以處理的具有
路由功能的兒子節點的最大個數。這個參數是 MAX_CHILDREN 的一個子集,終端節點使用
(MAX_CHILDREN – MAX_ROUTER)剩下的地址空間。?
還必須設臵 nwk_globals.c 文件中的 Cskipchldrn 數組和 CskipRtrs 數組這些數組的
值由MAX_CHILDREN 和MAX_ROUTER 構成
為了向一個在 ZigBee 網絡中的設備發送數據,應用程序通常使用 AF_DataRequest()函數
數據包將要發送給一個 afAddrType_t(在ZComDef.h 中定義)類型的目標設備。?
typedef struct?
{?
? ?union?
? ?{?
? ? ? ? uint16 ? ? ? ? ? ?shortAddr;?
? ? ? ? ZLongAddr_t extAddr;?
? ?} addr;?
? ?afAddrMode_t addrMode;?
? ?byte endPoint;?
? ?uint16 panId; ? ?// used for the INTER_PAN feature?
} afAddrType_t;?
注意,除了網路地址之外,還要指定地址模式參數。目的地址模式可以設臵為以下幾個值:
typedef enum?
{?
? ?afAddrNotPresent = AddrNotPresent,?
? ?afAddr16Bit ? ? ? ? ? ?= Addr16Bit,?
? ?afAddr64Bit ? ? ? ? ? ?= Addr64Bit,?
? ?afAddrGroup ? ? ? ? ? ?= AddrGroup,?
? ?afAddrBroadcast ? ?= AddrBroadcast?
} afAddrMode_t;?
發送方式有數據包可以單點傳送(unicast),多點傳送(multicast)或者廣播傳送
一單點傳送(Unicast)?
Uicast 是標準尋址模式,它將數據包發送給一個已經知道網絡地址的網絡設備。將
afAddrMode 設置為 Addr16Bit 并且在數據包中攜帶目標設備地址。?
二間接傳送(Indirect)
當應用程序不知道數據包的目標設備在哪里的時候使用的模式。將模式設臵為
AddrNotPresent并且目標地址沒有指定。取代它的是從發送設備的棧的綁定表中查找目標設備。
這種特點稱之為源綁定。?
三 廣播傳送(broadcast)?
當應用程序需要將數據包發送給網絡的每一個設備時,使用這種模式。地址模式設臵為
AddrBroadcast。目標地址可以設臵為下面廣播地址的一種:?
NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——數據包將被傳送到網絡上的所有設
備,包括睡眠中的設備。對于睡眠中的設備,數據包將被保留在其父親節點直到查詢到它,或
者消息超時(NWK_INDIRECT_MSG_TIMEOUT 在f8wConifg.cfg 中)。?
NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——數據包將被傳送到網絡上的所
有在空閑時打開接收的設備(RXONWHENIDLE),也就是說,除了睡眠中的所有設備。?
NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——數據包發送給所有的路由器,包
括協調器。
總結
以上是生活随笔為你收集整理的zigbee协议栈学习(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gallery简单应用
- 下一篇: 大小端的判断