层次结构:
PHY:从无线物理信道上为MAC层提供数据收发的服务
MAC:保证协议数据正确收发
NWK:兼容IEEE802.15.4标准,并为上层提数据NLDE和管理NLME服务
APS :为ZDO访问NWK提供了通路
AF :为各个用户自定义的应用对象提供了模板式的活动空间
APL :基于zigbee协议栈,建立在ZDO基础之上的具体应用
zigbee无线通信:
信道:tools目录中的f8wConfig.cfg中定义:
//-DDEFAULT_CHANLIST=0x04000000 // 26 - 0x1A
//-DDEFAULT_CHANLIST=0x02000000 // 25 - 0x19
//-DDEFAULT_CHANLIST=0x01000000 // 24 - 0x18
//-DDEFAULT_CHANLIST=0x00800000 // 23 - 0x17
//-DDEFAULT_CHANLIST=0x00400000 // 22 - 0x16
//-DDEFAULT_CHANLIST=0x00200000 // 21 - 0x15
//-DDEFAULT_CHANLIST=0x00100000 // 20 - 0x14
//-DDEFAULT_CHANLIST=0x00080000 // 19 - 0x13
//-DDEFAULT_CHANLIST=0x00040000 // 18 - 0x12
//-DDEFAULT_CHANLIST=0x00020000 // 17 - 0x11
//-DDEFAULT_CHANLIST=0x00010000 // 16 - 0x10
//-DDEFAULT_CHANLIST=0x00008000 // 15 - 0x0F
//-DDEFAULT_CHANLIST=0x00004000 // 14 - 0x0E
//-DDEFAULT_CHANLIST=0x00002000 // 13 - 0x0D
//-DDEFAULT_CHANLIST=0x00001000 // 12 - 0x0C
-DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B
panID,16bit网络地址,只有panID相同的设备才能组成一个网络
/* Define the default PAN ID.
*
* Setting this to a value other than 0xFFFF causes
* ZDO_COORD to use this value as its PAN ID and
* Routers and end devices to join PAN with this ID
*/
-DZDAPP_CONFIG_PAN_ID=0xFF00
shortAddr,由父节点分配的16bit短地址,用于设备之间通信
endPoint,是一个1-240的具体设备端点号,与应用相关
zigbee网络中有3种通信设备:
全功能设备FFD协调器
全功能设备FFD路由器
半功能设备RFD终端
有且只能有一个协调器,协调器,路由器,终端节点由软件决定
实现无线通信:
//1.基于端点进行通信,所以首先需要注册端点
/*
*功能:注册一个断点
*参数:@epDesc 描述端点信息的结构体指针
* typedef struct
* {
* uint8 endPoint;//端点号1-240
* uint8 *task_id; //当前任务ID
* SimpleDescriptionFormat_t *simpleDesc;//端点简单描述符
* afNetworkLatencyReq_t latencyReq;//网络延迟信标设置,一般默认参数noLatencyReqs
* } endPointDesc_t;
typedef struct
{
uint8 EndPoint;//端点号1-240
uint16 AppProfId;//profile应用规范ID,表示应用领域比如建筑、农业、家居等
uint16 AppDeviceId;//应用设备ID
uint8 AppDevVer:4;//应用设备版本号
uint8 Reserved:4; //保留
uint8 AppNumInClusters;//输入簇命令个数,如打开、关闭、停止等操作命令
cId_t *pAppInClusterList;//输入簇命令ID列表
uint8 AppNumOutClusters;//输出簇命令个数
cId_t *pAppOutClusterList;//输出簇命令ID列表
} SimpleDescriptionFormat_t;
*/
afStatus_t afRegister( endPointDesc_t *epDesc )
/*无线消息发送函数*/
afStatus_t AF_DataRequest( afAddrType_t *dstAddr,//目标地址
endPointDesc_t *srcEP,//源端点
uint16 cID, //簇命令ID,对于接收方可以通过该命令来区分数据包
uint16 len, //发送数据的长度
uint8 *buf, //发送数据的起始地址
uint8 *transID,//事务ID,是包计数器,用于信息确认
uint8 options, //告知AF层做的一些预处理,一般为AF_DISCV_ROUTE
uint8 radius )//转发数据最多经过的路由深度(AF_DEFAULT_RADIUS)
typedef struct
{
union
{
uint16 shortAddr;
ZLongAddr_t extAddr;
} addr;
afAddrMode_t addrMode;
uint8 endPoint;
uint16 panId; // used for the INTER_PAN feature
} afAddrType_t;