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.

[参考译文] CC2652RB:温度传感器在无明显图形的情况下随机断开

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1417202/cc2652rb-temperature-sensor-randomly-disconnects-with-no-apparent-pattern

器件型号:CC2652RB
主题中讨论的其他器件: CC2531

工具与软件:

我制作了一个具有两个端点的温度传感器:一个用于 SHT 传感器、另一个用于 NTC。 一切似乎都按预期工作、传感器正确报告所有值、但经过一段时间后、它似乎随机断开。 它可能是一两天,但有些可能会持续几个星期,直到随机死亡。 它们将在重新供电后重新连接(重新供电后、我可以在 Z2M 日志中看到器件通知消息)。 如果器件长时间无电、则必须再次手动修复才能正常工作。

我尝试了一个 SONOFF 协调器和一个 UZG 协调器,行为是相同的:随机断线后不同的天/周数

我无法让嗅探器工作(在2台 PC 上尝试在我购买的嗅探器上写入固件)、但考虑到传感器可能需要数天/数周时间才能死亡、使用嗅探器进行检测非常困难。 我使用的是 SDK 版本6.20。 如果有人愿意查看、我会附上完整的源代码。

其他人是否遇到过这样的行为? 我可以在哪里更深入地探究该问题以尝试找出可能的原因?  

e2e.ti.com/.../3288.ZED_5F00_AFT_5F00_TempSen.rar

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

    您好、V:

    我们可以尝试加快数据包传输、例如、如果器件每分钟报告一次、那么将其更改为每秒可以帮助更快地重现问题。 您是否能够增加每秒/分钟的连接或传输总量?   

    谢谢!
    Alex F

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

    Alex、您好!

    你是指轮询周期吗? 我使用30秒的轮询周期来节省电池电量、但我每10秒发送一次报告消息。 我深入研究了这一点、当发送报告消息的频率超过最短报告时间时、这些消息似乎会被忽略、因此我假设这些消息没有任何效果、除非我将最小报告时间设置为小于我轮询传感器和发送报告的速率。

    无论如何、我将创建一个轮询周期为3秒(示例项目的默认值)的新构建、并让它们运行、看看这是否会产生任何影响。 这是不可取的、因为我的目标是实现几个月的电池寿命、相当于现成的产品。

    您是否指的是其他增加消息计数的方法?

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

    大家好!

    我怀疑我的协调器可能有一些问题、所以我刷写了另外6个传感器和 zed_temperaturesensor_lp_CC2652rb_tirtos_ticlang 示例项目、并且在12小时内其中一个传感器已经断电。 这是否也是由示例工程引起的?

    TI 的 Zigbee Stack 实施中是否存在任何可能导致意外断开的已知错误? 我拥有的两个协调器(Son Off 和 UZG)都使用 CC2652 uC、因此我想他们只是采用了 TI 提供的示例项目、并附加了一些额外的功能来满足他们的需求。

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

    您好、V:

    您是否碰巧有能够抓取 Zigbee 数据包(Wireshark)的监听器? 通过这种方法、我们可以检查传出数据包以查看是否报告了一些错误。

    关于您的第二个回复主题、我可以查看发布说明中是否有任何与此相关的内容、尽管正如您提到的、协调器可能会添加一些我们不知道的额外功能。  

    您是否碰巧有我们可以在此处使用的 CC2652RB (或 CC26xx) LaunchPad?  

    谢谢!
    Alex F

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

    您好!

    我确实有一个额外的 LaunchPad、可以尝试用作监听器、尽管在上次更新后的过去24小时内、我的12个 LaunchPad 中没有传感器出现故障。

    我与同事更多地讨论了这些问题、还有一个问题:ZStack API 本质上任务安全吗? 我需要在内部执行一项附加任务、对温度传感器进行轮询并发出 A  Zstackapi_BdbRepChangedAttrValueReq 它将消耗多少电量。 在另一个线程中这样做是安全的(不使用任何 muteness/semaphores ),还是我应该只在主  zclSampleTemperatureSensor_Process_loop 中执行它 ?

    将共享更多代码详细信息。

    内部温度 SENSOR_DATA:

      // *** Temperature Measurement Attriubtes ***
      {
        ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT,
        { // Attribute record
          ATTRID_TEMPERATURE_MEASUREMENT_MEASURED_VALUE,
          ZCL_DATATYPE_INT16,
          ACCESS_CONTROL_READ | ACCESS_REPORTABLE,
          (void *)&zclSampleTemperatureSensor_MeasuredValue // value to hold temperature
        }
      },

    我在传感器轮询线程内调用函数以发送可报告的值:

    void reportTemperatureMeasurement(int16_t temp,
                                      zstack_bdbRepChangedAttrValueReq_t *zReq)
    {
        if (NULL == zReq)
        {
            return;
        }
    
        zclSampleTemperatureSensor_MeasuredValue = temp;
    
    #ifdef BDB_REPORTING
        zReq->attrID = ATTRID_TEMPERATURE_MEASUREMENT_MEASURED_VALUE;
        zReq->cluster = ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT;
        zReq->endpoint = SAMPLETEMPERATURESENSOR_ENDPOINT;
    
        zstack_ZStatusValues response = Zstackapi_bdbRepChangedAttrValueReq(
                appServiceTaskId, zReq);
    #endif
    
    }

    我使用的附加任务延迟函数、用于进行传感器测量和其他操作:

    void customTaskSleepMs(uint16_t ms)
    {
        size_t ticksToSleep = 0;
    
        ticksToSleep = ms * (1000 / Clock_tickPeriod);
    
        Task_sleep(ticksToSleep);
    }

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

    您好、V:

    ZStack 应该安全(不会崩溃)。 您的代码看起来正常、  Zstackapi_BdbRepChangedAttrValueReq  应该能够根据需要进行调用(因为示例照明示例中的另一个函数以类似的方式使用它、并且我看到您的代码与下面的代码片段匹配)。  

    谢谢!
    Alex F

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

    非常感谢您的补充说明和信息。 我还在亏损... 现在已经有36个小时了、12个传感器都已启动并正常运行。  

    我想尝试嗅探一些 ZigBee 流量、但我需要您提供更多帮助-也许您在这方面的经验更好:

    1. 可以使用哪些可靠的监听器? 我购买了 Sonoff CC2531监听器、但无法在两台不同的 PC 上进行刷写(我的电脑可能有缺陷)。
    2. 我怎样才能在没有损失的情况下长时间嗅出大量的流量? 在观察这些传感器的工作方式时、我可能需要在长达一周内嗅探12个传感器、以避免出现故障。 如何实现?

    我看到,在你张贴的狙击中,变量 zclabiroclSamoff Light_On 被修改了,没有用信标和互斥体保护它。 我将在 不使用信号量的情况下修改在不同线程上下文中调用的函数内的这个变量(请参阅我之前的回复中的 reportTemperatureMeasurement)。 这是否会导致一些问题? 我曾尝试声明一个新的二进制信标、但无论我使用 BIOS_WAIT_FOREVER 或不同数量的节拍、代码似乎都会在挂起时挂起。 该调试器告诉我该程序在 Power_sleep 中、似乎永远不会被唤醒。

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

    您好、V:  

    我还在损失... 现在已经有36个小时了、12个传感器都已启动并正常运行。  [报价]

    -这里没有问题,有时当我们希望它"不工作"最有效! 只是问,但当你注意到原来的崩溃是在嘈杂的环境中?  

    1.我面前有一个 CC2531、我要执行以下步骤:  

    a.转到 ciffer 的下载文件夹并找到以下十六进制文件: C:\Program Files (x86)\Texas Instruments\SmartRF Tools\Packet Sniffer\bin\general\firmware (ciffer_FW_CC2531.hex)。

    b.将软件狗插入 UBS 端口以及 CC 调试器

    c.打开闪存编程器时、您应该会注意到检测到"CC2531 CC 调试器"。

    d.点击闪存映像并从步骤 a.中选择映像/文件

    e.执行擦除/刷写  

    2.我可能需要询问我的同事这件事,虽然他们今天不在办公室,但将在下周,我假设我们可能需要找到一种方法,不断地将日志转储到文件中,以便监听器可以不断地运行,而不会被数据填满。  

    我看到 Light_On 在您发布的引用中,变量 zclocti.off 被修改了,但没有使用信标和互斥对其进行保护。 我将在 不使用信号量的情况下修改在不同线程上下文中调用的函数内的这个变量(请参阅我之前的回复中的 reportTemperatureMeasurement)。 这是否会导致一些问题? 我曾尝试声明一个新的二进制信标、但无论我使用 BIOS_WAIT_FOREVER 或不同数量的节拍、代码似乎都会在挂起时挂起。 调试器告诉我该程序位于 Power_sleep 中、似乎永远不会被唤醒。[/QUOT]

    -在这种情况下(用你的信标)程序是否到达并调用 Zstackapi_BdbRepChangedAttrValueReq ? 在关于睡眠的最后一部分,可能听起来像一个错误情况,它卡在 while (1)语句或类似.  

    谢谢!
    Alex F

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当您注意到最初的崩溃是在嘈杂的环境中发生的?  [报价]

    在嘈杂的环境中、它们仍然如此。 我在我的办公室里、我们有大约二十多种物联网设备、还有许多大家都在使用的电话和计算机、大多数都是在2.4 GHz 上使用的。 干扰是否会成为这样的问题? 虽然可能、但我发现它们现在运行得非常好、这很奇怪。 现在已经有4天了、他们都在跑步。

    我将尝试你的闪烁步骤,虽然他们似乎与我尝试过的其他指南相似。 工作、那么我将分享一些结果。

    程序是否到达并调用 Zstackapi_BdbRepChangedAttrValueReq?[/QUOT]

    不是。 从我设法用调试器执行的操作来看、它在  zclSampleTemperatureSensor_Process_loop 内第一次执行 for (;;)循环后卡住。 将一个断点放置在针对的 if (semaphore_pend (appSemHandle、BIOS_WAIT_FOREVER))上只会触发一次、然后它卡在 Power_sleep 中。

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

    Alex、您好!

    我已到达办公室、并尝试通过两种方式再次嗅探:

    1. 使用 TI 提供的本指南:不起作用。 我 用所示的固件刷写了 LP-CC2652板、但无法获取  SmartRF 数据包监听器2来检测电路板。 我已经确保安装了 Cebal 驱动程序、再次刷写了电路板、重新启动了数据包监听器几次、重新连接了电路板、但仍然没有任何反应。 Ubiqua 协议分析器在几个月前工作过(当我上次尝试时,软件包监听器不工作),但我的免费试用过期了,他们只允许你缓存1000个消息,这在几分钟内就填满了。 现在有用,不愿意支付65美元一个月。
    2. 使用 Zigbee2Mqtt 提供的本指南:仍然无法正常工作。 我已经成功使用 CC 调试器刷写电路板、配置了 ZBOSS 监听器、但 Wireshark 不会解码任何消息。

    关于我的数据包监听器2的问题:该程序没有检测到任何电路板、尽管我在设备管理器中看到过它们。 如果我尝试手动配置串行设置、则端口下拉列表不可用、并且无法看到设备管理器中列出的端口来手动选择器件 COM。

    不管怎样、经过6天的 测试、还没有一个器件出现故障。 他们过去在一两天内就死了,但现在一切都在顺利进行。 还有其他建议吗?

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

    您好、V:

    很遗憾听到其他监听选项似乎不适合您。  

    [报价 userid="509946" url="~/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1417202/cc2652rb-temperature-sensor-randomly-disconnects-with-no-apparent-pattern/5438233 #5438233"]关于我的数据包监听器问题2:程序没有检测到任何电路板、尽管我在设备管理器中看到它们。 如果我尝试手动配置串行设置、则端口下拉列表不可用、并且无法看到设备管理器中列出的端口来手动选择设备 COM。

    -不幸的是,这里的工具不能很好地工作。 解决以下问题后、协调器应使用最新的 Zigbee2MQTT ZNP 代码分支: https://e2e.ti.com/f/1/t/1288546。 

    不管怎样、6天的 测试、还没有一个设备出现故障。 他们过去在一两天内就死了,但现在一切都在顺利进行。 其他建议?

    - 如果器件进入某种执行代码崩溃的状态、我们可以考虑将看门狗复位

    谢谢!
    Alex F

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    解决以下问题后、协调员应使用最新的 Zigbee2MQTT ZNP 代码分支: https://e2e.ti.com/f/1/t/1288546。 

    您好 Alex。 以下问题仅适用于协调员? 我不使用 TI 协调器示例、而是其他一些使用 Zigbee2Mqtt 的协调器:Sonoff 和 UZG。 其中提到的修复仅适用于协调器固件、还是我也可以将其应用到我的终端器件?

    在不够清楚的情况下、我怀疑断开是由我的终端器件实施而不是协调器引起的。 如果是由角线钳引起的断线,我无法控制,也无法控制客户可能遇到的潜在问题。 我真的不认为协调员可能是错误的,因为他们与其他阿夸拉/西米/宜家设备工作良好。

    我想知道我是否应该在终端设备固件中尝试这些更改、然后再确认刷写并向我的网络添加其他设备。

     如果设备进入执行代码崩溃的状态、我们可以考虑使用看门狗进行复位

    我已经在我的应用中实现了看门狗、但这与潜在的无限循环相关、而不是在器件没有收到 Zigbee 消息时。 我可能错了、但我认为器件应该在没有与协调器配对的情况下工作、而且不会复位这么长的时间、其他一切都正常工作。 关于如何实施看门狗以检测断开连接的建议、我非常乐于助人。  

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

    您好、V:

    我可能需要返回发行说明来检查此修复是否应用于协调员以外的连接。

    在看门狗主题上、我们可以采用多种方法来处理此问题、方法包括检查连接状态、检查是否未接收到数据包等。 如您所述、器件在理想情况下可以正常工作、而无需在 ZigBee 网络上、就像您将应用设计为某些数据而不需要 ZigBee 连接一样、它应该正常工作。  

    谢谢!
    Alex F

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

    您好 Alex。  

    检查连接状态、检查是否未收到任何数据包

    您能告诉我如何操作吗?

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

    您好、V:

    参考我们讨论报告状态的 SLA:  

    Zigbee 基础项目开发(TI.com)

    和一个关于连接状态的 e2e 主题:

    https://e2e.ti.com/f/1/t/1357610/

    谢谢!
    Alex F

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

    您好 Alex。

    抱歉我迟到的响应,但我做了路由器步骤(因为我没有控制协调器的固件),但我不能得到任何点击内部  zclSampleTemperatskirtaku Sensor_Process comingMsg. 非常有用。 我定义了 ZCL_REPORT、而且  ZCL_REPORT_DESTINATION_DEVICE and made sure i have no optimizations enabled, yet i cannot get any hit when sending the reporting command from Z2M. Whats even weirder, Z2M reports that reporting was configured and i can see the metrics being reported accordingly. I tried the other command defines as well, yet i still cannot see any breakpoint hits.

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

    您好、V:

    我们是否有来自  BDB_REPORTING、 Zigbee 配置—SimpleLink CC13XX/CC26XX SDK Z-Stack 用户指南7.40.00文档的任何报告

    我们可能需要在此处获取数据日志。

    谢谢!
    Alex F

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

    你好。 我无法按照中提到的问题提供监听日志  

    关于我的数据包监听器问题2:该程序没有检测到任何电路板、尽管我在设备管理器中看到它们。

    这是设置"Reporting Config"和"Getting Responses"的示例。

    2024-10-16 09:32:42z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/TestDev', payload '{"battery":0,"humidity_8":33.88,"linkquality":112,"temperature_8":22.14,"temperature_9":-80.15,"update":{"installed_version":2,"latest_version":2,"state":"available"},"update_available":null,"voltage":3200}'
    info 2024-10-16 09:32:53z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/TestDev', payload '{"battery":0,"humidity_8":33.9,"linkquality":120,"temperature_8":22.14,"temperature_9":-80.15,"update":{"installed_version":2,"latest_version":2,"state":"available"},"update_available":null,"voltage":3200}'
    info 2024-10-16 09:33:04z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/TestDev', payload '{"battery":0,"humidity_8":33.9,"linkquality":116,"temperature_8":22.15,"temperature_9":-80.15,"update":{"installed_version":2,"latest_version":2,"state":"available"},"update_available":null,"voltage":3200}'
    info 2024-10-16 09:33:04z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/TestDev', payload '{"battery":0,"humidity_8":33.96,"linkquality":116,"temperature_8":22.15,"temperature_9":-80.15,"update":{"installed_version":2,"latest_version":2,"state":"available"},"update_available":null,"voltage":3200}'
    info 2024-10-16 09:33:15z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/TestDev', payload '{"battery":0,"humidity_8":33.89,"linkquality":116,"temperature_8":22.15,"temperature_9":-80.15,"update":{"installed_version":2,"latest_version":2,"state":"available"},"update_available":null,"voltage":3200}'
    info 2024-10-16 09:33:23z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/TestDev', payload '{"battery":0,"humidity_8":33.89,"linkquality":112,"temperature_8":22.15,"temperature_9":-77.4,"update":{"installed_version":2,"latest_version":2,"state":"available"},"update_available":null,"voltage":3200}'
    info 2024-10-16 09:33:26z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/TestDev', payload '{"battery":0,"humidity_8":33.88,"linkquality":112,"temperature_8":22.15,"temperature_9":-77.4,"update":{"installed_version":2,"latest_version":2,"state":"available"},"update_available":null,"voltage":3200}'

    您看到的-77C 温度不是错误。 这是由未连接 NTC 的第二个端点使用导致的、因此从 ADC 读取0。

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

    您好、V:

    我将查看下一步是否有可尝试的任何信息、我很可能会与我的一名团队成员讨论此问题!

    谢谢!
    Alex F

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

    您好、V:

    以下是与我的团队成员讨论的总结:

    遗憾的是、我们无法帮助他们使用 Zigbee2MQTT 代码进行编程的 ZC/ZNP、数据包监听器2环境混乱不堪。 我们可以尝试重新安装 Packet Sniffer 2环境 或其他计算机(如果可能)。

    关于问题,"调试时,我不能在 zclSampleTemperatstrica Sensor_Process commingMsg 内得到任何点击":

    在 SDK v7.40中、如果定义了 ZCL_REPORTING_DEVICE (随 BDB_REPORTING 一起定义)、则处理 zclParseInConfigReportCmd。 zclParseInConfigReportCmd 函数位于 zcl.c 中、然后在 zcl_HandleExternal 中、我们看到 ZCL_CMD_CONFIG_REPORT 指向 Zstackapi_bdbProcessInConfigReportCmd、然后转到 processorBdbProcessInConfigReportReq -> bdb_ProcessInConfigReportCmd。 如果应用程序中出现了 zclport_registerZclHandleExternal、则 zcl_HandleExternal 应相应地将命令传递给应用程序。

    谢谢!
    Alex F