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.

Using Boot Loader on MSP430FR6972 via RF

Other Parts Discussed in Thread: CC1120, MSP430FR6972

Hi all,

I'm developing a project using the FR6972 mcu and CC1120 transceiver and these devices will be established  away from me when the products are completed.Therefore, i need to update the firmware remotely when i want.

I have mainly checked some file about msp430 bsl files such as SLAU319B,SLAU292G,SLAU550D and i decided to implement the existing algorithm structure in ez430 Chronos for both of access point and chronos watch codes and who have tried to stay as close to this examples.

I have completed the majority part of the software for both sides (access point; send init-data packets to the watch to lauch boot loader & wacth; proccessing coming data and writing memory using wbsl) and it is working  but i encountered some problems during this time and have some question.

Q-1 ) Normally, i have no possibility to apply an appropriate sequence on the RST and TEST pins force the MSP430 because of these devices will be established away.
So, i'm calling the 0x1000 memory location as below code portion.

__disable_interrupt(); // disable interrupts
((void(*)())0x1000)(); // jump the BSL

But, data trasmission is broken down because of rf intterupt is stopped on CC1120 gpio pin.
Can we call boot loader simultaneously while trasmission is active? If so, how can we do it?

Q-2 ) There is a function to fill the memory as below part( every data trasmission was made successfully till this portion)

data = &RxBuffer[payloadStart];

for(i=(uint32)ptrMemory; i<((uint32)ptrMemory)+((uint32)packetSize); i++)
{

/* Write byte to address */
*(uint8 *)((uint16)i) = *data;
/* Check if write successful */
if(*(uint8 *)((uint16)i) != *data)
{

status = WBSL_OPERATION_SUCC;
}

/* Increment data pointer for next write */
data += 1;
}

Can this code part interfere the addresses correctly? If so, how can we get acknowlegde from bsl.
For example; If we assume data packet as TxBuffer[5] = [0x80,0x01,0x00,0x15,0x64,0xA3] //Mass Erase how can we get ack?
Is there any example that reading acknowledge data?

I'm waiting your attention and help.


Best Regards

  • Hi Caner,

    I'm looking into this, I will get back to you as soon as I can.

    Thanks,

    David
  • Hi Caner,

    Caner Dinçer said:
    But, data trasmission is broken down because of rf intterupt is stopped on CC1120 gpio pin.
    Can we call boot loader simultaneously while trasmission is active? If so, how can we do it?

    When you call the BSL, the BSL will re-configure the GPIO's, so you will need to customize the BSL. Unfortunately the FR57xx, FR58xx, FR59xx, FR68xx and FR59xx BSL resides in ROM and does not allow any customization. Therefore you will need  bypass the standard BSL and create a boot loader that will need to reside in main memory. MSPBoot is an example of such a bootloader http://www.ti.com/lit/pdf/slaa600

    Caner Dinçer said:
    Can this code part interfere the addresses correctly? If so, how can we get acknowlegde from bsl.
    For example; If we assume data packet as TxBuffer[5] = [0x80,0x01,0x00,0x15,0x64,0xA3] //Mass Erase how can we get ack?
    Is there any example that reading acknowledge data?

    Again, I believe that a custom boot loader will be the right approach and of course, you will need to add some RF support. When you are ready to do a firmware update, you will have to pass the control to this boot loader and it will be in charge of rx/tx messages and writing/erasing the flash.

      Hopefully this makes sense and please let us know if you have further questions.

        Best regards,

         David

  • Hi David

    I'm working on the slaa600 file. If i have any question, i will get back to you.

    Thanks your reply
  • Hi David

    I was trying to create a C array using the perl 430txt2c.pl but the proccess was broken down as below. 

    C:\Users\User\Desktop\MSPBoot_1_01_00_00\430txt_converter>CRCGen430.exe CRC16 Test.txt TestW1.txt C200 FBFF C000  
    CRCGen430 CRC generator for MSP430
    Texas Instruments Inc
    Version 1.0.1

    Output file: TestW1.txt created successfully!

    *****CRC Result: 0x9EAE*****


    C:\Users\User\Desktop\MSPBoot_1_01_00_00\430txt_converter>430txt2C.pl TestW1.txt Array.c app_section_array

    430txt2c.pl V1.2
    Texas Instruments Inc 2013

    This script converts an MSP430 .txt file to C array

    Usage:

    perl 430txt2c.pl src dest struct

    src .MSP430 txt source file
    dest .H file to be generated
    struct C structure
    Died at C:\Users\User\Desktop\MSPBoot_1_01_00_00\430txt_converter\430txt2C.pl line 55.

    Normally as far as i read in the pdf 's 34 page , destination file type in this directory should be C but it seems as a header file.
    Where am I making an error? Have you ever faced with this event before?


    Best Regards

  • Hi David,

    You can ignore my last message.It worked when i add the "perl" command to starting of all line as below.

    C:\Users\User\Desktop\MSPBoot_1_01_00_00\430txt_converter>perl 430txt2C.pl TestW1.txt Array.c app_section_array
  • Hi David,

    I have tried to run small test sofware using the linker file generated by MSPBootLinkerGen but i got an error on the IAR message section as

    Fatal Error[e72]: Segment DATA must be defined in a segment definition option (-Z, -b or -P).

    This error has disappeared when i put the following defination as below in  read/write memory section

    -Z(DATA)DATA20_I,DATA20_Z,DATA20_N,DATA20_ID,DATA20_C

    -Z(DATA)DATA20_HEAP+_DATA20_HEAP_SIZE

    but i don't see any instruction in  fram and another memory  sections when the code is debuged (I'm sharing iar screenshot in attached) .Also  the linker file was created according to below parameters.

    " perl MSPBootLinkerGen.pl -file lnk_msp430fr6972_3kb -dev MSP430FR6972 -params 0x4400 0xFFE0 0xFF20 48 4 0x1C00 0x23FF 0x160 0x1800 0x197F "  and i'm sharing  my memory map as attached.

    Do you have any idea to resolve this problem? How can i create a linker file successfully?

    Best Regards

**Attention** This is a public forum