微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 拦路虎啊!AF_DataRequest无规律发送失败,没人能解决吗?

拦路虎啊!AF_DataRequest无规律发送失败,没人能解决吗?

时间:10-02 整理:3721RD 点击:

原本想过年好好休息一下,想在休息不了了,我的ZigBee终端模块每5秒调用一次AF_DataRequest函数发信息给协调器(单播),出现一个问题,就是工作几个小时后或几十分钟(时间不等),就会出现发送失败,错误代码是0xc2。失败后有时过会能自行恢复,有时要重启,请各位大神帮忙解决。谢谢!

0XC2的错误是校准失败,我也遇到同样的问题,一段时间后,无线这块就死掉了,但是 CC2530的MCU还是好的

节点在出现问题的时候,是否有断线过,也就是发送Data Request给父节点,但是父节点没有回复MAC ACK,使得节点失去父节点掉线了。

然后需要重新入网,但是你的应用层还是一直在调用AF_DataRequest

我的是协调器会死掉。。但是CC2530的MCU是好的 RF会死掉,,然后下面路由设备能够入网,但是协调不能给他发送KEY,,重启就可以

昨天晚上定位了一下问题,AF_DataRequest  在发送的时候 会出现 0x10  和0x00 这两种昨天,但是MAC层的发送接口 macTxFrame是没有被调用到。也就是发送数据死掉在网络层。请问这是什么情况导致,求TI技术大师支持。

0xC2这种情况是 链路请求失败的时候 会发送这个

谢谢VV老师!请多指教,已经困惑一个月了,怎样判断是否有断线过(很可能是这种情况),但为什么会出现断线,出现断线后怎样才能在不复位的情况下重新入网?请指教!再次感谢!

这个问题 你在普通的群里面都可以知道答案。。这里还是让TI大师帮我们解决根本问题

@Tao,

返回0x00,是正常的,Success

返回0x10,是#define afStatus_MEM_FAIL           ZMemError          /* 0x10 */

程序里面是否有动态申请内存,没有释放的,

调试方法,

在osal_memory.c文件中,把下面的宏定义打开

// For information about memory profiling, refer to SWRA204 "Heap Memory Management", section 1.5.
#if !defined OSALMEM_PROFILER
#define OSALMEM_PROFILER TRUE // Enable/disable the memory usage profiling buckets.
#endif
#if !defined OSALMEM_PROFILER_LL
#define OSALMEM_PROFILER_LL FALSE // Special profiling of the Long-Lived bucket.
#endif

用IAR调试下用户内存动态分配的Heap的使用情况,详细参考附件的文档。

6318.Heap Memory Management.pdf

@yi l

你用抓包看下,是否有断线就知道了。

你在程序里面去检查_NIB.nwkState的值,也可以知道的

typedef enum
{
NWK_INIT,
NWK_JOINING_ORPHAN,
NWK_DISC,
NWK_JOINING,
NWK_ENDDEVICE,
PAN_CHNL_SELECTION,
PAN_CHNL_VERIFY,
PAN_STARTING,
NWK_ROUTER,
NWK_REJOINING
} nwk_states_t;

0x10 我程序是会用到内存分配  但是 数据发送完后我就释放 了   还有就是0x10不是一直出现,偶尔出现。。但是这都不是核心,核心是 我发送数据 返回0X00 但是数据没有被MAC层发出去。MAC层的函数都没有被调用

VV老师  这个 宏开起来 是不是 就是系统自己分配了 。

VV老师 为什么 数据发送 memAlo 这个值会增加 当增加到 0xA55的时候 数据就发送不了了 。

@tao,

这个宏打开只是为了调试看你的动态申请的内存的情况,将来产品量产的时候肯定要关闭这个宏的。

我是怀疑,你的程序是不是有内存申请,但是没有释放的情况。

这样的话导致memory allocate不成功。

谢谢,VV老师,快过年了还抽出时间给我们解答,这个问题已经搞清楚了 ,就是内存分配问题, 我想弄清楚的不是这个  我想要知道 ,为什么内存已经分配不出内存了 ,而发送函数 居然还是返回0x00,数据都发不出去了

如果是返回的0x00,那么内存分配肯定是没问题的,不然早就return错我了。

但是内存分配成功,不一定数据能成功发送出去,还涉及到其他的问题。

还请VV老师 明细 问题点

数据是否发出去,是由AF_DATA_CONFIRM决定的。ZigBee协议的数据发送,AF_DataRequest,你可以把它看作你要寄一个快递首先联系快递公司,函数返回成功,好比快递员来收了你的物品,但是快递员收了你的物品并不代表你的货物可以100%寄到。ZigBee网络是一个很复杂的网络拓扑,不过可以给你一些经验,如果你的协调器要发数据给终端节点,终端节点可以定期调用ZDApp_AnnounceNewAddress函数(建议半分钟到一分钟为一个周期),这个函数可以随时刷新协调器到各个节点的路由路径。

当我 协调 路由组网成功后,我关闭 路由器,协调发发数据返回 0xC2。你说的是路径请求。返回0x00 是在  APSDE_DataReq返回值,这个情况下 路径是有的。只是内存分配失败会出现

谢谢各位老师的回复!现在有一点搞清了,就是终端节点失去父节点造成的,但为什么会无规律的失去父节点呢?联网很正常,有没有断电,还请各位老师和高手知道。谢谢!注大家春节愉快!

这个取决于你的程序,还有环境,wifi 等其他2.4G干扰导致,还有就是 终端节点 一般不要乱用,当作为电池设备的时候一般是用终端设备。因为终端设备本身不能接受数据,他是找父节点 获取数据的,当获取失败一定次数,终端就会断网。 父设备保存子数据的时间是7秒钟,这个时间是可以设置的,但是不要乱设置。会出问题。

你好,Aries Lord!请问下怎么调用AF_DATA_CONFIRM来确定数据是否发出去了?谢谢了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top