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**** 1997655 points
Other Parts Discussed in Thread: MSPM0G3507, LP-MSPM0G3507, UNIFLASH
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1416406/mspm0g3107-can-not-enter-bsl-mode

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

工具与软件:

请参阅 bsl_software_invoke_app_demo_uart_lp_MSPM0G3507_nortos_ticlang、我们希望将相同的方法复制到

通过 在 G3107上开票 BSLAsm()进入 BSL 模式。 但 MCU 将始终在 G3107上复位(如图所示不能保持在 BSL"等待命令"状态)。

我还尝试 DL_SYSCTL_resetDevice (DL_SYSCTL_RESET_BOOTLOADER_ENTRY)、但也无法正常工作。

请帮助说明通过软件调用在 G3107上进入 BSL 模式的方法。

__static_inline void invokeBSLAsm (void)

/*在跳转到 BSL 之前完全擦除 SRAM */
_asm (
#if defined (__GNU__)
".syntax unified\n"/* Load SRAMFLASH register*/
#endif
"LDR R4、= 0x41C40018\n"/*加载 SRAMFLASH 寄存器*/
"LDR R4、[R4]\n"
"LDR R1、= 0x03FF0000\n"/* SRAMFLASH。 SRAM_SZ 掩码*/
"ANDS R4、R1\n"/*获取 SRAMFLASH。 SRAM_SZ */
"LSR R4、R4、#6\n"/* SRAMFLASH。 SRAM_SZ 到 KB */
"LDR R1、= 0x20300000\n"/* ECC-code 的起始*/
"将 R2、R4、R1\n"/* ECC-code 的结尾*/
"MOVs R3、#0\n"
"init_ecc_loop:\n"/*循环清除 ecc-code */
"STR R3、[R1]\n"
"添加 R1、R1、#4\n"
"CMP R1、R2\n"
"Blo init_ecc_loop\n"
"LDR R1、= 0x20200000\n"/*非 ECC-DATA 的起始*/
"添加 R2、R4、R1\n"/*非 ECC-DATA 的结束*/
"MOVs R3、#0\n"
"init_data_loop:\n"/*循环清除 ECC-DATA */
"STR R3、[R1]\n"
"添加 R1、R1、#4\n"
"CMP R1、R2\n"
"Blo init_data_loop\n"
/*清除 SRAM 后强制复位调用 BSL */
"STR %[resetLvlVal]、[%[resetLvlAddr]、#0x00]\n"
"STR %[resetCmdVal]、[%[resetCmdAddr]、#0x00]"
:/*无输出*/
:[ resetLvlAddr ]"r"(&sysctl->SOCLOCK. RESETLEVEL)、
[ resetLvlVal ]"r"(DL_SYSCTL_reset_bootloader_entry)、
[ resetCmdAddr ]"r"(&sysctl->SOCLOCK. RESETCMD)、
[ resetCmdVal ]"r"(
SYSCTL_RESETCMD_KEY_VALUE | SYSCTL_RESETCMD_GO_TRUE)
:"R1"、"R2"、"R3"、"R4");
}

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

    默认演示代码是否适用于  bsl_software_invoke_app_demo_uart_lp_MSPM0G3507_nortos_ticlang?

    通常、在 MCU 生成复位后、您将失去与 MSPM0的调试器连接。 您如何知道"不能像图示那样保持在 BSL"等待命令"状态?

    您正在使用哪个引导加载程序? 默认引导加载程序?

    此处是包含引导加载程序简介的文档:https://www.ti.com/lit/an/slaae88c/slaae88c.pdf

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

    尊敬的 EASON:

    1.我们使用默认的引导加载程序(基于 ROM 的 BSL)

    2.默认演示代码"bsl_software_invoke_app_demo_uart_LP_MSPM0G3507_nortos_ticlang"适用于我们的目标、可通过按键进入 BSL 模式。

    3.我们在目标上实现 UART 接口。 因此,我们使用 UART 命令输入 BSL(假定 invokeBSLAsm () works ), 1~2秒

      之后、启动消息显示在 UART 控制台上、这就是我认为 MSPM0无法保持在 BSL 状态的原因。

    UART 命令代码:

    if (strcmp (command、"bsl")=0){
      log ("进入 BSL 模式!");
      vTaskDelay( pdms_to_ticks( 1000u ));
      //DL_SYSCTL_resetDevice (DL_SYSCTL_RESET_BOOTLOADER_ENTRY);
      invokeBSLAsm();
      while (1){
        __ WFI();
      }

    }

    谢谢。

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

    尊敬的 EASON:

     我们将在目标上运行 FreeRTOS (freertos_builds_LP_MSPM0G3507_RELEASE_ticlang_2_00_00_03)、这是可行的

     不处于 BSL 模式的问题?

    谢谢。

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

    不太确定。 下面是一个可以为您提供一些帮助的示例: https://www.ti.com/lit/an/slaaec9/slaaec9.pdf

    是否可以在调用  invokeBSLAsm()之前禁用所有中断?  

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

    您好、伊森

     我尝试使用另一个演示"uart_echo_lp_MSPM0G3507_freertos_ticlang"来检查 BSL 更新是否可以在 FreeRTOS 上运行。

     它可以在 LP-MSPM0G3507 EV 套件上使用、但在我们的目标上仍然不起作用。 好消息是系统无法重置、但仍有一些错误消息

     加密 Uniflash、如下所示

     这意味着什么: {63}{00}?

    谢谢。

    成功日志:

    [2024/9/25下午5:41:12][信息] Cortex_M0P:调用引导加载程序...
    [2024/9/25下午5:41:15][INFO] Cortex_M0P:
    [2024/9/25下午5:41:15][INFO] Cortex_M0P:BSL 已连接
    [2024/9/25下午5:41:15][INFO] Cortex_M0P:命令解释器版本:[0x0100]内部版本 ID:[0x0100]应用版本:[0x000000000000]主动插件接口版本:[0x0001] BSL 最大缓冲区大小:[0x3EC0] BSL 缓冲区起始地址:[0x20000160] BCR 配置 ID:[0x00000x0001] BSL 配置 ID:[0x000001]]
    [2024/9/25下午5:41:15][INFO] Cortex_M0P:[80][01][00][19][B2][B8][96][49]
    [2d/9/25下午5:41:15][INF] Cortex_M0P:{00}{08}{19}{00}{31}{00}{01}{00}{00}{00}{00}{00}{01}{00}{0}{C0}{60}{01}{00}{20}{00}{00}{00}{00}{00}

    错误日志:

    [2024/9/26下午6:25:01] [INFO_M0P:调用引导加载程序。。
    [2024/9/26下午6:25:03] [信息] Cortex_M0P:
    [2024/9/26下午6:25:03] [错误] Cortex_M0P:[ACK_ERROR]未知的 ACK 值!
    [2024/9/26下午6:25:03] [INFO] Cortex_M0P:[80][01][00][19][B2][B8][96][49]
    [2024/9/26下午6:25:03][INFO]  Cortex_M0P:{63}{00}
    [2024/9/26下午6:25:03] [错误] Cortex_M0P:[ERROR_MESSAGE]过程失败!

      

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

    1.您可以通过什么操作来使其保持 BSL 模式?

    2.您能否使用数字分析器捕捉波形,并将其与正确的波形进行比较? 它比读取 Uniflash 日志更清晰。 这个文档 https://www.ti.com/lit/ug/slau887/slau887.pdf?ts = 1727431097313 将描述该协议。  

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

    尊敬的 EASON:

     演示应用: bsl_software_invoke_app_demo_uart_lp_MSPM0G3507_nortos_ticlang

     我尝试 TI 工具-  BSL_GUI_EXE、位置为\ti\mspm0_sdk_2_02_00_05\tools\bsl\

     有一个 UART 命令0xbb 我找不到在任何文档@MSPM0_BSL_GUI.py #line321

     有没有文档介绍了这些 UART 命令?   

      UART_S.send_data(ser_port、b"\xbb")
     response01 = UART_S.READ_DATA (SER_PORT、1)

     问题是、如果我通过按 S2进入 BSL 并在之后执行更新、则它将返回"51"(更新正常)

          日志:  

          找到 MSP COM 端口:COM7
          配置 UART:9600波特率、8个数据位(首先是 LSB)、无奇偶校验、1个停止位。
          [测试]发送连接包:B'\x80\x01\x00\x12:AD\xde'
          [测试]获取响应
          [TEST]Get response 51.
          MSPM0处于 BSL 模式。
          获取器件 ID ...

     但如果我等待5秒钟或更长时间、则不会有响应(更新失败)

     我认为 BSL 处于"睡眠"状态、并且我尝试重新发送连接包但不起作用(请参阅 TI 文档 slau887 3.1.1.2)

     我从 BSL 唤醒器件的方法是否不正确?

      

     谢谢。

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

    我试图发送0xAA ,但仍然无法从设备获得任何响应。

    请参阅第11页的 TI 文档 slaaec9:  

    在开始固件升级过程之前、需要执行以下两个步骤:

    1.发送单字节命令0x55来检查应用程序代码执行状态、以便您知道是哪个

    应用程序代码需要升级。

    2.发送一字节命令0x11以检查引导加载程序状态、如果器件响应0x51、则表示引导加载程序为

    处于活动状态、已准备好进行固件升级。 否则、您需要向发送一字节命令0xAA

    首先强制引导加载程序从挂起状态进入活动状态

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

    尊敬的 EASON:

     FreeRTOS 切换到 BSL 模式的另一个问题似乎无法正常工作

     演示应用:uart_echo_lp_MSPM0G3507_freertos_ticlang

     NRST-KIT:移除 EV 的 J101跳线

     按如下方式修改 TI BSL_GUI、以发送"0x22"进入 BSL、

     并修改 UART_ECHO_LP_MSPM0G3507_FreeRTOS 以接收"0x22"、从而执行 invokeBSLAsm ()以进入 BSL

     1) 1) EV 套件对 bsl_software_invoke_app_demo_uart 进行了编程后、 可以通过 bsl_gui 更新 FW

     2) 2) 当 UART_ECHO_LP_MSPM0G3507_freertos 已编程后、EV 套件即 nOK

     

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    diff --git a/MSPM0_BSL_GUI.py b/MSPM0_BSL_GUI.py
    index 1890657..f8401c6 100644
    --- a/MSPM0_BSL_GUI.py
    +++ b/MSPM0_BSL_GUI.py
    @@ -29,6 +29,7 @@
    * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    """
    +import codecs^M
    import tkinter
    from tkinter import *
    from tkinter.filedialog import *
    @@ -113,6 +114,14 @@ class Tkinter_app:
    self.label3 = Label(frame3, text="(Download: Just support UART with XDS110)")
    self.label3.pack()
    + ^M
    + self.button4 = Button(text="Reboot", command=self.reboot_thread)^M
    + self.button4.pack(side="left")^M
    + self.button4.place(relx=0.05, rely=0.21)^M
    +^M
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     看起来像是 invokeBSLAsm()在 FreeRTOS 中不起作用、您能帮我们检查一下吗?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="612417" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1416406/mspm0g3107-can-not-enter-bsl-mode/5481709 #5481709"]

     有一个 UART 命令0xbb 我找不到在任何文档@MSPM0_BSL_GUI.py #line321

     有没有文档介绍了这些 UART 命令?  

    [报价]

    很抱歉没有在这样的登录时间内回复您。 对于此问题、请参阅此应用手册:https://www.ti.com/lit/an/slaae88c/slaae88c.pdf?ts = 1730252803725。 它是一个在应用程序代码中调用 BSL 的命令。

    [报价 userid="612417" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1416406/mspm0g3107-can-not-enter-bsl-mode/5486694 #5486694"]并修改 UART_ECHO_LP_MSPM0G3507_FreeRTOS 以接收"0x22"以执行 invokeBSLAsm ()以输入 BSL[/QUOT]

    重新生成代码时、是否调试了代码并检查它是否执行了  invokeBSLAsm ()?

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

    尊敬的 EASON:

     1.可以、我知道"0x22"是一个在  BSL_software_invoke_app_demo_uart 中调用 BSL 的添加命令

       但我感到困惑的是  MSPM0_BSL_GUI.py #line321中显示的命令"0xbb"

        

    Fullscreen
    1
    2
    UART_S.send_data(ser_port, b"\xbb")
    response01 = UART_S.read_data(ser_port, 1)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    2.我的调试日志"ENTER BSL!" 在 BSL_GUI 已发送命令"0x22"时显示、但在 BSL 模式下、BSL_GUI 查询器件没有响应

      通过命令 "0xbb"

       

      uart_echo_lp_MSPM0G3507_freertos 我更改了:

       a.波特率配置更改为9600

       b. uartecho.c 添加命令"0x22"以进入 BSL 模式

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    --- a/uartecho.c
    +++ b/uartecho.c
    @@ -45,6 +45,46 @@
    /*
    * ======== mainThread ========
    */
    +__STATIC_INLINE void invokeBSLAsm(void)
    +{
    + /* Erase SRAM completely before jumping to BSL */
    + __asm(
    +#if defined(__GNUC__)
    + ".syntax unified\n" /* Load SRAMFLASH register*/
    +#endif
    + "ldr r4, = 0x41C40018\n" /* Load SRAMFLASH register*/
    + "ldr r4, [r4]\n"
    + "ldr r1, = 0x03FF0000\n" /* SRAMFLASH.SRAM_SZ mask */
    + "ands r4, r1\n" /* Get SRAMFLASH.SRAM_SZ */
    + "lsrs r4, r4, #6\n" /* SRAMFLASH.SRAM_SZ to kB */
    + "ldr r1, = 0x20300000\n" /* Start of ECC-code */
    + "adds r2, r4, r1\n" /* End of ECC-code */
    + "movs r3, #0\n"
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
     但我感到困惑的是  MSPM0_BSL_GUI.py #line321
    中显示的命令"0xbb"

    这只是为了发送一个不是 BSL 封装标头0x80的字节来触发 MSPM0的标头错误(0x51)响应(如果在发送0xbb 后来自 MSPM0的字节0x51响应)、这意味着器件处于 BSL 模式、以便我们稍后可以进行 BSL 操作。

    2. 我的调试日志"Enter BSL!" 在 BSL_GUI 已发送命令"0x22"时显示、但在 B 中的 BSL_GUI 查询器件时无响应[/QUOT]

    我认为您应该对 GUI 进行一些修改、对吧?

    原始 GUI 不支持通过软件触发器发送0x22。 但您可以在发送0xbb 之前进行该操作、最好等待一段时间来发送0xbb、该延迟时间可以设置大约300ms。 您身边是否有像 Seleae 这样的逻辑分析仪? 如果需要、最好将 UART 信号直接与我共享以进行分析。  

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

    您好、Gary、

     感谢您发送0xbb 命令来解释该用途。

     是的、我在 GUI 上进行了一些修改、以发送0x22进入 BSL 模式。 只是为了使非 RTOS 和 FreeRTOS 之间的测试条件几乎相同。

     我已尝试在发送0xbb 之前添加延迟时间、但仍然没有任何响应。 (0x22 -> 0.5s 延迟->连接包-> 0.5s 延迟-> 0xbb)

       

     

     我的测试是非 RTOS 和 FreeRTOS、具有相同的 GUI 并在 LP-3507目标板上开发票 BSL 代码

     好的:非 RTOS (bsl_software_invoke_app_demo_uart)+ GUI + LP-3507

     NG:FreeRTOS (UART_ECHO_LP_MSPM0G3507_freertOS、 使用9600bps 和0x22命令进行修改)+ GUI + LP-3507

    谢谢。

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

    您意味着、如果没有 FreeRTOS、您就可以毫无问题地执行该操作。 使用 FreeRTOS 时只会出现问题、对吧?

    如果是、您可以参阅 适用于 MSPM0C 的4.3.2.1基于闪存的0x0地址 BSL 演示一节

     https://www.ti.com/lit/an/slaae88c/slaae88c.pdf 

    尤其是下面的评论

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

    您好、Gary、

     是、FreeRTOS 刚刚发生软件调用问题(可以进行硬件调用)

      

     请参阅4.3.2.1、但本节看起来适用于 C 系列 MCU (无 ROM)、但不适用于我们用于 MSPM0G3507的 G 系列 MCU (具有 ROM)。

     我在 注释中添加了禁用 IRQ 命令、以便在进入 BSL 之前清除 IRQ、但此命令不起作用。

    Fullscreen
    1
    2
    3
    4
    5
    6
    NVIC_ClearPendingIRQ(UART0_INT_IRQn);
    invokeBSLAsm();
    while (1) {
    __WFI();
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但本节内容适用于 C 系列 MCU (无 ROM)、但不适用于我们用于 MSPM0G3507

    无关紧要、还需要与其他 MSPM0器件一起使用。

    它不仅可以清除挂起的 IRQ、还需要禁用所有中断以避免跳转期间出现任何中断。  

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

    您好、Gary、

      

     谢谢、它现在可以工作了!