协议栈规范的 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)——数据包发送给所有的路由器,包
括协调器。