X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETAT91X40.py;h=fa4b30ad333ae9ed707e9082f8e4b99a9d9ed44b;hp=12803b5977e05b1034007ae2857f72d711b07252;hb=5f96f56755e0c8038b759f0e26c6a578847e4d9d;hpb=74e36bf601fbabbc05222940ace614ae0387d57c diff --git a/client/GoodFETAT91X40.py b/client/GoodFETAT91X40.py index 12803b5..fa4b30a 100644 --- a/client/GoodFETAT91X40.py +++ b/client/GoodFETAT91X40.py @@ -265,7 +265,7 @@ def mcr_decode(mcr): #print hex(drp) if drp and drp != 1: drp = 2 - return (validAddrBits, maxAddrSpace, validCS, codeLabel, drp) + return (validAddrBits, maxAddrSpace, validCS, codeLabel, drp) def mcr_decode_str(mcr): ( validAddrBits, maxAddrSpace, validCS, codeLabel, drp) = mcr_decode(mcr) @@ -330,10 +330,10 @@ class GoodFETAT91X40(GoodFETARM7): addr = EBI_BASE + (chipnum*4) self.ARMwriteChunk(addr,[value]) - def getEBIMemoryMap(self): + def getEBIMemoryMapstr(self): keys = ebi_memory_map_items.keys() keys.sort() - output = [ "EBI Memory Map"] + output = [ "===EBI Memory Map==="] for x in xrange(8): desc,name,rw,default = ebi_memory_map_items[x*4] output.append("\nMAP: %s (%s) - default: %x\n%s"%(name,desc,default,self.getChipSelectRegstr(x))) @@ -345,9 +345,8 @@ class GoodFETAT91X40(GoodFETARM7): return mcr def getMemoryControlRegisterstr(self): return mcr_decode_str(self.getMemoryControlRegister()) - def getEBIMCR(self): - print "EBI Memory Control Register\n" - print self.getMemoryControlRegisterstr() + def getEBIMCRstr(self): + return "EBI Memory Control Register\n" + self.getMemoryControlRegisterstr() def getInterruptSourceModeReg(self, regnum): regval = self.ARMreadMem(AIC_SMR[regnum][0]) @@ -580,17 +579,17 @@ def at91x40_cli_handler(client, argv): # Yes, this requires that you set the start and stop addresses special_reg_num=int(argv[5]) special_addr=int(argv[6],16) + err_list = [] print "Dumping from %04x to %04x as %s." % (start,stop,f) - #h = IntelHex16bit(None) # FIXME: get mcu state and return it to that state client.halt() h = IntelHex(None) i=start + err_cnt = 0 + reset_cnt = 0 while i<=stop: - err_cnt = 0 - #data=client.ARMreadMem(i, 48) try: data=client.ARMreadChunk(i, 48, verbose=0) print "Dumped %06x."%i @@ -613,12 +612,12 @@ def at91x40_cli_handler(client, argv): else: try: print "Unknown error during read. Resync and retry." + err_list.append("0x%06x"%i) # If we error out several times then reset the chip and restart # This uses a special register value from a Chip Select Register # to test that the chip is in the operation state we expect if not ((err_cnt+1) % 2): - reset_cnt = 0 while True: print " Reset:",reset_cnt check_addr = client.getChipSelectReg(special_reg_num) @@ -638,9 +637,6 @@ def at91x40_cli_handler(client, argv): client.resume() client.halt() - #Disable Watch Dog - if client.checkWatchDog(): - client.disableWatchDog() err_cnt = 0 except: err_cnt += 1 @@ -650,19 +646,26 @@ def at91x40_cli_handler(client, argv): client.resume() h.write_hex_file(f) + print "Addresses that required resync:" + if err_list: + for e in err_list: + print " ",e + else: + print " None" if(argv[1]=="memorymap"): client.halt() - print client.getEBIMCR() + print "==============================================" + print client.getEBIMCRstr() print "" - print client.getEBIMemoryMap() + print client.getEBIMemoryMapstr() client.resume() if(argv[1]=="memorycontrolreg"): client.halt() - print client.getEBIMCR() + print client.getEBIMCRstr() client.resume()