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.

[参考译文] CUI 终端 UART 输入停止工作

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1023915/cui-terminal-uart-input-stops-working

此问题在 SDK 4.40.00.44中找到、并且仍出现在最新的 SDK 5.20.00.52中

两个示例"zed_sw"和"zc_light"。 "按原样"导入、未做任何更改。 已配对并已连接。

然后、如果我们一直按下 ZED CUI 终端(Putty 应用)中的键盘按钮"left"或"right"、我们会看到菜单项会快速循环更改

等等...

但是、如果我们继续按下按钮并关闭 ZC、ZED 将进入孤立状态、菜单会在几次之后发生变化、然后突然卡住、在硬件复位 ZED 之前不会对任何按下的按钮做出反应。

为什么会发生这种情况?如何解决?

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

    尊敬的 Alex:

    感谢您的报告。  我已重新创建此问题、并进一步发现 、在新加入过程中、当任何键盘按钮(不仅仅是有效输入)被保持时、也会发生此问题。  虽然  降低键盘的重复率不能解决问题、但 Zigbee 加入处理的延迟似乎会导致 UART RX 出现问题、因此我不相信它是缓冲区溢出。  此外、增加 UART FIFO 或限制每秒处理的输入数量 不会改善行为。   Cui_min_c足迹 将完全禁用 UART 输入、但允许 显示 CUI 信息。  否则、您可以考虑在加入/重新加入过程中关闭/重新打开 CUI。

    此致、
    Ryan

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

    很遗憾、因为在某些项目中、我们将使用 CUI 菜单来实现我们的目的、这种意外行为可能会破坏我们的计划。 请告诉我、如果您对此有任何修正。

    此外、我在 LED 驱动器中发现了另一个错误。

    LED_Object 结构中的参数"uint16_t togglePeriod"应为 uint32_t 否则长时间闪烁不起作用、因为节拍数不适合 uint16_t

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

    我提交了一个错误通知单、以便软件开发团队可以进一步调查 UART RX 问题。

    此致、
    Ryan

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

    好的、谢谢

    另外、让我来展示一下 LED 驱动器中的错误意味着什么、可能还不清楚。

    实际上、"toglePeriod"不是以"ms"为单位、而是以"tick"为单位。

    并且 msToTicks()函数返回 uint32_t,尽管"toglePeriod"是 uint16_t

    它看起来像是一个错误。

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

    感谢您的澄清、我们已提交第二张 TT、以便负责团队能够处理此问题。  您可以通过将 LED.c 模块直接复制到项目中并更改 source/ti/drivers/apps/LED.h 来修改 TI 驱动程序文件

    此致、
    Ryan

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

    嘿 Alex、

    我发现、通过在应用程序的 BDB 佣金状态处理中切换 UART 读取操作、我能够从卡住的 UART 读取条件中恢复。  基本上,我将 UI_toggleRad();添加到 zclSampleSw_ProcessCommissioningStatus,并在 Cui.c/h 中定义了自定义应用程序:

    void UI_toggleRead()
    {
        UART_readCancel(gUartHandle);
        UART_read(gUartHandle, gUartRxBuffer, sizeof(gUartRxBuffer));
    }

    尽管不是官方解决方案、但请检查此变通办法是否适合您的需求。

    此致、
    Ryan

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

    谢谢! 我添加了解决方案。 现在它更好、但有时仍然会发生。

    您知道如何停止 ZED 设备上的调试过程吗?

    我们的 CUI 中有两个选项可使用"安装代码"和"默认 TC-LK"开始调试。

    我们的 ZC 还具有这些选项。 当我在 ZED 和 ZC 上启动相同的选项时、它们都连接良好。

    但是、如果我在 ZC 上启动"Default"、然后错误地在 ZED 上启动"安装代码"、我会尝试在"Default"模式下再次启动它、但 ZED 无法连接。 我必须重置 ZED。

    因此、如果 ZED 开始调试、我们就不能中断它并启动新的调试过程。

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

    最初的想法是尝试使用安装代码进行调试、如果我们保留一个按钮一段时间、则 ZED 应使用默认 TC-LK 开始调试。

    这是我尝试配置默认 TC-LK 的代码。

            zstack_bdbSetActiveCentralizedLinkKeyReq_t zstack_bdbSetActiveCentralizedLinkKeyReq;
            zstack_bdbSetActiveCentralizedLinkKeyReq.zstack_CentralizedLinkKeyModes = zstack_UseDefaultGlobalTrustCenterLinkKey;
            zstack_bdbSetActiveCentralizedLinkKeyReq.pKey = NULL;
            uiApplyInstallCodeLastStatus = Zstackapi_bdbSetActiveCentralizedLinkKeyReq(uiAppEntity, &zstack_bdbSetActiveCentralizedLinkKeyReq);

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

    ZED 在循环加入中卡住-连接未固定、然后转到已初始化。 任何新的调试过程都会产生相同的结果。 如果我重新启动 ZED (即使没有对 FN 进行复位、仅进行硬件复位)、它也能再次正常工作。

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

    您是否考虑 在 ZD_Sec_mgr.h 中将 ZDSECMGR_TC_Atteme_default_key 更改为 true?  您还可以 尝试 将试运转模式设置为零的 Zstackapi_BdbStartCommissioningReq。

    此致、
    Ryan

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

    如果安装代码失败、将参数设置为 true 不会开始使用默认密钥加入。 调试模式0不会中断调试。

    似乎需要在调试失败后刷新内容。

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

    哦、结果表明、对于默认的 tc 密钥、Zstack_bdbSetActiveCentralizedLinkKeyReq.pkey 不应为 NULL。 我分配了一个包含随机数据的缓冲区、现在这两种方法都可以使用。