def download(self, startAddress, length, filePath): pageSize = min(248, length) data = bytearray() address = startAddress pages = int(length / pageSize) programmer = AvrIspFlow(self.xbee) self.resolve_target() self.reset_target() programmer.getTargetParameters() for i in range(0, pages): dataPage = programmer.readRomPage(address, pageSize) if len(dataPage) < pageSize: raise Exception("Read less bytes than the expected page size") data += dataPage address += pageSize if pages * pageSize < length: remainder = length - pages * pageSize print("reading remainder " + str(remainder)) data += programmer.readRomPage(address, remainder) self.restore_target() writer = HexFileFormat(filePath) writer.save_bytes(data, startAddress)