summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
9256022)
Writing pages will come next.
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@65
12e2690d-a6be-4b82-a7b7-
67c4a43b65c8
return self.data;
JEDECmanufacturers={0xFF: "MISSING",
return self.data;
JEDECmanufacturers={0xFF: "MISSING",
- 0xEF: "Winbond"};
- JEDECdevices={0xEF3014: "W25X80L",
+ 0xEF: "Winbond",
+ 0xC2: "MXIC"};
+
+ JEDECdevices={0xFFFFFF: "MISSING",
+ 0xEF3014: "W25X80L",
0xEF3013: "W25X40L",
0xEF3012: "W25X20L",
0xEF3013: "W25X40L",
0xEF3012: "W25X20L",
+ 0xEF3011: "W25X10L",
+ 0xC22014: "MX25L8005",
+ 0xC22013: "MX25L4005"
+ };
def SPIjedec(self):
"""Grab an SPI Flash ROM's JEDEC bytes."""
data=[0x9f, 0, 0, 0];
def SPIjedec(self):
"""Grab an SPI Flash ROM's JEDEC bytes."""
data=[0x9f, 0, 0, 0];
self.writecmd(0x01,0x02,3,data);
return self.data;
self.writecmd(0x01,0x02,3,data);
return self.data;
+ def SPIpokebyte(self,adr,val):
+ self.SPIwriteenable();
+ data=[0x02,
+ (adr&0xFF0000)>>16,
+ (adr&0xFF00)>>8,
+ adr&0xFF,
+ val];
+ self.SPItrans(data);
+ def SPIchiperase(self):
+ """Mass erase an SPI Flash ROM."""
+ self.SPIwriteenable();
+ #Chip Erase
+ data=[0xC7];
+ self.SPItrans(data);
+ def SPIwriteenable(self):
+ """SPI Flash Write Enable"""
+ data=[0x06];
+ self.SPItrans(data);
+
def SPIjedecmanstr(self):
"""Grab the JEDEC manufacturer string. Call after SPIjedec()."""
def SPIjedecmanstr(self):
"""Grab the JEDEC manufacturer string. Call after SPIjedec()."""
- man=self.JEDECmanufacturers[self.JEDECmanufacturer];
+ man=self.JEDECmanufacturers.get(self.JEDECmanufacturer)
if man==0:
man="UNKNOWN";
return man;
def SPIjedecstr(self):
"""Grab the JEDEC manufacturer string. Call after SPIjedec()."""
if man==0:
man="UNKNOWN";
return man;
def SPIjedecstr(self):
"""Grab the JEDEC manufacturer string. Call after SPIjedec()."""
- man=self.JEDECmanufacturers[self.JEDECmanufacturer];
+ man=self.JEDECmanufacturers.get(self.JEDECmanufacturer);
if man==0:
man="UNKNOWN";
if man==0:
man="UNKNOWN";
- device=self.JEDECdevices[self.JEDECdevice];
+ device=self.JEDECdevices.get(self.JEDECdevice);
if device==0:
device="???"
return "%s %s" % (man,device);
if device==0:
device="???"
return "%s %s" % (man,device);
if(sys.argv[1]=="dump"):
f = sys.argv[2];
start=0x0000;
if(sys.argv[1]=="dump"):
f = sys.argv[2];
start=0x0000;
+ stop=0x100000; #TODO, adjust this by the JEDEC size parameter.
if(len(sys.argv)>3):
start=int(sys.argv[3],16);
if(len(sys.argv)>4):
stop=int(sys.argv[4],16);
if(len(sys.argv)>3):
start=int(sys.argv[3],16);
if(len(sys.argv)>4):
stop=int(sys.argv[4],16);
- print "Dumping code from %04x to %04x as %s." % (start,stop,f);
- h = IntelHex(None);
+
+
+ print "Dumping code from %06x to %06x as %s." % (start,stop,f);
+ file = open(f, mode='wb')
+
i=start;
while i<=stop:
data=client.SPIpeekblock(i);
if(i%0x100==0):
i=start;
while i<=stop:
data=client.SPIpeekblock(i);
if(i%0x100==0):
- print "Dumped %04x."%i;
+ print "Dumped %06x."%i;
- h[i]=ord(j);
- #print "*%08x=%02x" % (i,ord(j));
if(sys.argv[1]=="erase"):
if(sys.argv[1]=="erase"):
- print "Status: %s" % client.CCstatusstr();
- client.CCchiperase();
- print "Status: %s" %client.CCstatusstr();
if(sys.argv[1]=="peek"):
start=0x0000;
if(sys.argv[1]=="peek"):
start=0x0000;
stop=start;
if(len(sys.argv)>3):
stop=int(sys.argv[3],16);
stop=start;
if(len(sys.argv)>3):
stop=int(sys.argv[3],16);
- print "Peeking from %04x to %04x." % (start,stop);
+ print "Peeking from %06x to %06x." % (start,stop);
- print "%04x: %02x" % (start,client.SPIpeek(start));
+ print "%06x: %02x" % (start,client.SPIpeek(start));
-# if(sys.argv[1]=="poke"):
-# start=0x0000;
-# val=0x00;
-# if(len(sys.argv)>2):
-# start=int(sys.argv[2],16);
-# if(len(sys.argv)>3):
-# val=int(sys.argv[3],16);
-# print "Poking %04x to become %02x." % (start,val);
-# client.CCpokedatabyte(start,val);
+
+if(sys.argv[1]=="poke"):
+ start=0x0000;
+ val=0x00;
+ if(len(sys.argv)>2):
+ start=int(sys.argv[2],16);
+ if(len(sys.argv)>3):
+ val=int(sys.argv[3],16);
+ print "Poking %06x to become %02x." % (start,val);
+ client.SPIpokebyte(start,val);