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