# Get BLE info page print "\nFlashing:" # Check for PStore pssize = dbg.getBLEPStoreSize() if pssize > 0: print " - Backing-up PS Store (%i Bytes)..." % pssize pstoreData = dbg.readCODE( 0x18000, pssize ) hexFile.set( 0x18000, pstoreData ) # Send chip erase print " - Chip erase..." try: dbg.chipErase() except Exception as e: print "ERROR: %s" % str(e) sys.exit(3) # Flash memory dbg.pauseDMA(False) print " - Flashing %i memory blocks..." % len(hexFile.memBlocks) for mb in hexFile.memBlocks: # Flash memory block print " -> 0x%04x : %i bytes " % (mb.addr, mb.size), try: dbg.writeCODE( mb.addr, mb.bytes, verify=True, showProgress=True ) except Exception as e: print "ERROR: %s" % str(e)
print "> flash usage: %3.1f%% (%d bytes of %d)" % ( (maxMem * 100.0 / dbg.flashSize), maxMem, dbg.flashSize) # Check for oversize data if maxMem > (dbg.flashSize): print "ERROR: Data too bit to fit in chip's memory!" sys.exit(4) try: print "> enter debug:" dbg.enter() if (full_erase): print "> %3d%%: erasing chip..." % (100 * (1.0 / 17)), dbg.chipErase() time.sleep(1) print "done" maxPages = dbg.flashSize / dbg.flashPageSize emptyPage = bytearray([0xFF] * dbg.flashPageSize) for p in range(maxPages): print "> flashing page: %d" % p pageAddress = p * dbg.flashPageSize #data to write pageData = flash_data[pageAddress:(p + 1) * dbg.flashPageSize] #check if page to write is empty: if (emptyPage == pageData):