The MSP430 is a great little micro, and with some proper marketing, it could easily have provided an alternative to the AVR and PIC. However unclear, obfuscating, archaic documentation, spread very thinly over the web has made this little micro the poor relation of the microcontroller world.
I write this having just spend a considerable amount of time in February trying to provide an effective solution for programming one of our products, an MSP430 based force gauge, which is being produced by a new supplier.
Unfortunately the original programmer from Gessler is no longer available, and so an alternative was needed.
The solution was actually staring in me in the face - so simple, that it's elegance seems to have been lost in the mists of time, and the desire to make everything a lot more complicated than it needs to be.
Here I summarise my findings in an attempt to provide a reference that will allow others to benefit from my 3 weeks of frustrating work and false starts.
As a prologue to the main post - here is an unpublished post from 3 weeks ago - when I first started on this mission
(Previously unpublished - from Feb 9th 2016)
We have an on-going project at work, which needs an MSP430 bootloading over it's serial port with a hex file. So we went out and bought the cheap open source, Rocket BSL programmer from Olimex.
I then found that I needed the drivers and other software from TI, which I had to register for and then declare to the US Government that I wasn't going to use it against America in any way, shape or form. So far, so good.
North Korean? No, just Bulgarian. |
After mulling this over for a while, I began to think that proprietary bootloaders often really suck. There should be a simple, low cost universal tool which allows you to squirt code from a hex file into any microcontroller, from any platform. And that got me thinking about the humble USB-serial programming cable - such as those by FTDI, SiLabs or our Chinese friends who make the CH340.
It also appears that others have had this thought. In my search for an alternative MSP430 programmer, I found this interesting approach from Flying Camp Design - a programmer that is literally not much more complicated than an FTDI cable - just an FT232R on a small pcb.
Bootloaders are usually designed to be small, and not particularly human-friendly, because they are normally talking to some proprietary application running on the pc. But this doesn't need to be the case, there is sufficient flash space in the boot block of most micros to put a more sophisticated bootloader program - one which is actually capable of running some interpreted commands and presenting a more human friendly face to the user.
Getting Started
The MSP may be programmed by one or more of the following interfaces:
1. A Serial Boot Loader - resident on almost all MSP430 devices - known as BSL
2. A JTAG interface/programmer
3. SpyByWire - a 2 wire serialised version of JTAG.
The Electrical Interface
Our force gauge product has a 6 pin connector on board intended for a BSL programmer. This has the following signals present - wired to pins on the IC:
TX
RX
TEST
RESET
0V
VCC
A combination of signals on the test and reset pins puts the device into bootloader mode. The data is then sent by the PC and received by the Rx pin and acknowledged by the Tx pin.
The Spec Document
The bootloader is fairly well specified in TI's document SLAU319 - and for anyone wishing to understand the bootloader, this should be the starting place.
When the MSP430 was first designed, the engineers made available a small bootloader program, residing in protected ROM, which allowed serial communication directly to a PC via a couple of pins. The BSL interface also allows you to read the contents of the Flash, erase it, verify and a range of other commands - some protected by a password mechanism - so as to avoid illegal copying of protected IP.
Towards the middle of the SLAU319 document, a circuit for a programming interface is provided:
This circuit dates from the early 2000's - when all PCs and laptops came with 9 pin serial COM ports.
In essence, there are three, level shifted outputs from the COM port to the target device, and one level shifted input back to the PC. Modern RS232 generally puts out +/-6V - and we need 0-3V TTL levels for the MSP430. The circuit is powered by harvesting spare energy from the output lines through diodes and pumping up a capacitor. The raw supply feeds the TL062 op-amp and is then regulated to 3V to provide a stable supply for the 74AHC14 Schmitt inverters.
This really is a very simple circuit - but sadly off-putting because it uses about 25 components and uses the now obsolete 9 way D-type and COM port.
What is really needed is a modern equivalent that works with USB and modern software drivers.
USB Implementation.
There are several low cost USB to serial converter chips to choose from, including FTDI, CP2102 (SiLabs) and the newer Chinese CH340G. All of them have the potential to work in this circuit.
I covered the CH340G in a recent post and the datasheet is here. The CH340 is low cost and easy to use. I have subsequently used the CH340G on some of my other projects.
For my experimentation, however, I used a SiLabs CP2102 device mounted on a small pcb - solely because I had it lying about. It breaks out all of the common RS232 signals - including RTS and DTR which we need. These modular devices are available from ebay for a couple of dollars - and a variety to choose from.
CP2102 module by Baite Electronics |
So to make this work we need to access Tx, Rx, RTS and DTR. RTS and DTR are often available on the 4 way headers down the side of the module.
The module also conveniently supplies a 3V3 supply from an internal voltage regulator (see datasheet) - this can supply a maximum of 100mA - more than enough for powering most MSP430 dev-boards.
Programming Application Software
I tried a couple of programming applications, with very little success - until I stumbled MSPFET - from a Russian gentleman Kurt. This did exactly what was needed - allowing a hex file to be loaded into the MSP430.
Programming the MSP430 really is that cheap and easy - using free software and a USB to serial module costing under $2 - finding out how to do it - from the information spread over the web it - was so very much harder.
Common Myths - Busted
You don't need a $300 JTAG Programmer. In desperation I found a FET-Pro 430 reduced to $50 on ebay.
You don't need an $11 Olimex MSP-BSP "Rocket" Programmer. I bought two of these from Mouser - I am still trying to find the correct software to make them work.
In conclusion
The BSL feature that comes with almost all MSP430 devices is great at doing what it was intended for - a very simple means of getting your hex file into the MSP430's flash.
The resources needed to make this work are trivial, and it could make a great addition to any application that needs the ability to modify the flash memory.
Unfortunately, the documentation has been obfuscated and made more compex than needs-be by JTAG and SpyByWire (for debugging) - and so few people are aware what a simple facility BSL is to use. The hardware needed in the form of a USB - Serial converter should be part of every hobbyist's or Engineer's toolkit.
The resources needed to make this work are trivial, and it could make a great addition to any application that needs the ability to modify the flash memory.
The protocol is simple, as is the 2 signal start-up sequence - and at a pinch, if you didn't have a serial converter that supports DTR (eg FTDI cable) you could hack an Arduino or Launchpad to generate the start-up sequence. You could even make a standalone programmer for repeat programming of boards out in the field using a Launchpad.
Energia has made the MSP430 more accessible - providing an Arduino like development environment. However, it is still nice to know how the simple low-level bootloader scheme works.
Update
I have written a follow-up to this post:
The Great MSP430 Bootloader Swindle - Part 2
This looks at the hardware and PC applications needed to make the simple BSL work.
I have also implemented the CH340G bootloader circuit on my latest MSP430 board. Below, on the left is the CH340G, its accompanying 12MHz crystal and a couple of 22pF capacitors. That's almost all you need for a bootloading interface!
ChipStick - an 11mm x 40mm MSP430FR2433 Dev Board |