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.

[参考译文] MSP430G2553:在运行时跳转到特定闪存位置的程序

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1036867/msp430g2553-jumping-to-program-at-specific-flash-location-at-runtime

器件型号:MSP430G2553

我正在为 MSP430开发一个小型引导加载程序。 由于工程的引脚限制、我无法使用 BSL 加载程序。  

目前、我能够接收固件、将其写入闪存并进行验证。 然后、我使用 UNIFASHER 转储闪存、并在开发期间再次进行验证。 所有这些都运行良好。  

我一直在将程序计数器设置到新固件位置、希望一切正常。 但是、它似乎无法正常工作。 实际上、我的当前程序只是重置。 起初、我以为这是调试的一个赝像、但即使在没有连接调试器的情况下使用固件、我也遇到了同样的问题。 下面是我如何从软件跳转到程序。  

    __disable_interrupt();
    ((void (*)())0xCA20)();
 

我也尝试了其他一些东西。

  • 设置程序计数器后启用看门狗
  • 直接使用汇编指令(br 和 MOV)、编译相同、因此无论如何都不会产生影响。  

通常、我只需单步执行汇编并将其计算出来、但在本例中、我认为调试会产生效果。 任何帮助都很棒!

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

    我在主要帖子中发现了一些细节

    • 引导加载程序本身受限于正确的闪存大小、在本例中为`闪存:origin = 0xC000、length = 0x0A00`
    • 加载后、主程序从下一个地址开始
    • 如果我将引导加载程序加载到存储器中、则加载固件并设置程序计数器、它将重置为我的引导加载程序、引导加载程序将像器件复位一样运行(这是主要的不良行为)
    • 如果我使用 UNIFFlasher 在其偏移处加载主程序、它将正常运行。   
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    0xCA20是目标代码希望开始执行的位置吗?

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

    是的、没错。 我曾尝试过缩小节目规模、深入探讨地址空间、但结果相同。 我想程序可能无法正常启动、看门狗启动并重置回引导加载程序。 嗯、我认为这可能是一件事。  

    看门狗是否即使没有执行也会运行? 检查文档的时间。  

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

    尊敬的 Reiner:

    您是否尝试禁用 WDT 并使用这两行代码输入引导加载程序代码?

    谢谢!

    此致

    Johnson

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

    看门狗会运行、除非您将其停止。

    硬编码跳转地址是一个问题、因为正确的输入地址可能会改变。 我怀疑您是从.hex 文件中读取代码、在这种情况下很容易找到复位矢量值。 您现在需要该值来启动目标程序、并且必须在下次复位后将其保存在某个位置以供使用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="215629" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1036867/msp430g2553-jumping-to-program-at-specific-flash-location-at-runtime/3836122 #3836122"]硬编码跳转地址是一个问题,因为正确的条目地址可能会更改[/quot]

    这很有趣、我不知道。 唯一的奇怪之处在于、我看到的 MSP430的其他引导加载程序示例都使用相同的方法来设置复位矢量、并且只是硬编码。 我认为这指向了正确的方向、看一下这条线程、我认为我可以提出解决方案。  

    (2) MSP430复位矢量- MSP 低功耗微控制器论坛- MSP 低功耗微控制器- TI E2E 支持论坛

    是的、对于这些测试、看门狗计时器始终处于关闭状态。  我不想靠近它、直到我使这个完整的样本工作。  

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

    尊敬的 Reiner:

    您的问题是否已解决? 或需要未来支持?

    谢谢!

    此致

    Johnson