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.

zigbee3.0添加设备不能超过40个

Other Parts Discussed in Thread: CC2652R, CC2538, CC2592

如题, 我有30个router和20个enddevice添加到同一个协调器;不管是 先添加几个router后添加全部enddevice再添加其他router, 还是先添加30个router后添加其他enddevice时, 都会出现第40个设备无法添加

调试时发现添加第40个设备的时候, bdb_RegisterCommissioningStatusCB注册的callback会得到BDB_COMMISSIONING_NWK_STEERING的状态值为BDB_COMMISSIONING_TCLK_EX_FAILURE

设备是通过调用bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING);加入网络

  • NWK_MAX_DEVICE_LIST 为20没有修改过, 没有修改协议栈内容, 协调器的BDB_DEFAULT_TC_REQUIRE_KEY_EXCHANGE设置为FALSE
  • 添加设备时协调器调用

    zAddrType_t dstAddr;
    dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVZCZR;
    dstAddr.addrMode = AddrBroadcast;
    permit_join_timeout = message.timeout;
    ZDP_MgmtPermitJoinReq( &dstAddr, message.timeout, TRUE, FALSE);
    bdb_reportCommissioningState(BDB_COMMISSIONING_STATE_STEERING_ON_NWK, TRUE);

  • ZDSECMGR_TC_DEVICE_MAX 40
    受限于这个值,你可以试着改大一些,或者在defined symbols设置
    xTC_LINKKEY_JOIN试一下.
    你可以看我的帖子:
    e2echina.ti.com/.../156583
  • 3.0协议栈,2538硬件,这个值ZDSECMGR_TC_DEVICE_MAX改为100就不行了(一个节点都加不进去,ZC回复关联失败),改为50我这可以,请问设置为100时候是由于网络中还有其它参数限制还是内存不足造成的,急求,谢谢
  • 通常情况下1个ZC直连40个以上的ZED是很难的,建议是这样的:



    ZC-ZR-ZED

    举个例子:

    一个ZC连接10个ZR,每个ZR连接10个ZED。

    在使能CONCENTRATOR_ROUTE_CACHE的情况下尝试更改MAX_RTG_SRC_ENTRIES变得大一些。

    如果你有UART建议换成其他接口使用。

  • 这个我明白,就是单独ZC带ZE的话是有限制的,要有路由,但是我的问题是ZDSECMGR_TC_DEVICE_MAX改为100后ZC一个节点都带不起来,入网时候关联回复直接association denied。你说的这些宏我也都设置了。
    DSECMGR_TC_DEVICE_MAX=100
    NWK_MAX_DEVICE_LIST=10
    CONCENTRATOR_ENABLE=1
    CONCENTRATOR_DISCOVERY_TIME=120
    MAX_RTG_SRC_ENTRIES=100
    SRC_RTG_EXPIRY_TIME=200
    CONCENTRATOR_ROUTE_CACHE=1
    ZC的串口确实使用了,因为要用串口进行交互。
    怎么确定问题出在哪里呢?
  • 你可以尝试先禁用串口,然后把NWK_MAX_DEVICE_LIST=40试试。
  • 沒有用ZR的話,MAX_RTG_SRC_ENTRIES應該可以設定小一些,比如說設置為1就好

  • MAX_RTG_SRC_ENTRIES:

    Defines the maximum number of devices in the source routing table, which is used for Many-To-One (MTO) routing

    没有路由小一些就可以。

  • 是这样的,按照我之前的设置,NWK_MAX_DEVICE_LIST=40,串口也开着,MAX_RTG_SRC_ENTRIES设置为100,不超过40个节点入网没问题,但是其它任何设置不变动,只设置NWK_MAX_DEVICE_LIST = 100,就一个节点也入不进去了,刚才按照你说的尝试关掉串口,MAX_RTG_SRC_ENTRIES设置为1,NWK_MAX_DEVICE_LIST=80,编译后map文件:
    1 419 bytes of readonly data memory
    13 571 bytes of readwrite data memory (+ 12 288 absolute)
    上述两个占用内存值1419和13 571加起来比之前设置NWK_MAX_DEVICE_LIST=40,入网正常时还小,但是入网还是失败,和只改动NWK_MAX_DEVICE_LIST = 100出的问题一样。这是不是能排除内存空间的问题了?
  • 这个我帮你实验不了,我手里里面没有那么多板子,我用CC2652R试了一下可以正常入网。

  • 有一个问题我觉得您一直误解:就是我将ZDSECMGR_TC_DEVICE_MAX 由默认的40改为100后,是一个节点都加入不到网络中,而不是入网节点达到一个值后,最终达不到设置的100。
    所以不用那么多节点实验的。
    我这边用的2538 RAM32K,您那边2562最大RAM是80K吧,所以如果此问题是内存导致的,可能这样实验对比不出来,您那有2538的板子可以试一下吗。
    以下是我的预编译宏设置
    ZDSECMGR_TC_DEVICE_MAX=80
    ewarm
    CC2538_USE_ALTERNATE_INTERRUPT_MAP=1
    FEATURE_RESET_MACRO
    TC_LINKKEY_JOIN
    NV_INIT
    NV_RESTORE
    xZTOOL_P1
    xMT_TASK
    xMT_APP_FUNC
    xMT_SYS_FUNC
    xMT_ZDO_FUNC
    xMT_APP_CNF_FUNC
    xLCD_SUPPORTED=DEBUG
    MULTICAST_ENABLED=FALSE
    ZCL_READ
    ZCL_WRITE
    ZCL_BASIC
    xZCL_IDENTIFY
    ZCL_DOORLOCK
    ZCL_SCENES
    ZCL_GROUPS
    ZCL_REPORT_DESTINATION_DEVICE
    xZAPP_P1
    xHAL_UART_DMA=0
    HAL_PA_LNA_CC2592
    HAL_LCD=FALSE
    HAL_KEY=FALSE
    xINT_HEAP_LEN=3280
    NWK_MAX_DEVICE_LIST=10
    CONCENTRATOR_ENABLE=1
    CONCENTRATOR_DISCOVERY_TIME=120
    MAX_RTG_SRC_ENTRIES=1
    SRC_RTG_EXPIRY_TIME=200
    CONCENTRATOR_ROUTE_CACHE=1
    MTO_RREQ_LIMIT_TIME=5000
    LINK_DOWN_TRIGGER=12
    NWK_ROUTE_AGE_LIMIT=30
    BCAST_DELIVERY_TIME=100
    DEF_NWK_RADIUS=15
    DEFAULT_ROUTE_REQUEST_RADIUS=8
    ROUTE_DISCOVERY_TIME=13
    ZDNWKMGR_MIN_TRANSMISSIONS=0
    NWK_LINK_STATUS_PERIOD=30
  • 我这边没有CC2538的板子,没法帮不了你,你去发到E2E英文的吧,看一下谁能帮你试一下,我刚才试的是我可以入网,我理解你说你改了之后一个都加不进去了。
  • 好的,那你能说一下你用的协议栈版本,贴一下你的预编译宏设置吗,我试试你的看看有没有问题
  • 我用的simplelink_zigbee_sdk_plugin_1_60_00_14
    也是Z-Stack3.0的
    预编译只加入图上面那几个。
  • 感谢你们关注这个问题, 我配置是

    ewarm
    HAL_PA_LNA
    CC2538_USE_ALTERNATE_INTERRUPT_MAP=1
    FEATURE_RESET_MACRO
    SECURE=1
    TC_LINKKEY_JOIN
    NV_INIT
    NV_RESTORE
    MULTICAST_ENABLED=FALSE
    ZCL_READ
    ZCL_WRITE
    ZCL_BASIC
    ZCL_IDENTIFY
    ZCL_SCENES
    ZCL_GROUPS
    ZCL_DISCOVER
    ZCL_WINDOWCOVERING
    BDB_REPORTING
    OSC32K_CRYSTAL_INSTALLED=FALSE
    HAL_LCD=FALSE
    HAL_SPI=FALSE
    HAL_KEY=FALSE
    HAL_UART=TRUE
    HAL_UART_DMA=1
    HAL_UART_DMA_RX_MAX=100
    DEFAULT_CHANLIST=0x07FFF800
    ZCL_REPORT_CONFIGURING_DEVICE
    ZCL_REPORT_DESTINATION_DEVICE
    ZDSECMGR_TC_DEVICE_MAX=200

    我并没有发现一个设备也不能添加的情况, 是否应该将芯片完全擦除后测试

    我这里有一个协调器已经不能通过下载器重新下载了; 我编译了一个SBL的固件通过串口更新后, 再调用bdb_resetLocalAction(),似乎并不能清除NV, 设备也加不进去

  • 是这样的,在编译阶段,协议栈内部会用到APP层定义的宏,类似于ZDSECMGR_TC_DEVICE_MAX,但是显然协议栈出现了栈溢出的问题,所以最终没有效果,我曾测试过其他类似于这样的宏,也出现了没有效果的问题。

    所以有些宏参数,不能随意修改为自己想要的大小,但是限制条件又没有说明,所以很难把控。

    即使是80K的RAM,我想也会遇到类似的问题。

  • 我将ZDSECMGR_TC_DEVICE_MAX设置成200时, 其他终端和路由都能够加入到协调器; 但是协调器好像无法保存PANID等网络参数, 协调器重启后会重新创建一个网络; 改成80时, 协调器能够保存网络参数, 但是网络中的设备有出现短地址发生改变的情况, 是不是有其他限制;

    SRAM只使用了16k, 是否可以更改CC2538.icf文件完整使用32K

    有没有可能是nv不够用, CC2538的nv使用了12k的flash