0x00, 0x00, 0x00, 0x00
]);
return data[1:len(data)];
+ def rxpacket(self):
+ """Reads the next incoming packet from either buffer.
+ Returns None immediately if no packet is waiting."""
+ status=self.MCPrxstatus()&0xC0;
+ if status&0x40:
+ #Buffer 0 has higher priority.
+ return self.rxbuffer(0);
+ elif status&0x80:
+ #Buffer 1 has lower priority.
+ return self.rxbuffer(1);
+ else:
+ return None;
+ def packet2str(self,packet):
+ """Converts a packet from the internal format to a string."""
+ toprint="";
+ for bar in packet:
+ toprint=toprint+("%02x "%ord(bar))
+ return toprint;
def peek8(self,adr):
"""Read a byte from the given address. Untested."""
data=self.SPItrans([0x03,adr&0xFF,00]);
--- /dev/null
+#!/usr/bin/env python
+# GoodFET SPI Flash Client
+#
+# (C) 2012 Travis Goodspeed <travis at radiantmachines.com>
+#
+# 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:";
+ 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"):
+ while 1:
+ packet=client.rxpacket();
+ if packet!=None:
+ print client.packet2str(packet);
+if(sys.argv[1]=="test"):
+ print "MCP2515 Self Test:";
+
+ client.poke8(0x00,0xde);
+ if client.peek8(0x00)!=0xde:
+ print "ERROR: Poke to TEC failed.";
+ else:
+ print "SUCCESS: Register read/write.";
+
+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;