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.

终端在协调器断电情况下,反复找回网络多次重启,可能重新寻找网络而不是恢复原来的网络

终端在协调器断电情况下,反复找回网络多次重启,可能重新寻找网络而不是恢复原来的网络,

正常应该不断的rejoin,但有个别时候个别终端就自动变成了join了,去新发现一个网络的状态了。

搜索协议栈devStartMode = MODE_JOIN;只有4处。

是否是这4处中某处吧终端的rejoin改成了join呢?能帮我分析这4处吗?

1.设备初始化时候读取nv,确定设备类型的时候。难道读取nv失败,启动项的nv坏掉了吗

// If AIB_apsUseExtendedPANID is set to a non-zero value by commissioning
// The device shall do rejoin the network. Otherwise, do normal join
if ( nwk_ExtPANIDValid( AIB_apsUseExtendedPANID ) == false )
{
devStartMode = MODE_JOIN; // Assume joining
}

2.路由恢复网络时

if ( (devStartMode == MODE_RESUME) && (++retryCnt >= MAX_RESUME_RETRY) )
{
if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
devStartMode = MODE_JOIN;
else

3.终端恢复网络时。_NIB.nwkPanId什么情况下会自动变成无效吗?

if ( devStartMode == MODE_RESUME )
{
if ( ++retryCnt <= MAX_RESUME_RETRY )
{
if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
devStartMode = MODE_JOIN;
else

4.紧接着3的代码,AIB_apsUseInsecureJoin 代表什么意思?

// Do a normal join to the network after certain times of rejoin retries
else if( AIB_apsUseInsecureJoin == true )
{
devStartMode = MODE_JOIN;
}

  • 出现第四种可能性比较大

    4.紧接着3的代码,AIB_apsUseInsecureJoin 代表什么意思?

    // Do a normal join to the network after certain times of rejoin retries
    else if( AIB_apsUseInsecureJoin == true )
    {
    devStartMode = MODE_JOIN;
    }

    AIB_apsUseInsecureJoin 就是是否允许重新开始join,因为join刚开始是mac 层的Association,没有加密的。

  • AIB_apsUseInsecureJoin 什么情况等于true呢?此处是重连,为什么要变成join呢?是出于什么目的考虑呢?

    从使用的角度考虑,加入过网络的设备是不希望它自己重新组网的,除非手动操作