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.

[参考译文] CC3220S-LAUNCHXL:修复了 OTA 始终卡在相同版本上的问题

Guru**** 2539770 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/953557/cc3220s-launchxl-fix-for-ota-always-being-stuck-on-same-version

器件型号:CC3220S-LAUNCHXL

OTA 库中存在一个错误、通过以下帖子进行了寻址:  

但是、仍然存在错误。 正如所写的、即使比较正确、OTA 库的 FSM 也不会正确地进展到其他存档。 解决方法是执行以下操作:

在 OtaLib.c 中、注释掉以下行:

案例 OTA_State_check_archive_new_update:
{

uint8_t *pVersionFileName;
_SlOtaLibTrace (("ota_run:CdnClient_GetNextDirFile\r\n"));
pOtaLib->pOtaFileName = CdnClient_GetNextDirFile (pCdnClient、&pOtaLib->OtaFileSize);

/*检查列表中的最后一个文件是否仍然没有 tar 文件*/
if (pOtaLib->pOtaFileName =NULL)
{
/*未找到 tar 文件,不返回更新*/
_SlOtaLibTrace (("ota_run:错误 CdnClient_ReqOtaDir -找不到 tar、没有更新\r\n);
pOtaLib->ConseciveOtaErrors = 0;
pOtaLib->State = OTA_State_Idle;
_OtaCleanToIdle (pOtaLib);
返回 OTA_RUN_STATUS_NO_updates;
}

_slOtaLibTraceTM (("ota_run:CdnClient_GetNextDirFile:file=%s、size=%ld、r\n"、pOtaLib->pOtaFileName、pOtaLib->OtaFileSize);

if (strstr ((const char *) pOtaLib->pOtaFileName、".tar")=NULL)
{
_slOtaLibTrace (("ota_run:警告、不是 tar 文件、fileName=%s\r\n"、pOtaLib->pOtaFileName));
/*保持打开状态,检查下一个文件版本*/
pOtaLib->State = ota_State_check_archive_new_update;
返回 OTA_RUN_STATUS_CONTINUE;
}

/*继续,用户应用程序可以覆盖此决定*/

//注释出此行

//pOtaLib->State = OTA_State_Req_file_URL;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


/*插入 Tar 解析器模块*/
OtaArchive_init (&pOtaLib->OtaArchive);

2.在 OTA_SET 中添加:

案例 EXTLIB_OTA_SET_OPT_ACCEP_UPDATE:
/*检查 OTA_State_check_archive_new_update 状态之后是否*
if (pOtaLib->State!= ota_State_check_archive_new_update)
{
_SlOtaLibTrace (("ota_set:错误 EXTLIB_OTA_SET_OPT_ACCEP_UPDATE 处于错误状态=%d\r\n"、pOtaLib->State));
返回 OTA_OPT_ERROR_ERROR_STATE;
}

pOtaLib->State = OTA_State_Req_file_URL;
中断;

3.如果您希望拒绝更新、请不要调用 Ota_set、只需执行任何操作即可。

这些更改将使 FSM 能够进行。  

如果有一种机制来执行该操作、则很乐意发送修补程序。  

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

    您好!

    我理解您的代码、但我不确定最初的问题是什么。

    是否存在实际错误或您更喜欢其他方法(当 OTA_RUN 返回 OTA_RUN_STATUS_CHECK_OLDER_VERSION 时不调用 OTA_SET)?

    BR、

    Kobi

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

    您好、Kobi、

    正如我所能说的那样、我认为当前实施中存在错误。


    1) 1)假设目录具有3个固件版本:

    • 0.tar
    • 1.tar
    • 2.tar

    2) 2)假设当前系统版本号为0。


    FSM 的实现方式是、如果下载的固件列表中的第一个元素是1.tar 或2.tar、则更新将继续。

    但是、如果检索到的第一个文件是0.tar、FSM 将执行以下操作:

    1) 1)在 OTA_State_check_archive_new_update 状态下、它会调用:

    /*继续,用户应用程序可以覆盖此决定*/
    pOtaLib->State = OTA_State_Req_file_URL;

    2) 2)将返回 OTA_RUN_STATUS_CHECK_OLDER_VERSION 的 OTA_Run 返回值。 但是、用户可以拒绝此更新、这会阻止 FSM 迭代剩余的存档。

    3) 3)结果是、如果存在与当前版本相同的版本、并且它是下载列表中的第一个版本、则看不到更新文件。

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

    没错。 我理解这个问题。

    为什么要在目录中保留旧的 tar 文件?

    我认为这个问题以前没有提出、因为通常您会删除过时的 tar 文件。

    无论如何、我会报告这一点、我们会在下一个版本中对其进行修复。

    谢谢、

    Kobi

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

    您好、Kobi、  

    当然、我可以在哪里报告它?

    至于保留旧文件的原因、我认为问题是 a)行为对我来说并不明显、b)我正在考虑更新可能必须按顺序应用才能有效的情况。 也许并不总是需要、但我不想装箱。

    FWiw I 最终使用模型、在该模型中、文件直接从 URL 下载。 我让我的应用程序使用其当前版本号对服务器执行 Ping 操作、并询问它应该下载哪个版本(如果有)。 我在使用分接盒集成时遇到了很多间歇性故障。 直接下载在我的测试中看起来更稳定。   

    谢谢!

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

    您刚才报告了... (这是报告问题的论坛、我们将从这里开始)。

    BR、

    Kobi