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:开始更新后不久、器件中止了 Zigbee OTA

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1340051/cc2652rb-zigged-ota-aborted-by-device-shortly-after-starting-update

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

你好。 我 现在已经尝试让 OTA 在温度传感器项目上工作了一段时间。 我的实现使用的是 SDK 版本6.20.00.29、其他方面都很好。 我遇到的问题是、在尝试使用 Zigbee2Mqtt 进行更新时、我收到一条错误消息、提示 OTA 已被器件中止。 下面的日志:

Zigbee2MQTT:debug 2024-03-19 11:20:13: Received Zigbee message from 'Batch2 Sen5', type 'commandQueryNextImageRequest', cluster 'genOta', data '{"fieldControl":0,"fileVersion":1,"imageType":9810,"manufacturerCode":48830}' from endpoint 8 with groupID 0
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Request offsets: fileOffset=0 pageOffset=0 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Payload offsets: start=0 end=32 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Update at 0%, remaining Infinity seconds
Zigbee2MQTT:info  2024-03-19 11:20:14: Update of 'Batch2 Sen5' at 0.00%
Zigbee2MQTT:info  2024-03-19 11:20:14: MQTT publish: topic 'zigbee2mqtt/Batch2 Sen5', payload '{"battery":0,"humidity_8":0,"linkquality":87,"temperature_8":-40,"temperature_9":-40,"update":{"installed_version":1,"latest_version":2,"progress":0,"state":"updating"},"update_available":null,"voltage":4100}'
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Request offsets: fileOffset=32 pageOffset=0 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Payload offsets: start=32 end=64 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Request offsets: fileOffset=64 pageOffset=0 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Payload offsets: start=64 end=96 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Request offsets: fileOffset=96 pageOffset=0 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:14: OTA: Payload offsets: start=96 end=128 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:20: OTA: Request offsets: fileOffset=128 pageOffset=0 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:20: OTA: Payload offsets: start=128 end=160 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:20: OTA: Request offsets: fileOffset=160 pageOffset=0 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:20: OTA: Payload offsets: start=160 end=192 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:20: OTA: Request offsets: fileOffset=192 pageOffset=0 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:20: OTA: Payload offsets: start=192 end=224 dataSize=32
Zigbee2MQTT:debug 2024-03-19 11:20:20: OTA: Got upgrade end request for '0x00124b0031e5d997' (AFTSHT35X2): {"status":149,"manufacturerCode":48830,"imageType":9810,"fileVersion":2}
Zigbee2MQTT:debug 2024-03-19 11:20:20: OTA: Update failed with reason: 'aborted by device'
Zigbee2MQTT:debug 2024-03-19 11:20:20: Update of 'Batch2 Sen5' failed (Error: OTA: Update failed with reason: 'aborted by device')

我无法使用 OtaServer 实用程序和 LP-CC2652RB 电路板验证 OTA、因为我无法使它们配对。 通过串行连接协调器时、应用程序中会显示协调器、但我无法让它们配对、并且无法通过提供的示例看到正在连接的器件。 不管怎样、我仍然可以通过使用  zr_sw_ota_client_LP_CC2652rb_tirtos_ticlang 示例并使用 Home Assistant 将其与协调器配对。 更新工作正常、完整映像已下载。

然后、我获取该工程的 OTA 目录、将其添加到 我的中、并重新编译工程以进行测试。 现在、与示例项目不同的是、它似乎只是下载几个数据包、然后我收到一条消息、提示更新已中止。 我尚未在 OTA 文件中修改任何内容、仅将 OTA_Process_loop 函数添加到主循环中。

在调试代码时,我在  Client_Upgrade 里没有被击中, 但我可以看到,该应用程序定期要求更新,并根据日志接收几帧。 是否知道可能导致此问题的原因、或者如何更好地对其进行调试?

其他问题:我的器件是一个具有两个温度群集的双端点温度传感器。 我是否应该在这两个器件上都实施 OTA 集群? 目前它只在主端点上执行。 我仍然可以检查更新并启动更新、但无法完成。 在属性报告、调试和器件稳定性方面、其他一切都运行良好。

我的设备是基于 zed_temperature_sensor 的电池供电终端设备、并且带有附加 OTA 群集和第二个端点。 电源设置为电池、并且电源组已配置且工作正常。 无论电路板是否通过调试器由电池供电、OTA 都不起作用。 电池供电的 OTA 设备是否有特殊设置?

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

    您好、V:

    请确保  您已执行 ZR_temperaturesensor《Z-Stack 用户指南》的"向应用程序添加客户端功能"部分中的所有步骤。  您需要确认这是否适用于 zc_ota_server、以及 zr_SW 是否可以与 Zigbee2MQTT 成功运行。  只有这样,您才能继续使用 Zigbee2MQTT 和 zr_temperaturesensor。  您需要捕获 监听器日志 并确定对 zclota_SendUpgradeReq/oteglibc Client_Upgrade 的调用会导致 ZOtaAbort 状态。  您可以从此处反向工作、找出应用程序中的根本原因

    此致、
    瑞安

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

    您好、Ryan

    很抱歉我迟到了,我希望你仍然关注这个话题。 我已经更深入地研究了该问题、并按照指南中的说明设置监听工具。 我现在可以将协调器连接到 OTA 服务器应用程序、并开始使用 Ubiqua 进行嗅探。 但是、我似乎无法使用您附加的资源中提供的密钥对任何 Zigbee 消息进行解密。  

    我 在 Ubiqua 中将5A:69:67:42:65:65:41:6C:69:61:6E:63:65:30:39密钥设置为 应用程序或信任中心链接密钥、但所有消息都带有"无法解密"数据包信息。 我按照同事的 建议 在建立 网络之前启动监听器、但结果是一样的。 我已经尝试更改密钥的类型,但没有任何效果。 我已按照 syscfg 中的配置设置了正确的通道、并且可以查看流量、但看不到任何信息。 我还尝试了关闭和打开所有应用程序以及刷新电路板。

    如果您对如何解决此问题有进一步的建议、将不胜感激。

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

    YK 的建议是正确的。  您还根据您的描述尝试了建议的更改、尽管您分享的图像更好地体现了设备加入的概念。  请将代码恢复为 SDK 中的默认 TI 示例、并发送监听器日志、其中包含形成网络的新 ZC 器件并允许恢复出厂设置 ZR/ZT 的设备加入。  您至少应该看到信标请求和关联请求/响应、因为它们是未加密的 MAC 数据包。  您也可以尝试通过 Packet View 手动放入 TCLK、但这对于已完成 TCLK 更新过程的器件而言是有问题的、或者在加入后使用 NWK 密钥(由 ZC 随机选择用于网络)来填充数据包。  我附上了示例 Ubiqua 捕获供您参考。   e2e.ti.com/.../3.0_5F00_ZC_5F00_ZR_5F00_ZED.cubx

    此致、
    瑞安

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

    您好、Ryan。 非常感谢您和 YD 的建议;我终于成功了。

    如果有人在这方面遇到问题、我将如何可靠地使监听器正常工作:对协调器和 ZED 板执行完整芯片擦除(我使用 UniFlash)、对固件执行新闪存、然后关闭 OtaServer 和 Ubiqua 应用并重新启动它们。 连接监听器板并使用可信密钥启动 Ubiqua、然后才能构建网络并与 ZED 配对。

    不管怎样、我用过  zc_ota_server_lp_CC2652rb_tirtos_ticlang 作为服务器应用程序、  ZED_SW_OTA_CLIENT_LP_CC2652rb_tirtos_ticlang 与 ZED 器件相同 。  很遗憾、我无法使用 zed_sw_ota_client_lp_CC2652rb_tirtos_ticlang FW 的完整库存版本、必须将 CONFIG_BTN_LEFT 重新映射到 GPIO 22以便与我的自定义传感器板匹配;我只有2个可用 LaunchPad。 尽管嗅探现在可工作、OTA 仍无法工作。  

    我可以通过日志看到网络构建和设备发现、但在 OTA 启动后不久、它就会停止。 我将附加我的日志文件以供进一步参考。 据我所见,消息181是由 ZED 发出的"升级结束请求"。 这很奇怪、因为除了这是 TI 提供的示例之外、这种行为看起来与我的温度传感器定制实现方案完全相同。

    这可能是闪存的硬件问题吗? 我使用了与 LPCC2652RB 相同的闪存。  

    出于某些原因、e2e 不允许我上传此日志文件、因此我们提供的 wetranser: https://we.tl/t-jPYcKx0h31 

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

    感谢提供监听器日志、现在我可以看到 ZED 在忽略 ZC 的最新映像块响应后、在升级结束请求内报告中止的状态代码。  我以前没有意识到您使用的是定制电路板、我同意在此时对外部闪存的怀疑很高。  主要问题是出厂映像尚未编程到非 TI 电路板上、如 构建和下载目标应用 部分所述。  

                            // Read the factory new metadata page
                            readFlash(EFL_ADDR_META_FACT_IMG, (uint8_t *)&oad_imgHdrFactoryNew, EFL_METADATA_LEN);
    
                            //is a valid header
                            if(memcmp(&oad_imgHdrFactoryNew.fixedHdr.imgID, oad_externalFLashID, sizeof(oad_externalFLashID)) != 0)
                            {
                                flash_close();
                                //This release does not support not having the Factory New image
                                return ZCL_STATUS_ABORT;
                            }

    您可以尝试按照介绍的方式对出厂映像进行编程、删除检查映像的代码、或在 TI LaunchPad 中将外部闪存组件更换为一个组件。  如果这样无法解决您的问题、我建议您针对 返回 ZCL_STATUS_ABORT 的实例调试 zcl_ota.c。   

    此致、
    瑞安

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

    您好、Ryan。 你是对的,谢谢! 这解决了我的问题、现在能够在我的定制电路板上可靠地执行更新。

    还有一点:我有一个多线程应用程序、其中有一个单独的线程处理传感器管理、似乎在引导加载程序重新启动应用程序后、程序并不是从头开始启动、因此我在辨识器件何时被调试时存在一些问题。 我有一个布尔标志、用于表示器件已完成调试、以避免不必要的 ADC 测量并过早地耗尽电池。

    目前、我使用  _ 处理佣金状态 检查以下事件是否成功调试: BDB_TRUNJING_NWK_STANDING、BDB_TRUNJING_FINDING_BINING 、BDB_TRUNJING_SUCCESS 。  这些事件似乎不再被触发、无法确认我已成功调试。  

    如果我取消对调试标志的检查、ADC 会按预期正确地将传感器数据发送到堆栈和传感器功能。 但是、如果我不使用此标志、在传感器尚未使用或网络出现故障的情况下、它会导致高功耗。

    我是否可以捕获其他事件以确保在 OTA 后安全调试?

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

    我很高兴听到先前的问题已得到解决。  您下一次观察的原因可能是您的调试标记基于新加入、该调试标记不会像 OTA 升级时那样考虑重新加入。  相反、您可以监视 ZStack_DevState_DEV_State_Change_IND 的 zstackmsg_Cmdids_DEV_State_Change_IND 案例 。  您还可以检查其他位置、例如 Zstackapi_sysNwkInfoReadReq、NIB nwkState 和 bdbAttributes bdbNodeIsOnANetwork、可以随时检查这些位置。

    此致、
    瑞安