Development Manual


The GoodFET is programmed by the MSP430's BootStrap Loader (BSL) which is adequately documented elsewhere. Using the GoodFET's fork of the TinyOS BSL client, an image may be programmed by

goodfet.bsl -e -p foo.hex

Serial Port

To minimize parts count, the DTR line, which is connected to the !RST pin of the MSP430, is not inverted by hardware. The DTR line--Data Terminal Ready--is usually high when a terminal application is connected, low when one is not. Unless this behavior is overridden, the GoodFET will run until a client connects, then idle in a reset until the client disconnects.

Standard Protocol

Most of the GoodFET applications will use this standard protocol, which has been composed so as to allow multiple applications to be compiled together.

The baud rate is 115200 8/N/1 by default, but this may be made faster by sending the appropriate command.


The workstation may send {u8 app, u8 verb, u16 count}. If count is non-zero, then count bytes of data follow. The target will reply with {u8 app, u8 verb, u16 count} and data. N.B., count was u8 until October 5, 2009.

The GoodFET will announce that it is ready for a command by transmitting {0x00, 0x7F, 0x00, 0x00}, which is the "OK" message from the Monitor application.


The following table lists many application reservation codes.

0x00MONITORLocal Memory MonitorBeta
0x01SPISPI AdapterBeta
0x02I2CI2C AdapterPre-Alpha
0x10JTAGStandard JTAGBeta
0x11JTAG430X2MSP430 JTAGAlpha
0x13JTAGARM7TDMIIntel XScale JTAGPre-Alpha
0x15JTAGXScaleIntel XScale JTAGPre-Alpha
0x16JTAG430MSP430 JTAG (Classic Only)Beta
0x17JTAG430MSP430 SBW (Classic Only)Pre-Alpha
0x30ChipconChipcon 8051Pre-Alpha
0x31SIFCambridge SIF (EM2xx) Debugging
0x32AVRAtmel AVR
0x50NRFNordic RF SPI
0x51ChipconSPIChipcon SPI
0x52ChipconCC2500Chipcon CC2500
0x53ATMEL_RADIOAtmega128rfa1 Radio
0x73SMARTCARDSmartcards and SIM Cards

Standard Verbs

The following verbs are standardized across all applications. An application need not support all (or any) of them, but it must not use these codes for anything else. All application-specific commands ought to have the most significant bit set; that is, they must be >=0x80.

0x00READRead data.
0x01WRITEWrite data.
0x02PEEKRead from address.
0x03POKEWrite to address.
0x10SETUPConfigure I/O pins.
0x20STARTStart a transaction.
0x21STOPStop a transaction.
0x30CALLCall Address
0x31EXECExecute Arbitrary Code Fragment
0x7ENOKNo Operation
0x7FOKNo Operation