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.

[参考译文] MSPM0G3519:实时固件更新(LFU)示例

Guru**** 2455560 points
Other Parts Discussed in Thread: MSPM0G3519, MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1489306/mspm0g3519-live-firmware-update-lfu-examples

器件型号:MSPM0G3519
主题中讨论的其他器件: MSPM0G3507

工具与软件:

hi champs、

我是为我们的客户提出这个问题。

Q1:由于有两个闪存组、MSPM0G3519应该能够进行带复位和不复位的实时固件更新(LFU)。 对吗?

问题2:您能否向我们展示在何处获取"具有"复位的实时固件更新示例? 这在 下面的数据表中也称为 OTA 更新。

Q3:您能否向我们展示在哪里可以获取"不进行"复位的实时固件更新示例?  

也就是说、所有运行/使用的保留全局变量/静态变量都保留在固件更新之前、期间和之后、编译器负责新的全局/静态变量热初始化。

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

    你好、 

    对于"RESET"、有两个条件:

    1.在启动或更新完成时使用复位从启动代码跳转到应用代码。

    2.使用复位来启用双组交换功能、此复位由启动代码中的 init_done 函数调用、此功能与客户安全代码相关。

    [报价 userid="4952" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1489306/mspm0g3519-live-firmware-update-lfu-examples ]Q1:由于有两个闪存组、MSPM0G3519应该能够进行复位和无复位的实时固件更新(LFU)。 对吗?

    请参阅上面的说明。

    [quote userid="4952" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1489306/mspm0g3519-live-firmware-update-lfu-examples 问:您能告诉我们在哪里获得"重置"实时固件更新的示例吗? 这 在下面的数据表中也称为 OTA 更新。

    https://dev.ti.com/tirex/explore/node?node=A__APjkYg9RWxwM6nRUc3InzA__MSPM0-SDK__a3PaaoK__LATEST

    BIM 用于 G3507。

    CSC 适用于 G3519双组。

    对于双组句柄、有一个内部演示供您参考。

    但是、将 INIT_DONE 置为有效将触发 RESET。

    e2e.ti.com/.../G3519_5F00_Bank_5F00_Swap_5F00_Demo_5F00_V2.1.zip

    [quote userid="4952" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1489306/mspm0g3519-live-firmware-update-lfu-examples Q3:您能告诉我们在哪里获得"不带"重置的实时固件更新示例吗?  [报价]

    可以直接从引导跳转到应用、BSL 代码中有一个跳转示例:

    C:\ti\mspm0_sdk_2_04_00_06\examples\nortos\LP_MSPM0G3507\bsl\secondary_bsl_uart

    BSL 用于映像更新和编程到闪存、BIM 和 CSC 用于映像管理。

    此致、

    Helic

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

    尊敬的 Helic:

    对于 Q3:

    在固件更新之前、期间和之后、我们如何保证保留的全局/静态变量保留在同一内存位置?

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

    你好、 

    我们可以在应用程序中运行时在引导中使用变量。

    此外、从引导直接跳转到应用程序不会清除 SRAM、客户可以使用修复地址保存一些参数。

    这种应用取决于客户的要求。

    此致、

    Helic

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

    尊敬的 Helic:

    在 C2000中、编译器默认情况下可以支持保留的全局/静态变量、或使用属性来处理修复地址、因此用户不需要处理修复地址。

    float32_t _attribute__((preserve)) BUCK_update_test_variable1_cpu;

    float32_t _attribute__((update)) BUCK_UPDATE_TEST_variable2_cpu;

    编译器还具有热初始化(称为__TI_auto_init_warm)、以初始化新映像中引用旧映像的新全局/静态变量。

    4.4中的 LFU 编译器支持

    https://www.ti.com/lit/pdf/spruiu9?keyMatch=SPRUIU9&tisearch=universal_search

    MSPM0编译器是否具有类似函数?

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

    大家好、 

    MSPM0使用 ti arm clang 作为编译器、用户指南如下: https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/

    我在此页面上找不到任何 preserve 函数支持: https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/c_cpp_language_implementation/attributes/variable_attributes.html

    此外、MSPM0支持来自 ARM 的 gcc、这由 ARM 提供支持、您也可以在此处参阅 ARM 的 gcc 工具链用户指南:

    https://documentation-service.arm.com/static/5e81ba167225781b57b0352b?token=

    此致、

    Helic

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

    尊敬的 Helic:

    你说"直接从引导跳到应用程序不会清除 SRAM、客户可以使用修复地址保存一些参数。"

    1) 1)当它从引导跳转到应用时、您是否意味着有两个项目(引导项目和应用项目)、并且您是指从引导项目跳到应用项目入口点_cint00? 但是、由于它会跳转到_cint00、 这并不意味着运行时支持库(RTS)将初始化所有全局/静态变量、这在没有复位的 LFU 中是不需要的。  

    C2000编译器使用 热初始化(称为__TI_auto_init_warm) 而不是 _cint00、因此它仅在属性__attribute__ ((update)))中初始化这些全局/静态变量、并将__attribute__((preserve))保留在相同的内存位置、而不进行初始化。

    2) 2)用户使用 TI ARM CLANG。 由于 TI ARM Clang 不支持热初始化或类似功能、您能否向我们展示如何编写代码、以将全局/静态变量放置在固定 RAM 中、以便新旧映像都可以访问它们? 用户如何防止编译器初始化它们?

    3) 3)用户如何处理这里的不同中断矢量? 也就是说、旧映像仍然与其中断一起运行、但新映像与其新中断一起运行。 如果旧映像和新映像中有不同的中断、该怎么办? 我们如何处理这里的切换?

    我们是否有任何文档/示例可以显示这些文档/示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="4952" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1489306/mspm0g3519-live-firmware-update-lfu-examples/5736080 #5736080"]1)当它从引导跳转到应用程序时、您是说有两个项目(引导项目和应用项目)吗、您是说从引导项目跳转到应用程序项目入口点_cint00? 但是、由于它会跳转到_cint00、 这并不意味着运行时支持库(RTS)将初始化所有全局/静态变量、这在没有复位的 LFU 中是不需要的。  [报价]

    两个项目、app + boot。

    如果应用程序中没有在此特定参数中实现变量、则 c_init_00不会更改此区域。

    2)用户使用 TI ARM clang。 由于 TI ARM Clang 不支持热初始化或类似功能、您能否向我们展示如何编写代码、以将全局/静态变量放置在固定 RAM 中、以便新旧映像都可以访问它们? 用户如何防止编译器初始化它们?[/QUOT]

    使用以下参数在引导中实现:

    software-dl.ti.com/.../variable_attributes.html

    请勿在应用中使用固定地址来访问变量。

    请将某些区域与 SRAM 分开、以确保应用程序不会更改它们。

    [报价 userid="4952" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1489306/mspm0g3519-live-firmware-update-lfu-examples/5736080 #5736080"]3)用户如何处理这里的不同中断矢量? 也就是说、旧映像仍然与其中断一起运行、但新映像与其新中断一起运行。 如果旧映像和新映像中有不同的中断、该怎么办? 我们如何处理此处的切换?

    有一个寄存器可用于设置中断向量偏移。

    https://dev.ti.com/tirex/explore/node?node=A__APjkYg9RWxwM6nRUc3InzA__MSPM0-SDK__a3PaaoK__LATEST

    BIM 用于 G3507、  其中包含 start_app 函数。

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

    尊敬的 Helic:

    感谢您提供的信息。

    我将与客户讨论、然后在需要时、通过真实示例进一步与您进行离线讨论。