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.

[参考译文] MSP430F5328:如何为 MSP430F5328和 BSL MSPBoot 主应用程序跳跃自定义 MSPBoot

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1166442/msp430f5328-how-to-customize-mspboot-for-msp430f5328-and-bsl-mspboot-main-app-jumping

器件型号:MSP430F5328

尊敬的 TI 团队:

我们需要对使用 MSP430F5328 MCU 的器件实施固件升级。 从先前的研究中我发现 BSL 具有2KB 大小限制、一旦我将 FW 升级逻辑和 SPI 外部闪存读/写逻辑添加到 BSL 中、我认为大小应该大于2KB。 那么、我想我是否可以在 MSPboot 中执行固件升级功能? 但是、TI 发布的 MSP430F5328没有 MSPboot 项目、因此我认为我需要自己进行自定义。

我是否可以知道应该 使用哪种示例代码、哪种代码与 MSP430F5328最相似?

实际上 、我在网上找到了一个 MSPBoot 示例并尝试了解它。 但是、在读取 App2_MSPBoot_F5529_UART 的示例后、如果要为 MSP430F5328进行定制、似乎需要执行许多操作。

首先、有一个名为 TI_MSPBoot_JumpToBoot (void)的函数、用于从 MSPboot 跳转到 BSL。我想、在这个函数中、passwd 和 StatCtrl 直接在这里使用、我找不到它们的定义、我是否知道这两个变量的定义在哪里? 另外、我在该函数中找不到任何相关代码可以从 MSPboot 跳转到 BSL。 我是否可以知道它是如何实现跳转的?  

接下来、有一个 ProxyVectorTable[]、它提到的注释是一条 BRA 指令、什么是 BRA 指令? 我是否应该将这个值更改为 MSP430F5328的相应值、是否可以知道 MSP430F5328的正确值是多少?

最后、我对 BSL、MSPboot 和主应用程序跳跃有疑问。 如果 我 想在主应用程序运行期间收到一些命令后在 MSPBoot 中执行固件升级、可以使用(void (*)()) address_for_mspboot ()直接从主应用程序跳转到 MSPBoot 吗? 或者我必须先跳转至 BSL,然后从 BSL 跳转至 MSPboot?   如果我想在固件升级完成后跳回主应用程序,应该首先跳转至 BSL,或者可以使用  (void(*)地址_of_mainApp)()直接跳转至 MSPBoot非常感谢。

Kathy

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

    您好 Kathy、

    [引用 userid="509872" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1166442/msp430f5328-how-to-customize-mspboot-for-msp430f5328-and-bsl-mspboot-main-app-jumping "]我发现 BSL 的大小限制为2KB,[/quot]

    我没有找到任何与2KB 限制相关的文档。 您能澄清一下您的意思吗?

    此致、

    Evan

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

    您好 Evan、

    感谢您的回复。 我在"创建基于闪存的自定义引导加载程序(BSL)(修订版 G)"文档中找到它、TI 在第3页 的1.1段 BSL 存储器布局上发布了该文档。 正如 below.it 所说、这个 BSL 存储器是一个2KB 的闪存部分。 谢谢你。

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

    您好 Kathy、

    BSL 代码本身占用器件上2KB 的闪存、但它可以加载闪存的整个主代码区域(MSP430F5328上为128KB)。 如果无法放入主存储器、写入新的引导加载程序可能不会有所帮助。  

    这是否能回答您的问题? 如果我对您的应用没有什么了解、请告诉我。

    此致、

    Evan

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

    您好 Evan、

    感谢您的回复、我明白您的意思。 但是、根据下面的 MSP430闪存编程器工具存储器配置选项、我们可以看到 BSL 大小有限制、对吧?

    另一个问题、我还有几个问题、如下所示。

    首先、我想问 BSL 和 MSPBoot 之间的关系是什么。 没有 BSL 的 MCU 是否刚刚使用 MSPBoot? 我可以说 MSPBoot 也是一个应用吗?

    另外、我对 BSL、MSPboot 和主应用程序跳跃有疑问。

    我是否可以 使用 (void (*)()) address_for_mspboot)()直接从主应用程序跳转到 MSPBoot?  

    如果我想从 MSPBoot 跳回主应用程序,应该先跳转到 BSL,然后从 BSL 跳转到主应用程序吗?  或者、我可以使用      MSPBoot 中的(void (*)()) address_for_mainApp)()直接跳转到主应用程序?  非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="509872" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1166442/msp430f5328-how-to-customize-mspboot-for-msp430f5328-and-bsl-mspboot-main-app-jumping/4393872 #4393872"] BSL 大小有限制,我对吗?

    是的、但我仍然不清楚为什么这是您的限制。 这只是器件上 BSL 代码区域的大小。

    [引用 userid="509872" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1166442/msp430f5328-how-to-customize-mspboot-for-msp430f5328-and-bsl-mspboot-main-app-jumping/4393872 #4393872"> BSL 和 MSPBoot 之间的关系是什么。 没有 BSL 的 MCU 是否刚刚使用 MSPBoot?[/quot]

    MSPBoot 文档简介 对以下内容进行了良好的描述:

    [引用 userid="509872" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1166442/msp430f5328-how-to-customize-mspboot-for-msp430f5328-and-bsl-mspboot-main-app-jumping/4393872 #4393872"]是否可以 使用 (void (*))address_for_mspboot)()直接从主应用程序跳转到 MSPBoot?  [/报价]

    我认为您可能需要做更多的事情。 下面是使用 MSPBoot 的示例的一个片段(您可以在主 MSPBoot 下载中找到)。  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int main_boot( void )
    {
    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;
    /*
    * Important Note:
    * MSPBoot assumes that proper conditions are met when executing after reset.
    * It’s important to remark that DCO must not be changed until VCC>=VCC(min),
    * and a minimum of 2.2V is required for Flash Program/Erase operations.
    * An optional software delay can be added for applications having a slow
    * voltage ramp-up or an external voltage supervisor is suggested
    *
    */
    // __delay_cycles(10000); // Uncomment this line and adjust number of delay
    // cycles according to the application voltage ramp
    // Initialize MCU
    HW_init();
    Clock_init();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好 Evan、

    感谢您的回复。

    我想在 BSL 中实现固件升级、并计划将主应用程序映像备份到外部 SPI 闪存、因此我需要在 BSL 中添加新的 SPI PI、但这会将 BSL 的大小增加到3KB。 这是不允许的。   

    现在、我正在尝试自定义 MSPBoot、并希望在 MSPBoot 中实现我的固件升级逻辑。  但似乎我需要知道 MSP430F5328器件的引导顺序。 如果我的内部闪存中有 MSPBoot 和主应用程序。 器件启动后、它将首先跳转到 MSPBoot 还是主 App? 另外、如果我想从主应用程序跳转到 MSPBoot、我是否应该在寄存器中设置 BOR 并让器件重新启动? 器件重新启动后、我如何知道它是否会跳转到 MSPBoot?

    那么、在哪里可以定义启动序列? 我是否应该将 BSL 用作器件每次启动的自举? 非常感谢。

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

    您好 Kathy、

    MSPBoot 下载中的示例显示了器件首先执行引导检查(即 MSPBoot 是否应控制器件?) 然后调用应用程序()。  

    我认为、尝试根据您的应用来调整示例始终是最简单的。  

    Evan

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

    您好 Evan、

    感谢您的回复。

    我是否可以知道器件是否没有 BSL、那么我如何使 MSPBoot 首先执行? 谢谢你。

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

    Kathy、

    几乎所有 MSP 器件都具有某种 BSL、包括 F5328。 仅当存在某些条件时才调用 BSL、通常为:

    1. RST/测试按特定顺序切换(这可能在应用程序使用寿命期间的任何时间点发生)
    2. BSL 由应用软件手动调用。  

    如果这两种情况都不发生、则不会调用 BSL、CPU 将开始执行应用程序代码。

    此致、

    Evan