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.

Combining Custom BSL and Application Code

Other Parts Discussed in Thread: MSP430F5526

I have successfully created a custom bsl and an application for the msp430f5526. Both work just fine as stand alone applications. However, when I try to combine the two ti text files as a single code file, something gets lost in translation. I am able to jump to the bsl area using a cmd and it seems to intialize fine (it sends a test message over the data line as expected); however, after the first command I send to the bsl once intialized, the data line goes high and remains unresponsive. 

Both ti-text files have code at location @ffd2. I am using the hex bytes for the main application at this location. Could this be whats screwing it up? Is there something special I need to do when combining ti-text files?

The project is for an SDI-12 sensor (it only has one data line) so the custom BSL and being able to jump to it from user code is absolutely necessary.

Is there a way to combine both sets of code in a single project so I can debug it like a normal person?

  • BSL is 2 KByte starting from 1000h. So BSL should not use FFXXh.

    For debugging my custom CDC BSL I was using high speed UART log.
  • So I don't need to worry about any of the interrupt or reset vectors generated by the bsl ti-text file then?
  • I think we (you, zrno, and I) are not on the same page. Let me ask you about your BSL txt file:

    (1) how many lines start with @ and what are the hex values after each @?
    (2) how many hex numbers are there after the line @FFD2 that you mentioned and before the last line q?

    I think you are use CCS to compile your BSL the "normal" way. It puts your BSL in Main Flash, and it mistakenly generated all kinds of interrupt vectors while you used none.
  • There are three line that begin with @: @1000, @17f0, @ffd2.

    @ffd2

    1C 17 1C 17 1C 17 1C 17 1C 17 1C 17 1C 17 1C 17

    1C 17 1C 17 1C 17 1C 17 1C 17 1C 17 1C 17 1C 17

    1C 17 1C 17 1C 17 1C 17 1C 17 1C 17 E2 16 

    q

    I am indeed using CCS to compile the BSL the "normal" way. Here is my linker and .map (saved as .txt) for reference.

    lnk_msp430f5526.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    /* ============================================================================ */
    /* Copyright (c) 2015, Texas Instruments Incorporated */
    /* All rights reserved. */
    /* */
    /* Redistribution and use in source and binary forms, with or without */
    /* modification, are permitted provided that the following conditions */
    /* are met: */
    /* */
    /* * Redistributions of source code must retain the above copyright */
    /* notice, this list of conditions and the following disclaimer. */
    /* */
    /* * Redistributions in binary form must reproduce the above copyright */
    /* notice, this list of conditions and the following disclaimer in the */
    /* documentation and/or other materials provided with the distribution. */
    /* */
    /* * Neither the name of Texas Instruments Incorporated nor the names of */
    /* its contributors may be used to endorse or promote products derived */
    /* from this software without specific prior written permission. */
    /* */
    /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" */
    /* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, */
    /* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
    /* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */
    /* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */
    /* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, */
    /* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; */
    /* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, */
    /* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */
    /* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
    /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
    /* ============================================================================ */
    /******************************************************************************/
    /* lnk_msp430f5526.cmd - LINKER COMMAND FILE FOR LINKING MSP430F5526 PROGRAMS */
    /* */
    /* Usage: lnk430 <obj files...> -o <out file> -m <map file> lnk.cmd */
    /* cl430 <src files...> -z -o <out file> -m <map file> lnk.cmd */
    /* */
    /*----------------------------------------------------------------------------*/
    /* These linker options are for command line linking only. For IDE linking, */
    /* you should set your linker options in Project Properties */
    /* -c LINK USING C CONVENTIONS */
    /* -stack 0x0100 SOFTWARE STACK SIZE */
    /* -heap 0x0100 HEAP AREA SIZE */
    /* */
    /*----------------------------------------------------------------------------*/
    /* Version: 1.167 */
    /*----------------------------------------------------------------------------*/
    /****************************************************************************/
    /* Specify the system memory map */
    /****************************************************************************/
    MEMORY
    {
    SFR : origin = 0x0000, length = 0x0010
    PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0
    PERIPHERALS_16BIT : origin = 0x0100, length = 0x0100
    RAM : origin = 0x2400, length = 0x1800
    USBRAM : origin = 0x1C00, length = 0x0800
    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
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    3022.SDI-12 Bootloader.txt

  • There is something wrong with your Custom BSL txt file. I do not know how to use CCS. But I can say this:

    Your BSL code probably starts at 0x16E2. This is okay. But the Reset Vector should not point to 0x16E2. It should have pointed to the startup code of your Application.

    Your BSL code probably does not use any interrupt. This is good. But it seems that you have an ISR at 0x171C. That ISR is probably an infinity loop that the CPU cannot get out. This is not helpful and may even be harmful unless you always use a debugger to free the CPU from that death trap. Furthermore, all Interrupt Vectors are pointing to that normally useless ISR. This could impair the ability to run you Application Code.

    When done correctly, you never need to combined the txt files of your Custom BSL with that of your Application Code.

    Sorry, I cannot help you beyond this point. Someone else please jump in.

    -- OCY
  • Okay, so debugging my Custom BSL, I can successfully write my application to the board and reset the device. Once in application code, I can then jump back to the BSL where it waits indefinitely at a polling routine within BSL430_PI_USCIA:

    while(!(UCA0IFG & UCRXIFG));

    No matter what I send to the device, the interrupt flag is never set. Can anyone think of why this might be?

  • So here is what I found. My SDI-12 Sensor communicates at 1200 Baud with 7 bit data (SDI-12 standard). For some reason, after jumping to my BSL code, the UART module doesn't get reinitialized (obviously 100% necessary to reinitialize as 8 bit data can't be correctly sent with 7 bits). Niether did the clocks even though both initializations take place in BSL main. I'm not sure why this happens. To get around this, I reinitialized the clocks and UART module in application code just before jumping to BSL. All is well. I now have a fully functioning sensor with a custom BSL.

**Attention** This is a public forum