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

zigbee学习笔记

zigbee学习笔记
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网络中通过自动路由的方式进行传输,从而保证了信息传输的可靠性。

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

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

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

高保密性:64位出厂编号和支持AES-128加密。

Zigbee的发展前景

Zigbee技术和RFID 技术在2004年就被列为当今世界发展最快,市场前景最广阔的十大最新技术中的两个。关于这方面的报道,你只需在百度,或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:\Texas Instruments\ZStack-1.4.3。安装之后在C:\Texas Instruments\ZStack-1.4.3目录下有各PDF文档为:Getting Started Guide CC2430.pdf,不用多说,这个肯定是要看的。既然把它放到这么前面,说明它是入门中的入门文档。下面就简单介绍下这个文档:

1、介绍了安装ZStack-CC2430-1.4.3.exe需要的硬件软件条件:需要电脑、操作系统为Windows 2000或Windows XP。至于更高或更低版本的本人没有尝试。

2、讲了安装流程。这个有点多余了,这年月哪个有电脑的没有安装上百上千次的软件啊?但是需要强调的是安装路径----默认就好!

3、接下来就是让我们看的第一个文档为:

Start->Programs->Texas Instruments->ZStack-1.4.3->Z-Stack User’s Guide,

既然让我看我就来看看这个文档!!

第二步:Z-Stack 用户指导

这个文档的更新时间为:2007年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所示:

Figure 1: Chipcon SmartRF04EB Evaluation Board with CC2430EM

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

Figure 2: Chipcon CC2430DB Development Board

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

Figure 3: Chipcon SOC_BB Battery Board

2.3、电缆

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

3.1、主机配置

一台个人计算机----也就是电脑哈。我想玩嵌入式的应该都有,而现今不过时的配置就可以:下面是最低配置

.NET 1.1 架构

Windows XP Service Pack 1 (i如果是Windows XP)

1个串口(也就是RS232接口)s

1 USB接口

个人认为要求已经相当低了,如果你的电脑没有这配置,个人强烈建议马上扔掉!不过如今笔记本电脑很少有串口的,所以建议使用台式电脑,而且装机的时候一定要把串口引出,否则就比较麻烦了!

3.2、目标板需求

其实也是开发环境需求--- IAR EW8051。目前需要的版本为7.30B及以上。要求还是比较高的,因为目前这个版本没有破解的。但是在https://www.doczj.com/doc/11678748.html,/上有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-Stack

5.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)下的全部编译(Rebuild All)选项,如图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位的个域网标志符(PAN ID)来标识唯一的一个网络。Z-Stack可以用两种方式由用户自己选择其PAN ID,当ZDAPP_CONFIG_PAN_ID值设置不为0xFFFF时,那么设备建立或加入网络的PAN ID由ZDAPP_CONFIG_PAN_ID指定;如果设置ZDAPP_CONFIG_PAN_ID 为0xFFFF;那么设备就将建立或加入它发现网络中的―最好‖的网络。关于这里提到的―最好‖的网络,我觉得可能是有些参数评估,只不过这里没有详细的介绍,在后续文档中应该有介绍的。

在2.4G频段上,IEEE 802.15.4/ZIGBEE规范规定了16各频道。用户可以通过选择DEFAULT_CHANLIST不同的值可以选择不同的频道,其频道如图1-9

所示。改协议默认频道为0xB及0x00000800。

图1-9

DEFAULT_CHANLIST 和ZDAPP_CONFIG_PAN_ID都作为IAR IDE中的编译选项可以进行设置,在应用文件中的…\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

下面把主函数复制过来简单看下:

ZSEG int main( void )

{

// Turn off interrupts------------关闭中断

osal_int_disable( INTS_ALL );

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

// Make sure supply voltage is high enough to run----电压检测,最好是能保证芯片能正常工作的电压

zmain_vdd_check();

// Initialize stack memory-------------初始化stack存储区

zmain_ram_init();

// Initialize board I/O------------初始化板载IO

InitBoard( OB_COLD );

// Initialze HAL drivers-------------初始化HAL驱动

HalDriverInit();

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

osal_nv_init( NULL );

// Determine the extended address------------确定扩展地址(64位IEEE/物理地址)zmain_ext_addr();

// Initialize basic NV items----------------初始化基本NV条目

zgInit();

// Initialize the MAC----------------初始化MAC

ZMacInit();

#ifndef NONWK

// Since the AF isn't a task, call it's initialization routine

afInit();

#endif

// Initialize the operating system----------初始化操作系统,看样子这里面还有OS,麻烦了……..!

osal_init_system();

// Allow interrupts-------------允许中断

osal_int_enable( INTS_ALL );

// Final board initialization------------------最后底板在初始化

InitBoard( OB_READY );

// Display information about this device---------------显示设备信息

zmain_dev_info();

/* Display the device info on the LCD */------------液晶支持显示

#ifdef LCD_SUPPORTED

zmain_lcd_init();

#endif

osal_start_system(); // No Return from here-------------------这里没有返回,大概是进入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。

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

* @fn zmain_ext_addr

* @brief Makes extended address if none exists.确定扩展地址是有效的

* @return none

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

static ZSEG void zmain_ext_addr( void )

{

uint8 i;

uint8 led;

uint8 tmp;

uint8 *xad;

uint16 AtoD;

// Initialize extended address in NV初始化NV里的扩载地址

osal_nv_item_init(ZCD_NV_EXTADDR,Z_EXTADDR_LEN, NULL );

osal_nv_read( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &aExtendedAddress ); // Check for uninitialized value (erased EEPROM = 0xFF)检查是否为无效值(地址)xad = (uint8*)&aExtendedAddress;

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

if(*xad++ != 0xFF ) return;-----如果有一个字节不为0xFF,那么该地址有效返回#ifdef ZDO_COORDINATOR

tmp = 0x10;

#else

tmp = 0x20;

#endif

// Initialize with a simple pattern----------------简单初始化扩展地址

xad = (uint8*)&aExtendedAddress;

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

*xad++ = tmp++;

// Flash LED1 until user hits SW5 ---------闪烁LED1直到SW5按下

led = HAL_LED_MODE_OFF;

while ( HAL_KEY_SW_5 != HalKeyRead() )---------------------SW5循环检测

{

MicroWait( 62500 );

HalLedSet( HAL_LED_1, led^=HAL_LED_MODE_ON );//Toggle the LED MicroWait( 62500 );

}

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

// Plug AtoD data into lower bytes

AtoD = HalAdcRead (HAL_ADC_CHANNEL_7, HAL_ADC_RESOLUTION_10);

xad = (uint8*)&aExtendedAddress;

*xad++ = LO_UINT16( AtoD );

*xad = HI_UINT16( AtoD );

#if !defined( ZTOOL_PORT ) || defined( ZPORT ) || defined( NV_RESTORE )

// If no support for Z-Tool serial I/O,

// Write temporary 64-bit address to NV些临时的64位物理地址进入NV

osal_nv_write( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &aExtendedAddress ); #endif

}

从程序中可以看出,一开始就检测FLASH中的物理地址,因为这个地址在FLASH中是固定的存储空间,一旦为有效地址就退出函数,一旦为无效地址(0xFFFFFFFFFFFFFFFF),那么就对其物理地址进行简单的初始化并检测SW5按键。还是比较好理解的!

3、运行例子

在这里提到了跳线,由于本人采用的非TI原装硬件,没有该跳线,所以必须对程序进行修改,否则检测不到跳线,连ZIGBEE的设备类型都不能确定,肯定不能正常运行了。所以这里就先暂时不说了,这里要说的是一切都正常的情况下,例子的验尸结果。小小跳跃一下。不然学习一直没有进展很麻烦的!

协调器:上电运行,地址检测如上面介绍的情况,通过之后呢-------就进行通道扫描,此时LED1闪烁,一旦协调器成功建立网络,此时LED1停止闪烁,而LED3被点亮。

路由器:上电运行,仍然是地址检测在前。之后就是通道扫描寻求是否又存在的网络,此时LED1闪烁,一旦检测到存在网络并成功加入该网络,LED1将停止闪烁,被替换的是LED3别点亮,也就表明路由器成功加入了网络。

那么此时能进行的操作控制是什么呢,也是最简单的表现手法---按键无线控制LED:

周期(5S)发送信息到网络中每个设备

SW1按下,发送一个信息到组1的设备

SW2按下,退出/加入组1

这个我是经过验证的。如:

按下协调器SW1,路由器的LED1狂闪几下;按下路由器的SW1,那么协调器的LED1也就狂闪几下;当然我是只有两个节点。

如果按1下协调器的SW2,在按下路由器的SW1,此时协调器就没有反应,表明协调器已经退出组1;但是再按下协调器SW2在按路由器的SW1就与上一步类似了。路由器与此类似可以通过SW2退出/加入组1.

终于把演示弄完了,接下来就来看看程序。在此之前还是来看看TI提供的Sample指导文档。这个文档个人觉得写的不错,要是没看之前就看程序的却很郁闷的!

但是本人英文很差,所以需要慢慢看,等点时间放上来!

Z-Stack之3

Sample Application分析(上)

1、Z-Stack CC2430DB and CC2430EB Sample Application

1.1、介绍

该文档时介绍TI协议入门的一个例子SampleApp的,适用EM和DB开发板。

1.1.1、描述

这个例子是非常简单的演示,每个设备都可以发送和接收两个信息

周期信息-----加入该网络的所有设备每隔10S(可能会加上一个随机数的mS)都发送一个周期信息,该信息的数据载荷为发送信息次数的计数。

闪烁控制信息---------通过按下SW1可以发送一个控制灯闪烁的广播信息,该广播信息只针对组1的所有设备。

所有设备初始化为加入组1,所以网络一旦成功建立/加入就可以进行闪烁控制。可以通过按下设备的SW2退出组1,所以可以通过退出组1可以不接受闪灯信息。通过按下SW2也可以让不在组1的设备加入近组1,从而又可以接受闪灯信息了。

这个理解应该不困难的,反正我理解没有什么障碍!

1.1.1.1、按键

SW1:发送闪烁信息到组1所有设备

SW2:转换推出/加入组1状态

1.1.2、用户应用开发

这里我基本上能看明白是什么,但是我不打算写出来,因为涉及到一些ZIGBEE的关键术语,不是很明白。

大概就是简单介绍了下用户怎么利用例子做自己的应用,但是实用价值不高,说的太笼统,全是概念性的说明。

1.2、OSAL任务

1.2.1、初始化

因为Z-Stack是在OS下运行的,所以在之前必须调用osalAddTasks()初始化任务。

1.2.2、组织

关于OS的API函数介绍请看文档:Z-Stack OSAL API (F8W-2003-0002),应该说协议栈的每层或者说每部分都有相关的API说明文档。osalAddTasks()初始化任务,osalTaskAdd()函数添加任务,都可以到API文档或程序中详细分析函数功能。

1.2.3、系统服务

OSAL和APL系统服务是唯一的,因为比如按键和串口类似事件处罚就只能用唯一的一个任务标识。这两个硬件都留给了用户自己定义使用。

1.2.4、应用设计

用户可能为每一个应用对象都创建一个任务,或者为所有的应用对象只创建一个任务。当选择上述的设计的时候,下面是一些设计思路:

1.2.4.1、为许多应用对象创建一个OSAL任务

下面是正面和反面(pros & cons)的一些叙述:

- Pro:接受一个互斥任务事件(开关按下或串口)时,动作是单一的。

- Pro:需要堆栈空间保存一些OSAL任务结构。

- Con:接收一个AF信息或一个AF数据确认时,动作是复杂的-----在一个用户任务上,分支多路处理应用对象的信息事件。

- Con:通过匹配描述符(如:自动匹配)去发现服务的处理过程更复杂-----为了适当的对ZDO_NEW_DSTADDR信息起作用,一个静态标志必须被维持。

1.2.4.2、为一个应用对象创建一个OSAL任务

一对一设计的反面和正面(pros & cons)是与上面一对多设计相反的:

- Pro:在应用对象试图自动匹配时,仅仅一个ZDO_NEW_DSTADDR被接收。

- Pro:已经被协议栈下层多元处理后的一个AF输入信息或一个AF数据确认。

- Con:需要堆栈空间保存一些OSAL任务结构。

- Con:如果两个或更多应用对象用同一个唯一的资源,接收一个互斥任务事件的动作就更复杂。

1.2.5、强制方法

任何一个OSAL任务必须用两种方法执行:一个是初始化,另一个是处理任务事件。

1.2.5.1、任务初始化

在例子中调用如下函数执行任务初始化:

―Application Name‖_Init(如SAPI_Init)。该任务初始化函数应该完成如下功能:

变量或相应应用对象特征初始化,为了使OSAL内存管理更有效,在这里应该分配永久堆栈存储区。

在AF层登记相应应用对象(如:afRegister())。

登记可用的OSAL或HAL系统服务(如:RegisterForKeys())

1.2.5.2、任务事件处理

调用如下函数处理任务事件:

―Application Name‖_ProcessEvent(e.g. SAPI_ProcessEvent()).除了强制的事件之外,任一OSAL任务能被定义多达15个任务事件。

1.2.6、强制事件

一个任务事件SYS_EVENT_MSG (0x8000), 被保留必须通过OSAL任务设计。

2.2.6.1、SYS_EVENT_MSG (0x8000)

任务事件管理者应该处理如下的系统信息子集,下面只列出了部分信息,但是是最常用的几个信息处理,推荐根据例子复制到自己项目中使用。

1.2.6.1.1、AF_DATA_CONFIRM_CMD

调用AF_DataRequest()函数数据请求成功的指示。Zsuccess确认数据请求传输成功,如果数据请求设置AF_ACK_REQUEST标志位,那么,只有最终目的地址成功接收后,Zsuccess确认才返回。如果如果数据请求没有设置AF_ACK_REQUEST标志位,那么,数据请求只要成功传输到下跳节点就返回Zsuccess确认信息。

1.2.6.1.2、AF_INCOMING_MSG_CMD

AF信息输入指示

1.2.6.1.3、KEY_CHANGE

键盘动作指示

1.2.6.1.4、ZDO_NEW_DSTADDR

匹配描述符请求(Match Deor Request)响应指示。(例如:自动匹配)

1.2.6.1.5、ZDO_STATE_CHANGE

网络状态改变指示

1.3、网络格式化

示例应用程序编译为协调器的在default_chanlist指定的通道上形成一个网络,协调器将建立一个随机编号源于自身的IEEE地址或由zdapp_config_pan_id 指定的网络PAN ID(如果zdapp_config_pan_id不为0xFFFF)。

示例应用程序编译为路由器或结束设备的将尝试加入网络在default_chanlist指定的通道上,如果zdapp_config_pan_id没有定义为0 xFFFF ,路由器将受到限制,只有加入参数zdapp_config_pan_id规定的网络PAN ID。1.3.1、自动启动

设备自动开始尝试组建或加入网络。如果设备设置为等待计时器或其他外部事件发生后才启动,那么HOLD_AUTO_START必须被定义。为了稍后以手动启动方式启动设备,那么需要调用ZDApp_StartUpFromApp(函数

1.3.2、软件启动

为了在形成网络过程中节省所需的设备类型,那么所有的路由器设备可以被通过soft_star定义作为一个协调器。如果自动启动是需要的话,那么auto_soft_start必须被定义。

1.3.3、网络恢复

通过设置NV_RESTORE和/或NV_INIT,可以让设备断电或者意外掉电重新启动后重新回复网络。

1.3.4、加入通告

当设备形成或加入网络后会发通报到ZDO_STATE_CHANGE信息事件。

学Z-Stack之4

Sample Application分析(下)

上节介绍了建立一个应用需要做的几个必须的事情,现在就来通过分析Sample Application来具体看看需要做哪些事情,才能建立一个ZIGBEE应用功能。当然这里只是做点简单的必须的工作。

The Sample Application (SampleApp)

1、介绍

主要是介绍一个应用建立的结构及需要进行的程序流程。

1.1、程序流程

1.1.1、初始化

首先需要调用初始化函数SampleApp_Init()。

SampleApp_TaskID = task_id;

初始化应用建立的任务ID号,其实用过OS的人都应该晓得这个是干啥的,我没用过,不是很理解,但是我知道是必须的,就相当于一个任务的标识,这样才能区分运行过程中不同任务中的不同事件。我是这么认为的,ID说白了就是给该任务取了各名字,就向人名字一样,区分不同的人,就是一个代号。人名可以重复,重复了有时候叫起来就容易混淆;所以才程序中为了避免这种混淆,就

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