#!/usr/bin/env python # GoodFET SPI Flash Client # # (C) 2012 Travis Goodspeed # # This code is being rewritten and refactored. You've been warned! import sys; import binascii; import array; from GoodFETMCPCAN import GoodFETMCPCAN; 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 peek 0x$start [0x$stop]" % sys.argv[0]; #print "%s poke 0x$adr 0x$val" % sys.argv[0]; print "\n%s sniff" % sys.argv[0]; sys.exit(); #Initialize FET and set baud rate client=GoodFETMCPCAN(); client.serInit() client.MCPsetup(); #Dummy read. #Might read as all ones if chip has a startup delay. if(sys.argv[1]=="info"): print "MCP2515 Info:\n\n"; print "Mode: %s" % client.MCPcanstatstr(); print "Read Status: %02x" % client.MCPreadstatus(); print "Rx Status: %02x" % client.MCPrxstatus(); print "Tx Errors: %3d" % client.peek8(0x1c); print "Rx Errors: %3d" % client.peek8(0x1d); print "RX Buffers:" packet0=client.readrxbuffer(0); packet1=client.readrxbuffer(1); for foo in [packet0, packet1]: print client.packet2str(foo); if(sys.argv[1]=="sniff"): client.MCPreqstatListenOnly(); while 1: packet=client.rxpacket(); if packet!=None: print client.packet2str(packet); if(sys.argv[1]=="test"): print "MCP2515 Self Test:"; #Switch to config mode and try to rewrite TEC. client.MCPreqstatConfiguration(); client.poke8(0x00,0xde); if client.peek8(0x00)!=0xde: print "ERROR: Poke to TEC failed."; else: print "SUCCESS: Register read/write."; #Switch to Loopback mode and try to catch our own packet. client.MCPreqstatLoopback(); client.txpacket([0xb1, 0x6b, 0x00, 0x65, 0xb1, 0x6b, 0x00, 0x65 ]); print "Waiting on loopback packet."; packet=None; while packet==None: packet=client.rxpacket(); print "Success! Got %s" % client.packet2str(packet); 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;