[Ember Zigbee]zigbee应用程序RAM

概述

本文将介绍zigbee应用程序中重要的参数与其对应的RAM开销,实际产品开发中,可根据芯片的RAM空间以及性能需求,对各个参数进行调整,已达到节约RAM的目的。


重要参数/宏定义介绍

参数名称 默认值                   占用RAM字节
EMBER_PACKET_BUFFER_COUNT             75                              40
EMBER_NEIGHBOR_TABLE_SIZE                 16                              18
EMBER_APS_UNICAST_MESSAGE_COUNT                 10                              13
EMBER_DISCOVERY_TABLE_SIZE                  4                               9
EMBER_MAX_END_DEVICE_CHILDREN                  6                               4
->EMBER_ADDRESS_TABLE_SIZE                  8                              10
->EMBER_UNICAST_ALARM_DATA_SIZE                  16                               4
->EMBER_UNICAST_ALARM_DATA_SIZE                   0                               4

各个参数,具体介绍如下:

(1)EMBER_PACKET_BUFFER_COUNT 
表示协议栈支持发送和接收信息缓存包的最大数量,其作用包括: 
a. 转发路由信息:in-transit(routed); 
b. 接收信息:incoming messages; 
c. 发送信息:outcoming messages(其中包含了父节点准备发给睡眠子节点的信息); 
d. 接受和发送碎片化信息(大数据量分多次传输):fragmented message; 
e. 为Stack存储临时信息,包括: 
–>> currently joined mobile end devices; 
–>> stored beacons being considered during a join/rejoin event; 
–>> listings of conflicted node IDs; 
–>> scan results; 
–>> matches for a ZDO End Device Bind request 
该参数对于RAM空间影响最大,但同时涉及到众多消息处理,silicon官方建议在不了解各个消息是如何处理的情况下,不要对其进行改动。不过对于em357芯片,官方设置默认值是75(共消耗300个Byte)的原因在于对于Demo程序的RAM是比较充足的。。。即便改成25也是可以的。同时对于zigbee3中设备类型,对于该参数的需求值关系:

Cordinator > Router > End Device

同时,对于网络情况复杂、信息负载重的应用场景,该值需视具体情况要调大。

(2)EMBER_NEIGHBOR_TABLE_SIZE 
neighbor table用于存储当前设备一跳范围内的节点信息。当大规模组网时: 
调大:更低的路由跳转,利于网络的稳定、低延迟; 
调小:更多的路由跳转,更高的网络延迟;

silicon官方建议设置最小为8,最大支持16。

(3)EMBER_APS_UNICAST_MESSAGE_COUNT 
在等待MessageSentHandler callback期间,最大能缓存的APS Unicast消息数量。每当协议栈发送一次单播命令时,都会给上层应用层一个反馈,应用层拿到反馈,就是在MessageSentHandler callback期间做处理的。这个数值,在发送消息不频繁的情况,可以适当改小。

(4)EMBER_DISCOVERY_TABLE_SIZE 
代表节点可以同时运行的Route Discovery命令的个数。每当执行一次one-to-one discovery,就会在该表中记录一条entry,当该one-to-one discovery发现一条节到目的地的路径时,或者在时间限制内没有发现有效路径,则entry会被删除。当table表满时,节点就不会再发route discovery命令了。对于传感器类的休眠设备,该值设置为1即可。

(5)EMBER_MAX_END_DEVICE_CHILDREN 
代表一个Cordinator/Router设备最多可以挂载的end device子节点的数量。对于ember357芯片来说,最大值为64。64作为上限,设计的原因,有以下两点: 
1) 存储器RAM容量; 
2) Cordinator/Router在接受子节点MAC Data Request(Poll)的时候,会轮询children表内所有的记录,如果在表内,则需相应Mac Ack,而802.15.4协议要求,这个响应时间必须在864ms内完成。因此数值过高,将会导致轮询时间过长,进而引发ack响应失败,子节点离开网络。

Tips: 
zigbee要求end device设备定期向父节点进行MAC Data Request,以告知父节点,“我还在线,不要删我!”

EMBER_MAX_END_DEVICE_CHILDREN会影响以下3条,因此以5-1、5-2、5-3表示: 
(5-1)EMBER_UNICAST_ALARM_DATA_SIZE 
当使用Alarm cluster(0x0009)时,才有意义;

(5-2)EMBER_ADDRESS_TABLE_SIZE 
该值包含了address table和trust center cache的总和。

(5-3)EMBER_KEY_TABLE_SIZE 
对于Trust Center来说,这个值代表Trust Center Link Key可以存储的数量。对于其他节点来说, 代表了可以存储的Application Link Key数量,而Trust Center Link key则单独存储。


总结


根据以上参数,在应用程序中可以根据自己具体的需要进行参数调整。虽然本文是基于silicon芯片em357,但原理相同,可以类推到其他zigbee芯片供应商的方案中去,当然,前提是他们开放了这些参数接口。

备注:本文使用em357芯片,协议栈版本5.3,参数配置文件如下: 
/stack/config/ember-configuration-defaults.h

你可能感兴趣的:(Zigbee,EmberZNet,zigbee,silicon,ember)