From: travisutk Date: Thu, 8 Jul 2010 17:50:31 +0000 (+0000) Subject: RNG test. X-Git-Url: http://git.rot13.org/?p=goodfet;a=commitdiff_plain;h=6c02800bfe615056dfb67f0285e569e199e8142b RNG test. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@670 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- diff --git a/client/GoodFETEM260.py b/client/GoodFETEM260.py index 93d1bcb..0fedd58 100644 --- a/client/GoodFETEM260.py +++ b/client/GoodFETEM260.py @@ -23,40 +23,68 @@ from GoodFETSPI import GoodFETSPI; class GoodFETEM260(GoodFETSPI): EM260APP=0x01; seq=0; - def EM260trans(self,data): + def EM260trans(self,data,retry=1): """Exchange data by EM260 SPI. (Slightly nonstandard.)""" - self.data=data; + + if retry==0: + #Retries exceeded. Send a trivial command to clear error. + data=[0x0A,0xA7]; self.writecmd(0x01,0x82,len(data),data); + try: reply=ord(self.data[0]); if(reply==0x00): - print "Warning: EM260 rebooted."; - return self.EM260trans(data); + #print "Warning: EM260 rebooted."; + return self.EM260trans(data,retry-1); if(reply==0x02): - print "Error: Aborted Transaction."; - #return self.EM260trans(data); + #print "Error: Aborted Transaction."; + return self.EM260trans(data,retry-1); if(reply==0x03): print "Error: Missing Frame Terminator."; - #return self.data; + return self.data; + if(reply==0x04): + print "Error: Reserved Error. (Access denied?)"; + return self.data; except: print "Error in EM260trans."; return self.data; - + def EZSPtrans(self,frame): + """Send an EZSP frame.""" + data=self.EM260trans([0xFE,len(frame)+2, + self.seq,0x00, + ]+frame+[ + 0xA7]); + #s=""; + #for foo in data: + # s=s+"%02x " % ord(foo); + #print s; + if ord(data[0])!=0xFE: + print "EZSP error: 0x%02x" % ord(data[0]); + if frame[0]!=ord(data[4]): + print "EZSP warning: Command 0x%02x returned type 0x%02x." % ( + frame[0],ord(data[4])); + self.seq=self.seq+1; + return data; + #return ord(data[0]); + def peek8(self,adr): """Read a byte from the given address.""" - data=self.EM260trans([0xfe,0x01,self.seq,0x00, - 0x49, - 0xA7]); - s=""; - for foo in data: - s=s+"%02x " % ord(foo); - print s; + + data=self.EZSPtrans([0x47,adr&0xFF]); return ord(data[0]); + + def rand16(self): + """Read a byte from the given address.""" + + data=self.EZSPtrans([0x49]); + return ord(data[6])+(ord(data[7])<<8); + def info(self): """Read the info bytes.""" + print "Ember EM26 Z-Stack SPI Module."; version=self.EM260spiversion(); status=self.EM260spistatus(); print "Version: %i" % (version); diff --git a/client/goodfet.em260 b/client/goodfet.em260 index bc9454e..3ec661a 100755 --- a/client/goodfet.em260 +++ b/client/goodfet.em260 @@ -33,6 +33,7 @@ client.SPIsetup(); #Dummy read. #Might read as all ones if chip has a startup delay. +client.EM260spiversion(); if(sys.argv[1]=="info"): client.info(); @@ -41,6 +42,11 @@ if(sys.argv[1]=="test"): 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]=="dump"): f = sys.argv[2]; start=0x0000;