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-MSPM0G3507:次级引导加载程序更新 BCR 应用程序 CRC 校验

Guru**** 2536190 points
Other Parts Discussed in Thread: MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1314734/lp-mspm0g3507-secondary-bootloader-updating-bcr-application-crc-check

器件型号:LP-MSPM0G3507
主题中讨论的其他器件:MSPM0G3507

我非常想使用 BCR 工具来检查应用程序是否已正确编程、看起来我需要确保 APPCRCSTART、APPCRCLENGTH 和 APPCRC 已正确编程才能执行此操作。  但是、如果引导加载程序更新应用程序、我预计需要更新这些值。  SDK 示例中是否有这种情况的示例?  我本来希望它们位于生产器件中受静态写保护的区域-或者为了使用此功能、NONMAIN 必须保持可写状态?  我希望使用 SWD 安全级别1的版本-这是否更改了可用的版本?

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

    您好、Alan!

    SDK 默认路径中确实有一个辅助 BSL 示例如下所示。

    C:\ti\mspm0_sdk_version\examples\nortos\lp_MSPM0G3507\bsl\secondary_BSL

    查看非 main、作为一种检查 CRC 不会更新的静态值的方法。 如果你想要动态值上的 CRC、我建议把它添加到你的次级 BSL 中。 如果确实要在动态值上使用 non-main、则需要更新 CRC 值。

    此致、
    卢克

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

    感谢您的答复。

    我曾看到过该示例、但它似乎没有显示使用 BCR CRC 校验来验证应用程序映像内容。  它似乎确实允许根据应用程序映像计算 CRC、但这必须在主机的指令下执行。  或者我误解了吗?

    如果我按照您的建议将 CRC 校验放入次级引导加载程序、那么只有在进入引导加载程序后才能运行。  理想情况下、我想使用 BCR 的功能、即每次芯片启动后应用程序执行前都会运行。

    您已经建议、如果我想对动态值使用非主 CRC 校验、我可以更新 CRC 值-是否有演示最佳做法的示例?  我假设在这种情况下、所有 BCR 配置数据扇区都需要被擦除并重新编程、这可能会使芯片在中断时处于不利的状态。

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

    您好、Alan!

    注意事项是正确的、这就是我不建议使用 NONMAIN 作为数据更新的 CRC 校验的原因。 如果在写入 NONMAIN (例如 POR)时发生中断、则可能会遇到问题。 我们没有基于这一点的示例、因为以这种方式使用非 main 并不是真正的最佳做法。 对于静态值、最好使用非主。

    您可以在引导加载程序应用程序代码中实现 CRC 校验、这在更新应用程序代码时非常有用。

    此致、
    卢克

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

    卢克

    如果我遇到使用辅助 BSL 来更新主应用程序固件的情况、如果在执行过程中中断(例如由于 POR)、会发生什么情况?  该应用程序将不会被正确编程(因此不会正确执行)、但也没有信号重新进入辅助 BSL -大概是应用程序将继续尝试进入该状态?  我正在考虑一个没有备用 GPIO 可用于强制进入次级 BSL 的应用、并希望确保没有被锁定的风险。

    我需要创建*另一个*引导加载程序,以便每次在应用程序之前运行?  这将与从 BCR 配置中配置的辅助 BSL 不同并独立、并将使用0x0处的启动矢量表(并且必须配置应用程序的矢量表位置)?  在本例中、辅助 BSL 甚至对我有用吗?

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

    您好、Alan!

    一种方法是在闪存中包含2个单独的部分、并且一次更新一个映像。 如果图像被损坏,您仍将运行良好的图像。 (这将要求您有足够的空间容纳2个版本的应用程序代码)。

    其他选项是在启动期间检查应用代码是否正确、如果不正确、则请求更新。 将这个代码段放置在闪存的开始位置、这样、在启动后、它将运行这个段、然后您可以跳转到您的主应用。

    我们提供了 引导管理器示例来帮助验证更新。

    SDK 中有一个引导管理器示例、其默认路径如下

    示例代码- C:\ti\mspm0_sdk_x_xx_xx\examples\nortos\lp_MSPM0G3507\boot_manager

    文档- C:\ti\mspm0_sdk_x_xx_xx\docs\english\middle件\boot_manager

    此致、
    卢克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    其他选项是在启动期间检查应用程序代码是否正确,如果不正确,则请求更新。 将这部分代码放在闪存的开头,以便在启动后运行该部分,然后您可以随后跳转到主应用程序。

    事实上,我认为这是答案。  我打算在闪存的开头创建一段代码来执行此函数、然后跳转到主应用程序、而不是使用内置 CRC 校验和次级 BSL 来允许在引导时更新和验证我的应用程序。