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.

[参考译文] MSPM0G3107:有关 BSL 基于闪存的插件接口示例代码的问题

Guru**** 2398075 points
Other Parts Discussed in Thread: MSPM0G3107, MSPM0G3507, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1477567/mspm0g3107-question-regarding-bsl-flash-based-plug-in-interface-sample-code

器件型号:MSPM0G3107
主题中讨论的其他器件: MSPM0G3507UNIFLASH

工具与软件:

您好!

我将 MSPM0G3107控制器用于我的应用。 这涉及通过控制器的 UART 引脚执行固件更新。 由于使用连接到这些引脚的 UART 到 RS485转换器、因此不能直接使用基于 ROM 的 BSL。 因此、为了根据 BSL -485要求修改通信接口、我们决定使用 RS 闪存插件接口示例、更具体地说:

为 MSP SDK 版本"mspm0_sdk_2_03_00_07"提供的示例代码"bsl_uart_flash_interface_lp_MSPM0G3507_nortos_ticlang"

我想询问以下问题:

1.在项目中,我找不到 main()函数,即程序的开始。 所以这个项目只用于修改基于 ROM 的 BSL、或者也可以将主应用程序代码添加到此项目中??

2.我们计划通过软件请求来调用 BSL、即 UART 引脚将接收特定数据并调用 BSL。 实现这个部分的代码是否出现在此示例项目中。。。 或者我们是否需要上传2个程序、即(用于修改 ROM BSL 接口的"bsl_uart_flash_interface"、以及用于接收基于软件的 BSL 调用和接收命令的应用程序代码的"bsl_software_invoke_app_demo_uart")。

此致

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

    Raj、您好!

    Unknown 说:
    1. 在项目中,我找不到 main()函数,即程序的开始。 因此、该项目仅可用于修改基于 ROM 的 BSL、或者也可以在该项目中添加主应用程序代码?[/QUOT]

    是的、它只会修改 ROM BSL 的接口、并使用闪存中定义的接口来处理 ROM BSL。

    如果您仍使用 UART0、则只能修改 NONMAIN 中定义的引脚排列:

    并且无需闪存 BSL。

    Unknown 说:
    实现此器件的代码是否出现在此示例项目中?

    否、这不适用于示例工程。

    而如果您希望通过软件触发 BSL、我们提供了特殊复位选项:

    在您通过 UART 收到特殊命令后、可以通过软件触发它。

    B.R.

    SAL

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

    您好!

    那么、当我尝试单独上传"bsl_uart_flash_interface_lp_MSPM0G3507_nortos_ticlang"示例代码时、为什么尽管执行了恢复出厂设置并在工程的属性中启用了非主写入和主写入、但它仍然会产生 SWD 请求错误?
    我正在按原样上传项目...
    你能告诉我我哪里出错了吗?

    此致、
    Raj

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

    Raj、您好!

    它显示了哪个误差?

    也许您可以在不加载新映像的情况下擦除 NONMAIN、或者在不擦除映像的情况下写入 NONMAIN。

    B.R.

    SAL

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

    嗨、Sal、

    很抱歉延迟了响应。 我收到以下错误:



    Cortex_M0P:错误:(错误-1001 @ 0x0)该器件不支持所请求的操作。 (仿真包12.7.0.00130)
    Cortex_M0P:停止目标 CPU 时出现故障:(错误-2064 @ 0x0)无法读取器件状态。 重置设备、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电、并/或尝试更可靠的 JTAG 设置(例如、降低 TCLK)。 (仿真包12.7.0.00130)
    Cortex_M0P:错误:(错误-614 @ 0x0)目标表示上一个 SWD 请求存在错误情况。 清除该错误条件、然后重试 SWD 请求。 (仿真包12.7.0.00130)

    我仍然能够对控制器执行恢复出厂设置、即控制器没有错误。

    其次、我也启用了控制器的擦除 MAIN 和非 MAIN 扇区。 (在 BSL 用户指南中提到)


    仍然无法上传程序。  

    此致、
    Raj

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

    Raj、您好!

    闪存 BSL 接口演示在此处仅提供 BSL 通信接口。 因此、闪存中没有活动映像、包括 main (void)和中断矢量表。 [我相信0x0中没有冰箱]。

    然后在运行后、CPU 将进入故障状态并断开 SWD 连接。

    而此时、您可以触发 BSL 来执行编程。

    B.R.

    SAL

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

    尊敬的 Sal:

    我正在尝试使用软件触发器来调用 BSL。

    在一个控制器上、我已上传"BSL_HOST_MCU_TO_mspm0"程序、该程序将通过 UART 通道发送数据。 而对于另一个控制器、我上传了 UART 闪存插件示例代码(上面显示了错误消息)。

    主机控制器正在成功发送用于启动 BSL 的字节(由 LED 检查)。 但目标控制器不会响应 UART 请求。 我尝试将应用程序上传到目标控制器、认为可能是由于应用程序代码的缺失无法调用 BSL。 但它提供以下错误代码:

    Cortex_M0P:连接到目标时出错:(错误-614 @ 0x0)目标表示上一个 SWD 请求存在错误情况。 清除该错误条件、然后重试 SWD 请求。 (仿真包12.7.0.00130)  

    如何解决此问题?

    谢谢。此致、

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

    Raj、您好!

    在这种情况下、您只能使用硬件触发器调用 BSL。

    您需要查看以下演示来进行软件调用:

    B.R.

    SAL

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

    您好!

    那么、如果我要使用 UART 闪存插件接口示例执行软件调用、即修改 BSL、我不能这样做? 因为软件调用示例包含基于标准 ROM 的 BSL。  

    或者硬件调用需要执行一次(在开始时)、在代码更新后、可以执行软件调用?

    我们的要求是使用 UART 闪存插件接口并针对修改后的 BSL 使用软件调用

    此致

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

    Raj、您好、

    、因为软件调用示例包含基于标准 ROM 的 BSL。  
    [报价]

    软件调用需要在 MCU 中有一个应用程序代码、可以使用 BSL 条目处理软件复位。  

    如果没有适当的应用程序代码、软件调用不能与 MCU 一起使用。

    我们的要求是使用 UART 闪存插件接口并使用软件调用修改后的 BSL

    软件调用由器件而不是主机处理。 您需要在 fisrt 开发一个应用程序代码,它可以处理软件调用。

    B.R.

    SAL

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

    您好、Sal、

    是的,我完全同意并感谢所有的答复。 但是,那么我应该如何上传目标中的2个程序:

    1. UART 闪存插件示例、用于修改 BSL 和
    2.包含软件调用的主应用程序代码  

    谢谢。此致

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

    Raj、您好!

    Unknown 说:
    1. 用于修改 BSL 和[/QUOT]的 UART 闪存插件示例

    您可以将闪存插件示例放置在较高的未使用存储器地址上、例如0x10000-0x20000。

    Unknown 说:
    2. 包含软件调用 
    的主应用程序代码

    然后、您放置位于0x0-0x10000之间的主应用程序映像。

    当您通过 UNIFLASH 或 CCS 加载程序时、选择下面的选项仅擦除未使用的闪存:

    或者、您也可以手动定义要擦除和编程的固定地址范围。

    B.R.

    SAL

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

    您好、Sal、

    这种方法不起作用。 如前所述、我尝试更改 UART 插件接口的地址示例代码:

    上述修改是在程序的.cmd 文件中执行的、并且工程属性如上所述

    仍然在控制台中收到以下警告和错误:

    Cortex_M0P:GEL 输出:内存映射初始化完成
    Cortex_M0P:NONMAIN 内容已损坏、正在恢复为默认值
    Cortex_M0P:非主内容已正确恢复、但主闪存已擦除。 在重新编程之前修复非主要内容。
    Cortex_M0P:错误:(错误-1001 @ 0x0)该器件不支持所请求的操作。 (仿真包12.7.0.00130)
    Cortex_M0P:停止目标 CPU 时出现故障:(错误-2064 @ 0x0)无法读取器件状态。 重置设备、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电、并/或尝试更可靠的 JTAG 设置(例如、降低 TCLK)。 (仿真包12.7.0.00130)
    Cortex_M0P:错误:(错误-614 @ 0x0)目标表示上一个 SWD 请求存在错误情况。 清除该错误条件、然后重试 SWD 请求。 (仿真包12.7.0.00130)

    如果我尝试忽略警告并尝试使用以下设置通过 UART 示例上传 BSL 软件调用:




    我收到以下错误:

    Cortex_M0P:连接到目标时出错:(错误-614 @ 0x0)目标表示上一个 SWD 请求存在错误情况。 清除该错误条件、然后重试 SWD 请求。 (仿真包12.7.0.00130)


    简而言之、尽管保留了不同的地址、但我仍然无法上传两个程序(例如、一个用于 BSL、另一个作为应用代码)

    请您提供上述问题的解决方案以及此问题的可能原因。


    此致
    Raj

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

    Raj、您好!

    下面是我建议的步骤:

    1.使用 UART 插件界面,将其修改为您指定的地址。 并尝试使用硬件调用来完成 BSL 通信和新映像更新。

    ->请告诉我,如果这不起作用。 我还可以帮助验证它。

    2.在设备端添加软件调用映像、然后尝试软件调用以设置 BSL 通信。

    B.R.

    SAL

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

    您好、Sal、

    是的、我已尝试使用硬件调用来尝试新的映像更新、但没有效果。 将 BSL 引脚保持在高电平、执行 NRST 复位、然后尝试使用 BSL_UART_Host 演示程序上传代码、但仍然失败。 您能从终端处验证一次该过程吗

    此致、

    Raj

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

    Raj、您好!

    好的、我将尝试一次并向您更新。

    B.R.

    SAL

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

    您好、Sal、

    你有没有尝试过它从你的端?

    此致、
    Raj

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

    Raj、您好!

    您需要注意以下几个修改事项:

    应根据您的闪存插件接口存储器范围修改主闪存静态保护范围、以防 BSL 闪存加载行为破坏插件接口:

    2.然后修改闪存插件接口:

    然后 、它应该能用于 BSL 硬件调用。

    B.R.

    SAL

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

    嗨、Sal、

    很抱歉回复延迟。 由于某些部件问题、我们将进行检查、并将在明天测试相同部件。 再次感谢您提供的指导和及时的回复。

    此致、
    Raj

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

    Raj、您好!

    没关系。 希望这将有助于您继续前进。

    B.R.

    SAL

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

    您好、Sal、

    已尝试按给定的方式设置配置。 仍然无法执行基于 UART 的固件更新(基于闪存插件接口)。 仍然遇到同样的问题。  

    此致、
    Raj

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

    Raj、您好!

    您可以分享整个项目原理(界面中 UART pulg 的项目)、并尝试一下。

    B.R.

    SAL

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

    嗨、Sal、

    目前、我正在使用标准 UART 闪存插件接口项目。 我尚未对存在的示例代码进行任何修改。  我已切换到版本2.0.4.00.06 (最新版本)。

    此致、
    Raj

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

    Raj、您好!

    它是否能与标准闪存插件项目配合使用? 该函数应与示例工程配合使用。

    如果尚未连接、请检查硬件连接、并使用逻辑分析仪捕获 UART 数据。

    B.R.

    SAL

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

    您好、Sal、

    我现在能够使用 BSL 硬件调用成功执行基于 UART 的闪存更新。 上载程序后、我也可以使用软件调用选项。

    是否有任何机会让我可以回避初始硬件调用选项并从首次试用本身执行软件调用? 由于我们的应用限制、我们无法访问该硬件引脚本身、因为我们计划也通过 UART 执行初始更新。

    此致、
    Raj

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

    Raj、您好!

    我们计划也通过 UART 执行初始更新。

    您无法在第一阶段处理软件调用。 如果器件中已经有固件、则可以实现。

    您需要进行一些自定义。 可表示为:

    主机传输一条消息以通知器件开始软件调用、这意味着器件应该有一个要接收命令的初始固件、然后进行处理。 [消息可能是 UART 发送的数据]

    2.经过一段时间后(设备继续软件调用),主机开始固件升级。

    此外、有一点是、如果它是空白器件(根本不刷写任何固件)、那么它将自动进入 BSL 模式并在上电后等待主机发送命令。

    如果您想使用 BSL 刷写新器件、这可能会很有用。

    B.R.

    SAL