Part Number:CC2530
使用的API是NLME_LeaveReq();
代码如下
NLME_LeaveReq_t req;
unsigned char tempExadd[8];
APSME_LookupExtAddr(EndDev.SAddr[ID],tempExadd);//终端的MAC地址
req.extAddr = tempExadd;
req.removeChildren = FALSE;
req.rejoin = TRUE;
req.silent = FALSE;NLME_LeaveReq(&req);
协调器在调用后,终端的下一次数据发送协调器不会返回Ack。(在抓包中没有看到协调器广播离网指令,只能观察到协调器不返回终端发送消息对应的ACK)
而后在协调器打开网络许可后,终端设备无法加入,表现为 终端:Asscioation Request 协调器 Asscioation Response 终端不断Data Request 协调器没有进一步回应
qh h:
请问一下,如果协调器要手动完全清除某一个子设备的相关信息,使得子设备在调用bdb_resetLocalAction() 后可以再次入网
应当去清除什么位置的什么数据?
,
Kevin Qiu1:
需要清除NV信息,然后复位设备
zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);SystemReset();
,
qh h:
标题问题细化
1.关于离网API NLME_LeaveReq(); 协调器设备调用使子设备离网,返回SUCCESS,但是并没有发出对应的离网指令
如果由子设备调用使自身离网,可以向协调器发送离网指令并成功离网
2.子设备成功使自身离网后,再次加入该网络时,子设备会不断Data Request
若将协调器Reset,子设备可以重新入网。
请问这是在接收到Leave命令后需要进行什么手动清除操作吗?
,
Kevin Qiu1:
应该是Permit Join没有打开,导致无法重新入网
,
qh h:
Permit Join已打开,并非该原因
我将协议栈更新为3.0.2后发生了以下变化
1.协调器调用NLME_LeaveReq()后可以向子设备发布消息使其离网
且离网后子设备的重连也很顺利(重复20次均成功),即该贴的问题已解决
2.ztack3.0.2新问题:在子设备入网后在不断的Data Request,但是协调器没有回应
大约6秒后子设备发送Leave离开网络
程序是从3.0.1直接移植而来的,在3.0.1中并没有出现该现象
0407.data.zip
,
qh h:
问题在于#define INT_HEAP_LEN 3072
移植后没第一时间裁剪协议栈所以协调器可以成功发送离网指令
将堆栈缩小后协调器无法发送离网指令
终端对于堆栈的占用较小因此在缩减后依旧可以继续发送离网指令
,
Kevin Qiu1:
谢谢反馈