From ef8b3dcd43ed26a82df672e64396bf8c024bb09c Mon Sep 17 00:00:00 2001 From: travisutk Date: Sat, 19 Sep 2009 15:14:37 +0000 Subject: [PATCH] Support for debugging strings, closer to a clean MSP430X2 implementation. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@143 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/GoodFET.py | 18 ++++++---- client/GoodFETSPI.py | 1 + firmware/apps/jtag/jtag430x2.c | 61 +++++++++++++++++----------------- firmware/apps/spi/spi.c | 9 ++--- firmware/include/apps.h | 1 + firmware/include/command.h | 4 +++ firmware/lib/command.c | 7 ++++ 7 files changed, 61 insertions(+), 40 deletions(-) diff --git a/client/GoodFET.py b/client/GoodFET.py index cf01c85..abfc16e 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -60,12 +60,18 @@ class GoodFET: self.readcmd(blocks); #Uncomment this later, to ensure a response. def readcmd(self,blocks=1): """Read a reply from the GoodFET.""" - self.app=ord(self.serialport.read(1)); - self.verb=ord(self.serialport.read(1)); - self.count=ord(self.serialport.read(1)); - self.data=self.serialport.read(self.count*blocks); - #print "READ %02x %02x %02x " % (self.app, self.verb, self.count); - return self.data; + while 1: + self.app=ord(self.serialport.read(1)); + self.verb=ord(self.serialport.read(1)); + self.count=ord(self.serialport.read(1)); + self.data=self.serialport.read(self.count*blocks); + #print "READ %02x %02x %02x " % (self.app, self.verb, self.count); + + #Debugging string; print, but wait. + if self.app==0xFF and self.verb==0xFF: + print "DEBUG %s" % self.data; + else: + return self.data; #Monitor stuff def out(self,byte): diff --git a/client/GoodFETSPI.py b/client/GoodFETSPI.py index 364b1ff..b23585d 100644 --- a/client/GoodFETSPI.py +++ b/client/GoodFETSPI.py @@ -33,6 +33,7 @@ class GoodFETSPIFlash(GoodFETSPI): }; JEDECdevices={0xFFFFFF: "MISSING", + 0xEF3015: "W25X16L", 0xEF3014: "W25X80L", 0xEF3013: "W25X40L", 0xEF3012: "W25X20L", diff --git a/firmware/apps/jtag/jtag430x2.c b/firmware/apps/jtag/jtag430x2.c index 965c262..b508f0b 100644 --- a/firmware/apps/jtag/jtag430x2.c +++ b/firmware/apps/jtag/jtag430x2.c @@ -94,39 +94,40 @@ void jtag430x2_writemem(unsigned long adr, //! Read data from address unsigned int jtag430x2_readmem(unsigned long adr){ unsigned int toret=0; + unsigned int tries=5; - do{ - jtag_ir_shift8(IR_CNTRL_SIG_CAPTURE); - }while(!(jtag_dr_shift16(0) & 0x0301)); - - if(jtag_dr_shift16(0) & 0x0301){ - // Read Memory - CLRTCLK; - jtag_ir_shift8(IR_CNTRL_SIG_16BIT); - if(adr>=0x100){ - jtag_dr_shift16(0x0501);//word read - }else{ - jtag_dr_shift16(0x0511);//byte read - } + while(1){ + do{ + jtag_ir_shift8(IR_CNTRL_SIG_CAPTURE); + }while(!(jtag_dr_shift16(0) & 0x0301)); - jtag_ir_shift8(IR_ADDR_16BIT); - jtag_dr_shift20(adr); //20 - - jtag_ir_shift8(IR_DATA_TO_ADDR); - SETTCLK; - CLRTCLK; - toret = jtag_dr_shift16(0x0000); - - SETTCLK; - - //Cycle a bit. - CLRTCLK; - SETTCLK; - }else{ - return 0xBABE; + if(jtag_dr_shift16(0) & 0x0301){ + // Read Memory + CLRTCLK; + jtag_ir_shift8(IR_CNTRL_SIG_16BIT); + if(adr>=0x100){ + jtag_dr_shift16(0x0501);//word read + }else{ + jtag_dr_shift16(0x0511);//byte read + } + + jtag_ir_shift8(IR_ADDR_16BIT); + jtag_dr_shift20(adr); //20 + + jtag_ir_shift8(IR_DATA_TO_ADDR); + SETTCLK; + CLRTCLK; + toret = jtag_dr_shift16(0x0000); + + SETTCLK; + + //Cycle a bit. + CLRTCLK; + SETTCLK; + return toret; + } } - - return toret; + //return toret; } //! Syncs a POR. diff --git a/firmware/apps/spi/spi.c b/firmware/apps/spi/spi.c index e91ab61..18236ee 100644 --- a/firmware/apps/spi/spi.c +++ b/firmware/apps/spi/spi.c @@ -15,7 +15,8 @@ //This could be more accurate. //Does it ever need to be? #define SPISPEED 0 -#define SPIDELAY(x) delay(x) +#define SPIDELAY(x) +//delay(x) //! Set up the pins for SPI mode. @@ -139,8 +140,7 @@ void spiflash_pokeblock(unsigned long adr, spitrans8(buf[i]); SETSS; //Raise !SS to end transaction. - while(spiflash_status()&0x01) - ; + //while(spiflash_status()&0x01); return; } @@ -185,7 +185,8 @@ void spihandle(unsigned char app, unsigned char i; //Raise !SS to end transaction, just in case we forgot. - P5OUT|=SS; + P5OUT|=SS; + spisetup(); switch(verb){ //PEEK and POKE might come later. diff --git a/firmware/include/apps.h b/firmware/include/apps.h index 7c5e3b9..691e0d0 100644 --- a/firmware/include/apps.h +++ b/firmware/include/apps.h @@ -10,3 +10,4 @@ #define OCT 0x70 +#define DEBUGAPP 0xFF diff --git a/firmware/include/command.h b/firmware/include/command.h index a20067a..3be397e 100644 --- a/firmware/include/command.h +++ b/firmware/include/command.h @@ -18,6 +18,8 @@ extern unsigned char cmddata[256]; #define NOK 0x7E #define OK 0x7F +#define DEBUGSTR 0xFF + // Monitor Commands #define MONITOR_CHANGE_BAUD 0x80 #define MONITOR_RAM_PATTERN 0x90 @@ -93,6 +95,8 @@ void txdata(unsigned char app, void txstring(unsigned char app, unsigned char verb, const char *str); +//! Transmit a debug string. +void debugstr(const char *str); //! Delay void delay(unsigned int count); diff --git a/firmware/lib/command.c b/firmware/lib/command.c index 738fab6..c5e35b5 100644 --- a/firmware/lib/command.c +++ b/firmware/lib/command.c @@ -6,6 +6,7 @@ unsigned char cmddata[256]; + //! Transmit a string. void txstring(unsigned char app, unsigned char verb, @@ -18,6 +19,12 @@ void txstring(unsigned char app, serial_tx(*(str++)); } +//! Transmits a debugging string out of line. +void debugstr(const char *str){ + txstring(0xFF,0xFF,str); +} + + //! Transmit data. void txdata(unsigned char app, unsigned char verb, -- 2.20.1