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.

[参考译文] 在运行时更改通道

Guru**** 2465890 points
Other Parts Discussed in Thread: CC2530, Z-STACK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1174426/change-channel-during-runtime

Thread 中讨论的其他器件:CC2530Z-STACK

您好!

在运行时是否有任何方法可以更改信道、因此下次恢复网络时、它会有新的信道?

我尝试使用 SYS_OSAL_NV_WRITE (ID=0x0084)写入 NVRAM、之后进行软复位、但似乎没有任何变化。

BR、

Aiman

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ryan、该命令的工作方式很有魅力。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否有任何理由不能像我们以前在 CC253x Z-Stack 中所做的那样、对当前 CC26xx Z-Stack 的 NV _NIB 进行操作来更改通道?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 YiKai、

    我尚未研究是否可以在节点加入或形成网络后直接修改 Zigbee 通道的 NV NIB。  但是,无提示地执行此操作会 破坏网络中其他节点之间的连接,因为它们尚未获悉通道更改。  建议 网络管理器层监控通道更改并在切换之前通知网络中的其他节点。  否则、只需恢复出厂设置即可在新通道上创建或加入不同的网络。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     是的、我知道修改 NIB 以更改信道会产生什么后果、我只将其用于测试睡眠终端设备、不管怎样、这将扫描信道。 我想知道 为什么 CC253x Z-Stack 使用的是 bot 而不是 CC26xx Z-Stack。 如果您知道确切的原因、请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ZDO_Mgmt_NWK_UPDATE_REQ 似乎能够修改 NIB 以更改通道、但  可能还需要一些其他 API (NLME_SetUpdateID、ZMacSetReq、ZDUAP_NWKStateUpdateCB)来实现所需的功能。

    //zd_nwk_mgr.c
    
      if ( events & ZDNWKMGR_CHANNEL_CHANGE_EVT )
      {
        // Switch channel
        _NIB.nwkLogicalChannel = ZDNwkMgr_NewChannel;
        ZMacSetReq( ZMacChannel, &ZDNwkMgr_NewChannel );
    
        // Our Channel has been changed -- notify to save info into NV
        ZDApp_NwkStateUpdateCB();
    
        // Reset the total transmit count and the transmit failure counters
        _NIB.nwkTotalTransmissions = 0;
        nwkTransmissionFailures( TRUE );
    
        return ( events ^ ZDNWKMGR_CHANNEL_CHANGE_EVT );
      }
      
    //...
      else if ( Req.scanDuration == 0xFE )
      {
        // Request is to change Channel. The command provide a new active
        // channel as a single channel in the channelMask.
        // Only process when the nwkUpdateId is more recent (accounting for uint8 wraparound)
        if ( Req.nwkUpdateId > _NIB.nwkUpdateId || ( Req.nwkUpdateId == 0 && _NIB.nwkUpdateId == 0xFF ) )
        {
          uint8_t i;
    
          // Set update ID in the Beacon
          NLME_SetUpdateID(Req.nwkUpdateId);
    
          // Find out the new active channel
          for ( i = 0; i < ED_SCAN_MAXCHANNELS; i++ )
          {
            if ( ( (uint32_t)1 << i ) & Req.channelMask )
            {
              break;
            }
          }
    
          if ( _NIB.nwkLogicalChannel != i )
          {
            ZDNwkMgr_NewChannel = i;
    
            // Upon receipt of a Mgmt_NWK_Update_req with a change of channels,
            // the local network manager shall set a timer equal to the
            // nwkNetworkBroadcastDeliveryTime and shall switch channels upon
            // expiration of this timer.  Each node shall also increment the
            // nwkUpdateId parameter and also reset the total transmit count
            // and the transmit failure counters.
            OsalPortTimers_startTimer( ZDNwkMgr_TaskID, ZDNWKMGR_CHANNEL_CHANGE_EVT,
                                ZDNWKMGR_BCAST_DELIVERY_TIME );
          }
        }
      }

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    的问题是、我们为什么无法写入_NIB 的 NV ID 来修改 CC26xx Z-stack 中的信道信息、该 Z-stack 以前在 CC2530 Z-stack 中工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,YK,

    我可以复制此行为、并相信它与自传统 CC253X Z-Stack 3.0.2以来发生变化的 osal NV 驱动程序写入操作和读取功能相关、请留出更多时间让我进一步调查。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您对此进行调查、并期待收到您的答复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、此消息似乎未发布...

    我 注意  到、在向 ZCD_NV_NIB 写入一个字节后、SYS_OSAL_NV_Read -> MT_SysOsalNVRead -> osal_NV_Read -> osal_NV_READ_Ex -> readItem -> NVOCMP_readItem-> NVOCMP_readItems-> NVOCMP_INSTRATE-> NVOCMP_INSTRUPT INTF 返回损坏的数据。 似乎 MT_SYS_OSAL_NV_WRITE -> MT_SysOsalNVWrite -> osal_NV_WRITE 似乎不再考虑偏移、因此可能会写入不正确的字节、从而导致损坏错误、返回空白 NV 读取。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否会在将来发出 TI 内部错误通知以解决此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用更新的信息编辑了我的回复。

    我已经向 Zigbee 软件开发团队提交了一个 TT、以便他们可以确保 Z-Stack 正确访问和使用 NV 驱动程序。  这可能会导致在2023年上半年实施的解决方案。

    如果不建议更改解决方案、则可能 需要同时更新整个 NV 项目的内容。  在这种情况下、我会在监控和测试 API 中添加此类披露、以使用户了解此限制。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢