#!/usr/bin/env python #GoodFET SPI Flash Client #by Travis Goodspeed # Pinout: # 1 MISO # 2 VCC # 3 MOSI # 4 # 5 !SS # 6 # 7 CLK # 8 !HOST_INT # 9 GND # 11 !WAKE import sys; import binascii; import array; from GoodFETEM260 import GoodFETEM260; from intelhex import IntelHex; if(len(sys.argv)==1): print "Usage: %s verb [objects]\n" % sys.argv[0]; print "%s info" % sys.argv[0]; print "%s test" % sys.argv[0]; print "%s randtest" % sys.argv[0]; #print "%s dump $foo.rom [0x$start 0x$stop]" % sys.argv[0]; #print "%s erase" % sys.argv[0]; #print "%s flash $foo.rom [0x$start 0x$stop]" % sys.argv[0]; #print "%s verify $foo.rom [0x$start 0x$stop]" % sys.argv[0]; print "%s peek 0x$start [0x$stop]" % sys.argv[0]; print "%s poke 0x$adr 0x$val" % sys.argv[0]; sys.exit(); #Initialize FET and set baud rate client=GoodFETEM260(); client.serInit() #client.verbose=1; client.SPIsetup(); #Dummy read. #Might read as all ones if chip has a startup delay. client.EM260spiversion(); if(sys.argv[1]=="info"): client.info(); if(sys.argv[1]=="test"): print "Grabbing info three times." client.info(); client.info(); client.info(); print "Some random numbers from EZSP." for foo in range(0,4): print "%04x" % client.rand16(); if(sys.argv[1]=="randtest"): print "Even Odd HEven LEven Hodd Lodd " max=2**33; foo=0; while foo>8, even&0xFF, odd>>8, odd&0xFF); sys.stdout.flush() foo=foo+1; if(sys.argv[1]=="dump"): f = sys.argv[2]; start=0x0000; stop=4*1024; if(len(sys.argv)>3): start=int(sys.argv[3],16); if(len(sys.argv)>4): stop=int(sys.argv[4],16); print "Dumping from %04x to %04x as %s." % (start,stop,f); h = IntelHex(None); i=start; while i<=stop: data=client.peek8(i); print "Dumped %04x=%02x."%(i,data); h[i]=data; i+=1; h.write_hex_file(f); if(sys.argv[1]=="peek"): start=0x0000; if(len(sys.argv)>2): start=int(sys.argv[2],16); stop=start; if(len(sys.argv)>3): stop=int(sys.argv[3],16); print "Peeking from %04x to %04x." % (start,stop); while start<=stop: print "%04x: %02x" % (start,client.peek8(start)); start=start+1; if(sys.argv[1]=="poke"): start=0x0000; if(len(sys.argv)>2): start=int(sys.argv[2],16); val=0xde; if(len(sys.argv)>3): val=int(sys.argv[3],16); print "Poking %02x to be %02x." % (start,val); client.poke8(start,val);