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.

Application code is not running after BSL update

Other Parts Discussed in Thread: MSP430F5255, MSP-FET

Hi,

Here I am working on UART and I2C custom BSL. Both are working, but I am facing problem after SET_PC command.

 After SET_PC command the application code is not running continuously. It just entering into main() function and stopped there. When I restart the Hardware the new application code is running properly.
Is there any additional command required to run the application code after BSL(after SET_PC command)?
I haven't found any command in scripter guide for MSP430 controller. But there is a REBOOT command available for MSP432 devices. Please suggest if any solution available for this.
Here I am using MSP430F5255 controller. And SET_PC 0xa400. 
Please find the below my scripter code.

//
//Script example 5xx USB BSL
//Device tested: MSP430F5255
//Comm Bridge used: MSP-FET
//
//Download the blink application
//through UART BSL
//
LOG
MODE 5xx UART COM56
VERBOSE
CHANGE_BAUD_RATE 115200
MASS_ERASE
DELAY 20000
RX_PASSWORD pass30_default.txt
RX_DATA_BLOCK blinkLED_f5255.txt
SET_PC 0xa400

And find my application code .txt file below:

@a400
4F 14 92 53 02 24 B2 90 E9 03 02 24 06 28 82 43
02 24 8C 00 48 A4 B1 13 10 02 4B 16 00 13 81 00
00 A4 B1 13 94 02 0C 93 02 24 B1 13 00 00 0C 43
B1 13 60 01 B1 13 8E 02 D2 42 8C 06 00 24 00 13
32 D0 10 00 FD 3F 03 43 20 57 20 00 82 00 01 00
70 02 01 00 00 01 00 00 00 FF F0 00 54 A4 00 00
00 24 00 00
@ffc8
40 A4 40 A4 40 A4 40 A4 40 A4 40 A4 40 A4 40 A4
40 A4 40 A4 40 A4 38 A4 40 A4
@ffe4
40 A4 40 A4 40 A4 40 A4 40 A4 40 A4 40 A4 00 A4
40 A4 40 A4 40 A4 40 A4 40 A4 1E A4 2A 14 8F 00
00 00 9F 00 00 00 04 24 8C 00 00 00 B1 13 FA 00
40 18 1A 42 5C 01 40 18 B2 40 80 5A 5C 01 8F 00
4C A4 9F 00 54 A4 13 24 89 00 5C A4 88 00 64 A4
0C 3C 0C 09 7F 4C 5F 06 00 18 5F 4F 4C A4 A9 00
04 00 0D 09 4F 13 A9 00 04 00 D9 08 F2 23 7A C2
3A D0 08 5A 40 18 82 4A 5C 01 B1 13 98 02 8F 00
00 00 9F 00 00 00 09 24 8A 00 00 00 03 3C 6A 13
AA 00 04 00 9A 00 00 00 FA 23 28 16 10 01 2A 14
78 4C 09 43 26 3C AC 00 01 00 3E 90 12 00 0C 20
7F 4C 3F B0 80 00 07 24 7A 4C 3F F0 7F 00 4A 4A
46 18 0A 5A 0F DA 0E 5F 4B 0E 4B 0D CF 0D FF 0B
BF 00 01 00 AD 00 01 00 FD 4F FF FF 1E 83 FA 23
04 3C AD 00 01 00 FD 4C FF FF 58 03 19 53 39 92
D7 37 18 B3 F6 23 7B 4C 6E 4C 5B 0E 4F 4E 5F 0F
0B DF 4E 4E 3E F0 0F 00 3E 50 03 00 3B 90 FF 0F
CA 23 28 16 10 01 1A 14 C9 0C 1B 49 02 00 0A 43
29 3C CC 0A 3D 40 0C 00 B1 13 2E 02 2C 52 4C 0E
4C 0D EC 09 1E 4C 08 00 8C 93 0A 00 0D 0C 3F 0C
04 00 CC 0F 12 20 0E 93 10 20 8E 00 4C A4 9E 00
54 A4 0F 24 6E 4D 5E 06 00 18 5E 4E 4C A4 AD 00
01 00 CC 0D CD 0F 4E 13 02 3C B1 13 5C 02 1B 49
02 00 1A 53 0A 9B D5 2B 19 16 10 01 B2 40 80 5A
5C 01 B1 13 B0 01 B1 13 EC 01 0D 14 3D 40 02 0D
1D 83 FE 23 0D 16 D2 D3 05 02 D2 D3 03 02 B2 40
1C 5A 5C 01 92 D3 00 01 F2 90 52 00 00 24 09 20
7C 40 52 00 B1 13 82 02 32 C2 03 43 3F 40 00 10
4F 13 03 43 32 D2 03 43 EF 3F 03 43 B2 40 20 00
66 01 B2 D0 00 02 68 01 32 D0 40 00 82 43 60 01
B2 40 50 00 62 01 B2 40 F9 10 64 01 32 C0 40 00
1E 14 3D 40 80 8B 0E 43 1D 83 0E 73 FD 23 0D 93
FB 23 1D 16 03 43 10 01 F2 D0 C0 00 2B 02 D2 D3
80 06 F2 D0 80 00 80 06 F2 40 45 00 86 06 C2 43
87 06 D2 C3 80 06 D2 D3 9C 06 10 01 CF 0C 09 3C
6C 4F B1 13 82 02 AF 00 01 00 3C 40 05 00 B1 13
46 02 CF 93 00 00 F4 23 10 01 02 12 32 C2 03 43
82 4C C0 04 82 4D C8 04 1C 42 CA 04 32 41 03 43
10 01 0C 93 08 24 0D 14 3D 40 4A 01 1D 83 FE 23
0D 16 1C 83 F8 23 10 01 CF 0C 0E 93 06 24 AF 00
01 00 FF 4D FF FF 1E 83 FA 23 10 01 CF 0C CC 0D
CD 0F AD 00 05 00 1E 4F 01 00 80 01 5C 02 E2 B3
9D 06 FD 27 C2 4C 8E 06 10 01 03 43 FF 3F 03 43
1C 43 10 01 10 01
q

Thanks & Regards,
Vivek
  • Your reset vector (0xFFFE to 0xFFFF) appears to point to 0xA41E instead of 0xA400, I would have to view the linker file to understand why it does not start at the beginning of flash code memory but changing the SET_PC address should fix the issue.

    Regards,
    Ryan
  • Hi Ryan,
    Sorry for the late reply. 
    I tried with changing the SET_PC address to 0xA41E, here in my application code debug I am displaying character 'W' for every 5sec. After loading the application code through BSL I observed some garbage characters are displaying continuously but not the character 'W'. After restarting the hardware I am getting character 'W'. Please find the below linker file and suggest me the solution.
    Please find the below linker file for your reference:
    MEMORY
    {
        SFR                     : origin = 0x0000, length = 0x0010
        PERIPHERALS_8BIT        : origin = 0x0010, length = 0x00F0
        PERIPHERALS_16BIT       : origin = 0x0100, length = 0x0100
        RAM                     : origin = 0x2400, length = 0x8000
        INFOA                   : origin = 0x1980, length = 0x0080
        INFOB                   : origin = 0x1900, length = 0x0080
        INFOC                   : origin = 0x1880, length = 0x0080
        INFOD                   : origin = 0x1800, length = 0x0080
        FLASH                   : origin = 0xA400, length = 0x5B80
        FLASH2                  : origin = 0x10000,length = 0x1A400
        INT00                   : origin = 0xFF80, length = 0x0002
        INT01                   : origin = 0xFF82, length = 0x0002
        INT02                   : origin = 0xFF84, length = 0x0002
        INT03                   : origin = 0xFF86, length = 0x0002
        INT04                   : origin = 0xFF88, length = 0x0002
        INT05                   : origin = 0xFF8A, length = 0x0002
        INT06                   : origin = 0xFF8C, length = 0x0002
        INT07                   : origin = 0xFF8E, length = 0x0002
        INT08                   : origin = 0xFF90, length = 0x0002
        INT09                   : origin = 0xFF92, length = 0x0002
        INT10                   : origin = 0xFF94, length = 0x0002
        INT11                   : origin = 0xFF96, length = 0x0002
        INT12                   : origin = 0xFF98, length = 0x0002
        INT13                   : origin = 0xFF9A, length = 0x0002
        INT14                   : origin = 0xFF9C, length = 0x0002
        INT15                   : origin = 0xFF9E, length = 0x0002
        INT16                   : origin = 0xFFA0, length = 0x0002
        INT17                   : origin = 0xFFA2, length = 0x0002
        INT18                   : origin = 0xFFA4, length = 0x0002
        INT19                   : origin = 0xFFA6, length = 0x0002
        INT20                   : origin = 0xFFA8, length = 0x0002
        INT21                   : origin = 0xFFAA, length = 0x0002
        INT22                   : origin = 0xFFAC, length = 0x0002
        INT23                   : origin = 0xFFAE, length = 0x0002
        INT24                   : origin = 0xFFB0, length = 0x0002
        INT25                   : origin = 0xFFB2, length = 0x0002
        INT26                   : origin = 0xFFB4, length = 0x0002
        INT27                   : origin = 0xFFB6, length = 0x0002
        INT28                   : origin = 0xFFB8, length = 0x0002
        INT29                   : origin = 0xFFBA, length = 0x0002
        INT30                   : origin = 0xFFBC, length = 0x0002
        INT31                   : origin = 0xFFBE, length = 0x0002
        INT32                   : origin = 0xFFC0, length = 0x0002
        INT33                   : origin = 0xFFC2, length = 0x0002
        INT34                   : origin = 0xFFC4, length = 0x0002
        INT35                   : origin = 0xFFC6, length = 0x0002
        INT36                   : origin = 0xFFC8, length = 0x0002
        INT37                   : origin = 0xFFCA, length = 0x0002
        INT38                   : origin = 0xFFCC, length = 0x0002
        INT39                   : origin = 0xFFCE, length = 0x0002
        INT40                   : origin = 0xFFD0, length = 0x0002
        INT41                   : origin = 0xFFD2, length = 0x0002
        INT42                   : origin = 0xFFD4, length = 0x0002
        INT43                   : origin = 0xFFD6, length = 0x0002
        INT44                   : origin = 0xFFD8, length = 0x0002
        INT45                   : origin = 0xFFDA, length = 0x0002
        INT46                   : origin = 0xFFDC, length = 0x0002
        INT47                   : origin = 0xFFDE, length = 0x0002
        INT48                   : origin = 0xFFE0, length = 0x0002
        INT49                   : origin = 0xFFE2, length = 0x0002
        INT50                   : origin = 0xFFE4, length = 0x0002
        INT51                   : origin = 0xFFE6, length = 0x0002
        INT52                   : origin = 0xFFE8, length = 0x0002
        INT53                   : origin = 0xFFEA, length = 0x0002
        INT54                   : origin = 0xFFEC, length = 0x0002
        INT55                   : origin = 0xFFEE, length = 0x0002
        INT56                   : origin = 0xFFF0, length = 0x0002
        INT57                   : origin = 0xFFF2, length = 0x0002
        INT58                   : origin = 0xFFF4, length = 0x0002
        INT59                   : origin = 0xFFF6, length = 0x0002
        INT60                   : origin = 0xFFF8, length = 0x0002
        INT61                   : origin = 0xFFFA, length = 0x0002
        INT62                   : origin = 0xFFFC, length = 0x0002
        RESET                   : origin = 0xFFFE, length = 0x0002
    }
    /****************************************************************************/
    /* Specify the sections allocation into memory                              */
    /****************************************************************************/
    SECTIONS
    {
        .bss        : {} > RAM                  /* Global & static vars              */
        .data       : {} > RAM                  /* Global & static vars              */
        .TI.noinit  : {} > RAM                  /* For #pragma noinit                */
        .sysmem     : {} > RAM                  /* Dynamic memory allocation area    */
        .stack      : {} > RAM (HIGH)           /* Software system stack             */
    #ifndef __LARGE_DATA_MODEL__
        .text       : {}>> FLASH                /* Code                              */
    #else
        .text       : {}>> FLASH2 | FLASH       /* Code                              */
    #endif
        .text:_isr  : {} > FLASH                /* ISR Code space                    */
        .cinit      : {} > FLASH                /* Initialization tables             */
    #ifndef __LARGE_DATA_MODEL__
        .const      : {} > FLASH                /* Constant data                     */
    #else
        .const      : {} > FLASH | FLASH2       /* Constant data                     */
    #endif
        .cio        : {} > RAM                  /* C I/O Buffer                      */
        .pinit      : {} > FLASH                /* C++ Constructor tables            */
        .init_array : {} > FLASH                /* C++ Constructor tables            */
        .mspabi.exidx : {} > FLASH              /* C++ Constructor tables            */
        .mspabi.extab : {} > FLASH              /* C++ Constructor tables            */
        .infoA     : {} > INFOA              /* MSP430 INFO FLASH Memory segments */
        .infoB     : {} > INFOB
        .infoC     : {} > INFOC
        .infoD     : {} > INFOD
        /* MSP430 Interrupt vectors          */
        .int00       : {}               > INT00
        .int01       : {}               > INT01
        .int02       : {}               > INT02
        .int03       : {}               > INT03
        .int04       : {}               > INT04
        .int05       : {}               > INT05
        .int06       : {}               > INT06
        .int07       : {}               > INT07
        .int08       : {}               > INT08
        .int09       : {}               > INT09
        .int10       : {}               > INT10
        .int11       : {}               > INT11
        .int12       : {}               > INT12
        .int13       : {}               > INT13
        .int14       : {}               > INT14
        .int15       : {}               > INT15
        .int16       : {}               > INT16
        .int17       : {}               > INT17
        .int18       : {}               > INT18
        .int19       : {}               > INT19
        .int20       : {}               > INT20
        .int21       : {}               > INT21
        .int22       : {}               > INT22
        .int23       : {}               > INT23
        .int24       : {}               > INT24
        .int25       : {}               > INT25
        .int26       : {}               > INT26
        .int27       : {}               > INT27
        .int28       : {}               > INT28
        .int29       : {}               > INT29
        .int30       : {}               > INT30
        .int31       : {}               > INT31
        .int32       : {}               > INT32
        .int33       : {}               > INT33
        .int34       : {}               > INT34
        .int35       : {}               > INT35
        PORT6        : { * ( .int36 ) } > INT36 type = VECT_INIT
        RTC          : { * ( .int37 ) } > INT37 type = VECT_INIT
        PORT2        : { * ( .int38 ) } > INT38 type = VECT_INIT
        TIMER2_A1    : { * ( .int39 ) } > INT39 type = VECT_INIT
        TIMER2_A0    : { * ( .int40 ) } > INT40 type = VECT_INIT
        PORT1        : { * ( .int41 ) } > INT41 type = VECT_INIT
        TIMER1_A1    : { * ( .int42 ) } > INT42 type = VECT_INIT
        TIMER1_A0    : { * ( .int43 ) } > INT43 type = VECT_INIT
        TIMER0_B1    : { * ( .int44 ) } > INT44 type = VECT_INIT
        TIMER0_B0    : { * ( .int45 ) } > INT45 type = VECT_INIT
        USCI_B3      : { * ( .int46 ) } > INT46 type = VECT_INIT
        USCI_A3      : { * ( .int47 ) } > INT47 type = VECT_INIT
        DMA          : { * ( .int48 ) } > INT48 type = VECT_INIT
        .int49       : {}               > INT49
        TIMER0_A1    : { * ( .int50 ) } > INT50 type = VECT_INIT
        TIMER0_A0    : { * ( .int51 ) } > INT51 type = VECT_INIT
        USCI_B2      : { * ( .int52 ) } > INT52 type = VECT_INIT
        USCI_A2      : { * ( .int53 ) } > INT53 type = VECT_INIT
        ADC10        : { * ( .int54 ) } > INT54 type = VECT_INIT
        USCI_B1      : { * ( .int55 ) } > INT55 type = VECT_INIT
        USCI_A1      : { * ( .int56 ) } > INT56 type = VECT_INIT
        WDT          : { * ( .int57 ) } > INT57 type = VECT_INIT
        USCI_B0      : { * ( .int58 ) } > INT58 type = VECT_INIT
        USCI_A0      : { * ( .int59 ) } > INT59 type = VECT_INIT
        COMP_B       : { * ( .int60 ) } > INT60 type = VECT_INIT
        UNMI         : { * ( .int61 ) } > INT61 type = VECT_INIT
        SYSNMI       : { * ( .int62 ) } > INT62 type = VECT_INIT
        .reset       : {}               > RESET  /* MSP430 Reset vector         */ 
    }
    /****************************************************************************/
    /* Include peripherals memory map                                           */
    /****************************************************************************/
    -l msp430f5255.cmd
    Regards,
    Vivek
  • Hi Vivek,

    You have to remember that the BSL is an application, and as such it does the initialization of both the clock and USCI UART peripheral. No reset is performed with the SET_PC instruction, just a jump to the PC address specified, and as such the initialization performed by the BSL remains in place and is most likely causing the garbage characters through unexpected clock and UART settings. In your case, a hardware or software reset is the best way to fix the issue. You already know the hardware reset solution but may want to attempt writing a 0x9604 (PMMPW + PMMSWBOR) or 0x9608 (PMMPW + PMMSWPOR) to @120h for a software reset, although I don't know if the current BSL-Scripter solution will allow for this.

    Regards,
    Ryan

**Attention** This is a public forum