FET protocol
This page documents some aspects of the newer FET protocol (>= 20300000) which are not well understood.
Disassembling the FET firmware
A symbol table containing some symbols for FET firmware version 20401004 is available here. Unfortunately, the firmware itself is not freely distributable. You may be able to extract it from Texas Instruments software, or from the FET itself.
The USB FET contains an MSP430F1612. The firmware for a FET device can be extracted using MSPDebug:
mspdebug uif-bsl -d /dev/ttyUSBx "hexout 0x2500 0xdb00 fet-firmware.hex"
After extraction, the firmware can be inspected and disassembled without hardware using MSPDebug’s simulation mode. Use sym import
to import a symbol table (type help sym
for more information on editing, manipulating and exporting symbol tables):
dlbeer@soma:~/work/mspdebug.git$ ./mspdebug sim
MSPDebug version 0.8 - debugging tool for MSP430 MCUs
Copyright (C) 2009, 2010 Daniel Beer <daniel@tortek.co.nz>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Simulation started, 0x10000 bytes of RAM
Available commands:
= erase hexout mw read run sym
cgraph gdb isearch opt regs set
dis help md prog reset step
Available options:
color
Type "help <topic>" for more information.
Press Ctrl+D to quit.
(mspdebug) prog ../fet-fw/20401004.hex
Erasing...
Writing 128 bytes to 2500...
Writing 128 bytes to 2580...
Writing 128 bytes to 2600...
... snip ...
Writing 80 bytes to fd60...
Writing 32 bytes to ffe0...
(mspdebug) sym import ../fet-fw/20401004.map
A command which may be useful for disassembly is cgraph
, used to find callers and callees of a function. For example:
(mspdebug) cgraph 0x2500 0xdb00 write_reply_data
0xd7a0 write_reply_data:
Callees:
set_reply_char
Callers:
send_reply
fet_reset.continue
Another useful command is isearch
. One application of this command is to identify the places where data is manipulated or referenced:
(mspdebug) isearch 0x2500 0xdb00 dst tick_counter
start_wdt_timer+0x4:
5b52: 82 43 8e 13 CLR &tick_counter
wdt_irq_handler+0x2:
5b74: 92 53 8e 13 INC &tick_counter
wdt_irq_handler+0x6:
5b78: b2 90 2c 00 8e 13 CMP #0x2c, &tick_counter
wdt_irq_handler+0x1c:
5b8e: b2 90 2d 00 8e 13 CMP #0x2d, &tick_counter
Message 0x28
This message is sent with no arguments or payload. The FET returns a payload containing a structure which can be used to identify the chip under test. Little is known about the format of this message, except that the first two bytes are the Chip ID quoted in the device datasheet. This alone can not be used to identify the chip, however.
Message 0x29
This message is sent to the firmware and contains parameters specific to the debugged chip. Here’s what’s known so far about the format of this message’s payload:
Offset | Length | Description |
---|---|---|
0x00 | 2 | Start of code mem |
0x02 | 4 | End of code mem |
0x06 | 2 | Start of info mem |
0x08 | 2 | End of info mem |
0x0a | 2 | Info mem segment size? |
0x0c | 2 | Start of RAM |
0x0e | 2 | End of RAM |
0x10 | 2 | Start of RAM2 |
0x12 | 2 | End of RAM2 |
0x14 | 2 | Number of breakpoints |
0x16 | 2 | Emulation level |
0x18 | 2 | Clock control level |
0x1a | 2 | MCLK_CONTROL param (?) |
0x1c | 2 | Start of LCD |
0x1e | 2 | End of LCD |
0x20 | 2 | VCC min (mV) |
0x22 | 2 | VCC max (mV) |
0x24 | 2 | |
0x26 | 2 | |
0x28 | 2 | |
0x2a | 2 | Has TEST/VPP |
0x2c | 2 | Not used in 20401004 |
0x2e | 2 | |
0x30 | 2 | |
0x32 | 2 | |
0x34 | 2 | |
0x36 | 2 | |
0x38 | 2 | Used by firmware timer IRQ |
0x3a | 2 | |
0x3c | 2 | |
0x3e | 2 | |
0x40 | 2 | |
0x42 | 2 | |
0x44 | 6 | Some kind of byte array |
There are three numeric arguments to this message, which appear to be bytes, and are chip specific.
Message 0x2b
This message is sent to the firmware and contains parameters specific to the debugged chip. It is not implemented by all versions of the firmware.
The payload format is as follows:
Offset | Length | Description |
---|---|---|
0x00 | 2 | Start of boot mem |
0x02 | 2 | End of boot mem |
0x04 | 2 | |
0x06 | 2 | |
0x08 | 2 | |
0x0a | 2 | |
0x0c | 0x3e | Some kind of byte array |
No numeric arguments are sent with this message.