各位网友,大神们,我最近遇到一个很怪的问题,小弟实在分析不出来,特此来求救的。
我的 终端设备(大概有4个终端设备)入网后每20S向协调器上报一次数据,我的终端设备开启了POWER_SAVING,NV_INIT,NV_RESTORE,WDT_IN_PM1,但测试发现时间一长就有终端设备掉线了,而且不是一个终端设备出现这种现象,测试时差不多都掉过,掉线后再也不会上报数据(上报的数据是用串口输出的,这样方便查看数据),这个时间是随机的,有时时间长一点掉线有时时间短一点就掉了。终端设备采用2节7号电池升压到3.2V供电,电池电量充足。测试时终端设备和协调器的距离大概在2-5米。通讯距离问题应该不存在。
程序是TI的CC2530 z-stack 里的SampleApp改的,其他的没什么该动,就改了应用部分上报数据和POWER_SAVING,NV_INIT,NV_RESTORE,WDT_IN_PM1,宏定义。电路板用的是公司做的,(电路板的问题可能性不大,因为电路板很简单,只是判断一个IO口的高低电平,20S上报一次这个IO口的状态,几乎没有外设)。
我在程序中还做了一个入网成功后会上报一个入网成功+终端设备短地址的上报机制,理论上来说只有入网成功时会上报一次数据,但现实是偶尔就会收到这种入网成功的数据。我估计就是终端设备频繁掉线然后又重新加入到网络导致这种数据的上报。假如有一次入网没成功,那么就会出现一直掉线的情况了。
那么问题来了,是什么原因导致的呢?请大家帮忙分析下,谢谢了。
Viki Shi:
协调器有没有添加NV_RESTORE? 终端掉线以后有没有抓包看过?
zhi yong nie:
回复 Viki Shi:
协调器添加了NV_RESTORE,终端掉线以后没有抓过包,但我知道它一直在寻找网络加入
#ifdef POWER_SAVING
if(initFailCounter++ > NWK_INIT_fAIL_MAX ) { timecont++; if(timecont<180) //30分钟内 osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, 3000 );//约7秒一个循环 else if(timecont<3000) osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, 10000 ); //约25秒一个循环 else //24小时内 { ZDApp_StopJoiningCycle();//停止寻找入网络 timecont=0; } } else { osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, 10000 ); } initFailCounter = 0; } else { ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode, DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER ); }#endif
这是我的终端设备掉线后重新联网的机制,我等下抓包看看,把具体数据在上传给你看看。
感谢你的回答。
TI中文支持网