New chip identification database for Olimex debuggers.

The devicelist table maps chip ID bytes to an enum of devicetype_t. A
separate table provides configuration data for each value of
devicetype_t.

Original patch submitted by Stanimir Bonev <bonev_st@abv.bg>.
This commit is contained in:
Daniel Beer 2012-10-03 13:37:29 +13:00
parent c5e93345a0
commit 1973746d33
8 changed files with 8941 additions and 4 deletions

View File

@ -69,3 +69,8 @@ Tamas Tevesz <ice@extreme.hu>:
Ingo van Lil <inguin@gmx.de>: Ingo van Lil <inguin@gmx.de>:
* Support for demangling of C++ function names. * Support for demangling of C++ function names.
* load_raw, verify_raw and save_raw commands. * load_raw, verify_raw and save_raw commands.
Stanimir Bonev <bonev_st@abv.bg>:
* Olimex chip database.
* Improved identification/configuration system for Olimex
debuggers.

View File

@ -133,6 +133,8 @@ OBJ=\
drivers/tilib.o \ drivers/tilib.o \
drivers/goodfet.o \ drivers/goodfet.o \
drivers/obl.o \ drivers/obl.o \
drivers/devicelist.o \
drivers/fet_olimex_db.o \
formats/binfile.o \ formats/binfile.o \
formats/coff.o \ formats/coff.o \
formats/elf32.o \ formats/elf32.o \

318
drivers/devicelist.c Normal file
View File

@ -0,0 +1,318 @@
/* MSPDebug - debugging tool for MSP430 MCUs
* Copyright (C) 2009-2012 Daniel Beer
* Copyright (C) 2012 Stanimir Bonev
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "devicelist.h"
const struct device_table sdeviceID[289] =
{
/* Fuse parameter is set without lock bit
* 0x0 0x1 0x2 0x3 0x8 0x9 0xD Fuse Fuse DeviceTypeID Device String
* ID0 ID1 Rev Fab Self0 Self1 Confg Pattern
*/
{{ 0 , 0 , - 1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_UNKNOWN_DEVICE, "Device_unknown"},
{{0xf1, 0x12, 0x00, 0x43, 0x00, 0x08, -1 , -1 , -1 }, DT_MSP430F11x1, "Prototype_MSP430F11x1"},
{{0xf1, 0x12, 0x10, 0x40, 0x00, 0x00, -1 , -1 , -1 }, DT_MSP430F11x1D, "MSP430F11x1"},
{{0xf1, 0x49, -1 , -1 , -1 , -1 , -1 , 0x05 , 0x0f }, DT_MSP430F133, "MSP430F133"},
{{0xf1, 0x49, -1 , -1 , -1 , -1 , -1 , 0x04 , 0x0f }, DT_MSP430F135, "MSP430F135"},
{{0xf1, 0x49, -1 , -1 , -1 , -1 , -1 , 0x02 , 0x0f }, DT_MSP430F147, "MSP430F147"},
{{0xf1, 0x49, -1 , -1 , -1 , -1 , -1 , 0x01 , 0x0f }, DT_MSP430F148, "MSP430F148"},
{{0xf1, 0x49, -1 , -1 , -1 , -1 , -1 , 0x00 , 0x0f }, DT_MSP430F149, "MSP430F149"},
{{0xf4, 0x03, 0x00, 0x40, -1 , -1 , -1 , -1 , -1 }, DT_MSP430F413P, "Preliminary_MSP430F413"},
{{0xf4, 0x13, 0x02, 0x40, -1 , -1 , -1 , -1 , -1 }, DT_MSP430F41xC, "MSP430F41x"},
{{0xf1, 0x12, 0x13, -1, 0x00, 0x00, -1 , -1 , -1 }, DT_MSP430F11x1A, "MSP430F11x1A"},
{{0xf1, 0x23, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F12x, "MSP430F12x"},
{{0xf4, 0x37, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F43x, "MSP430F43x"}, //- 80 Pin
{{0xf4, 0x49, -1 , -1 , -1 , -1 , -1 , 0x02 , 0x0f }, DT_MSP430F43x, "MSP430F43x"}, //- 100 Pin
{{0xf4, 0x49, -1 , -1 , -1 , -1 ,0x00 , 0x00 , 0x0f }, DT_MSP430F44x, "MSP430F44x"},
{{0x12, 0x32, 0x00, 0x40, -1 , -1 , -1 , -1 , -1 }, DT_MSP430F12x2, "Preliminary_MSP430F12x2"},
{{0x11, 0x32, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F11x2, "MSP430F11x2"},
{{0x12, 0x32, 0x10, 0x40, -1 , -1 , -1 , -1 , -1 }, DT_MSP430F12x2C, "MSP430F12x2/F11x2"},
{{0xf1, 0x69, 0x00, 0x40, -1 , -1 , -1 , -1 , -1 }, DT_PMS430F16x, "Preliminary_MSP430F16x"}, //DT_PMS430F169},
{{0xf4, 0x27, 0x00, -1 , -1 , -1 , 'E' , 0x02 , 0x1f }, DT_MSP430FE423, "MSP430FE423_P"},
{{0xf4, 0x27, 0x00, -1 , -1 , -1 , 'E' , 0x01 , 0x1f }, DT_MSP430FE425, "MSP430FE425_P"},
{{0xf4, 0x27, 0x00, -1 , -1 , -1 , 'E' , 0x00 , 0x1f }, DT_MSP430FE427, "MSP430FE427_P"},
{{0xf4, 0x27, 0x10, -1 , -1 , -1 , 'E' , 0x02 , 0x1f }, DT_MSP430FE423, "MSP430FE423_N"},
{{0xf4, 0x27, 0x10, -1 , -1 , -1 , 'E' , 0x01 , 0x1f }, DT_MSP430FE425, "MSP430FE425_N"},
{{0xf4, 0x27, 0x10, -1 , -1 , -1 , 'E' , 0x00 , 0x1f }, DT_MSP430FE427, "MSP430FE427_N"},
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'E' , 0x02 , 0x1f }, DT_MSP430FE423, "MSP430FE423"}, // 4nd revision
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'E' , 0x01 , 0x1f }, DT_MSP430FE425, "MSP430FE425"},
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'E' , 0x00 , 0x1f }, DT_MSP430FE427, "MSP430FE427"},
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'E' , 0x06 , 0x1f }, DT_MSP430F423, "MSP430F423"}, //F42x based on FE42x
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'E' , 0x05 , 0x1f }, DT_MSP430F425, "MSP430F425"},
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'E' , 0x04 , 0x1f }, DT_MSP430F427, "MSP430F427"},
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'W' , -1 , -1 }, DT_MSP430FW42x, "MSP430FW42x/F41x"}, // FW42x and F41x based on FW42x
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'G' , 0x06 , 0x07 }, DT_MSP430F4230, "MSP430F4230"}, //F42x0
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'G' , 0x05 , 0x07 }, DT_MSP430F4250, "MSP430F4250"},
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'G' , 0x04 , 0x07 }, DT_MSP430F42x0, "MSP430F42x0"},
{{0xf1, 0x69, -1 , -1 , -1 , -1 , -1 , 0x06 , 0x0f }, DT_MSP430F155, "MSP430F155"},
{{0xf1, 0x69, -1 , -1 , -1 , -1 , -1 , 0x05 , 0x0f }, DT_MSP430F156, "MSP430F156"},
{{0xf1, 0x69, -1 , -1 , -1 , -1 , -1 , 0x04 , 0x0f }, DT_MSP430F157, "MSP430F157"},
{{0xf1, 0x69, -1 , -1 , -1 , -1 , -1 , 0x02 , 0x0f }, DT_MSP430F167, "MSP430F167"},
{{0xf1, 0x69, -1 , -1 , -1 , -1 , -1 , 0x01 , 0x0f }, DT_MSP430F168, "MSP430F168"},
{{0xf1, 0x69, -1 , -1 , -1 , -1 , -1 , 0x00 , 0x0f }, DT_MSP430F169, "MSP430F169"},
{{0xf1, 0x6C, -1 , -1 , -1 , -1 , -1 , 0x03 , 0x07 }, DT_MSP430F1610, "MSP430F1610"},
{{0xf1, 0x6C, -1 , -1 , -1 , -1 , -1 , 0x00 , 0x07 }, DT_MSP430F1611, "MSP430F1611"},
{{0xf1, 0x6C, -1 , -1 , -1 , -1 , -1 , 0x06 , 0x07 }, DT_MSP430F1612, "MSP430F1612"},
{{0xf1, 0x6C, -1 , -1 , -1 , -1 , -1 , 0x07 , 0x07 }, DT_MSP430F169, "MSP430F169"}, //MSP430F169 based on F1611
{{0xf4, 0x39, -1 , -1 , -1 , -1 , 'G' , -1 , -1 }, DT_MSP430FG43x, "MSP430FG43x_F43x"}, //DT_MSP430FG439/ F43x
{{0xf4, 0x6F, -1 , -1 , -1 , -1 , 'G' , 0x00 , 0x03 }, DT_MSP430FG4619, "MSP430FG4619"}, //DT_MSP430FG4619
{{0xf2, 0x13, -1 , -1 , -1 , -1 , 0x01, -1 , -1 }, DT_MSP430F21x1, "MSP430F21x1"}, //MSP430F21x1 devices
{{0xaf, 0x13, 0x90, -1 , -1 , -1 , -1 , -1 , -1 }, DT_TMS430F1390, "TMS430FCAS001"}, //Automotive Device
{{0xaf, 0x12, 0x50, -1 , -1 , -1 , -1 , -1 , -1 }, DT_TMS430F1250, "TMS430FCAS003"}, //Automotive Device
{{0xA0, 0x54, 0x49, -1 , -1 , -1 , -1 , -1 , -1 }, DT_TMS430C1250, "TMS430ROMSHUTTLE"}, //Automotive Device
{{0xAE, 0x10, 0x00, -1 , -1 , -1 , -1 , -1 , -1 }, DT_TMS430EMU, "TMS430EMU"}, //Automotive Device
{{0xF2, 0x01, -1, -1 , -1 , -1 , 0x03, -1 , -1 }, DT_MSP430F20x3, "MSP430F20x3"}, // MSP430F20x3
{{0xF2, 0x01, -1, -1 , -1 , -1 , 0x02, -1 , -1 }, DT_MSP430F20x2, "F20x2_G2x2x_G2x3x"},// MSP430F20x2
{{0xF2, 0x01, -1, -1 , -1 , -1 , 0x01, -1 , -1 }, DT_MSP430F20x1, "F20x1_G2x0x_G2x1x"}, // MSP430F20x1
{{0xF2, 0x27, -1, -1 , -1 , -1 , -1 , 0x02 , 0x07 }, DT_MSP430F2234, "MSP430F2234"}, // MSP430F2234
{{0xF2, 0x27, -1, -1 , -1 , -1 , -1 , 0x01 , 0x07 }, DT_MSP430F2254, "MSP430F2254"}, // MSP430F2254
{{0xF2, 0x27, -1, -1 , -1 , -1 , -1 , 0x00 , 0x07 }, DT_MSP430F2274, "MSP430F2274"}, // MSP430F2274
{{0xf4, 0x6F, -1 , -1 , -1 , -1 , 'G' , 0x01 , 0x03 }, DT_MSP430FG4618, "MSP430FG4618"}, //DT_MSP430FG4618
{{0xf2, 0x37, -1 , -1 , -1 , -1 , -1 , 0x02 , 0x03 }, DT_MSP430F2330, "MSP430F2330"}, //MSP430F2330
{{0xf2, 0x37, -1 , -1 , -1 , -1 , -1 , 0x01 , 0x03 }, DT_MSP430F2350, "MSP430F2350"}, //MSP430F2350
{{0xf2, 0x37, -1 , -1 , -1 , -1 , -1 , 0x00 , 0x03 }, DT_MSP430F2370, "MSP430F2370"}, //MSP430F2370
{{0xF2, 0x27, -1, -1 , -1 , -1 , -1 , 0x06 , 0x07 }, DT_MSP430F2232, "MSP430F2232"}, // MSP430F2232
{{0xF2, 0x27, -1, -1 , -1 , -1 , -1 , 0x05 , 0x07 }, DT_MSP430F2252, "MSP430F2252"}, // MSP430F2252
{{0xF2, 0x27, -1, -1 , -1 , -1 , -1 , 0x04 , 0x07 }, DT_MSP430F2272, "MSP430F2272"}, // MSP430F2272
{{0xF2, 0x6F, -1 , -1 , -1 , -1 , -1 , 0x00 , 0x07 }, DT_MSP430F2619, "MSP430F2619"}, // MSP430F2619
{{0xF2, 0x6F, -1 , -1 , -1 , -1 , -1 , 0x01 , 0x07 }, DT_MSP430F2618, "MSP430F2618"}, // MSP430F2618
{{0xF2, 0x6F, -1 , -1 , -1 , -1 , -1 , 0x04 , 0x07 }, DT_MSP430F2419, "MSP430F2419"}, // MSP430F2419
{{0xF2, 0x6F, -1 , -1 , -1 , -1 , -1 , 0x05 , 0x07 }, DT_MSP430F2418, "MSP430F2418"}, // MSP430F2418
{{0x42, 0x7A, -1 , -1 , -1 , -1 , 'E' , 0x02 , 0x1f }, DT_MSP430FE423A, "MSP430FE423A"}, // 4nd revision
{{0x42, 0x7A, -1 , -1 , -1 , -1 , 'E' , 0x01 , 0x1f }, DT_MSP430FE425A, "MSP430FE425A"},
{{0x42, 0x7A, -1 , -1 , -1 , -1 , 'E' , 0x00 , 0x1f }, DT_MSP430FE427A, "MSP430FE427A"},
{{0x42, 0x7A, -1 , -1 , -1 , -1 , 'E' , 0x06 , 0x1f }, DT_MSP430F423A, "MSP430F423A"}, //F42x based on FE42x
{{0x42, 0x7A, -1 , -1 , -1 , -1 , 'E' , 0x05 , 0x1f }, DT_MSP430F425A, "MSP430F425A"},
{{0x42, 0x7A, -1 , -1 , -1 , -1 , 'E' , 0x04 , 0x1f }, DT_MSP430F427A, "MSP430F427A"},
{{0xf4, 0x49, -1 , -1 , -1 , -1 , 0x02, 0x07 , 0x07 }, DT_MSP430F4783, "MSP430F4783"}, //DT_MSP430F4783
{{0xf4, 0x49, -1 , -1 , -1 , -1 , 0x02, 0x03 , 0x07 }, DT_MSP430F4784, "MSP430F4784"}, //DT_MSP430F4784
{{0xf4, 0x49, -1 , -1 , -1 , -1 , 0x02, 0x04 , 0x07 }, DT_MSP430F4793, "MSP430F4793"}, //DT_MSP430F4793
{{0xf4, 0x49, -1 , -1 , -1 , -1 , 0x02, 0x00 , 0x07 }, DT_MSP430F4794, "MSP430F4794"}, //DT_MSP430F4794
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x00 , 0x0F }, DT_MSP430F249, "MSP430F249"}, // MSP430F249
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x01 , 0x0F }, DT_MSP430F248, "MSP430F248"}, // MSP430F248
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x02 , 0x0F }, DT_MSP430F247, "MSP430F247"}, // MSP430F247
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x03 , 0x0F }, DT_MSP430F235, "MSP430F235"}, // MSP430F235
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x04 , 0x0F }, DT_MSP430F2491, "MSP430F2491"}, // MSP430F2491
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x05 , 0x0F }, DT_MSP430F2481, "MSP430F2481"}, // MSP430F2481
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x06 , 0x0F }, DT_MSP430F2471, "MSP430F2471"}, // MSP430F2471
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x07 , 0x0F }, DT_MSP430F233, "MSP430F233"}, // MSP430F233
{{0xF2, 0x49, -1 , -1 , -1 , -1 , -1 , 0x08 , 0x0F }, DT_MSP430F2410, "MSP430F2410"}, // MSP430F2410
{{0xF2, 0x13, -1 , -1 , -1 , -1 , 0x02, 0x00 , 0x03 }, DT_MSP430F2132, "MSP430F2132"}, // MSP430F2132
{{0xF2, 0x13, -1 , -1 , -1 , -1 , 0x02, 0x01 , 0x03 }, DT_MSP430F2122, "MSP430F2122"}, // MSP430F2122
{{0xF2, 0x13, -1 , -1 , -1 , -1 , 0x02, 0x02 , 0x03 }, DT_MSP430F2112, "MSP430F2112"}, // MSP430F2112
{{0x54, 0x38,0x01 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_XMS430F5438, "XMS430F5438"}, // XMS430F5438
{{0x54, 0x38, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5438, "MSP430F5438"}, // MSP430F5438
{{0x54, 0x36, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5436, "MSP430F5436"}, // MSP430F5436
{{0x54, 0x19, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5419, "MSP430F5419"}, // MSP430F5419
{{0x42, 0x52, -1 , -1 , -1 , -1 , 'E' , 0x12 , 0x1f }, DT_MSP430FE4232, "MSP430FE4232"}, // MSP430FE4232
{{0x42, 0x52, -1 , -1 , -1 , -1 , 'E' , 0x11 , 0x1f }, DT_MSP430FE42x2, "MSP430FE42x2"}, // MSP430FE42x2 (MSP430FE4242 and MSP430FE4252)
{{0x54, 0x37, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5437, "MSP430F5437"}, // MSP430F5437
{{0x54, 0x35, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5435, "MSP430F5435"}, // MSP430F5435
{{0x54, 0x18, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5418, "MSP430F5418"}, // MSP430F5418
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'G' , 0x01 , 0x07 }, DT_MSP430FG4250, "MSP430FG4250"}, // MSP430FG4250
{{0xf4, 0x27, -1 , -1 , -1 , -1 , 'G' , 0x00 , 0x07 }, DT_MSP430FG42x0, "MSP430FG42x0"}, // MSP430FG42x0
{{0x42, 0x52, -1 , -1 , -1 , -1 , 'E' , 0x10 , 0x1f }, DT_MSP430FE4272, "MSP430FE4272"}, // MSP430FE4272
{{0xF4, 0x79, -1 , -1 , -1 , -1 , 'G' , 0x02 , 0x07 }, DT_MSP430FG477, "MSP430FG477"}, // MSP430FG477
{{0xF4, 0x79, -1 , -1 , -1 , -1 , 'G' , 0x01 , 0x07 }, DT_MSP430FG478, "MSP430FG478"}, // MSP430FG478
{{0xF4, 0x79, -1 , -1 , -1 , -1 , 'G' , 0x00 , 0x07 }, DT_MSP430FG479, "MSP430FG479"}, // MSP430FG479
{{0xF4, 0x79, -1 , -1 , -1 , -1 , 'G' , 0x06 , 0x07 }, DT_MSP430F477, "MSP430F477"}, // MSP430F477
{{0xF4, 0x79, -1 , -1 , -1 , -1 , 'G' , 0x05 , 0x07 }, DT_MSP430F478, "MSP430F478"}, // MSP430F478
{{0xF4, 0x79, -1 , -1 , -1 , -1 , 'G' , 0x04 , 0x07 }, DT_MSP430F479, "MSP430F479"}, // MSP430F479
{{0xf4, 0x7f, -1 , -1 , -1 , -1 , -1 , 0x00 , 0x0F }, DT_MSP430F47197, "MSP430F47197"}, // MSP430F47197
{{0xf4, 0x7f, -1 , -1 , -1 , -1 , -1 , 0x01 , 0x0F }, DT_MSP430F47187, "MSP430F47187"}, // MSP430F47187
{{0xf4, 0x7f, -1 , -1 , -1 , -1 , -1 , 0x02 , 0x0F }, DT_MSP430F47177, "MSP430F47177"}, // MSP430F47177
{{0xf4, 0x7f, -1 , -1 , -1 , -1 , -1 , 0x03 , 0x0F }, DT_MSP430F47167, "MSP430F47167"}, // MSP430F47167
{{0xf4, 0x7f, -1 , -1 , -1 , -1 , -1 , 0x04 , 0x0F }, DT_MSP430F47196, "MSP430F47196"}, // MSP430F47196
{{0xf4, 0x7f, -1 , -1 , -1 , -1 , -1 , 0x05 , 0x0F }, DT_MSP430F47186, "MSP430F47186"}, // MSP430F47186
{{0xf4, 0x7f, -1 , -1 , -1 , -1 , -1 , 0x06 , 0x0F }, DT_MSP430F47176, "MSP430F47176"}, // MSP430F47176
{{0xf4, 0x7f, -1 , -1 , -1 , -1 , -1 , 0x07 , 0x0F }, DT_MSP430F47166, "MSP430F47166"}, // MSP430F47166
{{0x41, 0x52, -1 , -1 , -1 , -1 , -1 , 0x00 , 0x01 }, DT_MSP430F4152, "MSP430F4152"}, // MSP430F4152
{{0x41, 0x52, -1 , -1 , -1 , -1 , -1 , 0x01 , 0x01 }, DT_MSP430F4132, "MSP430F4132"}, // MSP430F4132
{{0x61, 0x37, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F6137, "CC430F6137"}, // CC430F6137
{{0x61, 0x35, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F6135, "CC430F6135"}, // CC430F6135
{{0x61, 0x27, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F6127, "CC430F6127"}, // CC430F6127
{{0x61, 0x26, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F6126, "CC430F6126"}, // CC430F6126
{{0x61, 0x25, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F6125, "CC430F6125"}, // CC430F6125
{{0x51, 0x37, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F5137, "CC430F5137"}, // CC430F5137
{{0x51, 0x35, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F5135, "CC430F5135"}, // CC430F5135
{{0x51, 0x33, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F5133, "CC430F5133"}, // CC430F5133
{{0x55, 0x13, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5513, "MSP430F5513"}, // MSP430F5513
{{0x55, 0x14, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5514, "MSP430F5514"}, // MSP430F5514
{{0x55, 0x15, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5515, "MSP430F5515"}, // MSP430F5515
{{0x55, 0x17, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5517, "MSP430F5517"}, // MSP430F5517
{{0x55, 0x19, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5519, "MSP430F5519"}, // MSP430F5519
{{0x55, 0x21, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5521, "MSP430F5521"}, // MSP430F5521
{{0x55, 0x22, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5522, "MSP430F5522"}, // MSP430F5522
{{0x55, 0x24, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5524, "MSP430F5524"}, // MSP430F5524
{{0x55, 0x25, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5525, "MSP430F5525"}, // MSP430F5525
{{0x55, 0x26, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5526, "MSP430F5526"}, // MSP430F5526
{{0x55, 0x27, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5527, "MSP430F5527"}, // MSP430F5527
{{0x55, 0x28, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5528, "MSP430F5528"}, // MSP430F5528
{{0x55, 0x29, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5529, "MSP430F5529"}, // MSP430F5529
{{0x05, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5438A, "MSP430F5438A"}, // MSP430F5438A
{{0x03, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5436A, "MSP430F5436A"}, // MSP430F5436A
{{0x01, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5419A, "MSP430F5419A"}, // MSP430F5419A
{{0x04, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5437A, "MSP430F5437A"}, // MSP430F5437A
{{0x02, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5435A, "MSP430F5435A"}, // MSP430F5435A
{{0x00, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5418A, "MSP430F5418A"}, // MSP430F5418A
{{0x31, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5510, "MSP430F5510"}, // MSP430F5510
{{0x26, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5131, "MSP430F5131"}, // MSP430F5131
{{0x28, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5132, "MSP430F5132"}, // MSP430F5132
{{0x2A, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5151, "MSP430F5151"}, // MSP430F5151
{{0x2C, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5152, "MSP430F5152"}, // MSP430F5152
{{0x2E, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5171, "MSP430F5171"}, // MSP430F5171
{{0x30, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5172, "MSP430F5172"}, // MSP430F5172
{{0x3C, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5630, "MSP430F5630"}, // MSP430F5630
{{0x3E, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5631, "MSP430F5631"}, // MSP430F5631
{{0x40, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5632, "MSP430F5632"}, // MSP430F5632
{{0x42, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5633, "MSP430F5633"}, // MSP430F5633
{{0x44, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5634, "MSP430F5634"}, // MSP430F5634
{{0x0E, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5635, "MSP430F5635"}, // MSP430F5635
{{0x10, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5636, "MSP430F5636"}, // MSP430F5636
{{0x12, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5637, "MSP430F5637"}, // MSP430F5637
{{0x14, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5638, "MSP430F5638"}, // MSP430F5638
{{0x46, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6630, "MSP430F6630"}, // MSP430F6630
{{0x48, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6631, "MSP430F6631"}, // MSP430F6631
{{0x4A, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6632, "MSP430F6632"}, // MSP430F6632
{{0x4C, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6633, "MSP430F6633"}, // MSP430F6633
{{0x4E, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6634, "MSP430F6634"}, // MSP430F6634
{{0x16, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6635, "MSP430F6635"}, // MSP430F6635
{{0x18, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6636, "MSP430F6636"}, // MSP430F6636
{{0x1A, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6637, "MSP430F6637"}, // MSP430F6637
{{0x1C, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6638, "MSP430F6638"}, // MSP430F6638
{{0x03, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5739, "MSP430FR5739"}, // MSP430FR5739
{{0x92, 0xC0, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430L092 , "MSP430L092" }, // MSP430L092
{{0x54, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6700, "MSP430F6700"}, // MSP430F6700
{{0x55, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6701, "MSP430F6701"}, // MSP430F6701
{{0x56, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6702, "MSP430F6702"}, // MSP430F6702
{{0x57, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6703, "MSP430F6703"}, // MSP430F6703
{{0x58, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6720, "MSP430F6720"}, // MSP430F6720
{{0x59, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6721, "MSP430F6721"}, // MSP430F6721
{{0x60, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6722, "MSP430F6722"}, // MSP430F6722
{{0x61, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6723, "MSP430F6723"}, // MSP430F6723
{{0x62, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6730, "MSP430F6730"}, // MSP430F6730
{{0x63, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6731, "MSP430F6731"}, // MSP430F6731
{{0x64, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6732, "MSP430F6732"}, // MSP430F6732
{{0x65, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6733, "MSP430F6733"}, // MSP430F6733
{{0x3A, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5509, "MSP430F5509"}, // MSP430F5509
{{0x39, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5508, "MSP430F5508"}, // MSP430F5508
{{0x38, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5507, "MSP430F5507"}, // MSP430F5507
{{0x37, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5506, "MSP430F5506"}, // MSP430F5506
{{0x36, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5505, "MSP430F5505"}, // MSP430F5505
{{0x35, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5504, "MSP430F5504"}, // MSP430F5504
{{0x34, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5503, "MSP430F5503"}, // MSP430F5503
{{0x33, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5502, "MSP430F5502"}, // MSP430F5502
{{0x32, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5501, "MSP430F5501"}, // MSP430F5501
{{0x3B, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5500, "MSP430F5500"}, // MSP430F5500
{{0x12, 0x32, -1, -1, -1 , -1 , -1 , -1 , -1 }, DT_MSP430F12x2New, "MSP430F12x2/F11x2"}, // all new spins of 11x2 & 12x2
{{0x15, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5310, "MSP430F5310"}, // MSP430F5310
{{0x14, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5309, "MSP430F5309"}, // MSP430F5309
{{0x13, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5308, "MSP430F5308"}, // MSP430F5308
{{0x12, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5304, "MSP430F5304"}, // MSP430F5304
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0x0 , 0xF}, DT_MSP430AFE253, "MSP430AFE253"}, // MSP430AFE253,/
{{0x1b, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5329, "MSP430F5329"}, // MSP430F5329
{{0x1a, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5328, "MSP430F5328"}, // MSP430F5328
{{0x19, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5327, "MSP430F5327"}, // MSP430F5327
{{0x18, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5326, "MSP430F5326"}, // MSP430F5326
{{0x17, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5325, "MSP430F5325"}, // MSP430F5325
{{0x16, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5324, "MSP430F5324"}, // MSP430F5324
{{0x24, 0x52, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430G2452, "MSP430G2xx2"}, // MSP430G2452
{{0x1e, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5342, "MSP430F5342"}, // MSP430F5342
{{0x1d, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5341, "MSP430F5341"}, // MSP430F5341
{{0x1c, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5340, "MSP430F5340"}, // MSP430F5340
{{0xf4, 0x29, -1 , -1 , -1 , -1 , 'W' , -1 , -1 }, DT_MSP430FW429, "MSP430FW429"}, // FW428 FW429
{{0x2b, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6659, "MSP430F6659"}, // MSP430F6659
{{0x2c, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6658, "MSP430F6658"}, // MSP430F6658
{{0x2d, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6459, "MSP430F6459"}, // MSP430F6459
{{0x2e, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6458, "MSP430F6458"}, // MSP430F6459
{{0x2f, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6457, "MSP430F6457"}, // MSP430F6457
{{0x30, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5659, "MSP430F5659"}, // MSP430F5659
{{0x31, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5658, "MSP430F5658"}, // MSP430F5658
{{0x32, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5359, "MSP430F5359"}, // MSP430F5359
{{0x33, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5358, "MSP430F5358"}, // MSP430F5358
{{0x34, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5357, "MSP430F5357"}, // MSP430F5357
{{0x25, 0x53, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430G2553, "MSP430G2xx3"}, // MSP430G2x53
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0x2 , 0xF}, DT_MSP430AFE233, "MSP430AFE233"}, // MSP430AFE233
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0x3 , 0xF}, DT_MSP430AFE223, "MSP430AFE223"}, // MSP430AFE223
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0x4 , 0xF}, DT_MSP430AFE252, "MSP430AFE252"}, // MSP430AFE252
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0x6 , 0xF}, DT_MSP430AFE232, "MSP430AFE232"}, // MSP430AFE232
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0x7 , 0xF}, DT_MSP430AFE222, "MSP430AFE222"}, // MSP430AFE222
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0x8 , 0xF}, DT_MSP430AFE251, "MSP430AFE251"}, // MSP430AFE251
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0xA , 0xF}, DT_MSP430AFE231, "MSP430AFE231"}, // MSP430AFE231
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0xB , 0xF}, DT_MSP430AFE221, "MSP430AFE221"}, // MSP430AFE221
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0xC , 0xF}, DT_MSP430AFE250, "MSP430AFE250"}, // MSP430AFE250
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0xE , 0xF}, DT_MSP430AFE230, "MSP430AFE230"}, // MSP430AFE230
{{0x02, 0x53, -1 , -1 , -1 , -1 , -1 , 0xF , 0xF}, DT_MSP430AFE220, "MSP430AFE220"}, // MSP430AFE220
{{0x51, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5229, "MSP430F5229"}, // MSP430F5529
{{0x02, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5738, "MSP430FR5738"}, // MSP430FR5738
{{0x76, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5735, "MSP430FR5735"}, // MSP430FR5735
{{0x7c, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5730, "MSP430FR5730"}, // MSP430FR5730
{{0x7b, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5729, "MSP430FR5729"}, // MSP430FR5729
{{0x7a, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5728, "MSP430FR5728"}, // MSP430FR5728
{{0x78, 0x80, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5725, "MSP430FR5725"}, // MSP430FR5725
{{0x70, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5720, "MSP430FR5720"}, // MSP430FR5720
{{0x69, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5969, "MSP430FR5969"}, // MSP430FR5969
{{0x35, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F6147, "CC430F6147"}, // CC430F6147
{{0x36, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F6145, "CC430F6145"}, // CC430F6145
{{0x37, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F6143, "CC430F6143"}, // CC430F6143
{{0x38, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F5147, "CC430F5147"}, // CC430F5147
{{0x39, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F5145, "CC430F5145"}, // CC430F5145
{{0x3A, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F5143, "CC430F5143"}, // CC430F5143
{{0x3B, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F5125, "CC430F5125"}, // CC430F5125
{{0x3C, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_CC430F5123, "CC430F5123"}, // CC430F5123
{{0x6D, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6723, "MSP430F6724"}, // MSP430F6724
{{0x6E, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6723, "MSP430F6725"}, // MSP430F6725
{{0x6F, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6723, "MSP430F6726"}, // MSP430F6726
{{0x6A, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6736, "MSP430F6734"}, // MSP430F6734
{{0x6B, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6736, "MSP430F6735"}, // MSP430F6735
{{0x6C, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6736, "MSP430F6736"}, // MSP430F6736
{{0x25, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5333, "MSP430F5333"}, // MSP430F5333
{{0x27, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5335, "MSP430F5335"}, // MSP430F5335
{{0x28, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5336, "MSP430F5336"}, // MSP430F5336
{{0x2A, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5338, "MSP430F5338"}, // MSP430F5338
{{0x1F, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6433, "MSP430F6433"}, // MSP430F6433
{{0x21, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6435, "MSP430F6435"}, // MSP430F6435
{{0x22, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6436, "MSP430F6436"}, // MSP430F6436
{{0x24, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F6438, "MSP430F6438"}, // MSP430F6438
{{0x01, 0x81 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5737, "MSP430FR5737"}, // MSP430FR5737
{{0x77, 0x81 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5736, "MSP430FR5736"}, // MSP430FR5736
{{0x00, 0x81 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5734, "MSP430FR5734"}, // MSP430FR5734
{{0x7F, 0x80 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5733, "MSP430FR5733"}, // MSP430FR5733
{{0x75, 0x81 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5732, "MSP430FR5732"}, // MSP430FR5732
{{0x7E, 0x80 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5731, "MSP430FR5731"}, // MSP430FR5731
{{0x79, 0x80 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5727, "MSP430FR5727"}, // MSP430FR5727
{{0x74, 0x81 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5726, "MSP430FR5726"}, // MSP430FR5726
{{0x73, 0x81 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5724, "MSP430FR5724"}, // MSP430FR5724
{{0x72, 0x81 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5723, "MSP430FR5723"}, // MSP430FR5723
{{0x71, 0x81 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5722, "MSP430FR5722"}, // MSP430FR5722
{{0x77, 0x80 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430FR5721, "MSP430FR5721"}, // MSP430FR5721
{{0x50, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5228, "MSP430F5228"}, // MSP430F5528
{{0x4F, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5227, "MSP430F5227"}, // MSP430F5527
{{0x4C, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5224, "MSP430F5224"}, // MSP430F5524
{{0x4B, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5223, "MSP430F5223"}, // MSP430F5523
{{0x4A, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5222, "MSP430F5222"}, // MSP430F5522
{{0x47, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5219, "MSP430F5219"}, // MSP430F5519
{{0x46, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5218, "MSP430F5218"}, // MSP430F5518
{{0x45, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5217, "MSP430F5217"}, // MSP430F5517
{{0x42, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5229, "MSP430F5214"}, // MSP430F5529
{{0x41, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5229, "MSP430F5213"}, // MSP430F5529
{{0x40, 0x81, -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_MSP430F5229, "MSP430F5212"}, // MSP430F5529
// end of device table default return value
{{ 0 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, DT_END, "End_of_devices"}, //End of devices
};

318
drivers/devicelist.h Normal file
View File

@ -0,0 +1,318 @@
/* MSPDebug - debugging tool for MSP430 MCUs
* Copyright (C) 2009-2012 Daniel Beer
* Copyright (C) 2012 Stanimir Bonev
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef DEVICELIST_H_
#define DEVICELIST_H_
#include <stdint.h>
struct device_table {
uint8_t device_id_param[9];
uint16_t device_type_id;
const char *name;
};
typedef enum {
DT_UNKNOWN_DEVICE = 0,
DT_MSP430F11x1,
DT_MSP430F11x1D,
DT_MSP430F133,
DT_MSP430F135,
DT_MSP430F147,
DT_MSP430F148,
DT_MSP430F149,
DT_MSP430F413P,
DT_MSP430F41xC,
DT_MSP430F11x1A,
DT_MSP430F12x,
DT_MSP430F43x,
DT_MSP430F44x,
DT_MSP430F12x2,
DT_MSP430F11x2,
DT_MSP430F12x2C,
DT_PMS430F16x,
DT_MSP430FE423,
DT_MSP430FE425,
DT_MSP430FE427,
DT_MSP430F423,
DT_MSP430F425,
DT_MSP430F427,
DT_MSP430FW42x,
DT_MSP430F4230,
DT_MSP430F4250,
DT_MSP430F42x0,
DT_MSP430F155,
DT_MSP430F156,
DT_MSP430F157,
DT_MSP430F167,
DT_MSP430F168,
DT_MSP430F169,
DT_MSP430F1610,
DT_MSP430F1611,
DT_MSP430F1612,
DT_MSP430FG43x,
DT_MSP430FG4619,
DT_MSP430F21x1,
DT_TMS430F1390,
DT_TMS430F1250,
DT_TMS430C1250,
DT_TMS430EMU,
DT_MSP430F20x3,
DT_MSP430F20x2,
DT_MSP430F20x1,
DT_MSP430F2234,
DT_MSP430F2254,
DT_MSP430F2274,
DT_MSP430FG4618,
DT_MSP430F2330,
DT_MSP430F2350,
DT_MSP430F2370,
DT_MSP430F2232,
DT_MSP430F2252,
DT_MSP430F2272,
DT_MSP430F2619,
DT_MSP430F2618,
DT_MSP430F2419,
DT_MSP430F2418,
DT_MSP430FE423A,
DT_MSP430FE425A,
DT_MSP430FE427A,
DT_MSP430F423A,
DT_MSP430F425A,
DT_MSP430F427A,
DT_MSP430F4783,
DT_MSP430F4784,
DT_MSP430F4793,
DT_MSP430F4794,
DT_MSP430F249,
DT_MSP430F248,
DT_MSP430F247,
DT_MSP430F235,
DT_MSP430F2491,
DT_MSP430F2481,
DT_MSP430F2471,
DT_MSP430F233,
DT_MSP430F2410,
DT_MSP430F2132,
DT_MSP430F2122,
DT_MSP430F2112,
DT_XMS430F5438,
DT_MSP430F5438,
DT_MSP430F5436,
DT_MSP430F5419,
DT_MSP430FE4232,
DT_MSP430FE42x2,
DT_MSP430F5437,
DT_MSP430F5435,
DT_MSP430F5418,
DT_MSP430FG4250,
DT_MSP430FG42x0,
DT_MSP430FE4272,
DT_MSP430FG477,
DT_MSP430FG478,
DT_MSP430FG479,
DT_MSP430F477,
DT_MSP430F478,
DT_MSP430F479,
DT_MSP430F47197,
DT_MSP430F47187,
DT_MSP430F47177,
DT_MSP430F47167,
DT_MSP430F47196,
DT_MSP430F47186,
DT_MSP430F47176,
DT_MSP430F47166,
DT_MSP430F4152,
DT_MSP430F4132,
DT_CC430F6137,
DT_CC430F6135,
DT_CC430F6127,
DT_CC430F6126,
DT_CC430F6125,
DT_CC430F5137,
DT_CC430F5135,
DT_CC430F5133,
DT_MSP430F5513,
DT_MSP430F5514,
DT_MSP430F5515,
DT_MSP430F5517,
DT_MSP430F5519,
DT_MSP430F5521,
DT_MSP430F5522,
DT_MSP430F5524,
DT_MSP430F5525,
DT_MSP430F5526,
DT_MSP430F5527,
DT_MSP430F5528,
DT_MSP430F5529,
DT_MSP430F5438A,
DT_MSP430F5436A,
DT_MSP430F5419A,
DT_MSP430F5437A,
DT_MSP430F5435A,
DT_MSP430F5418A,
DT_MSP430F5510,
DT_MSP430F5131,
DT_MSP430F5132,
DT_MSP430F5151,
DT_MSP430F5152,
DT_MSP430F5171,
DT_MSP430F5172,
DT_MSP430F5630,
DT_MSP430F5631,
DT_MSP430F5632,
DT_MSP430F5633,
DT_MSP430F5634,
DT_MSP430F5635,
DT_MSP430F5636,
DT_MSP430F5637,
DT_MSP430F5638,
DT_MSP430F6630,
DT_MSP430F6631,
DT_MSP430F6632,
DT_MSP430F6633,
DT_MSP430F6634,
DT_MSP430F6635,
DT_MSP430F6636,
DT_MSP430F6637,
DT_MSP430F6638,
DT_MSP430FR5739,
DT_MSP430L092,
DT_MSP430F6700,
DT_MSP430F6701,
DT_MSP430F6702,
DT_MSP430F6703,
DT_MSP430F6720,
DT_MSP430F6721,
DT_MSP430F6722,
DT_MSP430F6723,
DT_MSP430F6730,
DT_MSP430F6731,
DT_MSP430F6732,
DT_MSP430F6733,
DT_MSP430F5509,
DT_MSP430F5508,
DT_MSP430F5507,
DT_MSP430F5506,
DT_MSP430F5505,
DT_MSP430F5504,
DT_MSP430F5503,
DT_MSP430F5502,
DT_MSP430F5501,
DT_MSP430F5500,
DT_MSP430F12x2New,
DT_MSP430F5310,
DT_MSP430F5309,
DT_MSP430F5308,
DT_MSP430F5304,
DT_MSP430AFE253,
DT_MSP430F5329,
DT_MSP430F5328,
DT_MSP430F5327,
DT_MSP430F5326,
DT_MSP430F5325,
DT_MSP430F5324,
DT_MSP430G2452,
DT_MSP430F5342,
DT_MSP430F5341,
DT_MSP430F5340,
DT_MSP430FW429,
DT_MSP430F6659,
DT_MSP430F6658,
DT_MSP430F6459,
DT_MSP430F6458,
DT_MSP430F6457,
DT_MSP430F5659,
DT_MSP430F5658,
DT_MSP430F5359,
DT_MSP430F5358,
DT_MSP430F5357,
DT_MSP430G2553,
DT_MSP430AFE233,
DT_MSP430AFE223,
DT_MSP430AFE252,
DT_MSP430AFE232,
DT_MSP430AFE222,
DT_MSP430AFE251,
DT_MSP430AFE231,
DT_MSP430AFE221,
DT_MSP430AFE250,
DT_MSP430AFE230,
DT_MSP430AFE220,
DT_MSP430F5229,
DT_MSP430FR5738,
DT_MSP430FR5735,
DT_MSP430FR5730,
DT_MSP430FR5729,
DT_MSP430FR5728,
DT_MSP430FR5725,
DT_MSP430FR5720,
DT_MSP430FR5969,
DT_CC430F6147,
DT_CC430F6145,
DT_CC430F6143,
DT_CC430F5147,
DT_CC430F5145,
DT_CC430F5143,
DT_CC430F5125,
DT_CC430F5123,
DT_MSP430F6724,
DT_MSP430F6725,
DT_MSP430F6726,
DT_MSP430F6734,
DT_MSP430F6735,
DT_MSP430F6736,
DT_MSP430F5333,
DT_MSP430F5335,
DT_MSP430F5336,
DT_MSP430F5338,
DT_MSP430F6433,
DT_MSP430F6435,
DT_MSP430F6436,
DT_MSP430F6438,
DT_MSP430FR5737,
DT_MSP430FR5736,
DT_MSP430FR5734,
DT_MSP430FR5733,
DT_MSP430FR5732,
DT_MSP430FR5731,
DT_MSP430FR5727,
DT_MSP430FR5726,
DT_MSP430FR5724,
DT_MSP430FR5723,
DT_MSP430FR5722,
DT_MSP430FR5721,
DT_MSP430F5228,
DT_MSP430F5227,
DT_MSP430F5224,
DT_MSP430F5223,
DT_MSP430F5222,
DT_MSP430F5219,
DT_MSP430F5218,
DT_MSP430F5217,
DT_MSP430F5214,
DT_MSP430F5213,
DT_MSP430F5212,
DT_END
} devicetype_t;
/* Mapping between device types and identification bytes. */
extern const struct device_table sdeviceID[289];
#endif

View File

@ -1,5 +1,6 @@
/* MSPDebug - debugging tool for the eZ430 /* MSPDebug - debugging tool for the eZ430
* Copyright (C) 2009-2012 Daniel Beer * Copyright (C) 2009-2012 Daniel Beer
* Copyright (C) 2012 Stanimir Bonev
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -36,6 +37,9 @@
#include "output.h" #include "output.h"
#include "opdb.h" #include "opdb.h"
#include "fet_olimex_db.h"
#include "devicelist.h"
struct fet_device { struct fet_device {
struct device base; struct device base;
@ -229,8 +233,144 @@ static int identify_new(struct fet_device *dev, const char *force_id)
return 0; return 0;
} }
static int identify_olimex(struct fet_device *dev, const char *force_id)
{
const struct fet_olimex_db_record *r;
int db_indx;
devicetype_t set_id = DT_UNKNOWN_DEVICE;
devicetype_t dev_id = DT_UNKNOWN_DEVICE;
uint8_t jtag_id;
printc_dbg("Using Olimex identification procedure\n");
if (force_id) {
db_indx = fet_olimex_db_find_by_name(force_id);
if (db_indx < 0) {
printc_err("fet: no such device: %s\n", force_id);
return -1;
}
dev_id = set_id = fet_olimex_db_index_to_type(db_indx);
}
/* first try */
if (fet_proto_xfer(&dev->proto, C_IDENT1, NULL, 0, 3,
set_id, set_id, 0) < 0 &&
(4 != dev->proto.error)) /* No device error */
{
printc_err("fet: command C_IDENT1 failed\n");
return -1;
}
if (dev->proto.datalen < 19) {
printc_err("fet: missing info\n");
return -1;
}
jtag_id = dev->proto.data[18];
/* find device in data base */
if (DT_UNKNOWN_DEVICE == dev_id) {
db_indx = fet_olimex_db_identify(dev->proto.data);
dev_id = fet_olimex_db_index_to_type(db_indx);
}
if ((DT_UNKNOWN_DEVICE == dev_id && 0x91 == jtag_id) ||
(4 == dev->proto.error)) {
/* second try with magic pattern */
if (fet_proto_xfer(&dev->proto, C_IDENT1, NULL, 0, 3,
set_id, dev_id, 0) < 0) {
printc_err("fet: command C_IDENT1 with "
"magic patern failed\n");
return -1;
}
db_indx = fet_olimex_db_identify(dev->proto.data);
dev_id = fet_olimex_db_index_to_type(db_indx);
}
printc_dbg("Device ID: 0x%02x%02x\n",
dev->proto.data[0], dev->proto.data[1]);
if (DT_UNKNOWN_DEVICE == dev_id) {
printc_err("fet: can't find device in DB\n");
return -1;
}
r = fet_db_get_record(dev_id);
dev->base.max_breakpoints = r->msg29_data[0x14];
printc_dbg(" Code start address: 0x%x\n",
LE_WORD(r->msg29_data, 0));
/*
* The value at 0x02 seems to contain a "virtual code end
* address". So this value seems to be useful only for
* calculating the total ROM size.
*
* For example, as for the msp430f6736 with 128kb ROM, the ROM
* is split into two areas: A "near" ROM, and a "far ROM".
*/
const uint32_t codeSize =
LE_LONG(r->msg29_data, 0x02)
- LE_WORD(r->msg29_data, 0)
+ 1;
printc_dbg(" Code size : %u byte = %u kb\n",
codeSize,
codeSize / 1024);
printc_dbg(" RAM start address: 0x%x\n",
LE_WORD(r->msg29_data, 0x0c));
printc_dbg(" RAM end address: 0x%x\n",
LE_WORD(r->msg29_data, 0x0e));
const uint16_t ramSize =
LE_WORD(r->msg29_data, 0x0e)
- LE_WORD(r->msg29_data, 0x0c)
+ 1;
printc_dbg(" RAM size : %u byte = %u kb\n",
ramSize, ramSize / 1024);
show_dev_info(r->name, dev);
if (fet_proto_xfer(&dev->proto, C_IDENT3,
r->msg2b_data, r->msg2b_len, 0) < 0)
printc_err("fet: warning: message C_IDENT3 failed\n");
if (fet_proto_xfer(&dev->proto, C_IDENT2,
r->msg29_data, FET_DB_MSG29_LEN,
3, r->msg29_params[0], r->msg29_params[1],
r->msg29_params[2]) < 0) {
printc_err("fet: message C_IDENT2 failed\n");
return -1;
}
return 0;
}
static int is_new_olimex(const struct fet_device *dev)
{
if ((&device_olimex_iso_mk2 == dev->base.type) &&
(20000004 <= dev->version))
return 1;
if (((&device_olimex == dev->base.type) ||
(&device_olimex_v1 == dev->base.type) ||
(&device_olimex_iso == dev->base.type)) &&
(10004003 <= dev->version))
return 1;
return 0;
}
static int do_identify(struct fet_device *dev, const char *force_id) static int do_identify(struct fet_device *dev, const char *force_id)
{ {
if (is_new_olimex(dev))
return identify_olimex(dev, force_id);
if (dev->fet_flags & FET_IDENTIFY_NEW) if (dev->fet_flags & FET_IDENTIFY_NEW)
return identify_new(dev, force_id); return identify_new(dev, force_id);
@ -653,9 +793,6 @@ int try_open(struct fet_device *dev, const struct device_args *args,
return -1; return -1;
} }
if (do_configure(dev, args) < 0)
return -1;
/* set VCC */ /* set VCC */
if (fet_proto_xfer(&dev->proto, C_VCC, NULL, 0, if (fet_proto_xfer(&dev->proto, C_VCC, NULL, 0,
1, args->vcc_mv) < 0) 1, args->vcc_mv) < 0)
@ -663,6 +800,10 @@ int try_open(struct fet_device *dev, const struct device_args *args,
else else
printc_dbg("Set Vcc: %d mV\n", args->vcc_mv); printc_dbg("Set Vcc: %d mV\n", args->vcc_mv);
if (do_configure(dev, args) < 0)
return -1;
if (send_reset || args->flags & DEVICE_FLAG_FORCE_RESET) { if (send_reset || args->flags & DEVICE_FLAG_FORCE_RESET) {
printc_dbg("Sending reset...\n"); printc_dbg("Sending reset...\n");
if (fet_proto_xfer(&dev->proto, C_RESET, NULL, 0, if (fet_proto_xfer(&dev->proto, C_RESET, NULL, 0,
@ -702,7 +843,7 @@ device_t fet_open(const struct device_args *args,
if (try_open(dev, args, fet_flags & FET_FORCE_RESET) < 0) { if (try_open(dev, args, fet_flags & FET_FORCE_RESET) < 0) {
delay_ms(500); delay_ms(500);
printc("Trying again...\n"); printc("Trying again...\n");
if (try_open(dev, args, 1) < 0) if (try_open(dev, args, !is_new_olimex(dev)) < 0)
goto fail; goto fail;
} }

8065
drivers/fet_olimex_db.c Normal file

File diff suppressed because it is too large Load Diff

68
drivers/fet_olimex_db.h Normal file
View File

@ -0,0 +1,68 @@
/* MSPDebug - debugging tool for MSP430 MCUs
* Copyright (C) 2009-2012 Daniel Beer
* Copyright (C) 2012 Stanimir Bonev
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef FET_OLIMEX_DB_H_
#define FET_OLIMEX_DB_H_
#include <stdint.h>
#include "devicelist.h"
#define FET_OLIMEX_DB_MSG28_LEN 0x12
#define FET_OLIMEX_DB_MSG29_PARAMS 3
#define FET_OLIMEX_DB_MSG29_LEN 0x4a
#define FET_OLIMEX_DB_MSG2B_LEN 0x4a
struct fet_olimex_db_record {
const char *name;
int msg29_params[FET_OLIMEX_DB_MSG29_PARAMS];
uint8_t msg29_data[FET_OLIMEX_DB_MSG29_LEN];
uint8_t msg2b_data[FET_OLIMEX_DB_MSG2B_LEN];
int msg2b_len;
};
/* Find a record in the database by name. The search is case-insensitive.
*
* Returns a device index on success or -1 if the device could not be
* found.
*/
int fet_olimex_db_find_by_name(const char *name);
/* Call the given enumeration function for all records in the database.
*
* If the callback returns -1, enumeration is aborted and the enumerator
* function returns -1. Otherwise, 0 is returned.
*/
typedef int (*fet_olimex_db_enum_func_t)(void *user_data, const char *name);
int fet_olimex_db_enum(fet_olimex_db_enum_func_t func, void *user_data);
/* Find suitable device index. Given 9 bytes of identification data, return
* the device index, or -1 if the device can't be identified.
*/
int fet_olimex_db_identify(const uint8_t *data);
/* Convert a device index to a device type. */
devicetype_t fet_olimex_db_index_to_type(int index);
/* Return configuration data for a given device type.
*/
const struct fet_olimex_db_record *fet_db_get_record(devicetype_t type);
#endif

View File

@ -44,6 +44,7 @@
#include "fet.h" #include "fet.h"
#include "vector.h" #include "vector.h"
#include "fet_db.h" #include "fet_db.h"
#include "fet_olimex_db.h"
#include "flash_bsl.h" #include "flash_bsl.h"
#include "gdbc.h" #include "gdbc.h"
#include "tilib.h" #include "tilib.h"
@ -152,6 +153,13 @@ static int add_fet_device(void *user_data, const struct fet_db_record *r)
return vector_push(v, &r->name, 1); return vector_push(v, &r->name, 1);
} }
static int add_fet_olimex_device(void *user_data, const char *name)
{
struct vector *v = (struct vector *)user_data;
return vector_push(v, &name, 1);
}
static int list_devices(void) static int list_devices(void)
{ {
struct vector v; struct vector v;
@ -167,6 +175,18 @@ static int list_devices(void)
namelist_print(&v); namelist_print(&v);
vector_destroy(&v); vector_destroy(&v);
vector_init(&v, sizeof(const char *));
if (fet_olimex_db_enum(add_fet_olimex_device, &v) < 0) {
pr_error("couldn't allocate memory");
vector_destroy(&v);
return -1;
}
printc("\n");
printc("Devices supported by Olimex FET driver:\n");
namelist_print(&v);
vector_destroy(&v);
return 0; return 0;
} }