TI’s Stellaris Launchpad board is another very low cost ARM Cortex-M development board. It is based on the LM4F120 (now renamed and rebranded as the TM4C1233 – that’s a story unto itself), a Cortex-M4F processor with 256 KiB of flash, 32 KiB of RAM, and loads of serial i/o, timers, 12 bit ADCs, etc.

Stellaris Launchpad board

These are very cheap – as of August 2013 they are USD10 directly from TI, as they are getting rid of these “old” boards in favour of the new Tiva Launchpad.

These seem like nice boards. After my inital excitement about the board – good price point, nice chip (esp the timers) – I decided to ignore it when TI relaunched the parts as “Tiva C-series” parts, changed all of the part numbers, and apparently alienated some of their customers. (I read some grumbling on the forums.)

This is one reason I respect Freescale as a source for microcontrollers: They have a very transparent product longevity program. Most of their processors are supported for ten years after inital launch. Medical and automotive products are supported for fifteen years. It’s unlikely they would pull a stunt like TI’s, of launching a product line, and then a few months later completely pulling everything and starting over.

That snafu notwithstanding, the chips are pretty sweet, the board is small and cheap, and it’s easy to use. After some digging online I was able to figure out that TI’s so-called ICDI – in-circuit debug interface – is simply an implementation over USB bulk endpoints of the GNU GDB remote protocol! And thus is extensively documented. After reading the GDB docs, and tweaking the USB support in muforth, I was able to connect and exchange packets with the board.

One curious discovery: the “M” (write memory) command doesn’t work! Instead of doing what it is supposed to do, it does the following:

I thought about various work-arounds, but instead gave up and used the “X” command instead – which does exactly the same thing but uses a slightly more efficient binary (rather than hex-in-ASCII) format for the data.

I was rather surprised to discover that such a fundamental part of the GDB protocol is broken on this board! It’s a bit embarrassing.