1546|0

1万

帖子

33

资源

裸片初长成(高级)

[转]TI ZigBee FAQ 常见问题解答 [复制链接]

TI ZigBee FAQ 常见问题解答
转自:
http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/75525.aspx

1,TI的ZigBee协议栈不同版本的区别,如何选择合适的协议栈进行产品开发


TI ZigBee 协议栈Z-Stack从最开始的Z-Stack 0.1到大家熟悉的Z-Stack 2.5.1a,以及到现在Z-Stack Home 1.2.1, Z-Stack Lghting 1.0.2, Z-Stack Energy 1.0.1, Z-Stack Mesh 1.0.0. 在协议栈的升级过程TI主要对协议栈做了两方面的工作,1) 根据ZigBee Alliance的ZigBee Specification进行一些新的Feature添加,比方说ZigBee2007是树形的路由,在ZigBee Pro中有了Mesh路由,并且提出了MTO和Source Routing等路由算法,所以TI的把相应新的功能添加到协议栈上去。当然有一部分是Spec中相关bug的修正,比方说有些描述模棱两可的;2) TI ZigBee协议栈本身软件bug的修复。一个版本的协议栈相对于之前一个版本协议栈的区别,都可以在协议栈安装目录下的Release Note中找到。

在Z-Stack 2.5.1a以后,TI的协议栈并没有继续以Z-Stack 2.6.x的形式直接发布,而是按照Application Profile的方式来发布了,原因在于TI希望开发者根据实际的应用选择更有针对的性的协议栈进行开发。像Z-Stack Home 1.2.1之类的协议栈,主要包括两部分,1)核心协议栈Core Stack,这部分起始就是之前的Z-Stack 2.5.1a以后的延续版本,可以在协议栈安装目录下 Z-Stack Core Release Notes.txt文件中找到,Version 2.6.2 。2)应用协议栈 Profile相关,这部分主要跟实际应用相关的,Home Automation 协议栈里都是ZigBee Home Automation Profile相关的实现。同样Z-Stack Lghting 1.0.2和Z-Stack Energy 1.0.1也是一个Core Stack再加上应用上的Profile。

1)Z-Stack Home 1.2.1 针对智能家居相关产品的开发
2)Z-Stack Lighting 1.0.2 针对ZLL相关产品的开发
3)Z-Stack Energy 1.0.1 针对智能能源,Meter, In Home Display, 等相关产品的开发
4)Z-Stack Mesh 1.0.0 针对相关私有应用的产品的开发,只利用标准ZigBee协议相关功能, Mesh路由等,应用层有开发者自己定义。


2,产品如何进行标准ZigBee测试认证,需要了解哪些,需要走什么流程



以开发标准ZigBee Home Automation相关产品为例。首先开发者开发产品时要按照ZigBee Home Automation Profile Specification 中描述的产品进行开发,这个文档可以在www.zigbee.org下载到。在完成产品的开发后,开发着需要了解ZigBee Home Automation Profile Test Specification, 这个文档描述了一个特定产品需要在Test House过的相关测试项,文档也可以在www.zigbee.org下载到,另外除了以上两个文档以外还有一个PICS文档,这个文档专门用于描述需要过认证测试产品所支持的功能,开发者根据开发产品的实际红能,和Specification中所要求的功能,在文档中进行打钩确认。下面是测试的流程, 1) 首先加入ZigBee联盟,一般可以有测试实验室帮助完成。
2) 寄送样品到测试实验室,完成PICS文档的填写。
3) 第一轮预测试,测试实验室对测试结果反馈,开发者修改样品代码。
4) 测试实验室对修改后的样品进行验证,然后开始正式测试。
5) 测试实验室协助开发者完成ZigBee联盟网上认证申请资料的准备和提交。
6) 测试实验室提交正式测试报告给ZigBee联盟。联盟会完成审核并发证

目前国内可以完成标准ZigBee测试的测试实验室有两家
1) CESI 北京 中国标准化电子研究所。
2) TRAC 深圳办事处(总部在英国)

  3,设备的64位 MAC地址是怎么样选取的?

在CC2530中分为两个IEEE地址,一个称为Primary IEEE地址,另外称为Secondary地址。Primary IEEE地址是存放在芯片的Information Page里面,这个地址是TI向IEEE协会购买的,每个芯片的地址都是唯一的。并且用户只能Read这个值,没办法擦除/修改。在协议栈中直接通过读地址可以获得 osal_memcpy(aExtendedAddress, (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN)。 Secondary地址是存放在CC2530里的Flash最后一个Page里面,用户可以进行Read/Write. 通过函数HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);。
协议栈运行是,是如何选择Primary IEEE地址或者Secondary地址作为设备的MAC地址的,具体在函数zmain_ext_addr(void)操作。
1) 从NV中读取 IEEE地址,如果已经存在(都不为0xFF),就使用该地址作为MAC地址了。
2) 如果1)中没有,从Secondary IEEE地址存放位置读取,如果有(都不为0xFF),把该地址写入到NV中,以后就用该地址作为MAC地址了。
3) 如果2)中没有,从Primary IEEE地址存放位置读取,如果有(都不为0xFF),把该地址写入到NV中,以后就用该地址作为MAC地址了
4) 如果3)中没有,就随机产生一个64位的变量,写入到NV中,并作为MAC地址。


4,End Device是低功耗设备, 有电池供电, 节点在断网以后,如何能够禁止节点持续搜索网络,或者把发送Beacon Request间隔增大
1)启动搜索网络 uint8 ZDApp_StartJoiningCycle( void )
停止搜索网络 uint8 ZDApp_StopJoiningCycle( void )


2) 更改发送Beacon Request的周期
修改变量zgDefaultStartingScanDuration
// Beacon Order Values
#define BEACON_ORDER_NO_BEACONS     15
#define BEACON_ORDER_4_MINUTES      14  // 245760 milliseconds
#define BEACON_ORDER_2_MINUTES      13  // 122880 milliseconds
#define BEACON_ORDER_1_MINUTE       12  //  61440 milliseconds
#define BEACON_ORDER_31_SECONDS     11  //  30720 milliseconds
#define BEACON_ORDER_15_SECONDS     10  //  15360 MSecs
#define BEACON_ORDER_7_5_SECONDS     9  //   7680 MSecs
#define BEACON_ORDER_4_SECONDS       8  //   3840 MSecs
#define BEACON_ORDER_2_SECONDS       7  //   1920 MSecs
#define BEACON_ORDER_1_SECOND        6  //    960 MSecs
#define BEACON_ORDER_480_MSEC        5
#define BEACON_ORDER_240_MSEC        4
#define BEACON_ORDER_120_MSEC        3
#define BEACON_ORDER_60_MSEC         2
#define BEACON_ORDER_30_MSEC         1
#define BEACON_ORDER_15_MSEC         0





5,如何让End Device进入低功耗状态,休眠时间是如何设定的? 在协议栈宏定义中使能POWER_SAVING后,然后在f8wConfig.cfg文件里面把-DRFD_RCVC_ALWAYS_ON=FALSE,就可以让End Device进入休眠状态。

关于休眠的时间是有OSAL操作系统的调度来决定,每次休眠时间都是按照最新会发生的一个Event Timeout作为休眠时间。具体在协议栈hal_sleep函数中有说明。
这个timeout主要分为两类,一类是应用层事件的timeout,另外一类是MAC层事件的timeout,
1)应用层的timeout的时间,是在osal_pwrmgr_powerconserve( void )函数中,通过osal_next_timeout();获得的。
2)MAC层的timeout时间,是通过halSleep( uint16 osal_timeout )函数里面,通过MAC_PwrNextTimeout();来获得的。










此帖出自RF/无线论坛

回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/5 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表