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: Bootloader Not jumping to Application SW after some predefined time (10 seconds) is SW flashing not started

Part Number: MSP432P401R


Following issue is observed during testing of the MSP432 Bootloader

 

Test Case 1:

  1. Flashed the Application SW (0x00000000) + Bootloader (0x20200) using MSP Flasher tool 1.03.14.
  2. Reset Button (Digital Input configured to one of the Port Pin)pressed,  Stack Pointer jumped to Bootloader location (0x20200).
  3. Flashed Application software (by Changing SW Version Number) using UART. Software Flashing completed and now Stack Pointer is in Application code.
  4. Reset Button pressed,  Stack Pointer jumped to Bootloader location (0x20200).
  5. After entering in to the boot loader, it is  jumping to the application within 10 seconds (if SW flashing not started)--> Pass

 

Test Case 2:

  1. Flashed the Application SW (0x00000000) + Bootloader (0x20200) using MSP Flasher tool 1.03.14.
  2. Reset Button (Digital Input configured to one of the Port Pin)pressed,  Stack Pointer jumped to Bootloader location (0x20200).
  3. Flashed Application software  using UART. Software Flashing completed and now Stack Pointer is in Application code.
  4. ECU Reset Command (Trying to call the Bootloder code from application) given through UART (This command will call the Boot loader). Stack Pointer jumped to Bootloader location (0x20200).
  5. After entering in to the boot loader, it is not jumping to the application within 10 seconds--> Fail

 

 Flash Mail Box setting is 0xC000 (BSL Config Settings)

Note: 1. On debugging the issue it is found that bootloader is stopping at MAP_Interrupt_EnableMaster () function when ECU reset command given through UART but Application Software flashing is happening in this case through UART.

2. Application Software flashing is done through Application flash scripter from ti.

 

Requesting your help on this issue.

  • Hello,

    Are you using the RED Launchpad on each of these test cases?? Or did you build your own HW??

    Is it possible to get a memory dump (srec, hex or txt) on each of these cases??

    Thanks,

    David
  • Hello David,

    We had build our own hardware.

    Memory Dump is same fro both of these test cases.

    Boot loader Map File

    Software Hex File (@0000 - Application @20200 -> Bootloader) 

    Thanks

    Padmaja

  • Hello Padmaja,

    I modified you previous post so it is easier to read.

    Could you please send me the changes that you made to the BSL so I can try to reproduce the problem on my side.

    Thanks,

    David
  • Hello David,

    The only change we did is in BSL432_PI_detectInterface() function

    if(MAP_Timer_A_getInterruptStatus(TIMER_A0_BASE) == TIMER_A_INTERRUPT_PENDING)

    {

    /*Top Code is same s TI Code last we added these two statements*/

                WDT_A->CTL=0x5A07; /* If the application SW flashing does not start in 10seconds then WDT is reset then again BSL is ready for ASW flashing */

    while(1);          

    }

    Thanks,

    Padmaja.I

  • Hi Padmaja,

     So far I have not been able to reproduce the problem. I'll keep trying on Monday, in the meantime I have a few more questions:

    1. Could you please confirm your flash mailbox setting?? In your first post you mentioned 0xC000, but after looking at your txt file, the bsl configuration is 0x7c48df90 and this translate to:

    BSL PARAMETERS :

    Hardware Invoke : Enable

    I2C Address : 0x48

    Interface  : UART

    Polarity : High

    Pin : PIN1

    Port : PORT1

     So I'm not sure where does the 0xC000 is coming from.

    2. Could you please post your SW invoke that you use for case #2. This is what I'm using:

    #define BSL_PARAM 0x7C48DF90
    
    #define BSL_API_TABLE_ADDR 0x00202000 // Address of BSL API table
    
    #define BSL_ENTRY_FUNCTION (*((uint32_t *)BSL_API_TABLE_ADDR))
    
    ((void (*)())BSL_ENTRY_FUNCTION)((uint32_t)BSL_PARAM); // Call the BSL with given BSL parameters
    

    Thanks,

     David

  • Hello David,

    I am Using SW invoke.

    Bsl Setting in flash mail box      0x7C48DF90,

     

     This is my SW Invoke

    #define BSL_API_TABLE_ADDR                       ((uint32_t)0x00202000)          /*!< Address of BSL API table */

    #define BSL_ENTRY_FUNCTION                       (*((uint32_t *)BSL_API_TABLE_ADDR))

                                                    Interrupt_disableInterrupt(INT_T32_INT1);/*Disable timer 32 interrupt*/

                                                    Interrupt_disableMaster();

                                                    ((void (*)())BSL_ENTRY_FUNCTION)((uint32_t)0xC000);/* BSL_Entry_Through_uart*/

     0xC000 - This Parameters I am collecting it in boot loader function and based on this parameters I am initializing boot loader through UART.

     In Bootloader SW Code

    void main (uint32_t bslParams)

    {

    }

    This bslparams contains 0xC000 which I am passing from application. This is the flash mail box setting I am using. Boot loader will not consider mailbox setting which I have used.

     

    Regards,

    Padmaja.I

     

     

  • Hello Padmaja,

      In your application, could you please try clearing all the pending interrupts before invoking the BSL.

    Please try the following and let me know if that fixes your problem.

            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); // Call the BSL with given BSL parameters

    Best regards,

      David

  • Hello David,

    Thanks for your reply and the suggestion given by you is working fine.

     

    Regards,

    Padmaja.I

**Attention** This is a public forum