3 #GoodFET SPI Flash Client
7 #Might be Winbond W25x80-specific.
12 from GoodFET import GoodFET;
13 from intelhex import IntelHex;
16 print "Usage: %s verb [objects]\n" % sys.argv[0];
17 print "%s info" % sys.argv[0];
18 print "%s dump $foo.hex [0x$start 0x$stop]" % sys.argv[0];
19 print "%s erase" % sys.argv[0];
20 print "%s write $foo.hex [0x$start 0x$stop]" % sys.argv[0];
21 print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0];
22 print "%s peek 0x$start [0x$stop]" % sys.argv[0];
23 print "%s poke 0x$adr 0x$val" % sys.argv[0];
26 #Initailize FET and set baud rate
28 client.serInit("/dev/ttyUSB0")
32 if(sys.argv[1]=="test"):
36 data=client.SPIjedec();
37 if ord(data[1])==0xFF:
42 print "Connection Test: (- is bad)\n%s" % result;
43 print "%i misreads" % dropped;
45 print "No successful reads. Is the chip wired correctly?";
47 print "Some success, some failures. Is a wire loose?";
49 print "All reads succeeded. Wiring is probably good.";
51 if(sys.argv[1]=="info"):
52 data=client.SPIjedec();
53 print "Ident as %s\nManufacturer: %02x %s\nType: %02x\nCapacity: %02x" % (
55 ord(data[1]),client.SPIjedecmanstr(),
59 if(sys.argv[1]=="dump"):
64 start=int(sys.argv[3],16);
66 stop=int(sys.argv[4],16);
68 print "Dumping code from %04x to %04x as %s." % (start,stop,f);
72 data=client.SPIpeekblock(i);
76 print "Dumped %04x."%i;
79 #print "*%08x=%02x" % (i,ord(j));
83 if(sys.argv[1]=="erase"):
84 print "Status: %s" % client.CCstatusstr();
86 print "Status: %s" %client.CCstatusstr();
88 if(sys.argv[1]=="peek"):
91 start=int(sys.argv[2],16);
94 stop=int(sys.argv[3],16);
95 print "Peeking from %04x to %04x." % (start,stop);
97 print "%04x: %02x" % (start,client.SPIpeek(start));
99 # if(sys.argv[1]=="poke"):
102 # if(len(sys.argv)>2):
103 # start=int(sys.argv[2],16);
104 # if(len(sys.argv)>3):
105 # val=int(sys.argv[3],16);
106 # print "Poking %04x to become %02x." % (start,val);
107 # client.CCpokedatabyte(start,val);