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.

[参考译文] CC2538:使用 ZigBee Linux 网关3.0的 OTA 映像升级进入重复模式。

Guru**** 2538930 points
Other Parts Discussed in Thread: Z-STACK, CC2538, UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/782307/cc2538-ota-image-upgrade-using-zigbee-linux-gateway-3-0-goes-in-to-repetitive-mode

器件型号:CC2538
主题中讨论的其他部件:Z-stackUNIFLASH

您好 E2E 社区、

我正在开发 CC2538 Zigbee Z-stack 嵌入式固件。 我正在尝试实施 OTA 升级以升级 SampleLight 应用的固件。

为此、我参考 TI 的"Z-stack OTA 升级用户指南"pdf"  

根据第2章3和第4章中的说明 、我对 SampleLight 项目中的 OTA 升级进行了更改。

到目前为止、我能够实施 OTA 升级、并成功处理和完成。  

但是、现在我面临一些问题、例如、

1.从 Zigbee 设备获取 OTA 升级结束请求后、它将等待一段时间、然后从开始重新启动升级。  
  

   我不明白为什么这么做了

2.如何获取  Zigbee Linux 网关应用程序的运行映像详细信息。  

如何检查图像是否写入分配的内存插槽中的天气。

谢谢、尊重

Shiv Patil。

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

    请查看函数 zclota_Init 的末尾、它将定期发送"下一个映像请求"、如果您不需要此功能、则可以按如下方式提交  

    #if 0
    //根据 ZigBee 无线升级集群规范的第6.1节,我们应该
    //定期查询服务器。 它不指定速率。 例如
    // sake,在这里,我们在5-10分钟内定期查询服务器。
    uint32 queryImgJitter =(( uint32 ) osal_rand()% ota_new_image_query_rate )+( uint32 ) ota_new_image_query_rate;
    osal_start_reload 计时器( task_id、zcl_ota_query_Server_evt、imyImgJitter )
    
    ;在某些时间内唤醒(uint32秒);
    
    OSAL_START_RELOAD_TIMER (task_id、ZCL_OTA_SEND_MATH_EVT、queryImgJitter);
    #endif
    // Initialaze OTA 更新结束请求事务处理号
    zclOTA_OtaUpgradeEndReqTransseq = 0;
    
    #endif //(定义的 OTA_CLIENT)&&(trueSeq) 

    2.如果您想从  Zigbee Linux 网关应用程序中找到任何相关的 ZigBee OTA 信息、则需要查看目录"Source\projects\Zstack\linux\otaserver"中的所有源代码

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

    有关将 Z-Stack Gateway 用作服务器以更新远程设备固件的详细说明、请参阅 Linux 网关软件包的文档 sample_app_ota_readme.txt。

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

    这有助于我解决 OTA 升级卡在重复模式下的相关问题。 我能够通过图像区域 A 和 B 将 OTA 图像从初始图像传输到新图像

    现在、我想进一步测试它是否交替传输图像 A 和 B、以及通过增大有效载荷大小来提高 OTA 升级图像传输的速度。
    我已经做了一些测试用例、并遇到了一些与 OTA 升级映像传输相关的新问题。 如下所示...



    1。 如果我要将升级版本映像传输到已包含正在运行的初始映像(旧版本)的映像区域 A 上,
    OTA 升级传输成功达到映像结束请求响应、但我的代码在 OTA 传输后一直无法正常工作、和
    复位。

    在成功升级图像区域 B 并使用另一个图像后、当我再次传输图像 A 时、也会发生同样的情况
    版本。

    是否仅需要在图像区域 B 上升级新图像?
    只要新版本发布、交换图像 A 和 B 区域的标准化程序是什么?


    2. 众所周知、OTA 映像升级至少需要10-15分钟才能成功传输单映像。 这是时间
    需要升级的设备数量越多、就会消耗大量电量。
    因此、我想通过增加帧请求的有效载荷大小来加快传输。
    现在、有效载荷大小设置为32位长。 我已针对支付加载大小为64字节成功测试了 OTA 映像传输。
    但是、当我将其增加到128字节时、它将抛出异常/错误。

    支持的最大有效载荷大小是多少?
    它是否安全、是否真正有助于通过增加有效载荷大小来加快传输?


    您能不能也帮助我解决这些问题...


    谢谢、尊重
    Shiv Patil。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.CC2538 OTA 架构仅支持将"Image A"升级为"Image B"或反之、不支持将"Image A"升级为"Image A"或将"Image B"升级为"Image B"、这必须是意外导致芯片锁定的原因、因此您必须在 OTA 服务器上进行版本判断、众所周知、初始映像为"Image A"、但默认映像 版本号等于"1"。

    据了解、一旦 OTA 花费至少30分钟、您不应增加 MTU (默认32字节)、这可能会导致意外干扰、我们已同时测试了30多个器件 OTA、效果良好。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、再见、

    我完全理解您的说法。

    但我没有得到一些概念...

    1.如果我已通过图像 A 更新图像 B (在初始图像中切换)。 现在、正在运行的映像是映像 B
    对于下一次升级、我必须写入映像 A。我是否应该提到映像 A 的配置中的 OTA_INTERY_IMAGE 标志?

    2.如何知道当前哪个映像处于正在运行状态?... 它可以是 Image A (图像 A)的图像、也可以是 Image B (图像 B)

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

    假设您使用 SampleSwitch.eww IAR 项目进行测试、ZED 有三个构建选项、名为 "EndDevice - OTAClient - ImageA - withBootloader"的初始映像是使用引导加载程序构建的、此固件必须使用闪存编程器2或 Uniflash 工具等进行烧录、这是"Image A"、但在引导加载程序中是有意构建的、如您所见、此定义 预处理程序宏如下所示:

    OTA_INTIVE_IMAGE
    HAL_IMG_Area=0 

    如果您在没有引导加载程序的情况下构建"Image A"或"Image B"、则必须在 没有 OTA_INTIVE_IMAGE 的情况下定义宏 HAL_IMG_Area=0或 HAL_IMG_Area=1。

    如果 OTA 服务器收到"查询下一个映像"命令、则该数据包必须包含名为"Image A"的"AAAA0000"或"Image B"的"BBB1000"的版本标识符、您需要判断版本以防止升级错误的固件。