switch(verb){
case START:
- /* old method, classic MSP430.
- //Enter JTAG mode.
- jtag430x2_start();
- //TAP setup, fuse check
- jtag430_resettap();
-
- cmddata[0]=jtag_ir_shift8(IR_BYPASS);
- txdata(app,verb,1);
- */
+ debugstr("Using JTAG430 (instead of JTAG430X2)!");
jtag430x2_start();
cmddata[0]=jtagid;
- if(jtagid!=MSP430JTAGID){
- debugstr("Using JTAG430 (instead of JTAG430X2)!");
- }
jtag430mode=MSP430MODE;
/* So the way this works is that a width of 20 does some
case JTAG430_DEVICE_ID:
//cmddatalong[0]=jtag430_deviceid();
cmddataword[0]=0xdead;
- cmddataword[0]=0xbeef;
+ cmddataword[1]=0xbeef;
txdata(app,verb,4);
break;
default:
//MSP430 or MSP430X
if(jtagid==MSP430JTAGID){
- debugstr("ERROR, using JTAG430X2 instead of JTAG430!");
+ //debugstr("ERROR, using JTAG430X2 instead of JTAG430!");
+ jtag430mode=MSP430MODE;
+
+ /* So the way this works is that a width of 20 does some
+ backward-compatibility finagling, causing the correct value
+ to be exchanged for addresses on 16-bit chips as well as the
+ new MSP430X chips. (This has only been verified on the
+ MSP430F2xx family. TODO verify for others.)
+ */
+
+ drwidth=20;
+
+ //Perform a reset and disable watchdog.
+ jtag430_por();
+ jtag430_writemem(0x120,0x5a80);//disable watchdog
+
+ jtag430_haltcpu();
+
+ jtag430_resettap();
+ txdata(app,verb,1);
+
return;
}else if(jtagid==MSP430X2JTAGID){
jtag430mode=MSP430X2MODE;