资深移动通信工程师学习zigbee心得_第1页
资深移动通信工程师学习zigbee心得_第2页
资深移动通信工程师学习zigbee心得_第3页
资深移动通信工程师学习zigbee心得_第4页
资深移动通信工程师学习zigbee心得_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

资深移动通信工程师学习zigbee心得资深移动通信工程师学习zigbee心得

201*-11-12

物理层的PIB是什么概念?有什么用?201*-11-18

物理层的CCA.物理层是怎么知道信道的被占用状况.

AODV+ENY是什么概念?

AODVjr协议[2]在考虑了无线节点的有限移动性之后,以最大限度降低节点功耗为目的,

对AODV协议进展了简化。AODVjr协议仅保存了AODV协议按需路由的动态特性,而将HELLO消息、路由错误信息、问询序列号等AODV协议为了适应节点移动性提出的优化措施统统省略,对AODV协议进展了最大限度的简化。受益于这样的简化,AODVjr协议在能耗方面极大地优于AODV协议,因此AODVjr协议被广泛应用于各种无线传感器网络。AODVjr协议最大的问题是没有考虑路由的安全性,不仅数据在传输过程中极有可能被篡改或有意丢弃,路径信息本身也有可能被更改。

为了维持路径的可用性,路径的生命期只有在收到数据包时才进展更新,而发送数据包不进展路径更新。

Zigbee和adhoc网络不同.在adhoc网络中各个结点间的地位是一样的.而zigbee中网元间的地位是不一样的.

建网过程中,协调器对信道的主导扫描是干什么?发出信标恳求又是干什么?PANID又是依据什么机制确定的?64为IEEE地址的作用是什么?

一个终端节点第一开机,检测信道,假如有1个以上信道上有信标,这个节点怎么做选择呢?是不是所以拓扑构造的地址安排算法都是:An=Ak+Cship(d)*Rm+n?还是,只是树状拓扑构造时,按这个算法安排地址呢?

官方的网络层的路由协议是什么?是AODVjr和Cluster-Tree都有吗?RF4CE是什么?

GTS是什么概念?

Beacon的一个作用是注册/识别一个PAN?是什么概念?

路由表入口是什么概念?

CAPcontentionaccessperiodCFPcontentionfreeperiodGTSGuaranteedtimeslot

201*年12月31日星期五听视频Zigbee和蓝牙红外wifi是一个档次的概念

201*年公布第一个zigbee标准。现在有zigbee201*201*各个版本。

802.15只定义了物理层和MAC层。Zigbee在802.15上又定义了网络层和应用层。应用层上可以连240个应用层设备。

201*年1月4日星期二

201*年2月15日星期二学习《Zigbee无线组网技术的讨论》心得

1找到适宜的信道后,协调器将为网络选定一个网络标识符(PANID,取值_

个PANID是16位短地址中的一个吗?不是吧

2主动扫描和被动扫描有区分吗?无论怎么样,扫描一遍不行吗?

201*年2月16日星期三

1本文通过减小每个节点参加网络的时间及原语数来到达减小这种冲突的目的,从参加网络的时间分析,参加网络的绝大局部时间花费在主动扫描、信标周期和等待协调器处理时间上,而前两者时间是固定不变的,但是等待协调器处理的时间却是可变的,和协调器要处理的原语数量有关,可以通过削减原语的数量,减小协调器处理这些原语通信握手过程所需要的时间,这样协调器就能更快的响应节点的关联参加。

2节点参加过程是个半盲目的过程。估量是为了削减接入时间和削减简单度的缘由吧。节点向协调器发Associationrequest后,协调器会发一个ACK。这个ACK只是用来说”哦“。

然后节点要等,再做一个CSMA?这里做CSMA估量是为了防冲突吧,估量不是必需要做的。接着,节点再去问协调器要地址等信息。这些信息应当在Associationresponse里。

假如节点等了一段时间,协调器不通过信令给他安排信息,节点会自己从协调器的信标里提取响应命令(?比拟奇妙)这个响应命令里会有地址信息吗?

传统MAC设计目标是:最大化吞吐量、最小时延、公正性

ZIGBEEMAC设计目标是:最小化能耗、自组织力量。所以速率、时延、公正性都要做牺牲。

S-MAC提出用3种方法来削减能耗并支持自组织:1节点定期睡眠以削减空闲监听

2邻近节点组成虚拟簇,使睡眠调度时间自动同步3用消息传递方法来削减时延

在星型网拓扑构造中,网络协调者定义了整个网络的时分复用和多址接入方式。

依据业务流性质,zigbee应用可以分成连续性、周期性(如流速计)和连续性(如家电掌握)

三种。

Zigbee协议栈只要8位处理器再加4kbrom和32kbrom就可以了。SD和BI长度是由网络协调器打算的。

超帧的的活泼期间划分为3个阶段:信标发送时段、竞争访问时段CAP、非竞争访问时段CFP。超帧的活泼期被划分成(默认16)个等长的时隙。时隙个数、时隙长度等参数有协调者打算,并通过信标帧播送

在超帧的竞争访问阶段,节点使用带时隙的CSMA-CA访问机制,并且任何通信都必需在竞争访问时段完毕前完成。

GTS,在非竞争时段,这个时段被分成若干个GTS。每个GTS又由多个时隙组成。

2种通信模式:1带信标带时隙的CSMA-CA

2不带信标使用非时隙的CSMA-CA机制访问信道确认帧不需要使用CSMA-CA机制

MAC帧通用构造:帧头、负荷、帧尾帧头:帧掌握域帧号地址域

负荷:是可变的,详细内容由帧类型打算帧尾:16位CRC校验吗

16位地址是一个zigbee网的内部节点,是协调者来安排的,在一个网内是唯一的。也就意为着一个网做多有65000个左右的端点。PAN标识也是16位的。

64为地址是,设备的出厂地址,是全球唯一的。类似每个计算机网卡的MAC地址。

信标帧其中的待发送数据目标地址字段的作用是:在协调器要给某个节点用间接发送方式时,节点会去监听信标帧的这个字段。假如在这个字段里有我的地址,那节点会随后发起向

协调器要数据的流程。

楼教师胶片中的和蓝牙比拟中,zigbee有254个节点设备。这个256是怎么来的?一个主节点下可以联256个节点。简洁理解,在星型拓扑模式下,一个FFD可以联254个RFD。

扩展阅读:zigbee总结zigbee和GSCCDMA学习笔记

关于ZIGBEE技术

Zigbee的由来

在蓝牙技术的使用过程中,人们发觉蓝牙技术尽管有很多优点,但仍存在很多缺陷。对工业,家庭自动化掌握和遥测遥控领域而言,蓝牙技术显得太简单,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越剧烈。正因此,经过人们长期努力,Zigbee协议在201*年中通过后,于201*正式问世了。

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网络中通过自动路由的方式进展传输,从而保证了信息传输的牢靠性。

时延短:针对时延敏感的应用做了优化,通信时延和从休眠状态激活的时延都特别短。

网络容量大:可支持达65000个节点。

安全:ZigBee供应了数据完整性检查和鉴权功能,加密算法采纳通用的AES-128。

高保密性:64位出厂编号和支持AES-128加密。Zigbee的进展前景

Zigbee技术和RFID技术在201*年就被列为当今世界进展最快,市场前景最宽阔的十大最新技术中的两个。关于这方面的报道,你只需在百度,或GOOGLE搜寻栏中键入—Zigbee‖,你就会看到大量的有关报道。总之,今后若干年,都将是Zigbee技术飞速进展的时期。Zigbee技术在我国的应用状况

尽管,国内不少人已经开头关注Zigbee这们新技术,而且也有不少单位开头涉足Zigbee技术的开发工作,然而,由于Zigbee本身是一种新的系统集成技术,应用软件的开发必需和网络传输,射频技术和底层软硬件掌握技术结合在一起。因而深入理解这个来自国外的新技术,再组织一个在这几个方面都有丰富阅历的配套的队伍,本身就不是一件简单的事情,因而,到目前为止,国内目前除了成都西谷曙光数字技术有限公司,真正将Zigbee技术开发成产品,并胜利地用于解决几个领域的实际生产问题而外,尚未见到其它报道。Zigbee和现有移动网(GPRS,CDMA-1X)的比拟

1.无网络使用费:使用移动网需要长期支付网络使用费,而且是按节点终端的数量计算的,而Zigbee没有这笔费用;

2.设备投入低:使用移动网需要购置移动终端设备,每个终端的价格在人民币1000元上下,而使用Zigbee网络,不仅Zigbee网络节点模块(相当于基站)费用每只人民币不到1000元,而且,主要使用的网络子节点(相当于手机)的价格还要低得多;

3.通信更牢靠:由于现有移动网主要是为手机通信而设计的,尽管CDMA-1X和GPRS可以进展数据通信,但实践发觉,不仅通信数率比设计速率低许多,而且数据通信的牢靠信也存在肯定的问题。而Zigbee网络则是特地为掌握数据的传输而设计的,因而掌握数据的传输具有相当的保证。

4.高度的敏捷性和低本钱:首先,通过使用掩盖距离不同,功能不同的Zigbee网络节点,以及其它非Zigbee系统的低本钱的无线收发模块,建立起一个Zigbee局部自动化掌握网,(这个网络可以是星型,树状,网状及其共同组成的复合网构造)再通过互联网或移动网与远端的计算机相连,从而实现低本钱,高效率的工业自动化遥测遥控;

5.比起现有的移动网来,尽管Zigbee仅仅只是一个局域网,掩盖区域有限,但它却可以与现有的移动网,互联网和其它通信网络相连接,将很多Zigbee局域网相互连成为一个整体。有效的解决移动网的盲区掩盖问题:我们知道,现有移动网络在很多地方存在盲区,特殊是铁路,大路,油田,矿山等野外,更是如此。而增加一个移动基站或直放站的费用是相当可观的,此时使用Zigbee网络进展盲区掩盖不仅经济有效,而且往往是现在唯一可行手段。Zigbee与现有数传电台的比拟

1.牢靠性高:由于Zigbee模块的集成度远比一般数传电台高,分别元器件少,因而牢靠性更高;

2.使用便利安全:由于集成度高,比起一般数传电台来,Zigbee收法模块体积可以做得很小,而且功耗低,例如成都西谷公司远距离传输模块(2-5公里),最大放射电流比一个CDMA手机还要小很多,因而很简单集成或直接安放在到设备之中,不仅使用便利,而且在户外使用时,不简单受到破坏;

3.抗干扰力强,保密性好,误码率低:Zigbee收发模块使用的是2.4G直序扩频技术,比起一般FSK,ASK和跳频的数传电台来,具有更好的抗干扰力量,和更远的传输距离;参阅我们网站中有关CDMA直序扩频技术的优越性争论,和Cypress公司有关试验报道。

4.免费频段:Zigbee使用的是免费频段,而很多数传电台所使用的频段不仅需要申请,而且每年都需要向国家无委会交纳相当的频率使用费。

5.价格低:Zigbee数传模块的价格只有具有类似功能的数传电台的几分之一;(2.4G,250kps,3-5公里距离DSSS数传模块每只不到200元人民币)

供应低本钱,高牢靠性的无线数传互联网平台(包括软件和硬件),以及相关技术支持,以满意不同客户的详细需要,就是我们的效劳宗旨。

学习Zstack之1

Zstack状况:

本人采纳的是TI的Zstack1.4.3协议,据说这个需要IAR7.30B及以上版本,而目前市面上又没有破解,所以用的人很少,这也是我的时机!呵呵!(傻笑有点多,关键是WORD里没有表情符号,不能正常表达我此时的心情!)

正式开头:

开头之前在说一句:从TI网站上下载的Zstack的方法就不介绍了。否则就是从-1开头了而不是从0开头了-----------------我是这么觉得的!

第一步:安装Zstack

从TI官方网站上下载的Zstack为:swrc072c.zip,我想这个压缩包大家都熟悉。解压之后为:ZStack-CC2430-1.4.3.exe文件。这个安装文件大家都会了。默认安装路径为:C:\\TexasInstruments\\ZStack-1.4.3。安装之后在C:\\TexasInstruments\\ZStack-1.4.3名目下有各PDF文档为:GettingStartedGuideCC2430.pdf,不用多说,这个确定是要看的。既然把它放到这么前面,说明它是入门中的入门文档。下面就简洁介绍下这个文档:

1、介绍了安装ZStack-CC2430-1.4.3.exe需要的硬件软件条件:需要电脑、操作系统为Windows201*或WindowsXP。至于更高或更低版本的本人没有尝试。2、讲了安装流程。这个有点多余了,这年月哪个有电脑的没有安装上百上千次的软件啊?但是需要强调的是安装路径----默认就好!3、接下来就是让我们看的第一个文档为:

Start->Programs->TexasInstruments->ZStack-1.4.3->Z-StackUser’sGuide,既然让我看我就来看看这个文档!!

其次步:Z-Stack用户指导

这个文档的更新时间为:201*年12月21日----应当还是比拟新的版本。由于本人英文的却有限,就不翻译了,扫瞄一遍,把也许意思说下就可以了:1、介绍

1.1、适用范围

本文档适用于CC2430ZigBee开发板----CC2430ZDK。2、产品包描述(TI供应的CC2430ZDK工具包)2.1、安装包内容

这个就是上面提到的的ZStack-CC2430-1.4.3.exe安装之后的全部内容了。说白了就是包含Zstack开发所需要的全部软件和文档资料等。2.2、开发板介绍

两块SmartRF04EB评估版,每个都可以用于CC2430EM评估模块。如图1-1所示:

Figure1:ChipconSmartRF04EBEvaluationBoardwithCC2430EM5块CC2430DB评估板,如图1-2所示:

Figure2:ChipconCC2430DBDevelopmentBoard

10个SOC_BB评估板,每个都可以用于CC2430EM或CC2431EM。如图1-3所示:

Figure3:ChipconSOC_BBBatteryBoard2.3、电缆

也就是包含开发包所需要的电缆,如RS232串口线,USB线等等附属配件。3、安装配置3.1、主机配置

一台个人计算机----也就是电脑哈。我想玩嵌入式的应当都有,而现今不过时的配置就可以:下面是最低配置.NET1.1架构WindowsXPServicePack1(i假如是WindowsXP)1个串口(也就是RS232接口)s1USB接口

个人认为要求已经相当低了,假如你的电脑没有这配置,个人剧烈建议立刻扔掉!不过如今笔记本电脑很少有串口的,所以建议使用台式电脑,而且装机的时候肯定要把串口引出,否则就比拟麻烦了!3.2、目标板需求

其实也是开发环境需求---IAREW8051。目前需要的版本为7.30B及以上。要求还是比拟高的,由于目前这个版本没有破解的。但是在上有30天评估版下载。这个版本使用肯定要当心,由于假如30天之后仅仅是卸载IAR重新安装是没有用的,一般最笨的方法是重新安装操作系统。解决这个问题最好的方法就是买正版,呵呵,我想绝大多数像我这样的中国人都不会买的。除此之外最好的方法就是破解,但是目前这个破解极少,都是需要收费的,而且都是国外网站才有,所以我们就只好期望中国的高人抓紧破解并公开了!固然其他解决方法就相对来说许多了,比方安装后弄个复原点什么的;或者安装后我不停地使用(每天24小时),30天之后我觉得你也学会了,就不用IAR这个版本了,说不定就移植到低版本上去了;等等类似之法我觉得都可以的。本人采纳的是本方法中相比照较聪慧的,也是一位高人告知我的:装个虚拟操作系统,在虚拟操作系统下时间可以随时更改,让它始终停留在某个时间,主要30天的试用就比拟慢长了,只要你不要遗忘改那时间。4、产品安装过程4.1、安装Z-Stack

这个也就是安装ZStack-CC2430-1.4.3.exe的过程。4.2、IAR安装

一般来说安装选择默认路径,但是自定义路径也不会出问题的。留意IAR版本7.30B及以上版本才可以运行1.4.3协议。4.3、设备IEEE地址

每个CC2430DB,CC2430EM,和CC2431EM都已经排列了一个唯一的64位物理地址(IEEE地址),这个地址已经写到了CC2430内部FLASH里面,在CC2430DB,CC2430EM,和CC2431EM板的底部有这个地址标签。

这个地址被写入到FLASH的0x1FFF8地址中,留意这个地址也可以更改的,通过些FLASH软件,一般0xFFFFFFFFFFFFFFFF地址被认为是无效地址。5、配置并试用Z-Stack5.1、配置Z-Stack

这个详见5.3节。5.2、规律类型

这里主要是介绍了ZIGBEE协议中的三种设备类型:

ZigBee协调者(ZC):这个设备被配置为初始化并建立一个PAN网络

ZigBee路由器(ZR):该设备被配置为参加一个存在的网络,可以参加一个协调求或路由器,然后允许其他设备参加它,在网络中路有数据信息。

ZigBee终端节点(ZED):该设备被配置为参加一个存在的网络,可以参加一个协调求或路由器。

5.3、建立样品应用设备:SampleApp

根本上就是采纳SampleApp应用中的Demo例子来演示整个流程,就是采纳一个协调器和一个或多个路由器来形成一个ZigBee网络演示。在该例子中主要通过SmartRF04EB板上的某些跳线来完成设备类型的选型,固然这个方法在程序中是需要推断哪个按键被拉低或拉高,对于做个设计的来说应当是相当好理解的。

申明:由于本人很穷,所以没钱买TI原装开发包,固然也就没有上面提到的硬件,本人采纳的是某家公司(为了避开广告,这里就不说明白)的硬件系统。5.4、建立一个SampleLight协调器设备

至于提到的硬件连接这里一律省略。

无疑:首先要翻开对应工程,如图1-4所示:

图1-4

在工作窗口中选择DemoEB,如图1-5所示:图1-5

然后选择工程菜单(Project)下的全部编译(RebuildAll)选项,如图1-6所示:

图1-6

然后选择工程菜单(Project)下的调试(Debug)选项,如图1-7所示:

图1-7

下载完之后就可以退出调试状态,通过选中调试菜单下的停顿调试选项,如图1-8所示:

图1-8

根据此种方法下载至少两个CC2430EM模块,就可以进展Demo演示了。6、Z-Stack示范

略至于具体的示范流程,这里先不说了,由于本人采纳的硬件与原装有点差异,即使根据这个方法下载仍旧不能演示,由于我这个不能用跳线来选择设备类型。

所以我必需进入程序把跳线推断程序进展简洁必要的修改才能演示。该文档介绍的演示结果及现象都是基于CHIPCON原厂评估板。7.PanID和通道(Channel)选择

ZigBee协议标准规定,一个14位的个域网标志符(PANID)来标识唯一的一个网络。Z-Stack可以用两种方式由用户自己选择其PANID,当ZDAPP_CONFIG_PAN_ID值设置不为0xFFFF时,那么设备建立或参加网络的PANID由ZDAPP_CONFIG_PAN_ID指定;假如设置ZDAPP_CONFIG_PAN_ID为0xFFFF;那么设备就将建立或参加它发觉网络中的—最好‖的网络。关于这里提到的—最好‖的网络,我觉得可能是有些参数评估,只不过这里没有具体的介绍,在后续文档中应当有介绍的。

在2.4G频段上,IEEE802.15.4/ZIGBEE标准规定了16各频道。用户可以通过选择DEFAULT_CHANLIST不同的值可以选择不同的频道,其频道如图1-9所示。改协议默认频道为0xB及0x00000800。

图1-9

DEFAULT_CHANLIST和ZDAPP_CONFIG_PAN_ID都作为IARIDE中的编译选项可以进展设置,在应用文件中的…\\Projects\\Tools\\CC2430DB名目下的f8wConfig.cfg文件中有相应设置,如图1-10所示。

图1-10

学习Zstack之2

上节根本上初步熟悉了Zstack的一些状况,今日连续我的学习,翻开Sample例子看看,毕竟ZIGBEE是怎么回事。

毫无疑问:假如是第一次翻开这个例子工程,确定很模糊,由于此时我模糊了。对图2-1我简直是相当模糊。图2-1

这么多文件夹,翻开之后又有那么多文件,从何看起?不要焦急,特殊是有些人拿到之后,啥都不知道的人第一个问题就是:我要实现XXX,在哪修改或者在哪添加我的函数呢?但凡我遇到这样的客户,我就可以确定他技术部咋的。就连我这个外行都知道,不把这些弄明白,就是实现XXX只需要修改一个字母,那也不知道在哪改啊?所以我不急,但是我也理解许多客户,由于有时候工程催的比拟急,究竟老板都是外行嘛!

两条路:1就是先看主函数,2就是看看TI供应例子说明文档没有。我这里先看看主函数再说哈!由于我就知道从主函数看起.

没方法也许每个文件夹找啊,主函数的特征还是比拟明明显的,见图2-2所示:

图2-2

下面把主函数复制过来简洁看下:ZSEGintmain(void){

//Turnoffinterrupts------------关闭中断osal_int_disable(INTS_ALL);

//InitializeHAL-----------初始化HAL,关于HAL是什么我想后面会有介绍的。HAL_BOARD_INIT();

//Makesuresupplyvoltageishighenoughtorun----电压检测,最好是能保证芯片能正常工作的电压zmain_vdd_check();

//Initializestackmemory-------------初始化stack存储区zmain_ram_init();//InitializeboardI/O------------初始化板载IOInitBoard(OB_COLD);

//InitialzeHALdrivers-------------初始化HAL驱动HalDriverInit();

//InitializeNVSystem--------------初始化NV系统,NV是什么后面我想也会有介绍的

osal_nv_init(NULL);

//Determinetheextendedaddress------------确定扩展地址(64位IEEE/物理地址)zmain_ext_addr();

//InitializebasicNVitems----------------初始化根本NV条目zgInit();

//InitializetheMAC----------------初始化MACZMacInit();

#ifndefNONWK

//SincetheAFisn“tatask,callit“sinitializationroutineafInit();#endif

//Initializetheoperatingsystem----------初始化操作系统,看样子这里面还有OS,麻烦了……..!osal_init_system();

//Allowinterrupts-------------允许中断osal_int_enable(INTS_ALL);

//Finalboardinitialization------------------最终的版在初始化InitBoard(OB_READY);

//Displayinformationaboutthisdevice---------------显示设备信息zmain_dev_info();

/*DisplaythedeviceinfoontheLCD*/------------液晶支持显示#ifdefLCD_SUPPORTEDzmain_lcd_init();#endif

osal_start_system();//NoReturnfromhere-------------------这里没有返回,也许是进入OS了。}//main()

可以看到根本上都是初始化函数,由于函数名称都根本上带了init字样的,呵呵,个人觉得TI的变成习惯比我好,一看名称就知道也许功能了。所以这里也奉劝各位像我这样菜鸟级的初学者,一开头肯定就要养成标准化编程的习惯,据说这样维护以及以后升级或者移植兼容性都比拟好。我就先不管各个初始化函数是怎么实现的,我先看看各个功能是什么,现把握整体功能在细化,我觉得这样的学习方法比拟好,由于代码是在太多了,从一开头就逐句看,我敢保证没几个人有急躁看完看明白!

幸好每个初始化函数都有一句说明,虽然是英文的,但是理解起来一点都不难的。关于每个函数的功能我就直接写在上面的程序里面,节约纸张哈!

一句话:主函数的功能就是初始化!

主函数看完了又开头模糊了,又从何看起呢?在无从下手之际,只有去寻求TI说明文档的帮忙了。上节不是漏掉了内容,是关于演示结果的,这里做上补充,怕由于缺调一点后面遇到什么不理解的就惨了!Sample例子演示演示现象:

1、熟悉硬件------------按键和LED

上节提到了EM和DB两个板子,其硬件是不一样的。按键EM就有5各SW1~SW5,而DB只有1各方向键,但是他们有个对应关系,如图2-3所示.

图2-3

LED数量和颜色也不一样,EM有四个LED,如图2-4;而DB只有两个,如图2-5。

如图2-4

如图2-5

关于上面几个图2-4/5中消失的LEDx实际上是程序中消失的关键字。2、初始化64位IEEE地址

实际上在主函数中有这么个初始化函数的:zmain_ext_addr()。这里说假如地址复位为0xFFFFFFFFFFFFFFFF的话,那么就会不停的闪耀LED1,始终等到按键SW5按下后程序才能连续运行,意思就是说按下SW5后就把无效的地址初始化为有效地物理地址了,这个应当是程序上实现的,那么就来看看对应的程序zmain_ext_addr。

/*********************************************************************

*@fnzmain_ext_addr

*@briefMakesextendedaddressifnoneexists.确定扩展地址是有效的*@returnnone

*********************************************************************/

staticZSEGvoidzmain_ext_addr(void){

uint8i;uint8led;uint8tmp;uint8*xad;uint16AtoD;

//InitializeextendedaddressinNV初始化NV里的扩载地址

osal_nv_item_init(ZCD_NV_EXTADDR,Z_EXTADDR_LEN,NULL);

osal_nv_read(ZCD_NV_EXTADDR,0,Z_EXTADDR_LEN,//Checkforuninitializedvalue(erasedEEPROM=0xFF)检查是否为无效值(地址)xad=(uint8*)for(i=0;ihdr.event)

这里是推断SYS_EVENT_MSG大事类型,不同的SYS_EVENT_MSG类型需要不同的处理。caseKEY_CHANGE:

SampleApp_HandleKeys(((keyChange_t*)MSGpkt)->state,((keyChange_t*)MSGpkt)->keys);break;

比方这里推断是否是键盘大事,假如键盘大事就调用键盘处理函数。

假如一个OSAL任务已经被登记组侧,那么任何键盘大事都将承受一个KEY_CHANGE大事信息。可能有如下几种方式得到键盘大事信息

1)、HAL检测到键盘按下(中断或者查询检测)2)、HAL的OSAL任务检测到一个键盘状态转变调用回叫函数产生3)、OSAL键盘转变回叫函数发送一个OSAL系统大事信息(KEY_CHANGE)。

caseAF_DATA_CONFIRM_CMD:

//ThestatusisofZStatus_ttype[definedinZComDef.h]//ThemessagefieldsaredefinedinAF.h

afDataConfirm=(afDataConfirm_t*)MSGpkt;sentEP=afDataConfirm->endpoint;sentStatus=afDataConfirm->hdr.status;sentTransID=afDataConfirm->transID;

任何AF_DataRequest()数据恳求函数调用后,都通过AF_DATA_CONFIRM_CMD系统大事信息回叫返回胜利Zsuccess。caseZDO_STATE_CHANGE:

SampleApp_NwkState=(devStates_t)(MSGpkt->hdr.status);if((SampleApp_NwkState==DEV_ZB_COORD)||(SampleApp_NwkState==DEV_ROUTER)

||(SampleApp_NwkState==DEV_END_DEVICE)){

//UpdatetheLCD’snetworkindicator

//Startsending“the“messageinaregularinterval.

osal_start_timer(SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT);}

break;

这里就是前面介绍的设备状态转变大事处理了。只要网络状态发生转变,那么通过ZDO_STATE_CHANGE大事通知全部的任务。留意:在这个例子中,一旦设备胜利参加网络,是通过定时运行的方式运行的。一旦网络状态为参加‖JOINED‖,那么它可能不需要任何的认为操作就能绑定其他设备,由于设置为自动发觉并绑定的。//Releasethememory

osal_msg_deallocate((uint8*)MSGpkt);释放存储空间。

if(events//Setuptosendmessageagain

osal_start_timer(SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_MSG_TIMEOUT);//returnunprocessedevents

return(events^SAMPLEAPP_SEND_PERIODIC_MSG_EVT);}

这里检测大事是否为周期发送信息大事。

在SampleApp.h中定义了:

#defineSAMPLEAPP_SEND_PERIODIC_MSG_EVT0x0001

在这个应用中,调用了osal_start_timer()函数来定时产生发送周期信息大事。而定时器的运行是设备一旦参加网络就不停的在运行。从上面可以看到,用函数SampleApp_SendPeriodicMessage()发送周期信息,而用函数osal_start_timer(SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_MSG_TIMEOUT)来连续运行定时器定时发送这个周期信息。关于这个osal_start_timer可以多了解下,第一个参数SAMPLEAPP_SEND_PERIODIC_MSG_EVT四信息时间,也就是大事到了产生一个什么大事。其次各参数SAMPLEAPP_SEND_MSG_TIMEOUT是需要定时的时间,这里就是发送周期信息的时间周期。1.3、消息流程

通过OSAL定时器,这个应用定时发送一个周期信息:voidSampleApp_SendPeriodicMessage(void){

afAddrType_tdstAddr;

dstAddr.addrMode=afAddrBroadcast;

dstAddr.addr.shortAddr=0xFFFF;//播送发送dstAddr.endpoint=SAMPLEAPP_ENDPOINT;

if(AF_DataRequest(break;

这里表示收到某个信息,然后在里面调用了收到信息的信息处理函数SampleApp_MessageMSGCB(MSGpkt)。

voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){

switch(pkt->clusterId){

caseSAMPLEAPP_PERIODIC_CLUSTERID:

//DisplayandincrementacounterontheLCDintheperiodicspacebreak;

caseSAMPLEAPP_FLASH_CLUSTERID:

flashTime=BUILD_UINT16(pkt->cmd.Data[1],pkt->cmd.Data[2]);HalLedBlink(HAL_LED_4,4,50,(flashTime/4));break;}}

这里推断了两种信息:周期信息闪灯信息

不同的信息就相当于收到了不同的命令,然后依据不同的命令做出了不同的处理。是个会写程序都明白!!!!

到这里,我就根本上把这个应用文档看完了,至于理解了多少我模糊,理解正确了多少我更加模糊,反正我根据我自己的方式理解了!

学Z-Stack之5

前面虽然写了不少,但是回头看看大多都是废话,不过也没方法,没有废话的润色就太枯燥了,太技术化了,这个不是我的本意。不知道前面写的怎么样,技术含量确定是不高的。这个本人是相当清晰,但是我最大的期望就是错误不要太多!

突然想起来前面有个问题没有解决,我想许多人看到那里都很郁闷的。就是设备类型的选择,在TI原装系统上是通过板载跳线来选择的,但是我这里不是采纳原装,那么就需要通过程序来修改其设备类型,然后编译下载。详细程序段如下:

#ifdefined(SOFT_START)if(readCoordinatorJumper())

zgDeviceLogicalType=ZG_DEVICETYPE_COORDINATOR;else

zgDeviceLogicalType=ZG_DEVICETYPE_ROUTER;#endif//SOFT_START

这里有个条件编译,其条件编译设置如图5-1。图5-1

既然这里设置了SOFT_START,那么上段程序就要被编译。那么第一句程序if(readCoordinatorJumper())

就是检测跳线,其实略微知道编程的都了解怎么修改了,哈哈!屏蔽:

if(readCoordinatorJumper())

zgDeviceLogicalType=ZG_DEVICETYPE_COORDINATOR;else

这3句,那么就只剩下:zgDeviceLogicalType=ZG_DEVICETYPE_ROUTER;了

那么编译自然该设备就为路由器了。简洁吧!!!!??!协调器我就不想多说怎么做了哈!!!!!!!!!!!!

还有一个问题需要说下,就是Ti原装的EM板子用到了LCD,所以在程序中可能在某个地方要对LCD初始化,那么假如没有液晶的板子或者与TI那个不完全一样的LCD就有可能运行不走,通俗的解决方法是制止LCD初始化等操作,Ti在这个方面做的很人性化,制止LCD功能没有必要在程序中找到LCD相关程序删除,而是仅仅需要通过条件编译来制止。显得相当简洁,如5-2图就是制止LCD的条件编译。图5-2

解决这个问题后一般都能够运行程序了。也就是说到这里假如还把Demo程序运行不起来的话,那就证明我全部的东西都白写了,反正我到这里我的Demo程序已经运行如飞了。

那么接下来就是来看看Z-Stack详细的一些东西了,我准备先这样看起:1、Z-Stack的构造,由于翻开Z-Stack的名目可以看出还是比拟简单的,只有比拟清晰了解其构造之后呢,在程序运行或者修改中才能顺当的找到自己想要的局部。

2、Z-Stack的应用建立。就是怎么在TI供应的协议(裸协议)上建立一个应用。这个层次要求就比拟高了,我初步的设想是盼望能分析完SAMPLE例子的应用就能自己建立,而不需要太多的去了解下层的协议。但是往往盼望与现实是有偏差的,走一步算一步了。

3、了解硬件相关设定、驱动。也就是说把例子跑通了,究竟是基于TI的硬件,或者说基于开发系统的硬件,假如要做自己的应用,那么必需要开发自己的硬件。怎么把自己的硬件驱动参加协议,这个我想也是需要解决的问题。

4、接下来可能就要深入分析协议了,这个目前我还不清晰从什么地方看起,由于究竟对ZIGBEE这个协议本身就不太了解,但是在学习过程中应当会渐渐对它有熟悉。所以到了这一步的时候说不定我就已经摸索出一条方法了---究竟俺是相当的聪慧嘛!

5、需要解决的问题,需要了解的东西许多,对于不太了解这个东西的我来说,不行能特别有规划并统筹安排这些事,走弯路是必定的,但是我全都认为走弯路才是阅历的积存!学习Z-Stack之6

--------------Z-Stack指导

首先来看看Z-Stack的构造。

第一次翻开工程印象最深刻的就是左边一排文件夹,如图6-1所示。

其实这个还是很简单理解的:

APP(ApplicationProgramming):应用层名目,这是用户创立各种不同工程的区域,在这个名目中包含了应用层的内容和这个工程的主要内容,在协议栈里面一般是以操作系统的任务实现的。

HAL(Hardware(H/W)AbstractionLayer):硬件层名目,包含有与硬件相关的配置和驱动及操作函数。

MAC:MAC层名目,包含了MAC层的参数配置文件及其MAC的LIB库的函数接口文件。

MT(MonitorTest):实现通过串口可控各层,于各层进展直接交互。NWK(ZigBeeNetworkLayer):网络层名目,含网络层配置参数文件及网络层库的函数接口文件,APS层库的函数接口

OSAL(OperatingSystem(OS)AbstractionLayer):协议栈的操作系统。Profile:AF(Applicationwork)层名目,包含AF层处理函数文件。Security:安全层名目,安全层处理函数,比方加密函数等。

Services:地址处理函数名目,包括着地址模式的定义及地址处理函数。Tools:工程配置名目,包括空间划分及ZStack相关配置信息。ZDO(ZigBeeDeviceObjects):ZDO名目。

ZMac:MAC层名目,包括MAC层参数配置及MAC层LIB库函数回调处理函数。ZMain:主函数名目,包括入口函数及硬件配置文件。Output:输出文件名目,这个EW8051IDE自动生成的。

那么知道各个文件夹也许是什么功能,分布在ZIGBEE的哪一层,那么在以后的工作中无论是查询某些功能函数还是修改某些功能函数,甚至是添加或删除某些功能函数就能顺当的找到在什么地方了,固然要想真的顺当还需要花更多的时间熟识这个协议栈了!

了解Z-Stack构造后那么就能看看它的功能。

不用问,这个是针对ZIGBEE无线网络写的协议栈,呵呵!那么就要先也许了解下ZIGBEE这个技术。我这里就不介绍理论了,就从Z-Stack实际的角度介绍些有用的概念。

1、Zigbee网络中的节点

在ZB网络中,每个节点都有指定的配置参数,从而确定其设备类型,不同的设备类型,在网络中有着不一样网络任务。在属于多跳网络的ZB网络中,两个节点需要完成数据传输,可能需要经过其他中间节点的帮助,所以节点的类型参数配置是特别必要的。对每个节点有两个任务:

(i)执行指定的网络功能函数

(ii)配置确定的参数到指定的值。

网络功能的设置确定了该节点的类型,参数配置和指定的值确定了堆栈的模式。

节点类型

在ZB中,设备类型分为三类:协调器,路由器和终端设备。图6-2就是这三种设备类型组成的一个典型网络。

其中黑色节点为协调器红色节点为路由器白色节点为终端设备

那么这个就是一个典型的网状网络MESH。

协调器

协调器是一个ZB网络的第一个开头的设备,或者是一个ZB网络的启动或建立网络的设备。协调器节点选择一个信道和网络标志符(也叫PANID),然后开头建立一个网络。协调器设备在网络中还可以有其他作用,比方建立安全机制、网络中的绑定的建立等等。留意:协调器主要的作用是建立一个网络和配置该网络的性质参数。一旦这些完成,该协调器就犹如一个路由器,网络中的其他操作并不依靠该协调器,由于ZB是分布式网络。

路由器

一个路由器的功能有(1)作为一般设备参加网络(2)多跳路由(3)帮助其它的子节点完成通信。

一般来说,路由器需要始终处于工作状态,所以需要主干线供电(区分于电池供电)。但是在某指定的网络构造中可以采纳电池供电,如—串树型‖网络模式中,允许路由器周期的运行操作,所以可以采纳电池供电。

终端设备

为了维持网络最根本的运行,对于终端设备没有指定的责任。也就是说,在一个根本网络中,终端设备没有必不行缺少性。所以它可以依据自己功能需要休眠或唤醒,因此为电池供电设备。一般来说,该设备需要的内存较少(特殊是内部RAM)

堆栈模式(StackProfile)

需要被配置为指定值的堆栈参数,连同这些值被称为堆栈模式。这些堆栈模式参数被ZB联盟定义指定。在同一个网络中的设备必需符合同一个堆栈模式(同一个网络中全部设备的堆栈模式配置参数必需全都)。

为了互操作性,ZB联盟为06协议栈定义了一个堆栈模式,全部的设备只要遵循该模式的参数配置,即使在不同厂商买的不同设备同样可以形成网络。

假如应用开发者转变了这些参数配置,那么他的产品将不能与遵循ZB联盟定义模式的产品组成网络,也就是说该开发者开发的产品具有特别性,我们称之为—关闭的网络‖,也就是说它的设备只有在自己的产品中使用,不能与其他产品通信。

该协议模式标志符在设备通信的信标传输中被匹配,假如不匹配,那么该设备将不能参加网络。—关闭网络‖的堆栈模式有一个0ID,而06协议栈模式有一个1ID。该堆栈模式被配置在nwk_globals.h文件中的STACK_PROFILE_ID参数。如:

#defineSTACK_PROFILE_IDHOME_CONTROLS。

2、Zigbee网络中的地址地址类型

ZB设备有两种地址类型,一个是64位IEEE地址(也可以叫MAC地址或扩展地址),一个是16位网络地址(也可以叫规律地址或短地址)。

64位地址是全球唯一的,作为设备(产品)的终生地址被安排。它通常被开发商或安装的时候被指定。该地址由IEEE安排指定,该地址的信息和获得该地址的方法见:

16位地址在设备参加网络的时候被安排,由这个网络自动安排。该地址只能用与本网络中,标志不同的设备间传递信息。

网络地址安排

ZB分布式网络中地址安排是唯一的。为了不使网络中设备混乱,为每个设备指定确定的地址是特别必要的。

在安排地址之前,一些参数必需被设置:MAX_DEPTH,MAX_ROUTERS和MAX_CHILDREN。

这些参数都是ZB协议模式的一局部,在06ZS模式中这些参数设置为:(MAX_DEPTH=5,MAX_CHILDREN=20,MAX_ROUTERS=6).

参数设置

MAX_DEPTH打算了网络的最大深度。协调器的深度是0,它的子设备的深度是1,他们的子设备的深度是2,依次类推。所以MAX_DEPTH参数限制了网络物理上的—长度‖

MAX_CHILDREN参数打算了一个路由器(或一个协调器)能承载子设备的最大数目。MAX_ROUTERS参数打算了一个路由器(或一个协调器)能承载路由器的最大数目。这个参数实际上是MAX_CHILDREN参数的一个子集,剩下的(MAX_CHILDREN-MAX_ROUTERS)地址空间属于终端设备。

开发者自定义

假如开发者想转变这些值,那么需要做如下几步:

首先得保证这些参数新的值是合法的。既然整个地址空间被限制在2-16内,那么这些参数的大小就已经有了限制。分布在release(在文件夹Projects\\zstack\\Tools中)的Cskip.xls文件能校验这些参数是否合法。在键入这些参数的值后也许这个电子表格,假如非法,一个错误信息将给出。

之后选择合法的值,开发者需要确保不使用标准的协议栈模式,而用指定的协议栈模式代替(用NETWORK_SPECIFIC替换STACK_PROFILE_ID当前的值)。然后在—nwk_globals.h‖文件中的MAX_DEPTH参数依据需要设置为适当的值。

另外,nwk_globals.c文件中排列的CskipChldrn和CskipRtrs必需被设置,这些排列是

z-stack中的寻址

为了在网络中发送数据到一个设备,应用层一般用AF_DataRequest()函数。而被发送的目的设备的地址类型afAddrType_t被定义在—ZComDef.h‖中:typedefstruct{union{

uint16shortAddr;ZLongAddr_textAddr;}addr;

byteaddrMode;}zAddrType_t;

地址模式参数

留意:除这个网络地址之外,地址模式参数也需要被指定。目的地址模式可能是如下值之一(AF地址模式被定义在—AF.h‖中):typedefenum{

afAddrNotPresent=AddrNotPresent,afAddr16Bit=Addr16Bit,afAddrGroup=AddrGroup,

afAddrBroadcast=AddrBroadcast}afAddrMode_t;

地址模式参数是需要的,由于在ZB中,数据包能被点传输、多点传输或者播送传输。点传输被发送到单个设备,多点传输肯定发送到一组设备,播送传输一般被发送到网络中的全部设备。如下是更具体的说明。

点到传输(Unicast)

这是标准地址模式,被用于发送一个数据包到网络中单个已知地址的设备。这个addrMode参数被设置为Addr16Bit,目的网络地址在数据包中一同被发送。

间接寻址

数据包中的最终目的地址不识别的时候使用。该模式被AddrNotPresent设置,而且目的地址没有被指定。代替目的地址的是:一个存储在发送设备协议栈的—绑定表格‖,该表格中有被绑定设备的地址。这个特性被调用是源于绑定。(看后面关于绑定局部)当被发送的信息包下载到协议栈时,从这个绑定表格中查找使用的目的地址。然后该信息包被有规章的处理为点对点数据包。假如有多个(大于1)目的地址在绑定表格中被发觉,那么该数据包将被拷贝成对应的份数分别发送给他们。

在(ZigBee04)版本之前,在协调器中有一个存储绑定表格的选项。因此,发送设备发送数据包到这个协调器,然后协调器在它的绑定表格中查找最终的目的地址,对数据包进展在一次发送。该选项特性在协调器绑定被调用

播送传输

该模式在应用层想发送一个数据包到全部网络中的全部设备时被使用。该地址模式被AddrBroadcast被设置,目的地址被设置为以下值之一:

NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)-信息将被发送到网络中的全部设备(包括休眠的设备)。对于休眠的设备,这个信息将被保持在它的父节点,直到该休眠设备获得该信息或者该信息时间溢出(在f8wConfig.cfg中的NWK_INDIRECT_MSG_TIMEOUT选项)。

NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)该信息将被发送到网络中有接收器并处于IDLE(RXONWHENIDLE)状态下的全部设备。也就是说,除了休眠模式设备的全部设备。

NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)该信息被发送到全部路由器(包括协调器)。

组地址

该模式用于应用层想发送一个数据包到一个设备组的时候。该地址模式被afAddrGroup设置这个组标志符。

用该特性之前,在网络中,组不得不被定义[看ZStackAPI文档中的]aps_AddGroup()留意:组能与间接寻址一起结合使用。该目的地址在绑定表格中发觉,可以作为点对点或一个组地址。也要留意播送地址可以当作是组被提前设置,一个简洁的组寻址的特例,。例子代码对于一个设备添加它自己到一个组标志符1:aps_Group_tgroup;

//Assignyourselftogroup1group.ID=0x0001;

[0]=0;//Thiscouldbeahumanreadablestringaps_AddGroup(SAMPLEAPP_ENDPOINT,

重要设备地址

一个应用可以能想知道它自身和父节点的地址,用下面的函数可以得到设备的地址(被定义在ZStackAPI文档中):

NLME_GetShortAddr()返回该设备的16位网络地址NLME_GetExtAddr()返回该设备的64位扩展地址.

用下面的函数可以得到该设备的父节点的地址(被定义在ZStackAPI文档中)。留意该函数在协调器中不被涉及到,但是被设备父节点代替(MAC协调器):

NLME_GetCoordShortAddr()returnsthisdevice’sparent’s16bitshortaddress.NLME_GetCoordExtAddr()returnsthisdevice’sparent’s64bitextendedaddress.先介绍这两个概念:节点和地址。其余的就改天连续!

学习Z-Stack之7--------------Z-Stack指导2

上节介绍了很大一局部Z-Stack的根底学问,这里接着忽悠。虽然说的不是很专业也不是很通俗,但是我尽力了,盼望有人能看明白!本人英文水平有限,翻译的不好请谅解!3、绑定

绑定是掌握信息从一个应用层到另一个应用层流淌的一种机制。在ZB06版本中,绑定机制在全部的设备中被执行。

绑定允许应用层发送信息不需要带目的地址,APS层确定目的地址从他的绑定表格中,然后在信息前端加上这个目的地址或组。

留意:在ZB1.0版本中,全部绑定条目存储在协调器中。现在全部绑定条目存储在发送数据的设备中。3.1绑定一个绑定表格

有三种方式建立一个绑定表格:

ZDO绑定恳求一个试运转工具能告知这个设备制作一个绑定报告。ZDO终端设备绑定恳求2设备能告知协调器他们想建立绑定表格报告。该协调器将使协调并在这两个设备上创立绑定表格条目

设备应用在设备上的应用能建立或治理一个绑定表格。

任何一个设备或应用能在网络中发送一个ZDO信息到另一个设备()建立一个绑定报告。这是调用绑定帮忙并且它将建立一个绑定条目为发送设备。3.1.1ZDO绑定恳求

通过调用函数ZDP_BindReq()发送一个绑定恳求。第一个参数(dstAddr)是绑定的源地址的短地址。这之前应当确定允许绑定,在ZDConfig.h文件中有参数[ZDO_BIND_UNBIND_REQUEST]允许绑定。能用同样的参数调用函数ZDP_UnbindReq()移除绑定。

目标设备将调用函数ZDApp_BindRsp()或ZDApp_UnbindRsp(),反应绑定或移除绑定的响应,返回其操作状态为ZDP_SUCCESS,ZDP_TABLE_FULL或ZDP_NOT_SUPPORTED.

3.1.2ZDO终端设备绑定恳求

该机制是用一个按钮按下或其他类似的动作来选择设备在指定时间内被绑定。在规定时间内,该终端设备绑定恳求信息被收集到协调器,并创立一个基于模式(profile)ID和串(cluster)ID的规定的绑定表格条目。默认的终端设备绑定超时时间(APS_DEFAULT_MAXBINDING_TIME)为16S(定义在nwk_globals.h中),但是能被转变发送绑定恳求

在全部的应用例子中有一个处理键盘大事的函数[例如在TransmitApp.c文件中的TransmitApp_HandleKeys()函数]。在该函数中,调用了函数ZDApp_SendEndDeviceBindReq()[在ZDApp.c中],它将收集应用的终端设备的全部信息并调用函数ZDP_EndDeviceBindReq()[ZDProfile.c],发送一个绑定信息到协调器。或者,在SampleLight和SampleSwitch例子中,直接调用ZDP_EndDeviceBindReq()函数就实现点亮/关闭灯的功能。接收绑定恳求

协调器将接收[ZDP_IncomingData()在ZDProfile.c]这些信息并分析处理[ZDO_ProcessEndDeviceBindReq()在ZDObject.c]这些信息并调用函数ZDApp_EndDeviceBindReqCB()[inZDApp.c],它将调用ZDO_MatchEndDeviceBind()[ZDObject.c]处理这个恳求

当协调器接收到2个匹配终端色后备的绑定恳求时,它将启动在绑定设备上创立源绑定条目的处理过程。该协调器有如下处理过程:解除绑定1.发送一个ZDO解除绑定恳求到第一个设备。终端设备绑定切换处理,所以解除绑定首先被发送到移除一个存在的绑定条目。

2.等待ZDO解除绑定响应,假如响应状态为ZDP_NO_ENTRY,发送一个ZDO绑定恳求,在源设备上制作一个绑定条目。假如该响应为ZDP_SUCCESS,为第一个设备连续到moveontotheclusterIDforthefirstdevice(theunbindremovedtheentrytoggle).

3.等待ZDO绑定响应.Whenreceived,moveontothenextclusterIDforthefirstdevice.

4.当第一个设备完成时,对其次个设备做同样的处理。

5.当其次个设备完成时,发送ZDO终端设备绑定响应信息到第一个和其次个设备

3.1.3设备应用绑定治理

在设备上其他进入绑定条目的方式是应用层治理绑定表格。意思是说,应用层将调用以下函数进入和移除绑定表格条目:bindAddEntry()增加绑定表格条目

bindRemoveEntry()从绑定表格中移除条目

bindRemoveClusterIdFromList()从一个存在的绑定表格工程中移除一个串ID。

bindAddClusterIdToList()向一个已经存在的绑定记录中增加一个群IDbindRemoveDev()删除全部地址引用的记录

bindRemoveSrcDev()删除全部源地址引用的记录bindUpdateAddr()将记录更新为另一个地址bindFindExisting()查找一个绑定表记录

bindIsClusterIdInList()在表记录中检查一个已经存在的群IDbindNumBoundTo()拥有一样地址(源或者目的)的记录的个数bindNumEntries()表中记录的个数bindCapacity()最多允许的记录个数bindWriteNV()在NV中更新表3.2配置源绑定

允许绑定源的编译选项REFLECTOR在f8wConfig.cfg文件中。在文件f8wConfig.cfg,中查看这两个绑定配置参数(NWK_MAX_BINDING_ENTRIES

//InitiateanEndDeviceBindRequestforthemandatoryendpointdstAddr.addrMode=Addr16Bit;

dstAddr.addr.shortAddr=0x0000;//Coordinator

ZDP_EndDeviceBindReq(}

很明显这里按键2(右键)是发送绑定恳求的命令。if(keys

//InitiateaMatchDeionRequest(ServiceDiscovery)dstAddr.addrMode=AddrBroadcast;

dstAddr.addr.shortAddr=NWK_BROADCAST_SHORTADDR;

ZDP_MatchDescReq(}

明显按键4(左)是初始化一个匹配描述符恳求,也就是发觉效劳,或者叫自动寻求匹配设备。这就不怪我按键有反映了!

而且在发送数据和接收数据处理函数发觉:voidGenericApp_SendTheMessage(void){

chartheMessageData[]=“HelloWorld“;

if(AF_DataRequest(#elifdefined(WIN32)

WPRINTSTR(pkt->cmd.Data);#endifbreak;}}

接收数据处理函数里竟然要通过液晶显示,本人这里的液晶临时没有移植过来,由于临时还不具备那个实力,怪不得看不到发送数据的状况!

这里本人就自作聪慧的把以前SampleApp例子里面的一句话加过来了:voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){

switch(pkt->clusterId){

caseGENERICAPP_CLUSTERID://“the“messageHalLedBlink(HAL_LED_4,4,50,(500));#ifdefined(LCD_SUPPORTED)

HalLcdWriteScreen((char*)pkt->cmd.Data,“rcvd“);#elifdefined(WIN32)

WPRINTSTR(pkt->cmd.Data);#endifbreak;}}

麽想到啊,这么一加竟然就有反响了,o(∩_∩)o…!我不愧是天才的接班人啊!其实这里很简洁的了,就是接收到数据后闪耀4下灯,间隔0.5S。由于从:if(events//Setuptosendmessageagain

osal_start_timerEx(GenericApp_TaskID,

GENERICAPP_SEND_MSG_EVT,

GENERICAPP_SEND_MSG_TIMEOUT);//returnunprocessedevents

r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论