Added support for MSP430F169
This commit is contained in:
parent
c1bb903b99
commit
465147cdd4
16
fet.c
16
fet.c
|
@ -105,6 +105,10 @@ struct fet_device {
|
||||||
#define C_WRITEI2C 0x23
|
#define C_WRITEI2C 0x23
|
||||||
#define C_ENTERBOOTLOADER 0x24
|
#define C_ENTERBOOTLOADER 0x24
|
||||||
|
|
||||||
|
#define C_IDENT1 0x28
|
||||||
|
#define C_IDENT2 0x29
|
||||||
|
#define C_IDENT3 0x2b
|
||||||
|
|
||||||
/* Constants for parameters of various FET commands */
|
/* Constants for parameters of various FET commands */
|
||||||
#define FET_CONFIG_VERIFICATION 0
|
#define FET_CONFIG_VERIFICATION 0
|
||||||
#define FET_CONFIG_EMULATION 1
|
#define FET_CONFIG_EMULATION 1
|
||||||
|
@ -489,8 +493,8 @@ static int identify_new(struct fet_device *dev, const char *force_id)
|
||||||
{
|
{
|
||||||
const struct fet_db_record *r;
|
const struct fet_db_record *r;
|
||||||
|
|
||||||
if (xfer(dev, 0x28, NULL, 0, 2, 0, 0) < 0) {
|
if (xfer(dev, C_IDENT1, NULL, 0, 2, 0, 0) < 0) {
|
||||||
fprintf(stderr, "fet: command 0x28 failed\n");
|
fprintf(stderr, "fet: command C_IDENT1 failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,13 +524,13 @@ static int identify_new(struct fet_device *dev, const char *force_id)
|
||||||
printf("Device: %s\n", r->name);
|
printf("Device: %s\n", r->name);
|
||||||
printf("Code memory starts at 0x%04x\n", dev->code_start);
|
printf("Code memory starts at 0x%04x\n", dev->code_start);
|
||||||
|
|
||||||
if (xfer(dev, 0x2b, r->msg2b_data, FET_DB_MSG2B_LEN, 0) < 0)
|
if (xfer(dev, C_IDENT3, r->msg2b_data, r->msg2b_len, 0) < 0)
|
||||||
fprintf(stderr, "fet: warning: message 0x2b failed\n");
|
fprintf(stderr, "fet: warning: message C_IDENT3 failed\n");
|
||||||
|
|
||||||
if (xfer(dev, 0x29, r->msg29_data, FET_DB_MSG29_LEN,
|
if (xfer(dev, C_IDENT2, r->msg29_data, FET_DB_MSG29_LEN,
|
||||||
3, r->msg29_params[0], r->msg29_params[1],
|
3, r->msg29_params[0], r->msg29_params[1],
|
||||||
r->msg29_params[2]) < 0) {
|
r->msg29_params[2]) < 0) {
|
||||||
fprintf(stderr, "fet: message 0x29 failed\n");
|
fprintf(stderr, "fet: message C_IDENT2 failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
44
fet_db.c
44
fet_db.c
|
@ -41,6 +41,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0xf3, 0x30, 0xd3, 0x30,
|
0x00, 0x00, 0x00, 0x00, 0xf3, 0x30, 0xd3, 0x30,
|
||||||
0xc0, 0x30,
|
0xc0, 0x30,
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -73,6 +74,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0xf3, 0x30, 0xd3, 0x30,
|
0x00, 0x00, 0x00, 0x00, 0xf3, 0x30, 0xd3, 0x30,
|
||||||
0xc0, 0x30
|
0xc0, 0x30
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x00, 0x00,
|
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x00, 0x00,
|
||||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -106,6 +108,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0xf3, 0x30, 0xd3, 0x30,
|
0x00, 0x00, 0x00, 0x00, 0xf3, 0x30, 0xd3, 0x30,
|
||||||
0xc0, 0x30
|
0xc0, 0x30
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x00, 0x00,
|
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x00, 0x00,
|
||||||
0x03, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x03, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -139,6 +142,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0xF3, 0x30, 0xD3, 0x30,
|
0x00, 0x00, 0x00, 0x00, 0xF3, 0x30, 0xD3, 0x30,
|
||||||
0xC0, 0x30
|
0xC0, 0x30
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x0C, 0xFF, 0x0F, 0x00, 0x02, 0x02, 0x00,
|
0x00, 0x0C, 0xFF, 0x0F, 0x00, 0x02, 0x02, 0x00,
|
||||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -172,6 +176,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x1f, 0x0f,
|
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x1f, 0x0f,
|
||||||
0xff, 0xff
|
0xff, 0xff
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x00, 0x00,
|
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x00, 0x00,
|
||||||
0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -205,6 +210,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x33, 0x0F, 0x1F, 0x0F,
|
0x00, 0x00, 0x00, 0x00, 0x33, 0x0F, 0x1F, 0x0F,
|
||||||
0xFF, 0xFF
|
0xFF, 0xFF
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x0C, 0xFF, 0x0F, 0x00, 0x02, 0x00, 0x00,
|
0x00, 0x0C, 0xFF, 0x0F, 0x00, 0x02, 0x00, 0x00,
|
||||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -238,6 +244,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x1f, 0x0f,
|
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x1f, 0x0f,
|
||||||
0xff, 0xff
|
0xff, 0xff
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x02, 0x00,
|
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x02, 0x00,
|
||||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -271,6 +278,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||||
0xff, 0xff
|
0xff, 0xff
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x10, 0xff, 0x17, 0x00, 0x02, 0x02, 0x00,
|
0x00, 0x10, 0xff, 0x17, 0x00, 0x02, 0x02, 0x00,
|
||||||
0x0a, 0x00, 0x40, 0x00, 0x0a, 0x91, 0x8e, 0x9d,
|
0x0a, 0x00, 0x40, 0x00, 0x0a, 0x91, 0x8e, 0x9d,
|
||||||
|
@ -304,6 +312,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||||
0xff, 0xff
|
0xff, 0xff
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x10, 0xff, 0x17, 0x00, 0x02, 0x02, 0x00,
|
0x00, 0x10, 0xff, 0x17, 0x00, 0x02, 0x02, 0x00,
|
||||||
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -337,6 +346,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||||
0xff, 0xff
|
0xff, 0xff
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x10, 0xff, 0x17, 0x00, 0x02, 0x01, 0x00,
|
0x00, 0x10, 0xff, 0x17, 0x00, 0x02, 0x01, 0x00,
|
||||||
0x04, 0x00, 0x40, 0x00, 0x0a, 0x91, 0x8e, 0x00,
|
0x04, 0x00, 0x40, 0x00, 0x0a, 0x91, 0x8e, 0x00,
|
||||||
|
@ -370,6 +380,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x1f, 0x0f,
|
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x1f, 0x0f,
|
||||||
0xff, 0xff
|
0xff, 0xff
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = { /* Copied from MSP430F2616 */
|
.msg2b_data = { /* Copied from MSP430F2616 */
|
||||||
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x02, 0x00,
|
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x02, 0x00,
|
||||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -403,6 +414,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x1f, 0x0f,
|
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x1f, 0x0f,
|
||||||
0xff, 0xff
|
0xff, 0xff
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = { /* Copied from MSP430F2616 */
|
.msg2b_data = { /* Copied from MSP430F2616 */
|
||||||
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x02, 0x00,
|
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x02, 0x00,
|
||||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
@ -439,6 +451,7 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||||
0xff, 0xff
|
0xff, 0xff
|
||||||
},
|
},
|
||||||
|
.msg2b_len = 0x4a,
|
||||||
.msg2b_data = {
|
.msg2b_data = {
|
||||||
0x00, 0x10, 0xff, 0x17, 0x00, 0x02, 0x02, 0x00,
|
0x00, 0x10, 0xff, 0x17, 0x00, 0x02, 0x02, 0x00,
|
||||||
0x0a, 0x00, 0x40, 0x00, 0x0a, 0x91, 0x8e, 0x9d,
|
0x0a, 0x00, 0x40, 0x00, 0x0a, 0x91, 0x8e, 0x9d,
|
||||||
|
@ -451,6 +464,37 @@ static const struct fet_db_record fet_db[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00
|
0x00, 0x00
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "MSP430F169",
|
||||||
|
.msg28_data = {
|
||||||
|
0xF1, 0x69, 0x40, 0x60, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x61, 0x01, 0x00, 0xb1, 0x68,
|
||||||
|
0x10, 0x00
|
||||||
|
},
|
||||||
|
.msg29_params = {0x00, 0x28, 0x21},
|
||||||
|
.msg29_data = {
|
||||||
|
0x00, 0x11, 0xff, 0xff, 0x00, 0x00, 0x00, 0x10,
|
||||||
|
0xff, 0x10, 0x80, 0x00, 0x00, 0x02, 0xff, 0x09,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0x00,
|
||||||
|
0x02, 0x00, 0xd7, 0x60, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x08, 0x07, 0x10, 0x0e, 0xc4, 0x09, 0x70, 0x17,
|
||||||
|
0x58, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xf3, 0x30, 0xd3, 0x30,
|
||||||
|
0xc0, 0x30
|
||||||
|
},
|
||||||
|
.msg2b_len = 0x34,
|
||||||
|
.msg2b_data = {
|
||||||
|
0x00, 0x0c, 0xff, 0x0f, 0x00, 0x02, 0x02, 0x00,
|
||||||
|
0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
||||||
|
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x00
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
1
fet_db.h
1
fet_db.h
|
@ -33,6 +33,7 @@ struct fet_db_record {
|
||||||
int msg29_params[FET_DB_MSG29_PARAMS];
|
int msg29_params[FET_DB_MSG29_PARAMS];
|
||||||
uint8_t msg29_data[FET_DB_MSG29_LEN];
|
uint8_t msg29_data[FET_DB_MSG29_LEN];
|
||||||
uint8_t msg2b_data[FET_DB_MSG2B_LEN];
|
uint8_t msg2b_data[FET_DB_MSG2B_LEN];
|
||||||
|
int msg2b_len;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Find a record in the database by its response to message 0x28. The
|
/* Find a record in the database by its response to message 0x28. The
|
||||||
|
|
Loading…
Reference in New Issue