Thread 中讨论的其他器件:MSPM0G3519、 UNIFLASH
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.
您好 Brian、感谢此更新、我也感到困惑、我的问题在哪里。
我现在负责 MSPm0g3519 控制器。 我做了如下一些实现。 我正在将固件.bin 上传到 bank1 的地址 0x48800。 然后、我的引导加载程序代码只需将.bin 从组 1 复制到地址 0x8800 处的组 0。 然后调用 start_app() 函数并传递地址 0x8800。 但复制的映像没有执行。 但如果我从 uniflash 上载相同的.bin、则不会将映像从 bank1 复制到 bank0、而是会生效并被执行。
您好、Brian、
不确定。 您从哪个存储体执行/运行映像具有讽刺意味。 如果该映像直接从 uniflash 上载、则会运行、但如果我从 另一个闪存区域复制该映像、则不会执行复制的映像。
要了解我的问题,你可以检查这在你的结束.
步骤 1. 在 bank1 中加载应用映像
第 2 步: 将图像从闪存组 1 复制到闪存组 0
第 3 步: 将 bank0 复制的图像地址提供给 start_app() 函数。
注意:我修改了仅复制处理映像复制的映像并调用 start_app () 函数的 CSC。
嗨、Mehul、
我想我可以很快使用 3000 英尺的概览。
因此、好像您使用的是 CSC 示例集。 您是否从提供的示例开始、其中引导加载程序是组 0 上映像的一部分? 您是否 已经具备所提供示例按预期工作的起点?
如果是、您是否对此映像使用加密?
上载映像的.bin 时、您是否使用未加密的签名版本?
为什么有一个副本从 bank1-bank0 而不是使用 bankswap 功能来选择选项,而不必执行副本? CSC 示例中是否已禁用 bankswap 功能? 您是否保留了写入/执行排除保护? 如果未禁用 bankswap、您是否在两个存储体之间镜像了 CSC?
当你很难犯错时,你有一个根本原因的想法吗? 是在发出 INITDONE 之后、在期间还是之前?
您使用的优化级别是什么? O0? 如果是、可能需要使用 O2。 有时、在跳转期间 O0 可能太字面量、并在两者之间添加额外的“存储到栈“指令、使栈指针赋值失败。 不建议使用 O0
您好 Jackson、感谢您的答复。
现在、让我告诉您我要在这里做什么。 我已经获取了 CSC 代码、但我更改了主函数、只评论了执行映像验证解密等的代码。 现在我有的 CSC 只有系统初始化函数、然后我创建了一个函数、将映像从组 1 复制到组 0。 然后、复制完成后、我提供了组 0 地址、我在该地址中将映像复制到 start_app () 函数。 此实验是为了了解是否可以将完整的映像从一个存储体复制到另一个存储体、以及复制的映像应该如何正确执行。 正在复制我从闪存组 1 中的闪存加载的映像。 该映像是未签名的未加密.bin。 我在 start_app () 函数中遇到了严重故障。 图片我已分享以上回复、请检查。
好的、从您所描述的内容来看、我认为如果 initdone 尚未发布、并且在引导重置后会发生这种情况、那应该是可能的、但是我强烈建议在生产环境中不要这样做。 如果您尝试管理两个映像、最佳选项是就地执行 (XIP) 或使用 bankswap 功能。 bankswap 功能的发明部分是为了回滚保护,并包括一个有效的备份映像,在这种情况下,它将被卷绕。 即使在交换后、也始终可以将内容复制到存储器区域 0x48800。
我认为您看到的硬故障可能是由于未进行优化。