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.

RF BSL for CC430

Other Parts Discussed in Thread: SIMPLICITI, CC430F6137

Hello,

i have a fairly complex but functioning project which involves 3 devices of which 2 are based on a CC430F6137. This project consists of an iOS device, a keyfob and an end device. The iOS communicates to the keyfob via WIFI and the keyfob communicates with the end device via RF (SimpliciTi). This project is basically finished and working well.

I would like to implement wireless firmware updating capabilities for the keyfob andy he end device and need some advise.

Keyfob: I would like to send the new FW to the keyfob from the iOS device via WIFI, then have the keyfob replace it's firmware with the newly received FW.

End Device: I would like to send the new FW to the keyfob from the iOS device via WIFI, then have the keyfob send the FW to the end device via SimpliciTi RF, then have the end device replace it's FW with the newly received FW.

I had a look at the WBSL source code of the Chronos, but to be honest, I'm not exactly sure where to start as i am unfamiliar with BSL, never mind WBSL. Would anyone on this list be able to guide me in the right direction as to where to start. For example, I'm unclear as to i will have to have basically 2 separate FW for each device. One that knows how to replace the FW and another one that is my application? So i will first have to flash this new "updater" FW using SBW and it will remain in place? Would it be easier, to get started, to build all this update functionality just into my application? But how does an application replace itself?

I would assume i should start with the keyfob, as this will receive the new FW via WIFI (where the wifi module is connected via UART to the CC430), so this doesn't really involve RF and therefore should be a bit easier...

As you can tell, i don't really know where to start, any pointers and advice will be much appreciated.

Thanks,

-r

  • Rene,

    for creating custom BSL on5xx/6xx and CC430 devices, the main documentation is the SLAA450:

    http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slaa450a&docCategoryId=1&familyId=342

    you can also refer to the following wiki page which explains the custom BSL:

    http://processors.wiki.ti.com/index.php/BSL_%28MSP430%29#Custom_MSP430_BSL_for_5xx_Devices

    The main documentation of the BSL which contains general information regarding the BSL itself can be found here:

    http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slau319b&docCategoryId=6&familyId=342

    I hope this helps.

  • Thanks for these pointers. Reading thru these i have a little bit more info now, however, I'm still short a few key points i think. Based on these documents you listed, looking at the source code of the stock BSL's and the WBSL from the chronos sources, i think i want/need to do the following for my particular project:

    1. extend my iOS application to send new FW .txt (or .hex?) files to my keyfob and end device via WIFI and SimpliciTi (packets, chunks)

    2. extend the FW for my 2 CC430 based devices to accept new firmware packets, receive them and store them in an external FRAM i have on my board

    3. when the FW was received completely and verified to be valid in each CC430 based device, set some special bits in some special memory locations so that each device will start the BSL on next reboot. what exactly do i need to write to what memory to get the BSL executed? 

    4. write a custom BSL that copies the new FW from my external FRAM to the proper place on each CC430. where exactly do i need to write the FW to? 

    5. unset the special bits so on next reboot, user code will get executed instead of BSL

    does that sound like a reasonable plan? i think i am just not clear on some key details:

    * how to cause BSL to execute?

    * where and how to write FW to CC430 from BSL (where new FW is in external FRAM)? 

    * seems i will have to implement a custom BSL PI to read and write from and to my FRAM, right?

    * what are the proper procedures to check and verify that FW is valid? 

    * what if FW write fails but CC430 boots to user code on next reboot and something goes wrong? how to ever get back to life?

    thanks in advance,

    -r

  • As for the actual programing of the FW into flash, am i right assuming that i just go thru the msb430-txt file line by line, start at each address segment indicated by @xxxx and then write all bytes of that segment, one by one, literally as red from the file? where the fine is something like:

    @9E00
    FA F0 00 00 ....<snip>
    @9E9E
    31 40 FE 23 ....<snip>
    @FFE4
    DE 9F
    @FFEA
    4C 9F
    @FFEE
    8E 9F C6 9E
    @FFF4
    EA 9E
    @FFFE
    9E 9E
    q
  • * how to cause BSL to execute?  Simply by ((void (*)()) 0x1000)(); // rFbSL mode

    Hi,

    Following might help others.

    * where and how to write FW to CC430 from BSL (where new FW is in external FRAM)?  use chronos watch software sample package and look in the control center folder for executable. You will need a CC1111 as an AP.

    * seems i will have to implement a custom BSL PI to read and write from and to my FRAM, right?  I think so m on the same place.

    * what are the proper procedures to check and verify that FW is valid? The given application with chronos watch pops up a msg.

    * what if FW write fails but CC430 boots to user code on next reboot and something goes wrong? how to ever get back to life?  Document and exe mentions about that.

    Rahul

**Attention** This is a public forum