Texas Instruments LaunchPad 430

Texas Instruments has the MSP430 microcontroller familiy. It is completely different to the AVR Atmegas. Amforth recently started to support it as well. The Forth kernel is (almost) the same, many tools like the amforth-shell work for both too. Since the MSP430 is new, bugs and other oddities are more likely than for the Atmegas.

The sources are made for the naken_asm assembler.

Playing with the Launchpad

The LEDs can be used as follows

: red:init   1 34 bm-set ;
: red:on     1 33 bm-set ;
: red:off    1 33 bm-clear ;
: green:init 64 34 bm-set ;
: green:on   64 33 bm-set ;
: green:off  64 33 bm-clear ;

Example for (machine) code (instead of the forth code above)

code red:init  $D3D2 , $0022 , end-code
code red:on  $D3D2 , $0021 , end-code
code red:off $C3D2 , $0021 , end-code

There are many ways to wait, e.g. do other things while waiting (PAUSE). A simple approach is do nothing:

: ms 0 ?do 1ms loop ;

Now let the red LED blink ONCE

: blink red:on 100 ms red:off 100 ms ;

Test it! Now! The compiled version is much faster than the sequence “1 33 bm-set 1 33 bm-clear” (watch the red flashes). Next is to let it blink until a key is pressed

: blink-forever begin blink key? until key drop ;

A big difference to the AVR’s is that amforth for the MSP430 needs an explicit save command to make all writes to the dictionary permanent. Otherwise every changes are lost at cold or reset and moreover a re-flash is necessary.

Hardware Setup

At the first glance, the hardware setup is trivial: Connect your Launchpad to the USB port of your PC. It may take a while until the modem manager detects that it is not a device it can handle. Now open a terminal (I use minicom) and set the serial port settings: /dev/acm0, 9600 and 8N1 without flow control.

MSP430 G2553

The mspdebug to actually program the controller uses the rf2500 protocol:

> mspdebug rf2500 "prog launchpad430.hex "
 MSPDebug version 0.22 - debugging tool for MSP430 MCUs
 Copyright (C) 2009-2013 Daniel Beer <dlbeer@gmail.com>
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 Trying to open interface 1 on 007
 rf2500: warning: can't detach kernel driver: No data available
 Initializing FET...
 FET protocol version is 30394216
 Set Vcc: 3000 mV
 Configured for Spy-Bi-Wire
 fet: FET returned error code 4 (Could not find device or device not supported)
 fet: command C_IDENT1 failed
 Using Olimex identification procedure
 Device ID: 0x2553
   Code start address: 0xc000
   Code size         : 16384 byte = 16 kb
   RAM  start address: 0x200
   RAM  end   address: 0x3ff
   RAM  size         : 512 byte = 0 kb
 Device: MSP430G2xx3
 Number of breakpoints: 2
 fet: FET returned NAK
 warning: device does not support power profiling
 Chip ID data: 25 53
 Erasing...
 Programming...
 Writing  424 bytes at 0200...
 Writing  188 bytes at 1000...
 Writing 4096 bytes at e000...
 Writing 4008 bytes at f000...
 Writing   32 bytes at ffe0...
 Done, 8748 bytes total

Your Amforth terminal session (minicom) should now print some readable characters like

+-------------------------------------
| amforth 5.6 MSP430G2553 8000 kHz
| >
|

Thats all. If nothing has happened look for error messages in the mspdebug window. Try replugging the launchpad. Some more information are in the Amforth with Raspberry PI recipe.

You can reprogram the controller via USB whilst the terminal session is still active. In this case you’ll see repeated welcome strings from amforth due to some resets.

+-------------------------------------
| amforth 5.6 MSP430G2553 8000 kHz
| > amforth 5.6 MSP430G2553 8000 kHz
| > amforth 5.6 MSP430G2553 8000 kHz
| > amforth 5.6 MSP430G2553 8000 kHz
| > amforth 5.6 MSP430G2553 8000 kHz
| >
|

MSP430 F5529 & FR5969

Thess chips require the libmsp430.so from TI which is (at least with ubuntu) not part of the mspdebug package. I used the one from Energia and copied it into /usr/lib.

$ mspdebug tilib "prog amforth-5529.hex"
MSPDebug version 0.22 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2013 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

tilib: can't find libmsp430.so: libmsp430.so: cannot open shared object file: No such file or directory

If the following error message is displayed

tilib: MSP430_Initialize: Interface Communication error (error = 35)

the modem manager is still using the serial port. Just wait for it.

The next error message is potentially more troublesome

mspdebug tilib "prog amforth-5529.hex"
MSPDebug version 0.22 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2013 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

MSP430_GetNumberOfUsbIfs
MSP430_GetNameOfUsbIf
Found FET: ttyACM0
MSP430_Initialize: ttyACM0
FET firmware update is required.
Re-run with --allow-fw-update to perform a firmware update.
tilib: device initialization failed

Now you have to update the programming module on the launchpad. Be aware that this is a potentially dangerous action, it may seem to brick the chip (if not, you’re lucky) if something goes wrong:

$ mspdebug tilib --allow-fw-update
MSPDebug version 0.22 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2013 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

MSP430_GetNumberOfUsbIfs
MSP430_GetNameOfUsbIf
Found FET: HID_FET
MSP430_Initialize: HID_FET
FET firmware update is required.
Starting firmware update (this may take some time)...
tilib: MSP430_FET_FwUpdate: MSP-FET / eZ-FET recovery failed (error = 73)
tilib: device initialization failed

In this case try running the command as root e.g. via sudo

$ sudo mspdebug tilib --allow-fw-update
[sudo] password for <user>:
MSPDebug version 0.22 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2013 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

MSP430_GetNumberOfUsbIfs
MSP430_GetNameOfUsbIf
Found FET: HID_FET
MSP430_Initialize: HID_FET
FET firmware update is required.
Starting firmware update (this may take some time)...
Initializing bootloader...
Programming new firmware...
  0 percent done
 34 percent done
 67 percent done
100 percent done
Update complete
Done, finishing...
MSP430_VCC: 3000 mV
tilib: MSP430_VCC: Internal error (error = 68)
tilib: device initialization failed

The error 68 signals “ok, I’m almost done”. Now re-run the same command to finally do the firmware update. Note some subtle differences in the output like the HID_FET vs. ttyACM0.

$ sudo mspdebug tilib --allow-fw-update
MSPDebug version 0.22 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2013 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

MSP430_GetNumberOfUsbIfs
MSP430_GetNameOfUsbIf
Found FET: ttyACM0
MSP430_Initialize: ttyACM0
FET firmware update is required.
Starting firmware update (this may take some time)...
Initializing bootloader...
Programming new firmware...
  4 percent done
 20 percent done
 36 percent done
 52 percent done
 68 percent done
 84 percent done
100 percent done
Update complete
Done, finishing...
MSP430_VCC: 3000 mV
MSP430_OpenDevice
MSP430_GetFoundDevice
Device: MSP430F5529 (id = 0x0030)
8 breakpoints available
MSP430_EEM_Init
Chip ID data: 55 29 18

Available commands:
  =           erase       isearch     power       save_raw    simio
  alias       exit        load        prog        set         step
  break       fill        load_raw    read        setbreak    sym
  cgraph      gdb         md          regs        setwatch    verify
  delbreak    help        mw          reset       setwatch_r  verify_raw
  dis         hexout      opt         run         setwatch_w

Available options:
  color                       gdb_loop
  enable_bsl_access           gdbc_xfer_size
  enable_locked_flash_access  iradix
  fet_block_size              quiet
  gdb_default_port

Type "help <topic>" for more information.
Use the "opt" command ("help opt") to set options.
Press Ctrl+D to quit.

(mspdebug) <Ctrl-D>
MSP430_Run
MSP430_Close

If done properly the actions looks as follows

$ sudo mspdebug tilib --allow-fw-update
MSPDebug version 0.22 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2013 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

MSP430_GetNumberOfUsbIfs
MSP430_GetNameOfUsbIf
Found FET: ttyACM0
MSP430_Initialize: ttyACM0
FET firmware update is required.
Starting firmware update (this may take some time)...
Initializing bootloader...
Programming new firmware...
  75 percent done
  84 percent done
  84 percent done
  91 percent done
  96 percent done
  99 percent done
 100 percent done
 100 percent done
Initializing bootloader...
Programming new firmware...
   4 percent done
  20 percent done
  36 percent done
  52 percent done
  68 percent done
  84 percent done
 100 percent done
Update complete
Done, finishing...
MSP430_VCC: 3000 mV
MSP430_OpenDevice
MSP430_GetFoundDevice
Device: MSP430FR5969 (id = 0x012d)
3 breakpoints available
MSP430_EEM_Init
Chip ID data: 69 81 30

Available commands:
  =           erase       isearch     power       save_raw    simio
  alias       exit        load        prog        set         step
  break       fill        load_raw    read        setbreak    sym
  cgraph      gdb         md          regs        setwatch    verify
  delbreak    help        mw          reset       setwatch_r  verify_raw
  dis         hexout      opt         run         setwatch_w

Available options:
  color                       gdb_loop
  enable_bsl_access           gdbc_xfer_size
  enable_locked_flash_access  iradix
  fet_block_size              quiet
  gdb_default_port

Type "help <topic>" for more information.
Use the "opt" command ("help opt") to set options.
Press Ctrl+D to quit.

(mspdebug)  <Ctrl-D>
MSP430_Run
MSP430_Close

Now your hardware is configured to upload the hexfiles from amforth

$ mspdebug tilib "prog amforth-5529.hex"

giving the amforth command prompt in your serial terminal

amforth 6.1 MSP430F5529 8000 kHz
> words
key? key emit? emit ...