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:LP-MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1402387/lp-mspm0g3507-lp-mspm0g3507

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

工具与软件:

您好、您好。

我正在尝试访问引导管理器-引导加载程序-应用系统。

引导管理器应在复位后启动、并决定引导加载程序之后应用程序是否应具有控制。

如果不需要更改应用程序(即不涉及引导加载程序)、则应跳转到应用程序。 否则、它将跳转到引导加载程序。

为此、我使用了2个空示例。 第一个是(我将其称为 bootmanager)、用于 gcc 环境使用提供的链接器文件、并在地址0x7000处(将存储"应用程序"的位置)执行跳转。 (此跳转是有效的、因为当我使用通过链接器放置在0x7000处的函数时、我会窃取到函数内部-这仅用于测试"跳转"到正确的地址)

现在、在下一步中、"bootmanager"仅包含 JUMP (和示例提供的 MCU 初始化)

第二个空示例链接到地址0x7000。

批量擦除后、我刷写"bootmanager"并检查存储器。 地址为0x0时、它看起来正常

同时在0x7000时、它仍然为空。

Atter I flashh "应用程序"(我通过"加载程序"来执行): ,

我有很多错误:

 

我通过重置脚本清除错误:

器件处于复位处理程序中:

然后我检查存储器。

在地址0x7000看起来正常:

但看起来在地址0x0处它已更改/覆盖:

任何理想选择、为什么这是触觉? 如何解决该问题?

非常感谢

Ovi.

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

    您好、Ovi:

    您是否仔细查看了[SDK 安装路径]\mspm0_sdk_2_01_00_03\examples\nortos\LP_MSPM0L2228\boot_manager 下的启动映像管理器示例及其文档、该示例位于[SDK 安装路径]mspm0_sdk_2_01_00_03/docs/english/boot_manager/doc_guide/doc_guide/index.html?

    此示例适用于 M0Lx22x 器件、但大部分过程是相同的、本文将指导您将引导管理器应用程序加载到某个存储器区域中、而预期的应用程序映像位于另一个存储器区域中。 您可以将这一部分用作您自己项目的指南和示例。

    我并不是100%清楚您的流程、但听起来您需要执行批量擦除、然后刷写 bootmanager 代码、然后观察位置0x7000是空的(听起来行为正确)。 然后、您尝试使用相同的过程刷写第二个映像文件、并获得错误、但在重新连接后、您会发现第二个映像已正确刷写、第一个映像已被擦除。

    对我来说、似乎您不应该对两个映像点击通用的"LOAD PROGRAM"按钮、因为这会向 CCS 表明您只想将这一个程序加载到器件中、从而清除存储器的其余部分。 因此在这种情况下、您将擦除地址0x0-0x6FFF、这将清除复位向量和堆栈指针而不重新写入它们、然后导致出现错误情况。  

    你可以在上面提到的文档中看到、当你打开一个调试会话时、CCS 提供了一个"加载存储器"功能、此功能将使你能够写入一个存储器区域、而不会擦除存储器的其余部分或影响你的原始程序。 或者、也可以尝试编辑项目属性、以防止调试器在刷写器件时擦除存储器。

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

    尊敬的 Dylan:

    感谢您的回答。 我已经查看了您指出的文档。 我正在使用 Theia 和 gcc 编译器。  

    文档中的"load Memory"选项:

    看起来与我正在经历的不同:

    我认为"Load Memory"会是上述版本中的标记箭头、但无论如何、我有(或者我尚未找到)用于指定加载地址的选项。 因此、只有采用十六进制表示的内容才会被考虑在内。

    现在、擦除闪存:

    我在这里尝试了所有型号:

    我还没有成功。

    以下是映射文件查找应用的方式:

    不过、在为应用"加载"十六进制文件后、"bootmanager"会被擦除。

    我做错了什么?

    谢谢!

    Ovi.

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

    在深入了解这一点后、我看到.map 文件指定了数据的地址位置、因此在选择 Intel 十六进制格式时不会提供加载地址的选项。 相关注意事项:您在此处加载的.map 文件可能会指定清除另一个存储器位置、因此在将此.map 文件加载到器件时、该存储器区域会被清除。

    此处的一种选择是组合.map 文件以包含引导管理器二进制文件和应用二进制文件、因此在将.map 文件加载到器件时、可以将两者正确放在内存中。

    另一个类似于我建议的文档中执行的操作的选项是为引导管理器和应用程序创建单独的.bin 文件。 然后、当您选择.bin 格式时、系统将要求您为引导管理器和应用程序指定加载地址。 您还需要确保将擦除配置(如上所述)设置为仅擦除必要的扇区。