3 #GoodFET I2C EEPROM Client
10 from GoodFET import GoodFET;
11 from intelhex import IntelHex;
14 print "Usage: %s verb [objects]\n" % sys.argv[0];
15 print "%s info" % sys.argv[0];
16 print "%s dump $foo.hex [0x$start 0x$stop]" % sys.argv[0];
17 print "%s erase" % sys.argv[0];
18 print "%s write $foo.hex [0x$start 0x$stop]" % sys.argv[0];
19 print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0];
20 print "%s peek 0x$start [0x$stop]" % sys.argv[0];
21 print "%s poke 0x$adr 0x$val" % sys.argv[0];
24 #Initailize FET and set baud rate
32 #Might read as all ones if chip has a startup delay.
35 if(sys.argv[1]=="foo"):
39 #print "%i" % client.I2Cwrite([0xA0, 0x00, 0x00, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55]);
43 print "%i" % client.I2Cwrite([0xA0, 0x00, 0x00]); # Set ADR=0x00
44 client.I2Cstart();#restart
45 print "%i" % client.I2Cwrite([0xA1]); # Set ADR=0x00
46 data=client.I2Cread(128);
54 if(sys.argv[1]=="test"):
58 data=client.SPIjedec();
59 if ord(data[1])==0xFF:
64 print "Connection Test: (- is bad)\n%s" % result;
65 print "%i misreads" % dropped;
67 print "No successful reads. Is the chip wired correctly?";
69 print "Some success, some failures. Is a wire loose?";
71 print "All reads succeeded. Wiring is probably good.";
73 if(sys.argv[1]=="info"):
74 data=client.SPIjedec();
75 print "Ident as %s\nManufacturer: %02x %s\nType: %02x\nCapacity: %02x" % (
77 ord(data[1]),client.SPIjedecmanstr(),
81 if(sys.argv[1]=="dump"):
84 stop=0x100000; #TODO, adjust this by the JEDEC size parameter.
86 start=int(sys.argv[3],16);
88 stop=int(sys.argv[4],16);
90 print "Dumping code from %06x to %06x as %s." % (start,stop,f);
91 file = open(f, mode='wb')
95 data=client.SPIpeekblock(i);
97 print "Dumped %06x."%i;
102 if(sys.argv[1]=="flash"):
105 stop=0x100000; #TODO, adjust this by the JEDEC size parameter.
107 start=int(sys.argv[3],16);
109 stop=int(sys.argv[4],16);
111 print "Flashing code from %06x to %06x with %s." % (start,stop,f);
112 file = open(f, mode='rb')
115 chars=list(file.read());
119 bytes=range(0,chunksize);
120 for j in range(0,chunksize):
121 bytes[j]=ord(chars[i+j]);
122 #client.SPIpokebyte(i,ord(chars[i]));
123 client.SPIpokebytes(i,bytes);
127 print "Flashed %06x."%i;
131 if(sys.argv[1]=="erase"):
132 client.SPIchiperase();
134 if(sys.argv[1]=="peek"):
137 start=int(sys.argv[2],16);
140 stop=int(sys.argv[3],16);
141 print "Peeking from %06x to %06x." % (start,stop);
143 print "%06x: %02x" % (start,client.SPIpeek(start));
146 if(sys.argv[1]=="poke"):
150 start=int(sys.argv[2],16);
152 val=int(sys.argv[3],16);
153 print "Poking %06x to become %02x." % (start,val);
155 while client.SPIpeek(start)!=val:
156 client.SPIpokebyte(start,val);
157 print "Poked to %02x" % client.SPIpeek(start);