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.

[参考译文] LAUNCHXL-CC3235SF:本地 OTA:是否有位置可以将 OTA 代码指向用户已上传的文件(即 BYPASS 状态机)?

Guru**** 2585275 points
Other Parts Discussed in Thread: CC3235SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/973463/launchxl-cc3235sf-local-ota-is-there-a-place-i-can-point-the-ota-code-to-a-file-the-user-has-uploaded-i-e-bypass-state-machine

器件型号:LAUNCHXL-CC3235SF
主题中讨论的其他器件:CC3235SF

我计划在 CC3235SF 原型上运行 HTTP 服务器。  产品的一部分将是 OTA 升级。  我将使用 HTTP 服务器允许用户上载新负载。  我可以将负载存储在闪存中。

上传完成后、我想将本地 OTA 参考设计指向该文件、以便随后进行升级。

有人知道该"入口点"可能位于本地 OTA 参考设计的什么位置吗?  由于状态机等原因、我不希望"按原样"使用参考设计  我可能会放弃一些安全功能、但它适合我的目标市场。

如果有人这么做、我们将会感谢您提供任何提示。

谢谢!

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

    您好!

    方法是将整个 TAR 文件上载到 sFlash 中、然后处理 OTA 代码可能不起作用。 因为您可能会遇到 sFlash 内空间不足的问题。 在不使用整个 TI 状态机的情况下即时使用 ota_archive.h/c 文件非常有效。 我将此本地 OTA 代码与我自己的 http 服务器(应用处理器上的服务器不是 NWP)配合使用。 我仍然需要使用状态机、但它是我自己的状态机、比 TI 本地 OTA 示例中的状态机简单得多。

    作为 Web 前端,我使用通过 FileReader() javacript 对象读取文件的代码,该文件的内容通过 XMLHttpRequest()以10KB 的块发送回 CC3220

    您需要做的事情:

    1. 将 ota_archive.c/hota_json.c/h 和 include json 解析器库 ti/utils/json/lib/ccs/m4/json_release.a 包含在内
    2. 在代码内部创建 OTA 结构的全局实例(例如 OtaArchive_t otaArchive;)
    3. 声明 OTA 过程后、您需要调用 OtaArchive_Init (&otaArchive);
    4. 在 Web 处理程序中,您需要反复调用 OtaArchive_process()来处理传入数据。 这可能如下所示:
      unproc = size_for_incoming_block_via http;
      proc = 0;
      
      //处理传入块
      while (unproc > 0){
      retCode = OtaArchive_process (&otaArchive、&buff [proc]、(short int) unproc、&tmp);
      unproc = untmp;
      proc = proc + tmp;
      //
      错误 if (retCode = 0)
      
      
      // OTA 过程在
      以下情况下完成(retCode = archive_status_ddownload_done){
      //此处重新启动 SoC
      sl_Stop (200);
      SLEEP (200);
      MAP_PRCMHibernateIntervalSet (330);
      MAP_PRCMHibernateWakeUpSourceEnable (PRCM_HIB_SLOW_CLK_CTR);MAP_PRCMHibernateEnter
      (HibernateEnter
      );HibernateEnter)
      
      // OTA 过程中出现错误
      (retCode < 0){
      
      } 
    5. 启动代码后、您需要通过以下方式提交新的 OTA 代码:
      如果((RetVal = OtaArchive_GetPendingCommit ())< 0){
      // error
      }
      if (RetVal > 0){
      // commit
      if ((RetVal = OtaArchive_Commit ())< 0){
      //提交错误
      }否则{
      //提交完成
      }
      
    6. 请注意、需要使用失效防护标志创建 OTA TAR (和初始映像)中的所有文件、才能使回滚功能正常运行。

    以上步骤是在本地 OTA 代码中需要执行的过程。 代码中的完全实现由您决定。 如有任何问题、可随时提问。 但不要指望我会为您编写完整的实施方案。

    1月

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

    非常好、谢谢1月  我已经有了客户端 javascript、正在处理另一个项目、以便按照服务器接受的速率对文件进行分块上传、因此这对我来说不是问题。  我衷心感谢 您的纲要并花时间对其进行解释。 我认为这真的可以帮助很多设计人员。  它将为我提供一些要继续的东西。

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

    我可以进行上传。  您的提示对于使其正常工作非常重要。  我发现的内容包括:

    1) 1)开始时、我需要致电:

    OtaArchive_Init (&gOtaArchive);

    OtaArchive_CheckVersion (&gOtaArchive、(uint8_t*)文件名)

    因此、我需要客户端 javascript (采用通过 XMLHttpRequest 进行块化上传)来将文件名作为参数之一进行上传。

    2) 2)当您未使用时,对函数 OtaArchive_process()的每次调用都会返回未处理的字节数。  需要将这些添加到馈送到函数的下一个块的开头。

    3) 3)上传的数据完成后(返回 archive_status_ddownload_done)、将按照您的建议重新启动。

    4) 4)重新启动时,我的 main()函数调用 OtaArchive_GetPendingCommit(),如果返回>0,则调用 OtaArchive_commit()。  当然,需要启动 NWP,这样才能使其正常工作。

    这样做,范围有限,可以理解。  我不必在 local_ota 示例中调试状态机。  但是、需要上述功能。  任何设计人员都有责任了解一点 javascript XMLHttpRequest、如果他旋转自己的客户端代码(就像我一样)、那么这将起作用。  网络上有很多很好的示例。

    总之、非常成功。 再次感谢!

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

    您好!

    很高兴听到您能够实现本地 OTA。

    但请注意、除非您对 TAR 文件没有自己的加密、否则不应使用 OTA TAR 文件上载您的机密(例如私钥)。

    1月

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

    好地方!  感谢您的提醒。