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.

[参考译文] CC2530:ZStack 3.0.2 BDB (最基本的方案)

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

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1088222/cc2530-zstack-3-0-2-bdb-in-the-most-basic-scenario

部件号:CC2530
在“线程:Z 堆栈”中讨论的其它部件,

大家好,

我正在尝试将我的 ZStack 1.2项目迁移到 ZStack 3.0.2。

我有最常见和最简单的方案。  

-电池供电 SED

-每15秒轮询一次以获取属性更新

它 不支持绑定,不支持 EZ,不支持 TL ...仅支持简单的方案-自动加入现有网络-不再需要。

作为我迁移的基础,我从示例中获取了通用应用程序。

在 ZStack 1.2中,默认情况下,设备引导时,它尝试加入或重新加入网络。 这似乎不会在 ZStack 3.0.2中自动发生。

我在这里的判词中发现, 在 init 方法中可能需要调用 bdb_StartCommissing(0)。

问题 nr.1:这是真的吗?  在初始化过程中,我是否应该调用 bdb_StartCommissing(0)? 它是否会照顾“首次”加入并重新加入?

问题 n.2:我对该0的配置很小,因为我对 bdb_StartCommission()的参数很小。 通常,文档中有许多示例,例如通过了“BDB_TUSING _MODE_NWK_Steering | BDB_TUSING _MODE_Finding_Binding”。 但只要我不打算支持约束,对我来说就没有太多意义了。

问题 n.3:在 genericApp 中提供的默认 BDB 相关代码是否会处理父项丢失(更改父项/重新加入)的情况,或者我是否需要在该处实施任何其他操作?

问题 n.3:在 ZStack 3.0.2中同时使用 zcl_SendReportCmd 是否仍然正常? 我注意到 有 bdb_RepChangedAttrValue。 它是否具有相同的目的? 例如,如果我想将定期报告发送给父级,而不需要任何其他报告配置。

问题 nr.4:当设备更改其网络状态时,我是否必须更改轮询速率? 例如,如果它成为孤儿? 我的轮询率在配置中设置为10秒,我使用轮询来写入自定义属性。 但是,在父母失去或参加投票的情况下,是否有必要使投票更加激烈? 或者是自动完成还是我不应该关心?

非常感谢!

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

    1.是的。

    2.如果您不使用绑定,请不要使用  BDB_TUSing_MODE_Finding_Binding

    3. Z-Stack 3.0.2应注意孤立案例,可以使用  zcl_SendReportCmd

    4.当设备处于孤立状态时,不需要更改轮询速率  

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

    感谢您的回复。 但这对我来说却不起作用。

    当我第一次刷新 Zed 并 在 init 中调用 bdb_StartCommissing(0)时,设备不会尝试加入网络。 这没什么作用。

    我在 bdb_StartCommissioning 中调试了正在发生的事情,它似乎最终出现在以下部分:

    IF (bdbAttributes.bdbCommissioningMode ==0)

    //设置初始化状态并报告失败
    bdbCommissioningProcedureState.bdbCommissioningState = BDB_initialization;
    BDB_reportingState (BDB_initialization,false);
    返回;
    }

    就我所知,它只是将初始化设置为失败。

    我嗅了探,设备甚至没有尝试加入网络...什么都没有...

    可能是设备从未出厂重置的问题? 我想让 ZStack 1.2中的自动过程—Fresh 设备在启动时加入可用网络。 我有什么问题吗?

    谢谢你

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

    我的问题是否在于我的终端设备睡眠不足? 从调试器看来,它会进入 状态为“进行中”的“BDB_试运行 初始化”,然后休眠。 是否需要 在我自己的计时器中定期调用 bdb_StartCommission(0)? 如果是,有没有例子可以说明如何做到这一点? 因为我不确定应该检查哪种情况来停止重试。 它不是自动处理的?

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

    对于 CC2530 Z-Stack 3.0用例,建议使用以下方法:

      bdb_StartCommissioning(BDB_COMMISSIONING_REJOIN_EXISTING_NETWORK_ON_STARTUP);
      
      bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING);

    我用 SampleSwitch 项目 的函数作为示例, 其中 UI_Init 执行第一 个 bdb_StartCommissioning 调用, uiActionStartCommiting 执行第二个。  由于 GenericApp 不包括 UI, 因此在初始化期间应执行 BDB_试运行 重新加入现有网络以启动(0x00), 在应发现并加入网络时应执行 BDB_试运行 模式下的转向(0x01)(如果使用 SmartRF05EB 硬件开发解决方案和默认 GenericApp 开发示例,也可以通过 HAL_KEY _SW_2来实现)。  我已删除 BDB_试运行 模式_查找_绑定,因为您已表明您不想支持绑定。  如果  设备在第一次尝试时找不到要加入的网络,您可以管理 zclGenericApp_ProcessCommissioningStatus 的 BDB_试运行_Nwk_steering 案例,例如启动计时器,在确定的秒数后再尝试一次。

    此致,
    瑞安

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

    非常感谢瑞安

    这是否意味着,如果我不想通过按键启动调试,而是要在初始化期间自动调用行中的两种方法? 或者,什么地方更适合调用  BDB_TUSING _Nwk_Steering?

    我对命名也有点困惑... 我认为 Nwk_steering 意味着担任协调员...所以我在这里完全错了,可能是:(

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

    您可以尝试连续调用 bdb_StartCommissing,但我不建议这样做,因为此函数会立即返回而不提供状态值。 过去,我启动了一个单触发计时  器,在初始化几秒钟后调用 BDB_试运行_MODE_Nwk_Steering。  另一个想法是等待 zclGenericApp_ProcessCommissioningStatus 中的 BDB_试运行 初始化案例(失败状态或其他状态),然后再开始网络转向。  BDB_试运行 模式 NWK_Formation 仅适用于协调员, 任何节点类型(ZC,ZR 或 Zed)都使用 BDB_试运行 模式指导来查找和加入网络。

    此致,
    瑞安

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

    非常感谢瑞安。 现在我终于了解了 BDB 状态机背后的概念。