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.

[参考译文] CC2652R7:主题:RCP - SPINLE_STATUS_NOMEM

Guru**** 2763585 points

Other Parts Discussed in Thread: CC2652R7, SYSCONFIG, CC2652R

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1611975/cc2652r7-thread-rcp---spinel_status_nomem

器件型号: CC2652R7
Thread 中讨论的其他器件: SysConfigCC2652R

您好、

我们使用 CC2652R1/CC2652R7 作为运行 RCP 映像的 Thread 边界路由器。 OTBR 在主机处理器上运行、并通过 UART 连接到 RCP。

当超过 10 个休眠终端设备 (SED) 连接到 Thread 网络时、我们开始看到 OTBR 从 RCP 接口报告的 SPINel_STATUS_NOMEM 错误。 一段时间后、所有连接的 SED 都转换到分离状态。   

我们希望你在以下方面提供指导:

1) 是否可以增加 RCP 上的缓冲区或内存限制以避免 SPINel_STATUS_NOMEM 错误? 如果是、应调整哪些配置参数?

2) 在主机处理器的 RCP 固件端调试内存或缓冲区耗尽的建议方法是什么?

3) 是否有任何已知限制或最佳实践配置可支持 CC2652 RCP 平台上更多的休眠终端器件?

如有任何建议或调试建议、将不胜感激。

谢谢你

SEN

 

 

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

    尊敬的 Sen:

    您能否提醒我 您所使用的 ot-ti 存储库的哪个分支?  在查看 openthread Github 存储库时、 spinel_STATUS_NOMEM 似乎 是 OT_ERROR_NO_BUFS 的结果、这两者都表明缺少缓冲区空间来容纳 RCP 命令。  如果在相同的条件下在 CC2652R1 和 CC2652R7 上都发生这种情况、则这可能不是器件上内存不足的原因、因为 CC2652R7 将闪存和 RAM 近似为 CC2652R1 的两倍、因此更合理的做法确实是采用 Thread 配置。  以下是您可以尝试的一些想法:

    • SysConfig 的 UART2 模块:增加 RX/TX 环形缓冲器大小
    • configTOTAL_HEAP_SIZE( configTOTAL_HEAP_SIZE)/ FreeRTOSConfig.h:增加 configTOTAL_HEAP_SIZE src
    • openthread 存储库:修改  OPENTHREAD_CONFIG_MESSAGE_BUFFER_SIZE、OPENTHREAD_CONFIG_NUM_MESSAGE_BUFFERS 、OPENTHREAD_CONFIG_DEFAULT_SED_BUFFER_SIZE、OPENTHREAD_CONFIG_MESSAGE_USE_HEAP_ENABLE (注意:我不确定该效果,因为 OPENTHREAD_CONFIG_DEFAULT_CONFIG_DEFAULT、SED_BUFF_SIZE、OPENTERNAVENCE-CORECATION EXTERNICxx src EXTERNISH-CORE-CORECATION)    
    • openthread/config/mle.h src:  OPENTHREAD_CONFIG_MLE_MAX_CHILDS  (在较旧的线程版本中是 OPENTHREAD_CONFIG_MAX_CHILDS)  

    我怀疑最后一个要点最相关、因为 config-MLE 文档 暗示其默认值为 10。  不过、如果您需要更改 CC2652RX 堆大小或 UART 缓冲区、那么最好了解前两个问题、对于可能不是特定于平台的 openthread 存储库问题、您也可以考虑通过在 Github Issues 空间讨论论坛 (即更多观点越好!)中发布内容来参与 OpenThread 社区。

    如果您需要进一步调试 RCP 本身、则这需要 调试正在运行的目标 或使用 CCS 在加载目标配置文件的调试器会话中对 RCP 进行编程。  这是可行的、但我们应该先排空其他导联、如  

    此致、
    Ryan

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

    谢谢您、Ryan、

    现有产品  OPENTHREAD_CONFIG_MLE_MAX_CHILDS  = 64

    我们是否有任何限制将以下内容也增加到 64 个? 它看起来性能好得多、但我们仍然有一些小问题。  

    /**

     *@ref ext_src_match_data_t 中扩展地址的数量

     */

    #define PLATFORM_RADIO_EXTADD_SRC_MATCH_NUM 10 --> 64

     

    /**

     *@ref short_src_match_data_t 中的短地址数

     */

    #define PLATFORM_RADIO_SHORTADD_SRC_MATCH_NUM 10 --> 64

     

    谢谢你  

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

    限制是 CC2652R7 上的 RAM 比 CC2652R1 明显更多。  如有必要、可以增加 configTOTAL_HEAP_SIZE。  如果 CONFIG_NVSINTERNAL 区域大小需要增加、那么这 也需要修改命令链接器文件。  我目前不确定这些值中是否有任何一个存储在 NV 存储器中。   您需要将短地址/扩展地址与允许的最大子地址数匹配或超过该地址、这是合理的。  您仍面临哪些小问题?

    此致、
    Ryan

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

    您好、Ryan、

    我们有 32 个传感器。 有时、2–3 个传感器会老化并分离。 (我们将所有值设置为 64 - OPENTHREAD_CONFIG_MLE_MAX_CHILDLONT_RADIO_EXTADD_SRC_MATCH_NUM 等)  

    我们仍在调查该问题、只是从 BR (CC2652R) 中添加了一些日志。

    2026-02-03 12:55:34 notice otbr-agent[4609]: 23:43:26.988 [N] MeshForwarder-: Failed to send IPv6 ICMP6 msg, len:108, chksum:4371, ecn:no, to:0x303e, sec:yes, error:NoAck, prio:low
    2026-02-03 12:55:34 info otbr-agent[4609]: 23:43:26.988 [I] DataPollHandlr: Indirect tx to child 303e failed, attempt 4/4
    2026-02-03 12:55:34 info otbr-agent[4609]: 23:43:26.988 [I] Mac-----------: Frame tx attempt 1/1 failed, error:NoAck, len:112, seqnum:198, type:Data, src:0x3000, dst:0x303e, sec:yes, ackreq:yes
    2026-02-03 12:55:34 info otbr-agent[4609]: 23:43:26.978 [I] DataPollHandlr: Rx data poll, src:0x303e, qed_msgs:1, rss:-82, ack-fp:1

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

    您好、Ryan、

    我们有 32 个传感器。 有时、2–3 个传感器会老化并分离。 (我们将所有值设置为 64 - OPENTHREAD_CONFIG_MLE_MAX_CHILDLONT_RADIO_EXTADD_SRC_MATCH_NUM 等)  

    我们仍在调查该问题、只是从 BR (CC2652R) 中添加了一些日志。

    2026-02-03 12:55:34 notice otbr-agent[4609]: 23:43:26.988 [N] MeshForwarder-: Failed to send IPv6 ICMP6 msg, len:108, chksum:4371, ecn:no, to:0x303e, sec:yes, error:NoAck, prio:low
    2026-02-03 12:55:34 info otbr-agent[4609]: 23:43:26.988 [I] DataPollHandlr: Indirect tx to child 303e failed, attempt 4/4
    2026-02-03 12:55:34 info otbr-agent[4609]: 23:43:26.988 [I] Mac-----------: Frame tx attempt 1/1 failed, error:NoAck, len:112, seqnum:198, type:Data, src:0x3000, dst:0x303e, sec:yes, ackreq:yes
    2026-02-03 12:55:34 info otbr-agent[4609]: 23:43:26.978 [I] DataPollHandlr: Rx data poll, src:0x303e, qed_msgs:1, rss:-82, ack-fp:1

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

    您是否已检查儿童老化参数并确认这些传感器已在超时窗口内检查?  传感器是否有任何分离的模式或逻辑?

    此致、
    Ryan

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

    谢谢、Ryan。 配置和轮询看起来不错。

    #define SED_POLL_PERIOD_MS 180000 // 3 分钟
    #define SED_CHIR_TIMEOUT_SEC 900 // 15 分钟

    我们想确认如前所述设置 64 个 SED 是否会导致任何与存储器相关的问题。

    我们目前正在调查、将随时向您发布信息。