EM260 extensions to SPI are almost ready.
[goodfet] / client / goodfet.em260
1 #!/usr/bin/env python
2
3 #GoodFET SPI Flash Client
4 #by Travis Goodspeed
5
6 #N.B.,
7 #Might be Winbond W25x80-specific.
8
9 import sys;
10 import binascii;
11 import array;
12
13 from GoodFETEM260 import GoodFETEM260;
14 from intelhex import IntelHex;
15
16 if(len(sys.argv)==1):
17     print "Usage: %s verb [objects]\n" % sys.argv[0];
18     print "%s info" % sys.argv[0];
19     print "%s dump $foo.rom [0x$start 0x$stop]" % sys.argv[0];
20     #print "%s erase" % sys.argv[0];
21     #print "%s flash $foo.rom [0x$start 0x$stop]" % sys.argv[0];
22     #print "%s verify $foo.rom [0x$start 0x$stop]" % sys.argv[0];
23     print "%s peek 0x$start [0x$stop]" % sys.argv[0];
24     #print "%s poke 0x$adr 0x$val" % sys.argv[0];
25     sys.exit();
26
27 #Initialize FET and set baud rate
28 client=GoodFETEM260();
29 client.serInit()
30 #client.verbose=1;
31
32 client.SPIsetup();
33
34 #Dummy read.
35 #Might read as all ones if chip has a startup delay.
36
37 if(sys.argv[1]=="info"):
38         client.info();
39 if(sys.argv[1]=="test"):
40         for adr in range(0,32): #*1024):
41             val=client.peek8(adr);
42             print "%04x:=%02x" % (adr,val);
43 if(sys.argv[1]=="dump"):
44     f = sys.argv[2];
45     start=0x0000;
46     stop=4*1024;
47     if(len(sys.argv)>3):
48         start=int(sys.argv[3],16);
49     if(len(sys.argv)>4):
50         stop=int(sys.argv[4],16);
51     
52     print "Dumping from %04x to %04x as %s." % (start,stop,f);
53     h = IntelHex(None);
54     i=start;
55     while i<=stop:
56         data=client.peek8(i);
57         print "Dumped %04x=%02x."%(i,data);
58         h[i]=data;
59         i+=1;
60     h.write_hex_file(f);
61
62 if(sys.argv[1]=="peek"):
63     start=0x0000;
64     if(len(sys.argv)>2):
65         start=int(sys.argv[2],16);
66     stop=start;
67     if(len(sys.argv)>3):
68         stop=int(sys.argv[3],16);
69     print "Peeking from %04x to %04x." % (start,stop);
70     while start<=stop:
71         print "%04x: %02x" % (start,client.peek8(start));
72         start=start+1;