This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2530: zigbee3.0.1协议中关于终端设备主动/被动离网的问题

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 协调器没有进一步回应

  • 请问一下,如果协调器要手动完全清除某一个子设备的相关信息,使得子设备在调用bdb_resetLocalAction() 后可以再次入网

    应当去清除什么位置的什么数据?

  • 需要清除NV信息,然后复位设备

    zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    SystemReset();

  • 标题问题细化

    1.关于离网API  NLME_LeaveReq(); 协调器设备调用使子设备离网,返回SUCCESS,但是并没有发出对应的离网指令

    如果由子设备调用使自身离网,可以向协调器发送离网指令并成功离网

    2.子设备成功使自身离网后,再次加入该网络时,子设备会不断Data Request

    若将协调器Reset,子设备可以重新入网。

    请问这是在接收到Leave命令后需要进行什么手动清除操作吗?

  • 应该是Permit Join没有打开,导致无法重新入网

  • 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

  • 问题在于#define INT_HEAP_LEN  3072

    移植后没第一时间裁剪协议栈所以协调器可以成功发送离网指令

    将堆栈缩小后协调器无法发送离网指令

    终端对于堆栈的占用较小因此在缩减后依旧可以继续发送离网指令