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:
parent
c5e93345a0
commit
1973746d33
5
AUTHORS
5
AUTHORS
|
@ -69,3 +69,8 @@ Tamas Tevesz <ice@extreme.hu>:
|
|||
Ingo van Lil <inguin@gmx.de>:
|
||||
* Support for demangling of C++ function names.
|
||||
* load_raw, verify_raw and save_raw commands.
|
||||
|
||||
Stanimir Bonev <bonev_st@abv.bg>:
|
||||
* Olimex chip database.
|
||||
* Improved identification/configuration system for Olimex
|
||||
debuggers.
|
||||
|
|
2
Makefile
2
Makefile
|
@ -133,6 +133,8 @@ OBJ=\
|
|||
drivers/tilib.o \
|
||||
drivers/goodfet.o \
|
||||
drivers/obl.o \
|
||||
drivers/devicelist.o \
|
||||
drivers/fet_olimex_db.o \
|
||||
formats/binfile.o \
|
||||
formats/coff.o \
|
||||
formats/elf32.o \
|
||||
|
|
|
@ -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
|
||||
};
|
|
@ -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
|
|
@ -1,5 +1,6 @@
|
|||
/* MSPDebug - debugging tool for the eZ430
|
||||
* 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
|
||||
|
@ -36,6 +37,9 @@
|
|||
#include "output.h"
|
||||
#include "opdb.h"
|
||||
|
||||
#include "fet_olimex_db.h"
|
||||
#include "devicelist.h"
|
||||
|
||||
struct fet_device {
|
||||
struct device base;
|
||||
|
||||
|
@ -229,8 +233,144 @@ static int identify_new(struct fet_device *dev, const char *force_id)
|
|||
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)
|
||||
{
|
||||
if (is_new_olimex(dev))
|
||||
return identify_olimex(dev, force_id);
|
||||
|
||||
if (dev->fet_flags & FET_IDENTIFY_NEW)
|
||||
return identify_new(dev, force_id);
|
||||
|
||||
|
@ -653,9 +793,6 @@ int try_open(struct fet_device *dev, const struct device_args *args,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (do_configure(dev, args) < 0)
|
||||
return -1;
|
||||
|
||||
/* set VCC */
|
||||
if (fet_proto_xfer(&dev->proto, C_VCC, NULL, 0,
|
||||
1, args->vcc_mv) < 0)
|
||||
|
@ -663,6 +800,10 @@ int try_open(struct fet_device *dev, const struct device_args *args,
|
|||
else
|
||||
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) {
|
||||
printc_dbg("Sending reset...\n");
|
||||
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) {
|
||||
delay_ms(500);
|
||||
printc("Trying again...\n");
|
||||
if (try_open(dev, args, 1) < 0)
|
||||
if (try_open(dev, args, !is_new_olimex(dev)) < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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
|
20
ui/main.c
20
ui/main.c
|
@ -44,6 +44,7 @@
|
|||
#include "fet.h"
|
||||
#include "vector.h"
|
||||
#include "fet_db.h"
|
||||
#include "fet_olimex_db.h"
|
||||
#include "flash_bsl.h"
|
||||
#include "gdbc.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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
struct vector v;
|
||||
|
@ -167,6 +175,18 @@ static int list_devices(void)
|
|||
namelist_print(&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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue