2015-02-13 星期五 21:38:25
1、Zigbee协议栈
ZigBee 位于 IEEE802.15.4 物理层(PHY)和媒体访问控制(MAC)层的上面。
每一层为它的上层提供一套特定的服务。每一个服务实体通过一个服务访问点(SAP)为上层提供服务。
-
应用(APL)层
ZigBee 协议栈的顶层由应用框架、ZigBee 设备对象(ZDO)和应用支持(APS)子层组成。
-
应用框架
提供了一个如何在 ZigBee 协议栈上建立一个规范(以帮助确保该规范可以产生一种前后一致的方式)的描述。它也规定了规范的一系列的标准数据类型,协助服务发现的描述符 ,传输数据的帧格式,和一个键值对结构以快速开发基于属性的简单规范。
-
应用对象
在一个端点上的软件,它控制 ZigBee 设备。一个单一的 ZigBee 节点可支持多达 240 个应用对象。每一个应用对象支持的端点编号为 1~240(端点 0 保留给 ZigBee 设备对象(ZDO))。
-
ZigBee 设备对象(ZDO)
定义一个设备在网络中的角色(协调器、路由器或终端设备),发起和/或回应绑定和发现请求,并在网络设备间建立一个安全关系。它也提供定义在 ZigBee 设备规范(用于 ZigBee试运转)里的一套丰富的管理指令。ZigBee 设备对象总是为端点 0。
-
ZigBee 设备对象管理面板
使用 ZigBee 设备对象促进应用支持子层和网络层之间的联系。允许 ZigBee 设备对象处理为网络访问和安全的来自应用的请求,使用 ZDP(ZigBee 设备规范)信息。
-
应用支持(APS)子层
负责提供一个数据服务给应用和 ZigBee 设备规范。它也提供一个管理服务以维护绑定链接和它自己绑定表的存储。
2、ZigBee 网络
-
设备类型
ZigBee 网络包含以下设备类型:
协调器(ZC)
路由器(ZR)
终端设备(ZE)
-
网络类型
3、IAR编译不同设备的版本
CoordinatorEB ---->f8wCoord.cfg
RouterEB --->f8wRouter.cfg
EndDeviceEB --->f8wEndev.cfg
4、App Init
GenericApp.c 中的 GenericApp_Init()函数实现 App 初始化。重点的有:
-
初始化发送数据包目的地址模式、端点号和 16 位网络地址
1
2
3
|
GenericApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;
GenericApp_DstAddr.endPoint = 0;
GenericApp_DstAddr.addr.shortAddr = 0;
|
-
初始化端点描述符,分别有:端点任务 ID 号、端点号、简单描述符和延时请求,端点描述符内部的简单描述符由应用程序决定
1
2
3
4
5
6
|
// Fill out the endpoint description.
GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT;
GenericApp_epDesc.task_id = &GenericApp_TaskID;
GenericApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;
GenericApp_epDesc.latencyReq = noLatencyReqs;
|
-
注册
1
2
3
4
5
6
|
// Register the endpoint description with the AF
afRegister( &GenericApp_epDesc );
//注册终端绑定响应消息和匹配描述符响应消息
ZDO_RegisterForZDOMsg( GenericApp_TaskID, End_Device_Bind_rsp );
ZDO_RegisterForZDOMsg( GenericApp_TaskID, Match_Desc_rsp );
|
-
App任务事件处理函数
应用层任务事件处理函数 GenericApp_ProcessEvent()所有的事件,包含时间、消息和其他用户定义的事件。
5、ZDO Init
ZDApp.c 中的 ZDApp_Init()函数实现 ZDO 初始化,主要完成以下几个方面的初始化工作:
-
根据设备类型初始化网络服务
1
2
|
// Initialize ZDO items and setup the device - type of device to create.
ZDO_Init();
|
-
注册端点 0
1
2
3
4
|
// Register the endpoint description with the AF
// This task doesn't have a Simple description, but we still need
// to register the endpoint.
afRegister( (endPointDesc_t *)&ZDApp_epDesc );
|
-
ZDO 初始化设备
1
2
3
4
5
6
7
8
9
10
11
|
// Start the device?
if
( devState != DEV_HOLD )
{
ZDOInitDevice( 0 );
}
else
{
ZDOInitDevice( ZDO_INIT_HOLD_NWK_START );
// Blink LED to indicate HOLD_START
HalLedBlink ( HAL_LED_4, 0, 50, 500 );
}
|
-
ZDO 任务事件处理函数
任务事件处理函数 ZDApp_event_loop ()包含消息、网络初始化、网络启动、路由启动等事件。