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.

[参考译文] LP-CC2652RB:缩短 OTA 更新时间?

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1259450/lp-cc2652rb-reducing-ota-update-time

器件型号:LP-CC2652RB

您好!

是否有办法减少执行 OTA 更新所需的时间? 我目前针对具有 OTA 的 ZigBee 器件的项目基于示例温度传感器应用程序、目前为172KB、禁用了 UI 并具有优化级别 Z。在查看其他 ZigBee 器件的存储库时、我看到二进制大小约为50-100KB、更新时间约为几个 几十分钟。 我的二进制文件太大了,更新需要90分钟才能完成。

是否可以从示例项目中删除其他库或功能以减小其大小? 我唯一增加的 功能是一项处理任务和一个仅包含两个功能的 SHT35驱动器。 以及将 I2C 用作通信协议。  

是否可以增加数据包大小或将传输速率提高到一个明显更高的值、从而将更新时间缩短到更可接受的持续时间? 默认情况下、似乎每秒钟发出一次对新映像数据包的请求。  

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

    这可能与您的 SED 轮询率更相关、我建议您在 OTA 期间降低轮询率、以查看其是否有所改善。

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

    您好!

    您可以尝试增大 OTA_MAX_MTU。  相关主题: https://e2e.ti.com/search?q=OTA_MAX_MTU 

    从开始到完成、默认 OTA 更新示例通常需要5到10分钟、因此我同意 YK 的看法、认为其他方面不是很好。  网络中有多少设备有活动通信?  您是否具有要共享的 OTA 更新的监听器日志?

    此致、
    瑞安

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

    您好、Ryan、

    我已经将 MTU 增加到64 (因为 ZigBee 数据包似乎是127字节;我之前提到的实际有效负载大小会有所不同、所以我固定为64)、并且传输时间有所缩短、但仍然是不可接受的。 如果 SED 是指可在 syscfg 的电源管理部分设置的轮询时间、则我已将其设置为1000ms、更新时间约为40分钟。 该电压仍然过高、会降低待机功耗。

    网络中只有三个 ZigBee 设备、但许多其他2.4GHz WiFi 设备。 我不确定这些会不会造成干扰。 我没有嗅探器,不能很快得到一个,不幸的是。

    如果我可以得到~40分钟的更新时间并保持节能效果、尽管功耗仍然过大、这是可以接受的。  

    我查看了代码、发现了  ot52 Client_Process Ottasgs  该函数似乎调用了  otaClient_setPollRate  若要为 OTA 设置新的轮询速率、但选择较小的轮询速率不起任何作用。

    static void otaClient_ProcessOTAMsgs( zclOTA_CallbackMsg_t* pMsg )
    {
      bool RxOnIdle;
    
      switch(pMsg->ota_event)
      {
      case ZCL_OTA_START_CALLBACK:
        if (pMsg->hdr.status == ZSuccess)
        {
          // Speed up the poll rate
          RxOnIdle = true;
          otaClient_setPollRate(500, RxOnIdle); // otaClient_setPollRate(2000, RxOnIdle);
        }
        break;
    
      case ZCL_OTA_DL_COMPLETE_CALLBACK:
        if (pMsg->hdr.status == ZSuccess)
        {
    
          otaClient_loadExtImage(ST_FULL_IMAGE);
        }
        else
        {
    #if (ZG_BUILD_ENDDEVICE_TYPE)
          // slow the poll rate back down.
          RxOnIdle = false;
          otaClient_setPollRate(POLL_RATE_MAX, RxOnIdle);
    #endif
        }
        break;
    
      default:
        break;
      }
    
      OsalPort_free(pMsg);
    }

    此外、2000的原始值采用硬编码、与可通过 syscfg 配置的轮询速率没有连接。

    是否有不同的功能可以用来在 OTA 期间增加轮询率、然后降低轮询率以节省电力? 欢迎提供任何指导。  

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

    您是否也为 OTA 服务器项目更改了 MTU?  您对 Otscholu Client_Process Ottasgs 提出了一个很好的建议、您能否尝试将 POLL_RATE_TYPE_APP_1更改为 POLL_RATE_TYPE_DEFAULT 、并禁用响应/排队的轮询速率

            // disable response and queued poll rates
            writeReq.pollRate = POLL_RATE_MAX;
            writeReq.pollRateType = POLL_RATE_TYPE_QUEUED;
            Zstackapi_sysConfigWriteReq(appServiceTaskId, &writeReq);
            writeReq.pollRateType = POLL_RATE_TYPE_RESPONSE;
            Zstackapi_sysConfigWriteReq(appServiceTaskId, &writeReq);

    这是从用于电源测试用例的 zcl_samplesw.c 中采样得出的。

    #if defined (POWER_TEST_POLL_ACK) || defined (POWER_TEST_POLL_DATA)
            // set poll rate to POLL_RATE after joining
            zstack_sysConfigWriteReq_t writeReq = { 0 };
            // Set the new poll rates
            writeReq.has_pollRate = true;
            writeReq.pollRate = POLL_RATE;
            writeReq.pollRateType = POLL_RATE_TYPE_DEFAULT;
            Zstackapi_sysConfigWriteReq(appServiceTaskId, &writeReq);
            // disable response and queued poll rates
            writeReq.pollRate = POLL_RATE_MAX;
            writeReq.pollRateType = POLL_RATE_TYPE_QUEUED;
            Zstackapi_sysConfigWriteReq(appServiceTaskId, &writeReq);
            writeReq.pollRateType = POLL_RATE_TYPE_RESPONSE;
            Zstackapi_sysConfigWriteReq(appServiceTaskId, &writeReq);
    #endif

    请注意、重大通道流量的 CSMA/CA 回退可能会延迟 Zigbee 通信。  如果可以、您可以尝试找到噪声更低的信道。

    此致、
    瑞安