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.

[参考译文] MSP432P401R:引导加载程序在一段预定义时间(10秒)后不跳转到应用程序软件、软件闪存未启动

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/607568/msp432p401r-bootloader-not-jumping-to-application-sw-after-some-predefined-time-10-seconds-is-sw-flashing-not-started

器件型号:MSP432P401R

在测试 MSP432引导加载程序期间观察到以下问题

 

测试案例1:

  1. 已使用 MSP Flasher 工具1.03.14刷写应用软件(0x00000000)+引导加载程序(0x20200)。
  2. 按下复位按钮(数字输入配置为其中一个端口引脚)、 堆栈指针跳转到引导加载程序位置(0x20200)。
  3. 已使用 UART 刷写应用软件(通过更改软件版本号)。 软件刷写完成、堆栈指针现在位于应用程序代码中。
  4. 按下 RESET 按钮、 堆栈指针跳转到引导加载程序位置(0x20200)。
  5. 进入引导加载程序后 、它会在10秒内跳转到应用程序(如果软件闪存未启动)->通过

 

测试案例2:

  1. 已使用 MSP Flasher 工具1.03.14刷写应用软件(0x00000000)+引导加载程序(0x20200)。
  2. 按下复位按钮(数字输入配置为其中一个端口引脚)、 堆栈指针跳转到引导加载程序位置(0x20200)。
  3. 已使用 UART 刷写应用软件。 软件刷写完成、堆栈指针现在位于应用程序代码中。
  4. 通过 UART 发出的 ECU 重置命令(尝试从应用程序调用引导程序代码)(此命令将调用引导加载程序)。 堆栈指针跳转到引导加载程序位置(0x20200)。
  5. 进入引导加载程序后、它不会在10秒内跳转到应用程序->失败

 

 Flash Mail Box 设置为0xC000 (BSL 配置设置)

注:1. 调试该问题时发现、当通过 UART 发出 ECU 复位命令但在这种情况下通过 UART 进行应用软件闪存时、引导加载程序在 MAP_Interrupt_EnableMaster ()函数处停止。

2.应用软件闪存通过 TI 的应用程序闪存脚本程序完成。

 

请求您对此问题的帮助。

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

    您是否在这些测试用例中使用了红色 Launchpad? 或者您是否构建了自己的硬件??

    是否可以在每个情况下获取内存转储(srec、hex 或 txt)?

    谢谢、

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

    尊敬的 David:

    我们构建了自己的硬件。

    对于这两种测试用例、内存转储是相同的。

    引导加载程序映射文件

    软件十六进制文件(@0000 -应用程序@20200 ->引导加载程序)  

    谢谢

    Padmaja

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

    我修改了您之前的帖子、以便更易于阅读。

    请您将您对 BSL 所做的更改发送给我、以便我可以尝试重现问题。

    谢谢、

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

    尊敬的 David:

    我们所做的唯一更改是在 BSL432_pi_detInterface()函数中

    if (MAP_Timer_A_getInterruptStatus (TIMER_A0_BASE)=TIMER_A_INTERRUPT_PENDING)

    /*TOP Code 相同的 TI Code 最后我们添加了这两条语句*/

               WDT_A->CTL=0x5A07//如果应用软件闪存在10秒内没有启动,则 WDT 复位,然后 BSL 再次为 ASW 闪存做好准备*/

    while (1);           

    谢谢、

    Padmaja.i

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

    您好、Padmaja、

     到目前为止、我还无法重现问题。 我将在星期一继续尝试、同时我还有几个问题:

    1.是否可以确认您的闪存邮箱设置? 在您的第一篇帖子 中、您提到了0xC000、但在查看您的 txt 文件后、BSL 配置为0x7c48df90、 这将转换为:

    BSL 参数:

    硬件调用:启用

    I2C 地址:0x48

    接口 :UART

    极性:高

    引脚:PIN1

    端口:端口1

     因此、我不确定0xC000来自哪里。

    2.是否可以 发布 用于案例#2的软件调用。 这就是我要使用的内容:

    #define BSL_Param 0x7C48DF90
    
    #define BSL_API_TABLE_ADDR 0x00202000 // BSL API 表的地址
    
    #define BSL_Entry_Function (*(((UINT32_t *) BSL_API_TABLE_ADDR))
    
    ((void (*)())) BSL_entry_function ()(()(提供的 BSL_Param_T32)/ BSL 参数)
    

    谢谢、

     David

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

    尊敬的 David:

    我正在使用 SW 调用。

    Flash 邮箱      0x7C48DF90中的 BSL 设置、

     

     这是我的软件调用

    #define BSL_API_TABLE_ADDR                      (((uint32_t) 0x00202000)         /*!< BSL API 表的地址*

    #define BSL_entry_function                      (*((uint32_t *) BSL_API_TABLE_ADDR)

                                                 interrupt_disableInterrupt (INT_T32_INT1);/*禁用计时器32中断*/

                                                 interrupt_disableMaster();

                                                 (((void (*)()) BSL_Entry_function)((uint32_t) 0xC000);// BSL_Entry_Through _UART*/

     0xC000 -此参数我将在引导加载程序函数中收集它、基于此参数、我将通过 UART 初始化引导加载程序。

     引导加载程序软件代码中

    空 main (uint32_t bslParams)

    此 bslparams 包含0xC000、我将从应用程序传递该值。 这是我正在使用的闪存邮箱设置。 引导加载程序不会考虑我使用的邮箱设置。

     

    此致、

    Padmaja.i

     

     

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

    您好、Padmaja、

     在您的应用中、您能否在调用 BSL 之前尝试清除所有挂起的中断。

    请尝试以下操作、并告诉我这是否可以解决您的问题。

    MAP_Interrupt_disableMaster();
    
    NVIC->icer[0]= 0xFFFF;
    NVIC->ICPR[0]= 0xFFFF;
    
    NVIC->icer[1]= 0xFFFF;
    NVIC->ICPR[1]= 0xFFFF;
    
    (((void (*)()) BSL_Entry_function)((uint32_t) BSL_Param);//使用给定的 BSL 参数调用 BSL 

    此致、

     David

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

    尊敬的 David:

    感谢您的回复、您的建议正常。

     

    此致、

    Padmaja.i