本文目的:理解zigbee无线通讯的低功耗实现,睡眠设备如何维持在网状态,设备间如何进行数据通讯,父子节点的消息机制等。

参考:

《Zigbee-Sleepy-End-device》

《UG391: Zigbee Application Framework Developer’s Guide》

通过GPIO唤醒睡眠状态(低功耗)下的EFR32MG系列_JamieChenn的博客-CSDN博客

1. 基本介绍

实验目的:温度传感器:采样、上报、发现、绑定、睡眠。

睡眠设备SED(sleepy end device):

(可以通过nodeType查看设备的类型)

▪空闲时关闭射频信号的一种特殊类型的端设备

▪父节点持有专门用于睡眠设备的消息

▪定期轮询父节点以接收父节点发送的消息

▪除非上述设备请求,否则 SED不接受数据

2.ED和SED

End Device:空闲时仍然处于接收状态(RX-on-when-idle)

Sleey End Device:空闲时关闭射频,适合于电池供电的设备

3.Polling

轮询:终端设备向父节点发Data Request实践

作用:1.保持活跃: 终端设备周期性地轮询其父节点,作为一种保持活跃的机制,以防止老化,脱离网络。2.请求消息: 在睡眠终端设备上,轮询还用于请求发送给它的由父节点持有的消息。

▪长轮询:终端在轮询父母之前等待的最长时间LONG_POLL,当设备不需要在网络上响应。
■短轮询: 当终端设备正在发送或接收消息时,在轮询其父设备之前可能等待的时间。当一个设备需要响应从网络发送给它的消息时,它进入一种状态,在这种状态下,它以 SHORT _ POLL 间隔轮询它的父设备。这样可以确保其父节点收到的任何消息都会立即被睡眠终端设备检索并处理。在 SHORT _ POLL 间隔时间内轮询睡眠终端设备的时间称为“快速轮询模式”。当设备需要数据(比如 zcl/zdommessage 响应等)时,它进入快速轮询模式。有时,一个睡眠设备需要保持快速轮询模式,同时发送一系列复杂的消息,这些消息构成了与另一个设备的完整的应用程序级事务。这个 API 的使用记录在 app/Framework/include/af.h 中。

▪快速轮询: 堆栈以较短的轮询间隔率积极轮询其父元件的状态
右边的数据包跟踪是用硅实验室的电路网络分析仪捕捉到的。它显示结束设备在发送 ZCL 切换命令并期待默认响应之后,以较短的轮询间隔(1秒)轮询其父设备3秒(由唤醒超时确定)。
▪轮询控制集群提供一种管理终端设备 MAC 数据请求速率的机制 。Poll Control 集群提供了一种机制,用 ZCL 命令管理终端设备的数据轮询速率。投票控制集群的细节将在单独的培训模块(应用层: 投票控制集群)中进一步讨论。

4. 轮询(Polling)过程分析

由睡眠终端设备使用,包括短轮询(short poll)和长轮询(long poll)。

需要设备可靠地接收传入消息和传入 APS ACK (为其传出消息) ,应该在 EMBER _ INDIRECT _ TRANSMISION _ TIMEOUT (默认为7.68秒,zibbee pro的aps ack回复的最大超时)内至少轮询一次,以检查父设备的数据,因为父设备保留消息的时间长度由这个数字决定。一些睡眠终端(比如传感器)预计不会异步接收消息,因此它们没有上述限制。他们只需要在终端设备轮询超时内进行轮询(根据父节点设置,默认5min,避免父节点删除SED对应子表)。

简略:SED唤醒,发送一次poll来查询有没有他的消息,若无则睡眠,若有则接收再睡眠。短轮询在一些需要响应父节点指令的场合更加合适,而一些设备不需要响应的设备则只需要长轮询保持父节点子表中维持。

  • 处于休眠状态的终端设备不会直接从网络上的其他设备接收数据。相反,它们必须轮询其父级获取数据,并从其父级接收数据。父母充当睡眠设备的替代品,在孩子睡觉时保持清醒并缓冲信息。
  • 右图说明了数据轮询过程。昏昏欲睡的终端设备每隔一段时间就会醒来,对它们的父母进行调查。父节点使用 MAC ACK 中的挂起数据标志来指示它有一个或多个消息在等待睡眠结束设备。如果挂起的数据标志是真实的,睡眠终端设备保持清醒接收信息,并在睡觉前解除它们。如果它是错误的,睡眠终端设备可以自由地继续睡眠,直到下一次轮询尝试。

4.1 短轮询

编译时设置短轮询间隔在框架中由 EMBER _ AF _ SHORT _ POLL _ INTERVAL 定义为四分之一秒。AppBuilder 接口没有允许用户操作此值的 GUI 小部件。它默认为一个单位等于四分之一秒。如果您希望更改默认的 EMBER _ AF _ SHORT _ POLL _ INTERVAL,您可以在应用程序配置中的“包含”选项卡的宏部分中为其添加一个定义。
运行时设置在应用程序框架中,EMBER _ AF _ SHORT _ POLL _ INTERVAL 被分配给一个名为 emberAfNapDuration 的全局变量,该变量可以在运行时使用 EMBER _ AF _ SET _ NAP _ DURATION (int32u 持续时间)进行修改

4.2 长轮询

编译时设置长轮询间隔是由 EMBER _ AF _ LONG _ POLL _ INTERVAL 在框架中定义的,以四分之一秒为单位。可以在堆栈配置选项卡中操作较长的轮询间隔。EMBER _ AF _ LONG _ POLL _ INTERVAL 也可以在堆栈选项卡的“包含”部分中定义。
运行时设置在应用程序框架中,EMBER _ AF _ LONG _ POLL _ INTERVAL 被分配给一个名为 emberAfHibernateDuration 的全局变量,该全局变量可以在运行时使用 EMBER _ AF _ SET _ HIBERNATE _ DURATION 进行修改

5.保持活跃和超时

5.1 Mac Data Poll用作子和父之间的 keep-alive 消息。
5.2 终端设备必须在终端设备轮询超时(由 EMBER _ END _ DevICE _ POLL _ TIMEOUT 或 EZSP _ CONFIG _ END _ DevICE _ POLL _ TIMEOUT 设置)内至少轮询其父设备一次。否则,这些设备将从父表的子表中删除,从而有效地超出了网络。
这样做是为了确保子表插槽不会永久保留给已经从网络中不雅地删除的终端设备(即,如果没有从该设备听到退出通知的话)。leave通知是广播,不能保证被接收 ; 如果父节点收到来自终端设备的不存在于子表中的 mac 数据轮询,那么父节点将要求终端设备离开并重新加入网络。右边的图说明了leave和rejoin的过程。
除此之外,如果 EMBER _ AF _ PLUGIN _ END _ UNDICE _ SUPPORT _ MAX _ MISSED _ POLLS 次数的数据轮询消息没有得到父节点的确认,那么终端设备将尝试重新加入网络以寻找新的父节点。

6. 使用例子

15.2.5使用“快速轮询”完成一个复杂的事务有时,一个昏昏欲睡的设备需要保持快速轮询模式,同时发送一系列复杂的消息,这些消息构成了与另一个设备的一个完整的应用程序级事务。对于这种类型的交互作用,在一个昏睡的终端设备上的一般策略如下: 1。睡眠终端设备 A 需要与设备 B 执行一系列消息,称为事务。
2.睡眠终端设备 A 创建一个事件,该事件将用作应用程序级事务的超时,称为事务超时事件。
3. 睡眠终端设备 A 启动事件并向设备 B 发送第一条消息。
4.如果消息是 APS 消息,睡眠终端设备 A 将自动保持在短轮询模式,直到 APS Ack 从响应设备返回。
5.如果消息是一个 ZCL 命令,睡眠终端设备 A 也将自动保持在短轮询模式足够长的时间给设备 B 一个机会发送任何应用程序级命令响应所需的 ZCL 6。休眠终端设备 A 继续向设备 B 反复发送一系列消息,直到整个交易完成。
7.当事务的最终消息用设备 B 完成时,Sleepy end 设备 A 从 emberAfCurrentAppTasks 中移除标志,从而允许设备自然地返回使用 hibernate 或 LONG _ POLL 周期进行睡眠。
8.如果设备 A 和 B 不能像预期的那样完成它们的事务,当步骤 # 1中设置的事务超时事件触发时,瞌睡终端设备 A 将从 emberAfCurrentAppTasks 中移除标志。

7. 睡眠和事件机制

Zigbee 应用程序框架自动检查事件机制,以查看下一个应用程序事件是什么时候安排的。
Zigbee 应用程序框架从不在事件中睡眠。睡眠时间总是短于框架内下一个应用程序事件的时间。在 SoC 上,设备的休眠时间通常由 SHORT _ POLL 和 LONG _ POLL 间隔决定,因为轮询事件也是 Zigbee 应用程序框架中的事件。在主机上,处理器将尝试休眠,直到下一个应用程序事件。

8. 不要在睡眠终端设备上使用Tick事件

所有应用程序事件都应该通过事件机制在睡眠终端设备上使用自定义事件或集群事件来安排。
这是因为事件机制为睡眠处理代码提供了一个中央存储库,以便它知道它可以睡眠多长时间。如果你依赖 emberAfMainTickCallback 频繁地触发应用程序事件来处理你的瞌睡虫,你将被迫在一个人为的短时间间隔内唤醒瞌睡虫,这样 emberAfMainTickCallback 就可以得到服务。

(所以在实际业务开发,遇到串口等需要调用tick实现的通讯任务,则在唤醒时再打开tick事件?)

9. 与父级失联

如果终端设备与其父级失去联系,它将通过调用 emberAfStartMove 自动开始与现有的父级或新的父级重新连接网络。EmberAfStartMove 函数在 Zigbee 应用程序框架的事件调度机制中调度一个“ move”事件,具有以下特征:

  • 当 move 事件触发时,设备调用 emberFindAndRejoin Network。
  • 移动事件会自动重新安排,以便每10秒尝试一次网络重新连接,直到到达 EMBER _ AF _ REJOIN _ ATTEMPTS _ MAX。
  • 如果 EMBER _ AF _ REJOIN _ ATTEMPTS _ MAX 设置为0xff (默认) ,则每10秒尝试重新连接一次,直到找到网络。
  • 重新加入网络的第一次尝试总是在安全开启的情况下进行。每次后续尝试都在关闭安全性的情况下执行。

Zigbee/SiliconLabs解读sdk文档(2) —— 睡眠终端设备相关推荐

  1. 怎么看android sdk 文档

    1.我建议大家要养成一个习惯,以后遇到疑问时,首先应该想到去sdk文档上查找,然后再去百度上google:这样做一来可以锻炼自己理解E文的能力,二来也会让自己的印象更深刻些 1号区域:标签栏,各个标签 ...

  2. android sdk 文档导读之前传:初涉

    看到csdn博客上面其它大牛的系列性android博客,小弟确实十分羡慕.所以经过一番思想斗争后,小弟终于要打算写写系列性的博客了.通过对一些选题的推敲,我决定对android的sdk文档进行一个比较 ...

  3. 声纹识别demo_声纹识别 iOS SDK 文档

    # 声纹识别 iOS SDK 文档 # 1.简介 声纹识别(Voiceprint Recognition),是一项提取说话人声音特征和说话内容信息,自动核验说话人身份的技术.MSC SDK 声纹识别( ...

  4. 微博Android平台SDK文档

    博Android平台SDK文档 编号:WEIBO_ANDROID_SDK 版本:WEIBO_ANDROID_SDK V3.1.2 修订记录: 时间 文档版本 修订人 备注 2012/7/20 2.0. ...

  5. Direct3D 9.0 SDK 文档(中文版)

    一直以来想将D3D的文档翻译一下,一来是为了学习,二来也是给其他朋友提供一下方便,但一直没有时间来做这件事情,今天偶尔在网上发现有人已经将这件事情做得足够好了,我将链接贴出来,希望想学习D3D的哥们, ...

  6. android蓝牙门禁,BleAgent蓝牙门禁SDK文档

    个人笔记-蓝牙门禁sdk文档 导入包 //以下是在主module的build implementation 'com.zhy.core:BleLib:1.2.3' //此版本已经引用基础包 //以下是 ...

  7. 掘金量化—Python SDK文档—5.API 介绍(2)

    Python SDK文档 5.API介绍 5.6通用数据函数(免费) python 通用数据 API 包含在 gm3.0.148 版本及以上版本,不需要引入新库 get_symbol_infos - ...

  8. [SDK文档]SDK简介

    文档链接:https://docs.growingio.com/docs/sdk-integration SDK工作方式 主要内容:GIO采集内容,数据安全措施,针对数据采集的控制项 JS SDK 添 ...

  9. 使用Android Studio的时候如何查看开发文档,API文档,doc文档,SDK文档

    有的时候,我们在Android开发中需要查看需要的一些类或包里面有什么方法,返回值,调用关系和继承关系等等.这个时候我们就可以使用SDK软件开发工具中的其中之一--API文档,来查一下. 那么,下面就 ...

最新文章

  1. Jsp-request与requestScope的区别
  2. Android中链接到百度进行搜索
  3. js中对于字符串非空判断的总结
  4. 【javascript】获取 格式化时间
  5. hadoop安装,提前确认hadoop版本是32位还是64位。
  6. HTML5: 两个viewport的故事(第二部分)
  7. Vue3核心概念、新特性及与Vue2的区别
  8. 企业数据安全防护不可忽视,数据丢失/损坏如何处理?
  9. Python练手经典100例
  10. 华为hwics格式产品文档打开方式
  11. linux 操作mysql 命令_linux下mysql操作命令大全
  12. UNP编程:15---UDP之(recvfrom、sendto函数)
  13. 基于同义词词林扩展版的词语相似度计算
  14. html编辑器pp,在线轻设计工具之H5
  15. ppt导出pdf后非矢量图图片失真的解决办法
  16. excel下拉公式保持一些参数不变
  17. 数字图像处理:空间相关与卷积操作
  18. 文件上传绕waf(waf拦不住我)
  19. 51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...
  20. 【嵌入式底层知识修炼】基于通用消抖算法,拓展通用非阻塞Key按键识别算法

热门文章

  1. abortonerror_java-更新Gradle依赖项后生成错误.嫌疑犯#1是...
  2. UBports的“helloworld”和甜甜圈
  3. DC竞赛 国能日新功率预测题 rank21 解决方案(适合新手)
  4. jFinal基于maven简单的demo
  5. 小猪乔治和border-radius
  6. Linux命令行太长或删除整行
  7. jmf不支持64位win7系统
  8. 最新发布:2020年项目管理PMP认证考试时间
  9. 对秒杀商品这块先做一个多级缓存优化
  10. 时间日期选择器(bootstrap-datepicker)