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.

[参考译文] CC3220SF:OTA 捆绑包未处于正确状态错误

Guru**** 2487425 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1200311/cc3220sf-ota-bundle-not-in-the-right-state-error

器件型号:CC3220SF

您好!

我下载一个容器,通过 OtaArchive_process ()函数传递它。 这需要解析 tar 文件、成功验证签名、在文件系统中创建文件/保存这些文件等  在捆绑包状态更新的情况下、_SaveOtaVersionFile (&pOtaArchive->OtaVersionFile)也会成功执行。 存档状态为 OtaArchiveState_CompletePendingTesting。 但是、当我执行 OtaArchive_Commit 时、该函数返回错误-10282。 可能是什么原因?

tar 文件只有一个 test.txt (有20字节的数据)、并由 SDK 中的虚拟证书签名。

代码片段.看起来像这样(基于 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/3596060#3596060)

unproc = 4096;

  while (unproc >0 && archive_status_download_done_done!= status)
  if (unproc + proc)<= dataLen )
  
    Status = OtaArchive_Process (&otaArchiveBuf&data[proc](short int) unproc、&tmp);
    unproc = unproc - tmp
    proc  = proc + tmp
    diag_xL_log_info ("OtaArchive_Process %d 个字节已处理、%d 个字节未处理\n\r\nproc、unproc);
    //错误
    如果(status=0) break
  }}

  如果(status == archive_status_download_download_done)
   //此处重新启动 SoC
   sl_Stop (200);
   MAP_PRCMHibernateIntervalSet (330);
   MAP_PRCMHibernateWakeupSourceEnable (PRCM_HIB_SLOW_CLK_CTR);
   MAP_PRCMHibernateEnter();
  }
代码
if (OtaArchive_GetPendingCommit()){
if (OtaArchive_Commit()){
}

谢谢。

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

    因此、只是为了验证我是否理解正确。。。

    从 OtaArchive_Process 获得 archive_status_download_done (然后在 MCU 复位前调用 sl_Stop ())。

    MCU 复位后 -您检查  OtaArchive_GetPendingCommit ()(返回 true ),然后调用 OtaArchive_Commit ()。

    最后一次通话失败了吗?

    请启用 OTA 存档日志并发送终端日志。

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

    你好 Kobi , 第一次调用 OtaArchive_GetPendingCommit()返回等待提交。 如果可以呼叫

    OtaArchive_GetPendingCommit()第二次没有提交映像,我没有等待提交。 是不是故意的? 

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

    也许 调用  OtaArchive_GetPendingCommit() 可以改变内部状态-我需要仔细检查。

    为什么需要呼叫它两次? 您可以存储返回代码、而不是再次调用 API。

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

    你好 Kobi,只是好奇地知道:)我存储从 API 的返回值现在,并使用它。 我存储了 API 中提交待处理的返回值,当我调用 OtaArchive_Commit ()函数时,返回-10282。 OTA 容器仅包含 txt 文件、但两者都标记为失效防护

    OTA 存档中的日志

    [OtaArchive_Init] OTA 存档版本= OTA_archive_2.0.0.4
    [OtaArchive_RunParse]设置状态= OtaArchive_ParseHdr
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar] fillettype=5、目录=20230227123742_CC3220SF_OTA-test-培 根/
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar] fillettype=5、目录=20230227123742_CC3220SF_OTA-test-培 根/0/
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar] fillettype=5、目录=20230227123742_CC3220SF_OTA-test-培 根/1/
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar] fillettype=5、目录=20230227123742_CC3220SF_OTA-test-培 根/2/
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar] FileType=0、fileName=ota.cmd、FileSize=455
    [_BundleCmdFile_parse] bundle cmd file=test.txt、sig_len=0、SHA_256_Digets=0afb3ba9fe89cf733f2c6a8c45562ccc644c72d525f3d5d5d39403b8fe35b、cert=、secure=0、 捆绑包=1
    [_BundleCmdFile_parse] bundle cmd file=test2.txt、sig_len=0、SHA_256_Digets=0afb3ba9fe89cf73c2303f2c6a8c45562ccc644c72d525f3d5d5d39403b8fe35b、cert=、secured=0、 捆绑包=1
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar]跳过块对齐 RecvBufLen=1082、SkipAlignSize=58
    [OtaArchive_RunParseTar] FileType=0、fileName=ota.sign、FileSize=72
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar] FileType=0、fileName=test.txt、FileSize=19
    [OtaArchive_RunParseTar]创建/打开写入文件 test.txt
    [OtaArchive_RunParseTar]将大小19写入文件 test.txt、共19个。
    散列验证成功。
    存档文件的总字节4627。
    OtaArchive_RunParseTar:ota.cmd 中提及的1个文件已保存
    [OtaArchive_RunParseTar]下载文件已完成-大小=19
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar]跳过块对齐 RecvBufLen=3565、SkipAlignSize=493
    [OtaArchive_RunParseTar] FileType=0、fileName=test2.txt、FileSize=19
    [OtaArchive_RunParseTar]创建/打开写入文件 test2.txt
    [OtaArchive_RunParseTar]将大小19写入文件 test2.txt、共19个。
    散列验证成功。
    总存档文件字节5651。
    OtaArchive_RunParseTar:ota.cmd 中提及的2个文件已保存
    [OtaArchive_RunParseTar]下载文件已完成-大小=19
    [OtaArchive_RunParseTar]解析存档文件头
    [OtaArchive_RunParseTar]跳过块对齐 RecvBufLen=2541、SkipAlignSize=493
    [OtaArchive_RunParseTar]归档结束...
    [_SaveOtaVersionFile]也可在捆绑包中保存版本文件、version=20230227123742
    =================================================================== ===
    固件项目的固件源文件
    =================================================================== ===
    [SlWifiConnEventHandler_up MAC 地址:40:6:a0:97:37:94[WLAN EVENT] STA 连接到 AP: MyNetwork , BSSID: 2C:3a:FD:B5:df:E9.
    [NetApp 事件]设备获取的 IP
    [SlNetConnEventHandler] I/F 1 -已连接(MAC 级)!
    [SlNetConnEventHandler] I/F 1 -已连接(IP 级别)!
    [SlNetConnEventHandler] I/F 1 -已连接(互联网级)!
    [OtaArchive_Commit]错误 sl_FsCtl、状态=-10282

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

    复位 MCU 还是仅复位 NWP?

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

    我正在重置 uC 本身。

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

    你好 Kobi,另一个有趣的观察是-如果我调用  OtaArchive_Commit (),而不检查一个挂起的提交,它是成功的。 如果我检查一个挂起的提交,然后调用 OtaArchive_Commit (),返回一个错误-10282

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

    我听说 AWS 代码已经在调用  OtaArchive_Commit ()。

    我同意 Roger 关于您的新问题的看法、希望它能在今天得到解决。