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.

MSP430F5418A: Questions on Bootloader

Part Number: MSP430F5418A
Other Parts Discussed in Thread: MSP430F5438A

Hello,

I want to OTA upgrade the MSP430 firmware through wireless host CC1352, here I have some questions after studying the MSPBSL:

1, Due to the MSP430 available UART pins on my board are not P1.1 and P1.2, is it possible to change the BSL UART pins to P5.6 and P5.7 in customized bootloader?

2, If I invoke the BSL from MSP430 running application, can I skip the BSL entry sequence(by RST and TEST pins) in BSL host driver? We hope only use the UART Tx, Rx 2 pins for BSL UART protocol;

3, How to program the customized bootloader to MSP430?

4, How to access the BSL source code? The link MSPBSL_CustomBSL430 returns below error:

  • Hi Siyou, I will check the issue on the error link MSPBSL_CustomBSL430 and reply to you later. Thanks!

  • Hi Siyou,

    The link MSPBSL_CustomBSL430 has been available.

    Please check User’s Guide MSP430™ Flash Devices Bootloader (BSL), on flash device BSL

    and please check https://www.ti.com/lit/an/slaa450g/slaa450g.pdf on 5xx/6xx and G2 device Custom Flash-Based Bootloader

    Thanks!

  • Hi Xiaodong,

    Thanks for updating the link, I can get the code now.

    Could you also help confirm the question #1, we need to ensure our hardware design can meet the BSL requirements.

    Aoording to SLAA450G, my understanding is the answer should be Yes, right?

  • Hi Siyou,

    MSP430F5xx and MSP430F6xx devices ship with a standard TI BSL.

    As the TI BSL programmed in Flash memory, the BSL can be reprogrammed and customized.

    I think it is possible to change the BSL UART pins to P5.6 and P5.7 in customized bootloader on MSP430F5418A.

    Thanks!

  • Hi Xiaodong,

    I tried the customized BSL with UART P5.6 and P5.7 but failed, please review below procedures and point out what am I missing.

    1, Modify the UART port pins to P5.6 and P5.7 in 《CCS_v7_MSP430F543xA_TA_UART》 project and then download it to device;

    2, Download the test application to device, in this test application, it simply jump to BSL:

        void (* JumpToBSL)(void);
        __disable_interrupt(); // disable interrupts
        JumpToBSL = (void (*)())(0x1000);
        JumpToBSL(); // jump to BSL
    
    

    3, Connect the P5.6 and P5.7 to PC serial tool with parameters “9600,8,1,even, none”. PC serial tool send GetBSLVersion command “80 01 00 19 E8 62” to device, but there is no any response from device UART.

  • Part Number: MSP430F5418A

    Hi, 

    As described in https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/936966, I want to change the BSL UART pins to P5.6 and P5.7 but without luck, could you guide me how to achieve it?

    Here are my test procedures:

    1, Modify the UART port pins to P5.6 and P5.7 in 《CCS_v7_MSP430F543xA_TA_UART》 project, build and download it to device;

    2, Download the test application to device, in this test application, it simply jump to BSL:

        __disable_interrupt(); // disable interrupts
        ((void (*)())0x1000)();

    3, Connect the P5.6 and P5.7 to PC serial tool with parameters “9600,8,1,even, none”. PC serial tool send GetBSLVersion command “80 01 00 19 E8 62” to device, but there is no any response from device UART.

    PS: I tried below two linker command files, both had the same result as step 3.

    <lnk_msp430f5418a.cmd>

    MEMORY
    {
        SFR                     : origin = 0x0000, length = 0x0010
        PERIPHERALS_8BIT        : origin = 0x0010, length = 0x00F0
        PERIPHERALS_16BIT       : origin = 0x0100, length = 0x0100
        RAM                     : origin = 0x1C00, length = 0x4000
        INFOA                   : origin = 0x1980, length = 0x0080
        INFOB                   : origin = 0x1900, length = 0x0080
        INFOC                   : origin = 0x1880, length = 0x0080
        INFOD                   : origin = 0x1800, length = 0x0080
        ZAREA                   : origin = 0x1000, length = 0x0010
        BSL430_VERSION_VENDOR   : origin = 0x1010, length = 0x0001
        BSL430_VERSION_CI       : origin = 0x1011, length = 0x0001
        BSL430_VERSION_API      : origin = 0x1012, length = 0x0001
        BSL430_VERSION_PI       : origin = 0x1013, length = 0x0001
        ZAREA_CODE              : origin = 0x1014, length = 0x002E
        BSLSIG                  : origin = 0x17F0, length = 0x000C
        JTAGLOCKKEY             : origin = 0x17FC, length = 0x0004
        FLASH                   : origin = 0x5C00, length = 0xA380
        FLASH2                  : origin = 0x10000,length = 0x15BF8 /* Boundaries changed to fix CPU47 */
        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             */
    
    	.ZAREA      : {} > ZAREA
    	.BSL430_VERSION_VENDOR : {} > BSL430_VERSION_VENDOR
    	.BSL430_VERSION_CI     : {} > BSL430_VERSION_CI
    	.BSL430_VERSION_API    : {} > BSL430_VERSION_API
    	.BSL430_VERSION_PI     : {} > BSL430_VERSION_PI
    	.ZAREA_CODE : {} > ZAREA_CODE
    	.BSLSIG     : {} > BSLSIG
    	.JTAGLOCKKEY : {} > JTAGLOCKKEY
    
    #ifndef __LARGE_CODE_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            */
        .binit      : {} > FLASH                /* Boot-time Initialization tables   */
        .init_array : {} > FLASH                /* C++ Constructor tables            */
        .mspabi.exidx : {} > FLASH              /* C++ Constructor tables            */
        .mspabi.extab : {} > FLASH              /* C++ Constructor tables            */
    #ifdef __TI_COMPILER_VERSION__
      #if __TI_COMPILER_VERSION__ >= 15009000
        #ifndef __LARGE_CODE_MODEL__
        .TI.ramfunc : {} load=FLASH, run=RAM, table(BINIT)
        #else
        .TI.ramfunc : {} load=FLASH | FLASH2, run=RAM, table(BINIT)
        #endif
      #endif
    #endif
    
        .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
        .int36       : {}               > INT36
        .int37       : {}               > INT37
        .int38       : {}               > INT38
        .int39       : {}               > INT39
        .int40       : {}               > INT40
        RTC          : { * ( .int41 ) } > INT41 type = VECT_INIT
        PORT2        : { * ( .int42 ) } > INT42 type = VECT_INIT
        .int43       : {}               > INT43
        .int44       : {}               > INT44
        USCI_B1      : { * ( .int45 ) } > INT45 type = VECT_INIT
        USCI_A1      : { * ( .int46 ) } > INT46 type = VECT_INIT
        PORT1        : { * ( .int47 ) } > INT47 type = VECT_INIT
        TIMER1_A1    : { * ( .int48 ) } > INT48 type = VECT_INIT
        TIMER1_A0    : { * ( .int49 ) } > INT49 type = VECT_INIT
        DMA          : { * ( .int50 ) } > INT50 type = VECT_INIT
        .int51       : {}               > INT51
        .int52       : {}               > INT52
        TIMER0_A1    : { * ( .int53 ) } > INT53 type = VECT_INIT
        TIMER0_A0    : { * ( .int54 ) } > INT54 type = VECT_INIT
        ADC12        : { * ( .int55 ) } > INT55 type = VECT_INIT
        USCI_B0      : { * ( .int56 ) } > INT56 type = VECT_INIT
        USCI_A0      : { * ( .int57 ) } > INT57 type = VECT_INIT
        WDT          : { * ( .int58 ) } > INT58 type = VECT_INIT
        TIMER0_B1    : { * ( .int59 ) } > INT59 type = VECT_INIT
        TIMER0_B0    : { * ( .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 msp430f5418a.cmd
    

    <lnk_msp430f5438a.cmd>

    SECTIONS
    {
        .bss        : {} > RAM                /* GLOBAL & STATIC VARS              */
        .data       : {} > RAM                /* GLOBAL & STATIC VARS              */
        .sysmem     : {} > RAM                /* DYNAMIC MEMORY ALLOCATION AREA    */
        .stack      : {} > RAM (HIGH)         /* SOFTWARE SYSTEM STACK             */
    
    	.ZAREA      : {} > ZAREA
    	.BSL430_VERSION_VENDOR : {} > BSL430_VERSION_VENDOR
    	.BSL430_VERSION_CI     : {} > BSL430_VERSION_CI
    	.BSL430_VERSION_API    : {} > BSL430_VERSION_API
    	.BSL430_VERSION_PI     : {} > BSL430_VERSION_PI
    	.ZAREA_CODE : {} > ZAREA_CODE
    	.BSLSIG     : {} > BSLSIG
    	.JTAGLOCKKEY : {} > JTAGLOCKKEY
    
        .text       : {}>> FLASH              /* CODE                              */
        .text:_isr  : {} > FLASH              /* ISR CODE SPACE                    */
    
        .cinit      : {} > FLASH              /* INITIALIZATION TABLES             */
        .const      : {} > FLASH              /* CONSTANT DATA                     */
    
        .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
        .int36       : {}               > INT36
        .int37       : {}               > INT37
        .int38       : {}               > INT38
        .int39       : {}               > INT39
        .int40       : {}               > INT40
        RTC          : { * ( .int41 ) } > INT41 type = VECT_INIT
        PORT2        : { * ( .int42 ) } > INT42 type = VECT_INIT
        .int43       : {}               > INT43
        .int44       : {}               > INT44
        USCI_B1      : { * ( .int45 ) } > INT45 type = VECT_INIT
        USCI_A1      : { * ( .int46 ) } > INT46 type = VECT_INIT
        PORT1        : { * ( .int47 ) } > INT47 type = VECT_INIT
        TIMER1_A1    : { * ( .int48 ) } > INT48 type = VECT_INIT
        TIMER1_A0    : { * ( .int49 ) } > INT49 type = VECT_INIT
        DMA          : { * ( .int50 ) } > INT50 type = VECT_INIT
        .int51       : {}               > INT51
        .int52       : {}               > INT52
        TIMER0_A1    : { * ( .int53 ) } > INT53 type = VECT_INIT
        TIMER0_A0    : { * ( .int54 ) } > INT54 type = VECT_INIT
        ADC12        : { * ( .int55 ) } > INT55 type = VECT_INIT
        USCI_B0      : { * ( .int56 ) } > INT56 type = VECT_INIT
        USCI_A0      : { * ( .int57 ) } > INT57 type = VECT_INIT
        WDT          : { * ( .int58 ) } > INT58 type = VECT_INIT
        TIMER0_B1    : { * ( .int59 ) } > INT59 type = VECT_INIT
        TIMER0_B0    : { * ( .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 msp430f5438a.cmd
    

  • I guess the problem is <lnk_msp430f5418a.cmd> file was incorrect.

    Is there any TI expert who can provide the <lnk_msp430f5418a.cmd> file for customizing MSP430F5418A bootloader?

**Attention** This is a public forum