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:辅助 BSL UART 代码调试问题

Guru**** 2794765 points

Other Parts Discussed in Thread: MSPM0G3519, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1621327/mspm0g3519-secondary-bsl-uart-code-debugging-problem

器件型号: MSPM0G3519
Thread 中讨论的其他器件: UNIFLASH

您好、

我使用的是 MSPM0G3519 LaunchPad。 我正在通过蓝牙升级固件。  

首先我尝试了使用 ROM BSL 的代码 bsl_software_invoke_app_demo_uart、我发送了要使用 docklight 升级的固件代码、固件正在成功升级、但在这里我遇到了以下问题。

  1. 我只需要在 uart0 上发送 BSL 数据包、能否将其更改为任何其他 UART?
  2. 发送 BSL 数据包时、如果存在任何电源故障、则电路板上没有任何元件、因为在发送编程数据命令之前我正在进行批量擦除。 如何解决这一问题?
  3. 我想使用辅助 BSL。 我可以吗?
  4. 我输入了 secondary_bsl_uart 代码。 但我无法理解如何测试它?
  5. 使用 CCS 调试此代码时、我收到以下 errorFlash Programmer:无效批量擦除命令
    文件加载程序:存储器写入失败:闪存编程器:错误、尝试在不擦除的情况下写入 NONMAIN!
    GEL:文件:C:\Users\dibyarekha\workspace_ccstheia\secondary_bsl_uart\Debug\secondary_bsl_uart.out:加载失败。  

如何解决?

它非常紧急。 请提出建议。

 

 

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

    尊敬的 Mahar:

    有关自定义 BSL(辅助 BSL)实现、请参阅以下文档:

    MSPM0 引导加载程序用户指南 

    MSPM0 NONMAIN 闪存配置指南

    MSPM0 引导加载程序实施指南 

    下面还有一些评论:

    发送 BSL 数据包时、如果出现任何电源故障、则我在电路板上什么都没有、因为我在发送编程数据命令之前正在进行批量擦除。 如何克服这一问题?

    最后对 0x0 地址进行编程、如果在最终写入之前发生任何电源故障、地址 0x0 的空 (0xFF) 将强制 MCU 直接进入 BSL 模式。

    在使用 CCS 调试此代码时、我获得了以下 errorFlash 编程器:无效的批量擦除命令

    您使用的 CCS 示例修改了 NVM、因此用户应设置闪存擦除属性以包含 NONMAIN 存储器。

    重要说明:如果已擦除、确保已使用正确的数据对 NONMAIN 进行编程、否则器件可能会被永久锁定。

    B.R.

    Sal

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

    尊敬的 Sal:

    我尝试了与 ROM BSL 相关的第一步。 工作正常。 但仍然有一个问题,进入 ROM BSL 模式后,当我向 BSL 发送连接数据包时, BSL 没有响应。 似乎需要一些时间。 它需要多少时间来接受数据包并对其作出响应?

    现在、BSL 在 UART0 上接受数据包。 它可以更改为任何其他 UART 吗?

    根据您提供的解决方案、我的闪存被擦除、如果有任何问题、那么如果我最后对 0x00 存储器位置进行编程、它应该保持在 BSL 模式、期待再次获得新的固件代码。 有没有其他方法,如果出现任何问题,然后在开机时,它应该只运行第一个固件。 这意味着第一个固件不应被擦除。

    关于辅助 BSL、我已经介绍了您分享的 pdf。 我阅读了 MSPM0 引导加载程序指南中的 scetion6.1.1、但无法测试此代码。 如何测试此代码? 您能说明测试此代码的步骤吗? 我是否需要进行任何代码更改?

    我尝试了擦除主内存和非主内存只需要扇区,仍然没有解决我的问题。

    因为我的目标是升级固件、哪种方法最适合我。 我想固件应该正确升级,固件升级期间,如果有任何问题出现,那么主板不应该死机,它应该与旧固件一起运行。

    现在、我正在使用通过 docklight 发送 BSL 数据包的方法。 我正在将.bin 文件转换为十六进制、并准备每个 16 字节十六进制的 BSL 数据包。 这是正确的方法吗? 我可以在 1 个 BSL 数据包中获取超过 16 个字节的数据来进行编程数据吗? 我不能直接使用十六进制文件、而不是将.bin 转换为.hex。 当我尝试在 uniflash 中使用.hex 文件后、它会无法正常工作。 十六进制文件有什么问题?

    请帮助我消除疑虑。

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

    尊敬的 Mahar:

    我尝试了与 ROM BSL 相关的第一步。 工作正常。 但仍然有一个问题,进入 ROM BSL 模式后,当我向 BSL 发送连接数据包时, BSL 没有响应。 似乎需要一些时间。 它需要多少时间来接受数据包并对其作出响应?

    我没有这方面的实验记录,但这预计很小。 可能是毫秒级。

    现在 BSL 正在 UART0 上接受数据包。 它可以更改为任何其他 UART 吗?

    不可以、ROM BSL 只能使用 UART0。相关内容在 NONMAIN UG 和 BSL UG 中提到。

    根据您提供的解决方案、我的闪存被擦除、如果有任何问题、那么如果我最后对 0x00 存储器位置进行编程、它应该保持在 BSL 模式、期待再次获得新的固件代码。 有没有其他方法,如果出现任何问题,然后在开机时,它应该只运行第一个固件。 表示第一个固件不应被擦除。

    固件存储在闪存中。 应首先擦除闪存、然后进行编程。

    可以实现的方法是用户将引导加载程序维护为 0x0、并具有两个闪存范围来存储映像 1 和映像 2。 在未擦除的引导加载程序中、它应该决定应执行哪个映像。

    关于辅助 BSL、我已经了解了您共享的 pdf。 我阅读了 MSPM0 引导加载程序指南中的 scetion6.1.1、但无法测试此代码。 如何测试此代码? 您能说明测试此代码的步骤吗? 我是否需要更改代码?

    您可以参阅 MSPM0 引导加载程序实施指南中的第 5.3 章、我认为无需进行其他修改即可测试该示例。

    我已经尝试了只擦除主内存和非主内存必需的扇区、但仍然没有解决我的问题。

    我在我身边试过,它是有效的。 也许您可以分享一些设置/错误的数据、以供我参考。

    我假设您使用 CCS 刷写/调试工程。

    现在我使用的是使用 docklight 发送 BSL 数据包的方法。 我正在将.bin 文件转换为十六进制、并准备每个 16 字节十六进制的 BSL 数据包。 这是正确的方法吗? 我可以在 1 个 BSL 数据包中获取超过 16 字节的数据来存储程序数据吗?

    是、唯一的要求是 8 字节对齐和最大缓冲区大小、请参阅 MSPM0 引导加载程序用户指南的第 4.3.4 章

    一旦我尝试在 uniflash 中使用.hex 文件、它就无法正常工作

    我建议您先尝试通过 SWD 使用准备好的十六进制文件进行编程、以防十六进制文件的格式不正确。

    我们需要在工程编译期间设置 8 字节对齐的十六进制文件。

    B.R.

    Sal