CC2538添加分组引起的问题

软硬件平台:CC2538 + Z-STACK3.0.2

        前段时间在项目现场调试设备,一个ZC带若干ZR和ZED,组播的时候发现几乎所有ZR均不响应ZC的控制消息只是单纯的充当路由的角色而已(转发组播消息),挨个查看每个ZR的组信息,均是status not found [0x8b],难怪会不响应控制消息。

        但为什么会出现这种现象呢?

        回来后很容易复现上述组信息丢失现象。ZR入网于ZC后,通过ZC给ZR添加分组,显示成功,断电重启后,问题就出来了。

        原来在添加分组的时候,Z-STACK需要将设备的组信息保存到两个地方,第一个就是apsGroupTable这个全局变量中,aps_Find*以及aps_Count*这些API都是直接在apsGroupTable里面进行查找统计的。第二个保存的地方就是NV了,断电重启后需要从NV中恢复出之前保存的信息。

        通过调试定位,发现我的问题是在保存信息到NV时出现错误了,在osal_nv_write里面其中一个步骤返回了,也就是并没有保存到NV中去,断电重启能恢复正常才怪。

        系统初始化的时候会申请APS_MAX_GROUPS个组信息的空间,空间不足会导致分配内存异常、NV写失败一系列问题。在f8wconfig.cfg内有APS_MAX_GROUPS,默认值是16(而我的工程文件里面却是64 !),其实对于一般场景下这个值可以更小甚至可以等于1。

        相关问题我之前提交到过TI E2E,链接如下,更详细的过程均在里面,此篇博客只是总结结论,当然引起NV读写出问题的原因还有其他比如工作电压、硬件焊接等,有相似问题的朋友可以借鉴。

https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/p/907632/3368991#3368991

https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/p/910089/3368994#3368994

 

        如果所有方法都不能解决组信息保存NV问题,那么有一个很憨的办法,在真正组播之前,对每个设备再次添加一遍组,如果设备数量少倒没什么大影响,但是数量飙到好几十上百,影响会较大,不到万不得已,还是不要用这种方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值