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.

[参考译文] CC2652P7:Z-Stack:ZigBee 协调器限制为 255 个关联器件、而不管 NWK_MAX_DEVICE_LIST 如何

Guru**** 2835675 points

Other Parts Discussed in Thread: CC2652P7

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1628171/cc2652p7-z-stack-zigbee-coordinator-limited-to-255-associated-devices-regardless-of-nwk_max_device_list

器件型号: CC2652P7

我们使用 CC2652P7 作为 Zigbee 协调器、需要支持超过 255 个相关器件。 将 NWK_MAX_DEVICE_LIST 设置为任何值≥255 都会导致 协调器在超过 256 个连接的器件后失败、但无法正确处理高于该阈值的关联。 这在 SDK 8.32.00.07 和 几个之前的版本上得到确认。

 环境:
 -设备:CC2652P7
 - SDK:SimpleLink CC13xx/CC26xx SDK 8.32.00.07(在许多以前的版本上也已确认)
 - CCS:20.5.0
 编译器:TI Arm Clang 4.0.4.LTS

 在调查根本原因后、我们发现 libZStack_nwk_all.a 中的 assoc_list.o 是使用 deviceTableIndex_t = uint8_t 进行编译的、这意味着不使用 -DLARGE_DEVICE_TABLE、NWK_MAX_DEVICES≤255。 由于此文件仅作为二进制文件分发、因此无法使用正确的标志对其重新编译。 当应用程序设置 NWK_MAX_DEVICE_LIST = 300 时、该库会静默地将 gNWK_MAX_DEVICE_LIST 读取为 1 字节值、获取 45、而不是 301。 我们在设备上确认了以下内容:调用 AssocAddNew 300 次、只有 45 次成功;AssocCount 也返回 45 次。

 该修复程序已存在于 SDK 头文件中:large_device_table 无条件强制 deviceTableIndex_t = uint16_t。 它在构建 出厂库时根本不使用、由于源代码不可用、因此我们无法自行应用它。

 我们想问一下是否可以像其他文件(如 Nwk_globals.c)那样访问 assoc_list.c 和 addr_mgr.c 的源文件 或者、使用-DLARGE_DEVICE_TABLE 编译的库变体可以解决该问题。 我们还想标记此标记、以便在未来的 SDK 版本中进行更正。

如果需要、我们可以提供更多详细信息、但以上信息 足以重现和验证您的问题、并确定修复路径。

assoclist_bug_demo.c 

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

    尊敬的 Tiago:

    感谢您对您的情况进行简要而全面的描述。  与网状网络相比、您是否计划实施星形网络?  Zigbee 协议旨在让路由器和终端设备与附近的其他路由器关联、而不是直接与协调器关联。  协调器不应该或不支持直接与 255 多个器件关联。  Zigbee 网络应在整个路由网络中均匀地分配设备、以支持网状拓扑。   ZDSECCMGR_TC_DEVICE_MAX 决定了协调器上存储的唯一 TCLK 的数量、并且是一个 16 位值。  与协调器关联的设备数量不等于 Zigbee 网络上允许的设备总数、因为终端设备和路由器可以与其他路由器关联。  请允许我有时间在内部与 TI 利益相关者同步您的情况。

    此致、
    Ryan

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

    您好、Ryan、

    感谢您的澄清。 我们确实在使用带路由器的网状网络、我们知道 ZDSECMGR_TC_DEVICE_MAX 控制网络上的设备总数、而关联表是每个节点的。 我们已经调整了 ZDSECMGR_TC_DEVICE_MAX 和所有相关的 NV 大小参数以适应更大的网络、但我们仍然不能超过 256 个器件。

    我想澄清一下、将大量器件与单个节点关联在本例中尤为重要。 这是一个专有的应用程序、其中设备的通信频率非常低、因此有关带宽和网格分配的典型问题并非以同样的方式适用、我们了解这种情况的所有含义。 但我们并不在寻找通用的解决方案;使用单个协调器或路由器可靠地处理超过 255 个直接关联的设备对我们来说非常有价值。

    我们已经拥有拥有数千台设备的生产网络、但目前、我们通过部署额外的协调器来克服这一限制。 其中一些设备无论如何都是必要的、但在某些情况下、能够在每个节点关联更多设备可能会减少所需的总体协调器数量。

    堆栈似乎已经在定义了 LARGE_DEVICE_TABLE 且已有类型切换机制的情况下支持它、并且修复程序似乎与使用正确标志重新编译库一样简单、因此我们认为这是一个值得实现的改进、这也是我们提请您注意的原因。


    此致、

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

    感谢您提供更多信息。  我必须向管理层提出此请求、请允许我有时间在内部进一步讨论并与您联系。

    此致、
    Ryan