当前位置:文档之家› ZigBee学习笔记CC2530

ZigBee学习笔记CC2530

ZigBee学习笔记CC2530
ZigBee学习笔记CC2530

已入门选手进一步学习的重点

我发现最近群里很多人已经可以算是大致入门了,能够在原有例子的基础上进行一些简单工作,实现数据传输。但是我也发现很多人开始把精力投入到钻研协议栈代码细节上面去了,实际上这种学习方式是有问题的。第一:如果从应用的角度看,协议栈的一些实现细节是没有必要钻研的,这就好比是现在的PC机,已经有了Windows系统了,我们在这个系统之上实现自己应用程序的时候其实并不需要对Windows内部实现细节过多地关注,只要能够自由地在Windows下开发应用程序(其实就是调用大量的API函数)就可以了;第二:如果想从协议栈本身入手去做一些深入的工作,Zstack是不适合的,因为它不是完全开源,真想在路由算法、加密算法等方面做工作的话,目前TinyOS这样的开源协议栈才是首选。所以,进一步学习的重点应该是:在什么时间什么地点调用什么函数的问题!

那么如何来提高这方面的技能呢?

1、浏览ZDP和ZDO相关代码,熟悉一下都有什么函数,这两个部分都做了什么,学习的过程中千万不要去钻研代码实现的细节,只要了解其流程以及都作了什么就可以了,否则你一定会迷失在那成千上万行的代码之中而不能自拔。ZDP和ZDO的实现文件里面

有大量的函数在以后具体应用中可以去调用。

2、典型例子中的ZDO消息使用其实只有那么几个例子,比如:

ZDO_RegisterForZDOMsg(TaskID,End_Device_Bind_rsp)这样的,这是讲底层的一些事件消息引入到应用层的注册方法。在深入应用的时候那么几个典型的消息注册是不够

用的,比如我在一个应用中就注册了以下:

ZDO_RegisterForZDOMsg( TaskID, End_Device_Bind_rsp ); // 我自己解析

End_Device_Bind_rsp

ZDO_RegisterForZDOMsg( TaskID, Match_Desc_rsp ); //我自己解析

Match_Desc_rsp

ZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析

Device_annce

ZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp); //我自己解析

Active_EP_rsp

ZDO_RegisterForZDOMsg( TaskID, Simple_Desc_rsp); //我自己解析

Simple_Desc_rsp

ZDO_RegisterForZDOMsg( TaskID, NWK_addr_rsp); //我自己解析

NWK_addr_rsp

在具体应用中,你会根据不同的网络需求去调用很多协议栈的设置好的req和处理rsp消息,那么协议栈都有那些req和rsp是你进一步学习所应该深入认识的。

3、在自己使用系统的req和rsp的时候,如果你不知道该如何处理,你最好去看看MT是如何实现的,在MT功能模块中,对协议栈的绝大多数req和rsp都有调用和实现的例子可以参考,虽然我们在自己的应用中很少回去使用MT,但是Mt 的实现代码却是最好

的参考资料。

上面几点是我目前能够想到的一些事情,以后有想法再补充吧!

最后我举个例子:比如你想实现节点入网后自动报告自己的长短地址,然后主控节点处理节点的报告,并且向这个节点要求其发回存在于其上的EP信息,我们应该这样做:

1、在新节点的ZDO_STATE_CHANGE消息处理函数中调用:

ZDP_DeviceAnnce( NLME_GetShortAddr(), NLME_GetExtAddr(), \

ZDO_Config_Node_Descriptor.CapabilityFlags, 0 );

这个函数会自动以广播方式报告自己的短地址和长地址,其余在网的节点都可以收到;你也可以采用按键策略,新节点入网后通过按键触发来报告自己的长短地址:

2、在主控节点的初始化函数中添加:

ZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析

Device_annce

这样,当新入网节点Annce的时候,主控节点收到这个消息,然后通知给你的任务(TaskID),你的任务则需要在case ZDO_CB_MSG:处理函数中添加处理这个annce的

代码,如:

case Device_annce: //device annouce process.

ProcessDeviceAnnce(inMsg);

break;

在自己实现的ProcessDeviceAnnce函数中,你可以提取出新来节点的长短地址。。。。。

3、有了新节点的长短地址,其实什么都可以做了,我现在利用新节点的长短地址来请求其

返回它的EP信息:

在适当的地方调用ZDP_ActiveEPReq( &zDestAddr, shortAddr, SECURITY_FLAG);

这是一个直接面向目标短地址的单播req,目标节点收到这个req之后,会自动处理的(代码协议栈已经实现了),Zstack协议栈实际上实现了绝大多数响应req的函数,然后返回一个rsp,这一部分其实你不用管,也就是说目标节点方面你一行代码都不用写,存在其上的所有EP信息就会被返回到主控节点;但是Zstack没有实现绝大多数rsp处理函数,因为rsp一般来将用户会有不同的想法,所以他也没办法实现;

4、主控节点如果想处理返回的活动EP信息(比如EP号),那么需要在任务初始化的时候

注册一下由任务处理这个返回消息:

ZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp);

然后在ZDO_CB_MSG处理函数中添加自己的处理代码:

case Active_EP_rsp://active ep response process.

ProcessActiveEpRsp(inMsg);

break;

自己编写的ProcessActiveEpRsp函数就可以提取到目标节点上所有EP信息,比如我自

己实现的一段代码就是这样的(注释解释):

static void ProcessActiveEpRsp(zdoIncomingMsg_t *inMsg)

{

uint8 *pData;

uint8 i;

ZDO_ActiveEndpointRsp_t *pRsp = ZDO_ParseEPListRsp( inMsg ); //调用ZDO_ParseEPListRsp函数(这个函数协议栈已经实现了,什么时间什么地点调

//用什么函数问题的具体体现,即:在rsp处理的时候调用这个函数,不知道你理解没?

//下面我处理经过Parse后的消

息:

uint8 cnt = pRsp->cnt;

pData = (uint8 *)osal_mem_alloc(6 + cnt);

//here, 3 is one for status, two for short address.one is cnt

if(pData)

{

pData[0] = LO_UINT16(pRsp->nwkAddr);

pData[1] = HI_UINT16(pRsp->nwkAddr);

pData[2] = pRsp->status;

pData[3] = pData[0];

pData[4] = pData[1];

pData[5] = cnt;

for(i=0;i < cnt;i++)

pData[6 + i] = pRsp->epList;

osal_mem_free(pRsp);

Uart_SendBack(pData,(6 + cnt)); //串口方式把获得的信息发给PC,你可以

存起来,也可以进一步做别的;

osal_mem_free(pData);

}

HalLedSet(HAL_LED_GREEN,HAL_LED_MODE_FLASH); //用闪灯方式表示收

到了消息。。。

}

//函数里面这段代码我实现的依据是什么?这你就的去找找看协议栈是如何处理这个req

的了,看看ZDP_ActiveEPReq函数的协议栈实现,

//#define ZDP_ActiveEPReq( dstAddr, NWKAddrOfInterest, SecurityEnable ) \ // ZDP_NWKAddrOfInterestReq( dstAddr, \

// NWKAddrOfInterest, Active_EP_req, SecurityEnable ) //看到这里就够了,我们知道这个函数调用会发一个Active_EP_req给目标节点,至于怎

么发出去的,没必要研究了。

//再去查查看协议栈是如何处理Active_EP_req的,找到了:

//{ Active_EP_req, ZDO_ProcessActiveEPReq },

//这个函数的具体实现(协议栈中的)

/*

void ZDO_ProcessActiveEPReq( zdoIncomingMsg_t *inMsg )

{

byte cnt = 0;

uint16 aoi;

byte stat = ZDP_SUCCESS;

aoi = BUILD_UINT16( inMsg->asdu[0], inMsg->asdu[1] );

if ( aoi == NLME_GetShortAddr() )

{

cnt = afNumEndPoints() - 1; // -1 for ZDO endpoint descriptor

afEndPoints( (uint8 *)ZDOBuildBuf, true );

}

else

{

stat = ZDP_INVALID_REQTYPE;

}

ZDP_ActiveEPRsp( inMsg->TransSeq, &(inMsg->srcAddr), stat,

aoi, cnt, (uint8 *)ZDOBuildBuf, inMsg->SecurityUse );

*/

//这个你要看懂了,实际上就是向你报告有几个活动EP,每个EP的号是多少。。。。

例子大致说完了,如果不知道我在说什么,也不知道我说的这些函数怎么找的同学,那还

得去好好入门入门,这篇文档不适合你!

如果能大致领会意思,我想你就体会到了我们的学习重点在哪里,再说一遍:在什么时间、

什么地点调用什么函数!而不是研究协议栈到底怎么实现的。

ZigBee重要结构及表解释

ZigBee重要结构及表解释 ZigBee 2010-06-13 10:31:26 阅读103 评论0 字号:大中小订阅各表中的元素结构: 1、组表的元素结构aps_Group_t; typedef struct { uint16 ID; // 组ID uint8 name[APS_GROUP_NAME_LEN]; // 组名称 } aps_Group_t; 2、组列表的元素结构 typedef struct apsGroupItem { struct apsGroupItem *next; //指向下一个组表条目 uint8 endpoint; //此终端接收发送给组的信息 aps_Group_t group; //组ID和组名 } apsGroupItem_t; 3、路由表的元素结构rtgEntry_t; typedef struct { uint16 dstAddress; //目标地址 uint16 nextHopAddress; //单跳地址 byte expiryTime; //有效时间 byte status; //状态 } rtgEntry_t; 4、绑定表的元素结构BindingEntry_t; typedef struct

{ uint8 srcEP; // 没有源地址自从源地址一直是本地设备uint8 dstGroupMode; // 目标地址类型; 0 –正常地址, 1 –组地址 uint16 dstIdx; //在两种模式中(组或非组) 保存到NV 和RAM // dstGroupMode = 0 - Address Manager index // dstGroupMode = 1 –组地址 uint8 dstEP; //目标地址 uint8 numClusterIds; //簇个数 uint16 clusterIdList[MAX_BINDING_CLUSTER_IDS]; // Don't use MAX_BINDING_CLUSTERS_ID when // using the clusterIdList field. Use // gMAX_BINDING_CLUSTER_IDS } BindingEntry_t; 5、相邻表的元素结构neighborEntry_t; typedef struct { uint16 neighborAddress; //相邻地址 uint16 panId; //所属的PAN网络ID linkInfo_t linkInfo; //连接信息(包括发送/接收和安全帧计数) } neighborEntry_t; 6、路由发现表的元素结构rtDiscEntry_t; typedef struct { byte rreqId; //接收请求ID

ZigBee学习笔记CC2530

已入门选手进一步学习的重点 我发现最近群里很多人已经可以算是大致入门了,能够在原有例子的基础上进行一些简单工作,实现数据传输。但是我也发现很多人开始把精力投入到钻研协议栈代码细节上面去了,实际上这种学习方式是有问题的。第一:如果从应用的角度看,协议栈的一些实现细节是没有必要钻研的,这就好比是现在的PC机,已经有了Windows系统了,我们在这个系统之上实现自己应用程序的时候其实并不需要对Windows内部实现细节过多地关注,只要能够自由地在Windows下开发应用程序(其实就是调用大量的API函数)就可以了;第二:如果想从协议栈本身入手去做一些深入的工作,Zstack是不适合的,因为它不是完全开源,真想在路由算法、加密算法等方面做工作的话,目前TinyOS这样的开源协议栈才是首选。所以,进一步学习的重点应该是:在什么时间什么地点调用什么函数的问题! 那么如何来提高这方面的技能呢? 1、浏览ZDP和ZDO相关代码,熟悉一下都有什么函数,这两个部分都做了什么,学习的过程中千万不要去钻研代码实现的细节,只要了解其流程以及都作了什么就可以了,否则你一定会迷失在那成千上万行的代码之中而不能自拔。ZDP和ZDO的实现文件里面 有大量的函数在以后具体应用中可以去调用。 2、典型例子中的ZDO消息使用其实只有那么几个例子,比如: ZDO_RegisterForZDOMsg(TaskID,End_Device_Bind_rsp)这样的,这是讲底层的一些事件消息引入到应用层的注册方法。在深入应用的时候那么几个典型的消息注册是不够 用的,比如我在一个应用中就注册了以下: ZDO_RegisterForZDOMsg( TaskID, End_Device_Bind_rsp ); // 我自己解析 End_Device_Bind_rsp ZDO_RegisterForZDOMsg( TaskID, Match_Desc_rsp ); //我自己解析 Match_Desc_rsp ZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析 Device_annce ZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp); //我自己解析 Active_EP_rsp ZDO_RegisterForZDOMsg( TaskID, Simple_Desc_rsp); //我自己解析 Simple_Desc_rsp ZDO_RegisterForZDOMsg( TaskID, NWK_addr_rsp); //我自己解析 NWK_addr_rsp 在具体应用中,你会根据不同的网络需求去调用很多协议栈的设置好的req和处理rsp消息,那么协议栈都有那些req和rsp是你进一步学习所应该深入认识的。 3、在自己使用系统的req和rsp的时候,如果你不知道该如何处理,你最好去看看MT是如何实现的,在MT功能模块中,对协议栈的绝大多数req和rsp都有调用和实现的例子可以参考,虽然我们在自己的应用中很少回去使用MT,但是Mt 的实现代码却是最好

ZigBee 协议架构

根据应用和市场需要定义了ZigBee 协议的分层架构,其协议的体系结构如图1 所示,其中物理层(physical layer,PHY)和媒介访问控制层(medium access control sub-layer,MAC)是由IEEE802.15.4-2003 标准定义的,在这个底层协议的基础上ZigBee 联盟定义了网络层(network layer,PHY)和应用层(application layer,APL)架构. 图1 zigbee协议栈体系结构 物理层规范 物理层定义了它与MAC 层之间的两个接口:数据服务接口PD-SAP 和管理服务接口PLME-SAP,其中PD-SAP 接口还为物理层提供了相应的数据服务,负责从无线物理信道上收发数据,而PLME-SAP 接口同时为物理层提供相应的管理服务,用于维护一个由物理层相关数据组成的数据库。物理层负责数据的调制、发送和接收、空闲信道评估(clear channel assessment,CCA)信道能量的监测(energy detect,ED)和链接质量指示(link quality indication,LQI)等。物理层帧结构由同步头、物理层帧头和物理层有效载荷三部分组成,如表1 所示。

同步头又包括32bit 的前同步码和8bit 的帧定界符,前同步码用来为数据收发提供码元或数据符号的同步;帧界定符用来标识同步域的结束及数据的开始。物理层帧头包括7bit 的帧长度和1bit 的预留位,帧长度定义了物理层净荷的字节数。物理层有效载荷就是MAC层的帧内容。 表一物理层帧格式 媒体接入控制层规范 MAC 层定义了它与网络层之间的接口,包括提供给网络层的数据服务接口MLDE-SAP 和管理服务接口MLME-SAP,同时提供了MAC 层数据服务和MAC 层管理服务。MAC层数据服务主要实现数据帧的传输;MAC 层管理服务主要负责媒介访问控制、差错控制等。 MAC 层主要功能包括以下几个方面: (1)ZigBee 协调器产生网络信标 (2)设备与信标同步 (3)支持节点加入或着退出操作 (4)信道接入方式采用免冲突载波检测多路访问(CSMA-CA)机制 (5)建立并维护保护时隙机制 (6)为设备提供安全支持 MAC 帧格式由三个基本部分组成:MAC 帧头、MAC 帧载荷和MAC 帧尾。不同类型的MAC 帧,其帧头和帧尾都是一样的,只是MAC 帧载荷有差别,通用MAC 帧格式如表2所示。 表二通用MAC帧格式 网络层规范 网络层定义了它与应用层之间的接口,包括提供给应用层的数据服务接口NLDE-SAP和管理服务接口NLME-SAP , 同时提供了网络层数据服务和网络层管理服务。网络层主要负责拓扑结构的建立和网络的维护,具体的功能如下:(1)初始化网络,即建立一个新的包含协调器、路由器和终端设备的网络(2)设备连接和断开时所采用的机制 (3)对一跳邻居节点的发现和相关节点信息的存储 (4)ZigBee 协调器和路由器为新加入节点分配短地址

Zigbee技术主流芯片比较 2概况

Zigbee技术主流芯片调研 1、Zigbee芯片调研 当今市场已有大量集成Zigbee协议和射频电路的芯片。以下是市场上主流的生成Zigbee的公司及其生产的典型Zigbee芯片。 公司TI FREESCALE ATMEL Nordic 芯片CC2530 MC1321 AT86RF230 nRF24E1/nRF9E5 MCU内核8051 HCS08 无(通过SPI接口由外 接MCU连接) 8051 通过在淘宝上的调查,TI公司的CC2530和FREESCALE的MC1321用户量比较大,有大量的公司提供基于这两款芯片的Zigbee模块,使用这些模块可以减少大量的硬件调试工作,而较容易的实现我们所需的传输功能。以下就这两类主流芯片进行详细介绍。 1.1 CC2530调研 CC2530是市场最主流的Zigbee芯片,TI公司推出的ZIGBEE网络处理器,将复杂的ZIGBEE网络协议栈,处理成了简单的用户接口命令,用户只要使用任何简单的单片机(微控制器),就可以容易的实现对ZIGBEE网络的控制;TI推出这个芯片的目的,就是希望ZIGBEE容易被使用。CC2530是TI公司推出的最新一代ZigBee标准芯片,适用于2.4GHz、IEEE802.15.4、ZigBee和 RF4CE应用。 CC2530包括了极好性能的一流RF收发器,工业标准增强性8051MCU,系统中可编程的闪存,8KB RAM以及许多其它功能强大的特性,可广泛应用在2.4-GHzIEEE802.15.4系统,RF4CE遥控制系统,ZigBee系统,家庭/建筑物自动化,照明系统,工业控制和监视,低功耗无线传感器网络,消费类电子和卫生保健。主要参数如下:

ZigBEE RF4CE规范基本概念及配对详细讲解

一.节点的安装初始化 1.1建立网络的过程 (1)目标节点: 首先,扫描信道,对各个信道进行能量检测,选择可允许能量水平的信道进行操作。 然后,发送执行活动的扫描操作,识别其他在工作在所选信道上的属于其他PAN网络的identifiers,允许一个统一的PAN identifier接入它的网络。 最后,目标节点运行常规功能。 (2)控制节点: 接入网络之后,运行常规功能。 二.网络帧结构 Frame control:控制信息 Frame counter:技术,防止重复和延时攻击 Profile identifier:应用帧的传输格式 Vendor identifier:供应商标识符,允许商家进行扩展 Frame payload:传输的应用层数据 Message integrity code:进行认证(安全) 三.传输选项 四.发现(Discovery) 发现服务必须是在非节能模式下才能进行。节点通过执行发现服务,来寻找能够进行配对的节点;发现服务会在一个固定的期间内在三个PAN网络中重复的进行,直到收到所有的应答。 在此期间,设备之间会交换如下信息: Node capabilities:节点的类型(目标节点或控制节点),节点的供电类型,是否支持

安全性。 Vendor information:ZigBee RF4CE提供一个Vendor identifier或者vender string 来制定一个特定的供应商标识。 Application information:用户自定义一个字符串用来描述节点的应用功能(例如Lounge TV),一个设备类型列表可以制定哪些类型的设备室被支持的(例如一个综合性设备可能同时支持TV和DVD的功能),profile identifier列表制定该节点支持哪些类型的profiles。 Requested device type:discovery期间可以被请求的设备类型(比如一个多功能遥控器可能寻找TV的功能)。 五、频率捷变 (1)目标节点可以根据3个信道的变化,更换信道。 (2)控制节点会记录目标节点的信道,当目标节点信道发生改变时,控制节点会尝试从其他信道发送给目标节点,直到目标节点发送确认信息;之后,控制节点会记录上新的信道。 六、配对 在发现期间,当节点确定在它的通信范围有其他能够提供稳定服务的节点时,可以通过建立配对从而进行通信。在RC网络中在存在配对的发送端和接收端之间只能直接通信。 配对连接可以建立在应用层的要求上,通过交换类似于discovery期间交换的消息。目标节点可以选择是否接受配对并发送请求配对信息给源节点。 配对成功后,源节点和目标节点会在它们各自的配对表中存储配对链接。这个使得源节点可以和目标节点通信,目标节点也可以和源节点通信。在配对表中的实体包含网络层传输信息给目标节点的所有信息。这消除了寻址的负担,要实现和相应设备的通信,应用层可以简单的提供一个链接配对表的index。 配对表中的每个实体包含的信息如下: Pairing reference Source network address Destination logical channel Destination IEEE address Destination PAN identifier Destination network address Recipient nod capabilities Recipient frame counter Secutity link key

ZigBee网络拓扑结构显示

实验二ZigBee网络拓扑结构显示 【实验目的】 1、熟悉Qt编写程序的方法; 2、了解Qt显示ZigBee网络拓扑结构的工作原理; 【实验设备】 1、装有RedHat AS5系统或装有RedHat AS5虚拟机的PC机一台; 2、物联网开发设计平台一套; 【实验要求】 使用Qt为ZigBee网络编写拓扑结构; 1、编程要求:使用提供的API函数编写应用程序; 2、实现功能:构建ZigBee网络拓扑结构; 3、实验现象:显示网络的拓扑结构; 【实验原理】 本实验箱针对Qt下,将服务程序的API做了一定的封装,并提供了非常方便使用的接口函数,可以让用户在Qt环境下绘制Zigbee网络的拓扑结构。这些函数都被封装在一个叫做TopologyWidget的类中,它们的详细介绍如下: 【函数原型】void TopologyWidget::SetTopologyArea(const QString &ip, QScrollArea *area); 【功能】设置用来显示拓扑图的滚动区域控件 【参数】ip: 运行服务程序的网关(计算机)的IP地址area: 用来显示拓扑图的滚动区域控件【返回值】无 【头文件】使用本函数需要包含"topologywidget.h" 【函数原型】void TopologyWidget::UpdateTopologyArea(QScrollArea *area); 【功能】立即刷新滚动区域控件中的拓扑图 【参数】area: 用来显示拓扑图的滚动区域控件 【返回值】无 【头文件】使用本函数需要包含"topologywidget.h" 在实际应用中,用户需要首先在界面中放置一个,假设其名称为“scrollArea”,只需要在窗体的构造函数中,完成了setupUi的操作之后,调用TopologyWidget::SetTopologyArea函数即可使拓扑图显示在这个滚动区域中,参考下面的代码。 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 将界面中的scrollArea设置为用来显示拓扑图 TopologyWidget::SetTopologyArea("127.0.0.1", ui->scrollArea); } 【实验步骤】 1.双击打开桌面上的VMware Player。如图 2.1所示;

Zigbee协议栈原理基础

1Zigbee协议栈相关概念 1.1近距离通信技术比较: 近距离无线通信技术有wifi、蓝牙、红外、zigbee,在无线传感网络中需求的网络通信恰是近距离需求的,故,四者均可用做无线传感网络的通信技术。而,其中(1)红外(infrared):能够包含的信息过少;频率低波衍射性不好只能视距通信;要求位置固定;点对点传输无法组网。(2)蓝牙(bluetooth):可移动,手机支持;通信距离10m;芯片价格贵;高功耗(3)wifi:高带宽;覆盖半径100m;高功耗;不能自组网;(4)zigbee:价格便宜;低功耗;自组网规模大。?????WSN中zigbee通信技术是最佳方案,但它连接公网需要有专门的网关转换→进一步学习stm32。 1.2协议栈 协议栈是网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。 1.2.1Zigbee协议规范与zigbee协议栈 Zigbee各层协议中物理层(phy)、介质控制层(mac)规范由IEEE802.15.4规定,网络层(NWK)、应用层(apl)规范由zigbee联盟推出。Zigbee联盟推出的整套zigbee规范:2005年第一版ZigBeeSpecificationV1.0,zigbee2006,zigbee2007、zigbeepro zigbee协议栈:很多公司都有自主研发的协议栈,如TI公司的:RemoTI,Z-Stack,SimpliciTI、freakz、msstatePAN 等。 1.2.2z-stack协议栈与zigbee协议栈 z-stack协议栈与zigbee协议栈的关系:z-stack是zigbee协议栈的一种具体实现,或者说是TI公司读懂了zigbee 协议栈,自己用C语言编写了一个软件—---z-stack,是由全球几千名工程师共同开发的。ZStack-CC2530-2.3.1-1.4.0软件可与TI的SmartRF05平台协同工作,该平台包括MSP430超低功耗微控制器(MCU)、CC2520RF收发器以及CC2591距离扩展器,通信连接距离可达数公里。 Z-Stack中的很多关键的代码是以库文件的形式给出来,也就是我们只能用它们,而看不到它们的具体的实现。其中核心部分的代码都是编译好的,以库文件的形式给出的,比如安全模块,路由模块,和Mesh自组网模块。与z-stack 相比msstatePAN、freakz协议栈都是全部真正的开源的,它们的所有源代码我们都可以看到。但是由于它们没有大的商业公司的支持,开发升级方面,性能方面和z-stack相比差距很大,并没有实现商业应用,只是作为学术研究而已。 还可以配备TI的一个标准兼容或专有的网络协议栈(RemoTI,Z-Stack,或SimpliciTI)来简化开发,当网络节点要求不多在30个以内,通信距离500m-1000m时用simpliciti。 1.2.3IEEE802.15.4标准概述 IEEE802.15.4是一个低速率无线个人局域网(LowRateWirelessPersonalAreaNetworks,LR-WPAN)标准。定义了物理层(PHY)和介质访问控制层(MAC)。 LR-WPAN网络具有如下特点: ◆实现250kb/s,40kb/s,20kb/s三种传输速率。 ◆支持星型或者点对点两种网络拓扑结构。 ◆具有16位短地址或者64位扩展地址。 ◆支持冲突避免载波多路侦听技术(carriersensemultipleaccesswithcollisionavoidance,CSMA/CA)。(mac层) ◆用于可靠传输的全应答协议。(RTS-CTS) ◆低功耗。 ◆能量检测(EnergyDetection,ED)。 ◆链路质量指示(LinkQualityIndication,LQI)。 ◆在2.45GHz频带内定义了16个通道;在915MHz频带内定义了10个通道;在868MHz频带内定义了1个通道。 为了使供应商能够提供最低可能功耗的设备,IEEE(InstituteofElectricalandElectronicsEngineers,电气及电子工程师学会)定义了两种不同类型的设备:一种是完整功能设备(full.functionaldevice,FFD),另一种是简化功能设备

zigbee,ha协议标准

竭诚为您提供优质文档/双击可除 zigbee,ha协议标准 篇一:zigbee3.0协议姗姗来迟,首批产品已经推出 zigbee3.0姗姗来迟,顶尖产品已经推出 zigbee联盟(zigbeealliance)今天宣布,将其市场领先的无线标准统一成名为zigbee3.0的单一标准。该标准将为最广泛的智能设备提供互操作性,让消费者和企业能获得可无缝协作并为人们日常生活带来便利的创新产品与服务。 当今有数以千万的设备采用了zigbee标准,为消费者 带来极大好处,zigbee3.0的发布让这些标准得以统一。zigbee3.0标准让用于家庭自动化、连接照明和节能等领域 的设备具备通信和互操作性,因此产品开发商和服务提供商可以打造出更加多样化、完全可互操作的解决方案。开发商可以用新标准来定义目前基于zigbeepRo标准的所有设备类型、命令和功能。 飞利浦(philips)互联照明部营销与合作关系主管Filipjandepauw表示:“让消费者满意是飞利浦hue智能照 明系统的核心驱动力。消费者希望他们的智能设备简单好用,因此我们会继续带来容易控制和创造的更加丰富的照明新

体验。zigbee协议是实现这一目标的关键推动力,覆盖更广泛的zigbee3.0标准进一步实现了不同设备间的无缝通信,从而使我们能够为用户提供更强大的功能。更广泛的互操作性让创造新的用例和提升消费者满意度变得更简单。” zigbee3.0覆盖了最广泛的设备类型,包括家庭自动化、照明、能源管理、智能家电、安全装置、传感器和医疗保健监控产品。它同时支持易于使用的diy设备以及专业安装系统。基于ieee802.15.4标准、工作频率为2.4ghz(全球通用频率)的zigbee3.0使用zigbeepRo网络,以便为最小、功耗最低的设备提供可靠通信。目前基于zigbeehomeautomation(家庭自动化)和zigbeelightlink的zigbeecertified认证产品可与zigbee3.0互操作。欲查看统一成zigbee3.0的标准的完整列表,请访问官网 /retype/zoom/1b4a9975eff9aef8941e06f5pn=2&x=0&y=126 8&raww=561&rawh=20&o=png_6_0_0_135_299_631_23_892.9 79_1262.879&type=pic&aimh=17.112299465240643&md5sum =0e396de6e9a428054feedca137422c24&sign=dc869e5ba0&z oom=&png=2119-5028&jpg=0-0"target="_blank">点此查看j.m.Richardson说:“zigbee联盟一直认为,真正的互操作性来自于各个级别尤其是跟用户关系最为密切的应用 级的标准。联盟成员在从全球产品销售中总结的经验教训让

zigbee各版本规范比较

ZigBee各版本规范比较 ZigBee是ZigBee联盟建立的技术标准,它是一种工作在900MHZ和2.4GHZ频段的新兴无线网络技术,具有中等通讯距离(10米到数百米),比较灵活经济的通讯速率(40Kbps到250Kbps),并且有星状,网状(MESH),树状等多种网络拓扑,低的功耗等特点,所以在当今无线通讯技术和无线网络技术领域中占有比较重要的地位。 第一个ZigBee协议栈规范于2004年12月正式生效,称为ZigBee 1.0或ZigBee 2004。 第二个ZigBee协议栈规范于2006年12月发布,称为ZigBee 2006规范,主要是用“群组库(cluster library)”替换了ZigBee 2004中的MSG/KVP结构。最为重要的新的ZigBee 2006协议栈将不兼容原来的ZigBee 2004技术规范,对于已经投入ZigBee 2004的厂商而言,这是一个大悲剧。例如Jennic 公司将ZigBee2004协议栈固化在ROM中(JN5121/JN5139)。将无法和ZigBee 2006以后的协议栈兼容。ZigBee 2006协议栈,将是ZigBee兼容的一个战略分水岭,从这里开始,ZigBee将实现完全向后兼容性。 2007年10月发布了ZigBee 2007规范,ZigBee 2007规范定于了两套高级的功能指令集(feature set):分别是ZigBee功能命令集和ZigBee Pro功能命令集。(ZigBee 2004和2006都不兼容这两套新的命令集)。ZigBee 2007包含两个协议栈模板(profile),一个是ZigBee协议栈模板(Stack Profile 1),它是2006年发布的,目标是消费电子产品和灯光商业应用环境,设计简单,使用在少于300个节点的网络中。另一个是ZigBee Pro协议栈模板 (Stack Profile 2),它是在2007年发布,目标是商业和工业环境,支持大型网络,1000个以上网络节点,相应更好的安全性。ZigBee Pro提供了更多的特性,比如:多播、多对一路由和SKKE(Symmetric-key key establishment)高安全,但ZigBee(协议栈模板1)在内存和flash中提供了一个比较小的区域。两者都提供了全网状网络与所有的ZigBee应用模板工作。 ZigBee 2007 是向后完全兼容ZigBee 2006设备。ZigBee 2007设备可以加入一个ZigBee 2006网络,并能再ZigBee 2006网络中运行,反之亦然。 由于路由选择不同,ZigBee Pro设备必须变成非路由ZigBee End-Devices(ZEDs)设备才可加入ZigBee 2006或ZigBee 2007网络。同样ZigBee 2006或ZigBee 2007设备必须变成ZEDs才可加入ZigBee Pro 网络。在这些设备上的应用程序工作是相同的,它们不管在这些设备上的协议栈模板。 下面的图表从高层次进行比较,列出2004、2006及2007/PRO ZigBee规范之间的异同。 比较图

zigbee技术分析——经典

与蜂共舞—ZigBee技术一瞥 本文从ZigBee的发展历史入手,探讨了这种基于无线传感器技术的网络应用的协议栈、性能分析和各种应用领域,全面构建了完整的ZigBee技术应用与发展蓝图。 “ZigBee”是什么?从字面上猜像是一种蜜蜂。因为“ZigBee”这个词由“Zig”和“Bee”两部分组成,“Zig”取自英文单词“zigzag”,意思是走“之”字形,“bee”英文是蜜蜂的意思,所以“ZigBee”就是跳着“之”字形舞的蜜蜂。不过,ZigBee 并非是一种蜜蜂,事实上,它与蓝牙类似是一种新兴的短距离无线通信技术,国内也有人翻译成“紫蜂”。下面就让我们一起进入这只蜜蜂的世界,与蜂共舞吧! 这只蜜蜂的来头还是要从它的历史开始说起,早在上世纪末,就已经有人在考虑发展一种新的通信技术,用于传感控制应用(sensor and control),这个想法后来在IEEE 802.15工作组当中提出来,于是就成立了TG4工作组,并且制定了规范IEEE 802.15.4。但是IEEE 802的规范只专注于底层,要达到产品的互操作和兼容,还需要定义高层的规范,于是2002年ZigBee Alliance成立,正式有了“ZigBee”这个名词。两年之后,ZigBee的第一个规范ZigBee V1.0诞生,但这个规范推出的比较仓促,存在一些错误,并不实用。此后ZigBee Alliance又经过两年的努力,推出了新的规范ZigBee 2006,这是一个比较完善的规范。据联盟最新的消息,今年年底将会发布更新版本的规范ZigBee 2007,这个版本增加了一些新的特性。 从ZigBee的发展历史可以看到,它和IEEE 802.15.4有着密切的关系,事实上ZigBee的底层技术就是基于IEEE 802.15.4的,因此有一种说法认为ZigBee和IEEE 802.15.4是同一个东西,或者说“ZigBee”只是IEEE 802.15.4的名字而已,其实这是一种误解。实际上ZigBee和IEEE 802.15.4的关系,有点类似于WiMAX和IEEE 802.16,Wi-Fi和IEEE 802.11,Bluetooth和IEEE 802.15.1。“ZigBee”可以看作是一个商标,也可以看作是一种技术,当把它看作一种技术的时候,它表示一种高层的技术,而物理层和MAC层直接引用IEEE 802.15.4。事物是不断的发展变化的,尤其是通信技术,可以想象将来的ZigBee可能不会使用IEEE 802.15.4定义的底层,就跟蓝牙(Bluetooth)宣布下一代底层采用UWB技术一样,但是“ZigBee”这个商标以及高层的技术还会继续保留。 ZigBee协议栈速读 我们无法预料将来ZigBee会基于怎样的底层技术,只好从它现在的底层——IEEE 802.15.4开始了解,IEEE 802.15.4包括物理层和MAC层两部分。ZigBee工作在三种频带上,分别是用于欧洲的868MHz频带,用于美国的915MHz频带,以及全球通用的2.4GHz频带,但这三个频带的物理层并不相同,它们各自的信道带宽分别是0.6MHz, 2MHz和5MHz,分别有1个,10个和16个信道。不同频带的扩频和调制方式也有所区别,虽然都使用了直接序列扩频(DSSS)的方式,但从比特到码片的变换方式有比较大的差别;调制方面都使用了调相技术,但868MHz和915MHz频段采用的是BPSK,而2.4GHz频段采用的是OQPSK。我们可以以2.4GHz频段为例看看发射机基带部分的框图(如图1),可以看到物理层部分非常简单,而IEEE 802.15.4芯片的低价格正是得益于底层的简单性。可能我们会担心它的性能,但我们可以再看看它和Bluetooth/IEEE 802.15.1以及WiFi/IEEE 802.11的性能比较(如图2),

ZigBee学习Z-stack外部中断

ZigBee学习Z-stack外部中断 硬件抽象层:就是对硬件层做好了各种初始化,用户不用考虑硬件的初始配置,直接使用即可。 hal_driver.c文件: HalDriverInit():用户可在此函数中添加硬件的初始化操作,如定时器、ADC、DMA、FLASH、AES、LCD、LED、UART、KEY、SPI、HID等(还有用于配置外部中断,类似按键的中断方式查询键值) Hal_ProcessEvent(): 处理HAL发生的事件、如:KEY、LED、电源管理等,用户可以在此添加处理自己的HAL事件,此事件ID必须是唯一的,定义在hal_driver.h中。如:HAL_KEY_EVENT(按键轮询与抖动)、HAL_LED_BLINK_EVENT(LED闪烁)、HAL_SLEEP_TIMER_EVENT(Power saving). Hal_ProcessPoll(): 被osal_start_system()调用,用于HAL_Timer和HAL_UART的事件轮询,关于系统编译连接,只要没有定义相关的宏定义,相应的驱动就不会编译进去,减少代码占用的空间。有以下的宏定义: 具体操作是: Options->C/C++ Options->Preprocessor->Defined Symbols->enter:HAL_XXX=TRUE; when XXX is ADC,UART,LED,LCD,KEY 不编译进代码,只要将其定义成FALSE 如何定做适合自己的HAL处理的程序 ①修改原文件的方式: 1、HAL\include下的头文件应该保留一样。 2、在HAL\Target\hal_xxx.c修改相应的驱动函数,hal_adc.c, hal_key.c, hal_lcd.c, hal_led.c, hal_timer.c, and hal_uart.c 3、硬件驱动配置可以被修改在hal_board_cfg.h ②增加用户自己的目标驱动 1、增加新的头文件,在hal\include 2、在hal\Target\hal_xxx.c添加自己运行函数,xxx为自己的目标 3、如果GPIO有冲突或者没用到,应该保证驱动不被编译,否则后果严重。 4、检查GPIO有没有正确设置或冲突,通过hal_board_cfg.h 5、不想被编译,或者是老的文件,没用到的文件,可以通过选择options->"Exclude form build" 外部中断程序中断处理函数的定义:可以查看 hal\Target\hal_XXX.c\hal_mcu.h HAL_ISR_FUNCTION(f,v) HAL_ISR_FUNCTION (prototype, vector) { /* Do something when this interrupt happens!!! */ }

zigbee解决方案比较

Zigbee 解决方案总结 一.非开源协议栈 1.freescale 解决方案 协议栈种类: 1.1 80 2.15.4标准mac 1.2 SMAC 1.3 SynkroRF 1.4 ZigBee RF4CE 1.5 ZigBee 2007 最简单的就是SMAC,是面向最简单的点对点应用的,不涉及网络的概念; 其次是IEEE802.15.4,一般用来组建简单的星型网络,而且提供了源代码,可以清楚地看到网络连接的每个步骤,分别调用了哪些函数; BeeStack(符合zigbee 2007)是提供的最复杂的协议栈,但是看不到代码,它提供给你一些封装好的函数,比如创建网络函数,你直接调用它,协调器就把网络创建好了,终端节点调用它则寻找可以加入的ZigBee网络并尝试加入。 其中硬件平台可以为下面中的任一种: MC13202 (2.4 GHz射频收发器) MC13213 (2.4 GHz射频收发器和带60K闪存的8位MCU)MC13224V (2.4 GHz平台级封装(PIP) –带有128KB闪存、96KB RAM、80KB ROM的32位TDMI ARM7处理器) MC13233 (带有HCS08 MCU的2.4 GHz片上系统) MC13202没有自带mcu,在做应用时,需要用户在自己的扩展板上加上mcu,既需要实现对外围设备的底层控制,也需要实现

协议栈。下面的几种均有自带mcu,协议栈的实现在自带的mcu 上实现,功能较简单的可直接使用片上的mcu资源进行控制;功能复杂的应用,最好协议栈实现与外围控制分开,大多数应用都选择arm芯片作为控制芯片; 详细信息可以查看https://www.doczj.com/doc/004151627.html,/products/rf/ZigBee.asp 2.microchip 解决方案 协议栈种类: ZigBee? Smart Energy Profile (SEP) Suite ZigBee? PRO ZigBee? RF4CE 均是一整套的协议集,价格不菲; 硬件平台: Pic18(mcu)+MRF24J40(2.4GHZ 射频收发器)+天线 与freescale 的mc13202相似,MRF24J40也只是射频收发器,不包含mcu,协议栈的实现需要借助于外围的mcu,当然微芯公司选择的是pic18及以上的芯片作为其主控mcu,通过spi接口与MRF24J40通信,查询其寄存器的状态,实现协议栈功能。 详见:https://www.doczj.com/doc/004151627.html,/ 3.ST 意法半导体解决方案 协议栈: EMZNET ZigBee? protocol stack 硬件平台:

zigbee学习笔记讲解

关于ZIGBEE技术 Zigbee的由来 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。正因此,经过人们长期努力,Zigbee协议在2003年中通过后,于2004正式问世了。 Zigbee是什么 Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里;另外整个Zigbee网络还可以与现有的其它的各种网络连接。例如,你可以通过互联网在北京监控云南某地的一个Zigbee控制网络。 不同的是,Zigbee网络主要是为自动化控制数据传输而建立,而移动通信网主要是为语音通信而建立;每个移动基站价值一般都在百万元人民币以上,而每个Zigbee―基站‖却不到1000元人民币;每个Zigbee 网络节点不仅本身可以与监控对对象,例如传感器连接直接进行数据采集和监控,它还可以自动中转别的网络节点传过来的数据资料; 除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。 每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。可以采集和传输数字量和模拟量。 Zigbee技术的应用领域 Zigbee技术的目标就是针对工业,家庭自动化,遥测遥控,汽车自动化、农业自动化和医疗护理等,例如灯光自动化控制,传感器的无线数据采集和监控,油田,电力,矿山和物流管理等应用领域。另外它还可以对局部区域内移动目标例如城市中的车辆进行定位. 通常,符合如下条件之一的应用,就可以考虑采用Zigbee技术做无线传输:1.需要数据采集或监控的网点多; 2.要求传输的数据量不大,而要求设备成本低; 3.要求数据传输可性高,安全性高; 4.设备体积很小,不便放置较大的充电电池或者电源模块; 5.电池供电; 6.地形复杂,监测点多,需要较大的网络覆盖; 7.现有移动网络的覆盖盲区; 8.使用现存移动网络进行低数据量传输的遥测遥控系统。 9.使用GPS效果差,或成本太高的局部区域移动目标的定位应用。 Zigbee 技术的特点 省电:两节五号电池支持长达6个月到2年左右的使用时间。 可靠:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用

Zigbee网关通信协议

Z i g b e e网关通信协议 Prepared on 24 November 2020

无线传感器网络(Zigbee)网关的的通信协议网关是通过串口与PC 机相连的。PC 机可以通过串口发送采集命令和收集采集数据,为了能有效管理这些数据,需要执行统一的数据通信格式。 下面介绍该系统中所使用的通用数据格式。 每一帧数据都采用相同的帧长度,且都带有帧头、数据和帧尾。具体格式如下: 如上所示,每一帧数据的长度都是32字节。除帧头和帧尾,每一帧数据都由命令头、发送地址、有效数据和校验和组成。 命令头:所执行的命令。 地址:所访问模块的长(前8字节)/短地址(后2字节)。 数据:传送各个参数、变量与返回值及各种需要突发发送的数据。校验和:从命令头到数据尾的加和校验,用于确定数据正确与否。注:命令头、地址的长地址部分和数据都采用ASCII码。 这个系统的命令分为3种,分别为 读命令R(ead):包括读各个传感器或网络状态命令。 测试命令T(est):测试LED、BEEP或电池寿命命令。 扩展板命令E(xtend):控制和读扩展板命令。 下面介绍具体命令格式。 1.读命令 1) RAS RAS(ReadallSensor):读传感器。

RAS具体格式如下: 需要加入地址和数据——地址:传感器模块地址;数 据:GM***/WD***。 传感器种类包括光敏:GM;温度:WD;可调电位器:AD。 (1)读取成功返回格式如下: 地址:加入传感器模块地址。 数据:传感器+ 测量值(ASSII码)。其中光敏:GM+ * * * (3 字节ASII码);温度:WD +***(3字节ASII码);可调电位器:AD+*** (3字节ASII码)。 (2)读取失败返回格式如下: 2) RND RND:无线网络发现。 RND 具体格式如下: 需要加入地址和数据———地址:无;数据:无,只需要命令头。(1)读取成功返回格式如下: 返回网络中节点的性质:RFD(终端节点)/ROU(路由器)+地址+第几个。 例如:如果返回第1个RFD 节点,则数据段为RFD01。具体格式如下: (2)读取成功结束格式如下: 2.测试命令 1) TLD

F8913 ZigBee 技术规范

F8913 ZigBee 模块技术规范 产品特点---------------------------------------------------------------------------------------------------- 简介 F8913 ZigBee 模块是一种物联网无线数据终端,利用ZigBee 网络为用户提供无线数据传输功能。 该产品采用高性能的工业级ZigBee 方案,以嵌入式实时操作系统为软件支撑平台,同时提供2.0的SMA 与DIP 接口,可直接连接TTL 串口设备,实现数据透明传输功能;低功耗设计,最低功耗小于1mA ;提供17路I/O ,可实现数字量输入输出、脉冲输出;提供5路ADC ,模拟量输入、脉冲计数等功能。 该产品已广泛应用于物联网产业链中的M2M 行业,如智能电网、智能交通、智能家居、金融、移动POS 终端、供应链自动化、工业自动化、智能建筑、消防、公共安全、环境保护、气象、数字化医疗、遥感勘测、军事、空间探索、农业、林业、水务、煤矿、石化等领域。 文档编号 文档版本 密 级 工业级应用设计 ◆ 采用高性能工业级ZigBee 处理芯片 ◆ 低功耗设计,支持多级休眠和唤醒模式,最大 限度降低功耗 ◆ 采用2.0的SMA 与DIP 双排接口,较适合客 户的需求。 ◆ 电源输入(DC 3.0~3.6V ) 稳定可靠 ◆ WDT 看门狗设计,保证系统稳定 ◆ 提供TTL 串行接口,SPI 接口。 ◆ 天线接口防雷保护(可选) 标准易用 ◆ 采用2.0的SMA 与DIP 接口,特别适合于不 同用户的应用需求。 ◆ 提供TTL 接口可直接连相同电压的TTL 串口 设备 ◆ 智能型数据模块,上电即可进入数据传输状态 ◆ 使用方便,灵活,多种工作模式选择 ◆ 方便的系统配置和维护接口 ◆ 支持串口软件升级和远程维护 功能强大 ◆ 支持ZigBee 无线短距离数据传输功能 ◆ 具备中继路由和终端设备功能 ◆ 支持点对点、点对多点、对等和Mesh 网络 ◆ 网络容量大:65000个节点 ◆ 节点类型灵活:中心节点、路由节点、终端节 点可任意设置; ◆ 发送模式灵活:广播发送或目标地址发送模式 可选 ◆ 通信距离大 ◆ 提供17路I/O ,可实现17路数字量输入输出; 兼容10路脉冲输出、5路模拟量输入、5路脉冲计数功能

相关主题
文本预览
相关文档 最新文档