之前一直存在疑惑,今天又做了一个实验,通过抓包发现了新的进展,所以另起一个新帖来说明问题。其中Mac:c4:22为collector e4:7f为sensor
1.正常烧录完一个版本的collector与sensor之后,建立了通信,此时通过抓包数据也可看到他们之间建立了连接,如下图所示。调试信息也正常。
2.collector断电一段时间,sensor变为Orphan,之后重新上电,抓包数据出现Coordinator …. sensor从新连接上collector,调试信息正常打印
3.collector增加一条打印信息,以确认是两个版本,重刷固件之后(在这个过程sensor变为孤节点),成功之后。两者都重启。通过抓包数据可知了,两者确实建立了连接,但是collector没有接受到sensor的数据,或者是接收到了数据,但是不知道这个数据跑到哪里接收了。所以collector调试信息打印不出来,输出异常。(这个地方是解决问题的关键)
4.我将提供转包软件,请各位Ti的大神们帮帮看看,时间挺紧迫的。万分感谢!Orphan4.rar
Alvin Chen:
你抓包有ACK的,说明接收正常。数据在static void dataIndCB(ApiMac_mcpsDataInd_t *pDataInd)
lin shi chang:
回复 Alvin Chen:
您好,我今天测试了一下,在dataInd()中打印了调试信息。发现重连之后根本就没有进入到该函数中。但是抓包又可以看到sensor已经连接,并有ack。目前的疑惑还是不知道,重连之后,sensor的数据会到哪个函数中?
lin shi chang:
回复 Alvin Chen:
而且我用原有的例程,一点修改都没有,也会出现这种情况。请您按照这个步骤调试一下,看下抓包信息。1.烧录collector 2.烧录sensor 3.在collector添加一条debug信息,重新编译烧录。4.重启sensor。看看您那边有没有出现这种现象。
Alvin Chen:
回复 lin shi chang:
如图所示下面是有ACK的。你可以在你的dataIndCB (collector)打个断点看一下, ACK可以在sensor的 dataCnfCB 下面的case 分支打断点。
else if(pDataCnf->status == ApiMac_status_success)
{
Csf_updateFrameCounter(NULL, pDataCnf->frameCntr);
}
lin shi chang:
回复 Alvin Chen:
您好,我按照您说的方法进行了调试。发现collector端进不了这个断点。但是有ACK,这个是什么情况呢?
lin shi chang:
回复 Alvin Chen:
我是按照刚刚给您发的步骤操作的,重新烧录之后就进不去了。一开始还是可以进去的。您那边能复现一下吗?
Alvin Chen:
回复 lin shi chang:
无法复现请看sensor的截图:
1.sensor入网后我在collector 打了一个接收断点所以卡住,无法回复ACK。所以状态变为了5即orphan 孤儿节点。
State Changed: 3State Changed: 5
2.后续继续向下执行打开断点State Changed: 4 也就是rejoin到原有网络。
Restarted: 0x1Channel: 0State Changed: 43重复1的操作,收到数据卡住辨别为孤儿节点State Changed: 5
lin shi chang:
回复 Alvin Chen:
这个过程我也调试出来了,但是这个是一开始连接成功没有换collector版本之前的操作。但是我换了一个collector的版本(假设以后要更新collector的版本)之后,就不可以了。我现在要解决的问题就是,collector换了版本之后,sensor连接上了,也有ACK。但是collector为什么不会进行数据的处理。
Alvin Chen:
回复 lin shi chang:
你开始不是说你重连之后无法进入dataIndCB?
还有什么叫“换了一个collector的版本”
lin shi chang:
回复 Alvin Chen:
我说的问题一直都是换了一个collector版本之后,重连无法进入dataIndCB。提问的第三点就有说明。
"换一个版本"就是我在原先的基础之上,加了一条打印字符串的debug信息。用来和之前的版本区分。然后重新烧录做的仿真调试。