I need to download application code from a 32bit IMX CPU to a MSP430 via the jtag interface. The IMX CPU is running Linux and there are some I/O pins on the IMX that go directly to the jtag pins on the MSP430. This was done in the past with a different CPU and a different MSP430 and the old MSP430 was a MSP430F1619 CPU. In the past, an application from TI was used to read a srec file the bit banging and the srec data to the MSP430 Flash as described on the TI Document “Programming a Flash Based MSP430 Using JTAG Interface” SLAA149. The link below has the document and source code provided by TI.
http://www.ti.com/lit/an/slaa149h/slaa149h.pdf
I think the IMX is set up properly with the GPIO pins working correctly since I can control them high and low via the software running on the IMX that was ported from the old project. Also, the port from the old system compiles and executes but I have yet to successfully using this software to update the current MSP430 we are using now. The current CPU is a MSP430F2618TZQW. The programming fails when the software does the eraseAllSections using the ERASE_MASS option.
Before the software does the erase operation, it gets the device ID from the CPU via the JTAG interface. The new MSP430 is the MSP430F2618TZQW and it returns a device ID of 0xF23F. This value (0xF23F) is then used to look up in the following table to get the CPU configuration details. I looked and that ID is not in the table probably because the CPU is new and the software was done before the MSP430F2618TZQW was released. I added a table entry for the device and took a shot at filling it in but it still fails at the erase operation.
My two questions are:
1) Is the device ID of 0xF23F correct for a MSP430F2618TZQW? This would indicate I am reading the part correctly via JTAG and things are working properly up to that point.
2) I added an entry for my part (MSP430F2618TZQW) as the last entry in the table before the default entry at the end and want to verify I did this correctly. The entry I made is bold and wasn't sure about some of the items in the table (testpin, CpuX, DataQuick etc)
Thanks,
Doug
static const struct tsDeviceFeatures sDeviceFeatures[] =
{
// TestPin DataQuick EnhVerify SpyBiWire RamEnd
// Id | CpuX | FastFlash | JTAG | RamStart | MainStart
// | | | | | | | | | | |
/* F11x(1)(A)*/ { 0xF112, TRUE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x02FF, 0xF000 }, // MSP430F1121A
/* F11x2 */ { 0x1132, TRUE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x02FF, 0xE000 }, // MSP430F1132
/* F12x(A) */ { 0xF123, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE , 0x0200, 0x02FF, 0xE000 }, // MSP430F123
/* F12x2 */ { 0x1232, TRUE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x02FF, 0xE000 }, // MSP430F1232
/* F13x
F14x */ { 0xF149, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x09FF, 0x1100 }, // MSP430F149
/* F15x
F16x */ { 0xF169, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x09FF, 0x1100 }, // MSP430F169
/* F161x */ { 0xF16C, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x1100, 0x24FF, 0x8000 }, // MSP430F1610
/*
F20xx */ { 0xF201, TRUE, FALSE, TRUE , TRUE, FALSE, TRUE , TRUE , 0x0200, 0x027F, 0xF800 }, // MSP430F2013
/* F21x1
F21x2 */ { 0xF213, TRUE, FALSE, TRUE , TRUE, FALSE, TRUE , FALSE , 0x0200, 0x02FF, 0xE000 }, // MSP430F2131
/* F22x2
F22x4 */ { 0xF227, TRUE, FALSE, TRUE , TRUE, TRUE, TRUE , TRUE , 0x0200, 0x05FF, 0x8000 }, // MSP430F2274
/* F23x0 */ { 0xF237, TRUE, FALSE, TRUE , TRUE, TRUE, TRUE , FALSE , 0x0200, 0x09FF, 0x8000 }, // MSP430F2370
/* F23x
F24x
F24x1
F2410 */ { 0xF249, FALSE, FALSE, TRUE , TRUE, TRUE, TRUE , FALSE , 0x0200, 0x09FF, 0x1100 }, // MSP430F249
/* F241x
F261x */ { 0xF26F, FALSE, TRUE, TRUE , TRUE, TRUE, TRUE , FALSE , 0x1100, 0x20FF, 0x2100 }, // MSP430F2619
/* F41x */ { 0xF413, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE , 0x0200, 0x02FF, 0xE000 }, // MSP430F413
/* F42x(x) */ { 0xF427, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x02FF, 0xE000 }, // MSP430FW427
/* F43x 80p */ { 0xF437, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x05FF, 0xA000 }, // MSP430F437
/* FG43x */ { 0xF439, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x09FF, 0x1100 }, // MSP430FG439
/* F44x
F43x 100p */ { 0xF449, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x09FF, 0x1100 }, // MSP430F449
/* FG461x */ { 0xF46F, FALSE, TRUE, TRUE , TRUE, TRUE, TRUE , FALSE , 0x1100, 0x20FF, 0x2100 }, // MSP430FG4619
/*430F2618TZ */ { 0xF23F, FALSE, FALSE, TRUE , FALSE, TRUE, TRUE , FALSE , 0x1100, 0x30FF, 0x3100 }, // MSP430F2618TZQW
/* GENERIC */ { 0xFFFF, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE , 0x0200, 0x02FF, 0xE000 }
};