From: travisutk Date: Fri, 4 Sep 2009 04:46:08 +0000 (+0000) Subject: Moved the MSP430 client to its own file, preparing for MSP430X2 (5xx) support. X-Git-Url: http://git.rot13.org/?p=goodfet;a=commitdiff_plain;h=412f5e22fe35d4aed40d3a145f1d9213d42d23f9;hp=fa7c4f1b34ed53c88a678f947eb4b34c6e9807b4 Moved the MSP430 client to its own file, preparing for MSP430X2 (5xx) support. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@118 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- diff --git a/client/GoodFET.py b/client/GoodFET.py index ca84e57..3b4d9e7 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -3,8 +3,7 @@ # # (C) 2009 Travis Goodspeed # -# This code is ugly as sin, for bootstrapping the firmware only. -# Rewrite cleanly as soon as is convenient. +# This code is being rewritten and refactored. You've been warned! import sys, time, string, cStringIO, struct, glob, serial, os; @@ -169,97 +168,6 @@ class GoodFET: """Write bytes by I2C.""" self.writecmd(0x02,0x01,len(bytes),bytes); #SPI/SETUP return ord(self.data[0]); - -class GoodFETMSP430(GoodFET): - def MSP430setup(self): - """Move the FET into the MSP430 JTAG application.""" - print "Initializing MSP430."; - self.writecmd(0x11,0x10,0,self.data); - def MSP430stop(self): - """Stop debugging.""" - self.writecmd(0x11,0x21,0,self.data); - - def MSP430peek(self,adr): - """Read the contents of memory at an address.""" - self.data=[adr&0xff, (adr&0xff00)>>8]; - self.writecmd(0x11,0x02,2,self.data); - return ord(self.data[0])+(ord(self.data[1])<<8); - def MSP430poke(self,adr,val): - """Read the contents of memory at an address.""" - self.data=[adr&0xff, (adr&0xff00)>>8, val&0xff, (val&0xff00)>>8]; - self.writecmd(0x11,0x03,4,self.data); - return;# ord(self.data[0])+(ord(self.data[1])<<8); - def MSP430start(self): - """Start debugging.""" - self.writecmd(0x11,0x20,0,self.data); - ident=self.MSP430ident(); - print "Target identifies as %04x." % ident; - - def MSP430haltcpu(self): - """Halt the CPU.""" - self.writecmd(0x11,0xA0,0,self.data); - def MSP430releasecpu(self): - """Resume the CPU.""" - self.writecmd(0x11,0xA1,0,self.data); - def MSP430shiftir8(self,ins): - """Shift the 8-bit Instruction Register.""" - data=[ins]; - self.writecmd(0x11,0x80,1,data); - return ord(self.data[0]); - def MSP430shiftdr16(self,dat): - """Shift the 16-bit Data Register.""" - data=[dat&0xFF,(dat&0xFF00)>>8]; - self.writecmd(0x11,0x81,2,data); - return ord(self.data[0])#+(ord(self.data[1])<<8); - def MSP430setinstrfetch(self): - """Set the instruction fetch mode.""" - self.writecmd(0x11,0xC1,0,self.data); - return self.data[0]; - def MSP430ident(self): - """Grab self-identification word from 0x0FF0 as big endian.""" - i=self.MSP430peek(0x0ff0); - return ((i&0xFF00)>>8)+((i&0xFF)<<8) - def MSP430test(self): - """Test MSP430 JTAG. Requires that a chip be attached.""" - if self.MSP430ident()==0xffff: - print "Is anything connected?"; - print "Testing RAM."; - temp=self.MSP430peek(0x0200); - self.MSP430poke(0x0200,0xdead); - if(self.MSP430peek(0x0200)!=0xdead): - print "Poke of 0x0200 did not set to 0xDEAD properly."; - return; - self.MSP430poke(0x0200,temp); #restore old value. - def MSP430flashtest(self): - self.MSP430masserase(); - i=0x2500; - while(i<0xFFFF): - if(self.MSP430peek(i)!=0xFFFF): - print "ERROR: Unerased flash at %04x."%i; - self.MSP430writeflash(i,0xDEAD); - i+=2; - def MSP430masserase(self): - """Erase MSP430 flash memory.""" - self.writecmd(0x11,0xE3,0,None); - def MSP430writeflash(self,adr,val): - """Write a word of flash memory.""" - if(self.MSP430peek(adr)!=0xFFFF): - print "FLASH ERROR: %04x not clear." % adr; - data=[adr&0xFF,(adr&0xFF00)>>8,val&0xFF,(val&0xFF00)>>8]; - self.writecmd(0x11,0xE1,4,data); - rval=ord(self.data[0])+(ord(self.data[1])<<8); - if(val!=rval): - print "FLASH WRITE ERROR AT %04x. Found %04x, wrote %04x." % (adr,rval,val); - - def MSP430dumpbsl(self): - self.MSP430dumpmem(0xC00,0xfff); - def MSP430dumpallmem(self): - self.MSP430dumpmem(0x200,0xffff); - def MSP430dumpmem(self,begin,end): - i=begin; - while i +# +# Presently being rewritten. + +import sys, time, string, cStringIO, struct, glob, serial, os; + +from GoodFET import GoodFET; + +class GoodFETMSP430(GoodFET): + MSP430APP=0x11; #Changed by inheritors. + def MSP430setup(self): + """Move the FET into the MSP430 JTAG application.""" + print "Initializing MSP430."; + self.writecmd(0x11,0x10,0,self.data); + def MSP430stop(self): + """Stop debugging.""" + self.writecmd(self.MSP430APP,0x21,0,self.data); + + def MSP430peek(self,adr): + """Read the contents of memory at an address.""" + self.data=[adr&0xff, (adr&0xff00)>>8]; + self.writecmd(self.MSP430APP,0x02,2,self.data); + return ord(self.data[0])+(ord(self.data[1])<<8); + def MSP430poke(self,adr,val): + """Read the contents of memory at an address.""" + self.data=[adr&0xff, (adr&0xff00)>>8, val&0xff, (val&0xff00)>>8]; + self.writecmd(self.MSP430APP,0x03,4,self.data); + return;# ord(self.data[0])+(ord(self.data[1])<<8); + def MSP430start(self): + """Start debugging.""" + self.writecmd(self.MSP430APP,0x20,0,self.data); + ident=self.MSP430ident(); + print "Target identifies as %04x." % ident; + + def MSP430haltcpu(self): + """Halt the CPU.""" + self.writecmd(self.MSP430APP,0xA0,0,self.data); + def MSP430releasecpu(self): + """Resume the CPU.""" + self.writecmd(self.MSP430APP,0xA1,0,self.data); + def MSP430shiftir8(self,ins): + """Shift the 8-bit Instruction Register.""" + data=[ins]; + self.writecmd(self.MSP430APP,0x80,1,data); + return ord(self.data[0]); + def MSP430shiftdr16(self,dat): + """Shift the 16-bit Data Register.""" + data=[dat&0xFF,(dat&0xFF00)>>8]; + self.writecmd(self.MSP430APP,0x81,2,data); + return ord(self.data[0])#+(ord(self.data[1])<<8); + def MSP430setinstrfetch(self): + """Set the instruction fetch mode.""" + self.writecmd(self.MSP430APP,0xC1,0,self.data); + return self.data[0]; + def MSP430ident(self): + """Grab self-identification word from 0x0FF0 as big endian.""" + i=self.MSP430peek(0x0ff0); + return ((i&0xFF00)>>8)+((i&0xFF)<<8) + def MSP430test(self): + """Test MSP430 JTAG. Requires that a chip be attached.""" + if self.MSP430ident()==0xffff: + print "Is anything connected?"; + print "Testing RAM."; + temp=self.MSP430peek(0x0200); + self.MSP430poke(0x0200,0xdead); + if(self.MSP430peek(0x0200)!=0xdead): + print "Poke of 0x0200 did not set to 0xDEAD properly."; + return; + self.MSP430poke(0x0200,temp); #restore old value. + def MSP430flashtest(self): + self.MSP430masserase(); + i=0x2500; + while(i<0xFFFF): + if(self.MSP430peek(i)!=0xFFFF): + print "ERROR: Unerased flash at %04x."%i; + self.MSP430writeflash(i,0xDEAD); + i+=2; + def MSP430masserase(self): + """Erase MSP430 flash memory.""" + self.writecmd(self.MSP430APP,0xE3,0,None); + def MSP430writeflash(self,adr,val): + """Write a word of flash memory.""" + if(self.MSP430peek(adr)!=0xFFFF): + print "FLASH ERROR: %04x not clear." % adr; + data=[adr&0xFF,(adr&0xFF00)>>8,val&0xFF,(val&0xFF00)>>8]; + self.writecmd(self.MSP430APP,0xE1,4,data); + rval=ord(self.data[0])+(ord(self.data[1])<<8); + if(val!=rval): + print "FLASH WRITE ERROR AT %04x. Found %04x, wrote %04x." % (adr,rval,val); + + def MSP430dumpbsl(self): + self.MSP430dumpmem(0xC00,0xfff); + def MSP430dumpallmem(self): + self.MSP430dumpmem(0x200,0xffff); + def MSP430dumpmem(self,begin,end): + i=begin; + while i