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.

[参考译文] IWR6843:次级引导加载程序错误:RPRC 分析失败!!!

Guru**** 2460380 points
Other Parts Discussed in Thread: IWR6843, MMWAVE-L-SDK

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1488837/iwr6843-secondary-bootloader-error-rprc-parsing-failure

器件型号:IWR6843
Thread 中讨论的其他器件: MMWAVE-L-SDK

工具与软件:

我们使用次级引导加载程序来更新 IWR6852的 FW。

如果硬件(包括 IWR6843)在通过 XMODEM 接收固件数据时断电、IWR6843不会启动并输出"Error:RPRC Parsing Failure!!" 显示的帧类型。

以下是复印的详细程序。

1)硬件开启。
2)转到次级引导加载程序上的固件传输模式
3) 3)通过 XMODEM 将图像发送到 IWR6843。
4)在完成传输图像之前、停止 XMODEM。
5)重新启动 IWR6843。

完成此过程后、IWR6843将输出 "Error:RPRC Parsing failure!!" 显示的帧类型。

即使解析更新的映像失败、我们也要移至默认备份映像。
您能给我们提供一些解决方案吗?

此致、
Masashi

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

    你(们)好

    感谢您的提问。 请允许我们在 几天内回复

    此致

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

    你好。

    如果您的设备已关闭、则意味着没有接收到图像、因为接收图像的软件未运行。  进行传输时、请确保设备已通电。

    此致、

    Santosh

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

    尊敬的 Santosh:

    我知道断电后无法进行传输。

    当传输期间由于断电等原因断电时、便会发生问题 无论是否有意、终端用户在传输固件时都可能会遭遇断电。 断电后重新启动时、我希望 IWR6843随备份映像一起运行。 如果它以备份映像启动、系统可以请求重新发送、但 mmWaveSDK 中的默认次级引导加载程序现在停止并生效、并且无法从系统执行任何操作。

    您能给我一些关于如何修复次级引导加载程序的建议吗?

    此致、
    Masashi

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

    你好。

    我认为这是因为用于6843的 SBL 在第一次操作后重写 SFLASH 内容、这样复位时、它将加载实际应用而非 SBL。  您需要修改 SBL 以删除此功能、以便 SFLASH 中的第一个有效映像保留 SBL、然后您可以让 SBL 检查复位类型、以确定是加载预期映像还是备份映像。

    此致、

    Santosh

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

    您好!

    感谢您的答复。

    我的理解是不同的。

    复位后、SBL 正在运行。
    选择加载更新映像还是默认映像的过程仍然在运行。

    问题在于、如果更新后的映像不完整(例如、如果由于断电等原因并非所有映像都可以写入)、SBL 不会检测到更新后的映像中的错误、并且不会切换到默认映像。

    相关源代码如下所示。
    SBL.c

    第571行:加载更新的图像
    第580行:如果加载更新的映像失败、请加载备份映像。
    问题是、当更新的图像未完成时、SBL 不会转至第580行。  

    此致、
    Masashi

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

    你好。

    正确。  但是、它是在程序的首次运行而不是在断电复位后运行。  如果您看看上面的行、它会在将应用映像从 SFLASH 写入 RAM 之前更新 SFLASH 中的 metaimage。  这意味着、一旦发生电源复位、当引导加载程序查看 SFLASH 时、它将看到应用程序而不是 SBL。  因此、如果更新的映像不完整、您可能加载了错误的映像、现在设备正在尝试启动错误的映像、这将导致解析错误。

    此致、

    Santosh

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

    如果映像未完成并从备份映像开始、是否可以停止加载映像?
    如果您知道如何修复程序、请告诉我。

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

    你好。

    将应用映像从 SFLASH 加载到 SRAM 时、您必须添加此检查功能。  如果应用程序的内容与 metaheader 中设置的大小不匹配、您甚至可以在加载到 SRAM 之前抛出错误或跳转到加载备份映像。

    此致、

    Santosh

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

    我们可以在 metaheader 中设置大小。
    但是即使 XMODEM 成功与否、其值也是一样的。
    因此、我们无法使用该值来判断错误是否发生。


    请让我来提出一个更具体的问题。
    我们认为 FW 放样过程会在以下停止。

    multicoreimage_parser.c
    函数 SBL_stateRPRCDownloadParse()

    /* Load image - to the destination location */
    bytesRead = SBL_imageParser(&imageChunk[0], bufferLen);
    
    if (SBL_CHECK_ERROR_STATUS)
    {
        SBL_printf("Error: RPRC Parsing Failure!!!\r\n");
        DebugP_assert(0);
    }

    我尝试了修改源代码、
    我注释掉了 DebugP_ASSERT (0)、并在检测到错误后进行退出过程。
    并再次加载备份映像、


    但我得到以下错误。

    错误:CRC 驱动程序(通道2)获取事务 ID 失败[错误代码-2103]

    我们应该如何修改代码? 您能给我们一些建议吗?

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

    我认为最好的处理方法是在启动过程中删除将应用程序从 SRAM 写入 SFLASH 的操作。  这样、SBL 将每次加载并自动加载应用程序、如果出现问题、它将引导备份映像。  正如我在前面所说的那样。  从 SRAM 复制到 SFLASH 意味着 SBL 将不再在上电时引导、因此如果在此过程中出现问题、可能会尝试引导不正确/有故障的映像。  此外、尝试解析映像时似乎有一些错误、因此我可以调试该函数(SBL_imageParser)以更好地了解发生的情况。  作为参考、我将查看用于 SBL 的参考实现的 MMWAVE-L-SDK、由于在任何时候都不会将应用程序从 SRAM 复制回 SFLASH、因此这不会成为问题。

    此致、

    Santosh

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

    感谢您的答复。

    我想尝试以下方法。 如何删除加载中中断的 SRAM? 如果源代码中有任何引用、请告诉我。

    我认为最好的处理方法是在启动过程中删除将应用程序从 SRAM 写入 SFLASH 的操作。

    我查看了 MMWAVE-L-SDK、
    我当前使用的 SBL 有很大不同、所以我想删除应用程序的编写。

    只是为了确认、我知道当 SBL 启动时、应用程序会从 SFLASH 加载到 SRAM、而不是从 SRAM 加载到 SFLASH。 是这样吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何删除加载中中断的 SRAM? 如果源代码中有任何引用、请告诉我。

    您可以重置器件以清除 RAM。

    [报价 userid="596443" url="~/support/sensors-group/sensors/f/sensors-forum/1488837/iwr6843-secondary-bootloader-error-rprc-parsing-failure/5739013 #5739013"]为了确认、我明白当 SBL 启动时、应用程序从 SFLASH 加载到 SRAM、而不是从 SRAM 加载到 SFLASH。 正确吗?

    正确。

    此致、

    Santosh

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

    感谢您的答复。

    我知道软复位可以清除 RAM。

    当我执行软复位时、它会清除所有内容、包括其他内部参数、
    因此、我无法判断是在加载应用程序 metaimage 之前还是在尝试加载它失败之后。

    是否有方法可以在软复位之前和之后保留状态并确定发生了上述哪一项?

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

    这应该无关紧要、尽管这两种情况下的行为应该相同、对吗?  如果它在加载应用程序的过程中、但由于电源复位或其他原因而失败、RAM 将清零、复位时将再次加载 SBL 并尝试加载实际的应用程序映像。  根据我的理解、应该重新加载备份映像的唯一原因是、如果实际应用程序本身有问题、但如果您要重新启动该过程、并且实际应用程序映像正确、那么您也可以尝试加载相同的应用程序、而不是正确的备份应用程序?

    是否有办法在软复位前后保留状态并确定发生了上述两种状态中的哪一种?

    软复位后可以通过某种方法保留某些信息、但我认为最好的办法是跟踪发生的复位类型以及基于所需应用程序映像中的复位原因加载。  TRM 中有一个关于 RSTCAUSE 寄存器的说明、可能对这一点有所帮助。

    此致、

    Santosh