def verifyFile(self, inputFile=None, startAddress=None, progressReport=None): if inputFile is not None: self.inputFile = inputFile if startAddress is not None: self.startAddress = startAddress returnValue = True f = fileFormatReader(self.inputFile, self.startAddress) try: item0, item1 = f.getRawBinary() self.startAddress = item0 file_content = item1 except IOError: errorMessage((('File ' + self.inputFile) + ' open failed\n')) returnValue = False if returnValue: file_size = len(file_content) packet = [] address = self.startAddress size = 0 errors = 0 while returnValue: packet = [] packet_size = self.packetSize packet_string = file_content[size:(size + packet_size)] packet_size = len(packet_string) if packet_size == 0: infoMessage('\n') break else: size = (size + packet_size) packet.extend(packet_string) if progressReport: progressReport(size, file_size) else: infoMessage(('Verifying %05d/%05d\r' % (size, file_size))) arg1 = u32ToArray(address) arg1.reverse() reply = self.sendCommand('READ', [arg1, [(len(packet) - 1)]]) if reply[:3] != [ACK, ACK, ACK]: errorMessage(('\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size))) returnValue = False if len(reply[3:]) != len(packet): errorMessage(('Invalid data read, expected length = %d, received bytes = %d\n' % (len(packet), len(reply[3:])))) returnValue = False if (returnValue and reply[3:] != packet): returnValue = False infoMessage('Verify failed \n') infoMessage(('%-8s: %5s %5s\n' % ('Addr', 'Flash', 'file'))) for i in range(len(packet)): if (reply[(3 + i)]) != (packet[i]): infoMessage(('%08x: %02x %02x\n' % ((address + i), (reply[(i + 3)]), (packet[i])))) errors = (errors + 1) if errors > 64: break else: continue else: continue address = (address + packet_size) continue if returnValue: if progressReport == None: infoMessage('Done\n') return returnValue
def verifyFile(self, inputFile=None, startAddress=None, progressReport=None): if inputFile is not None: self.inputFile = inputFile if startAddress is not None: self.startAddress = startAddress returnValue = True f = fileFormatReader(self.inputFile, self.startAddress) try: item0, item1 = f.getRawBinary() self.startAddress = item0 file_content = item1 except IOError: errorMessage((('File ' + self.inputFile) + ' open failed\n')) returnValue = False if returnValue: file_size = len(file_content) packet = [] address = self.startAddress size = 0 errors = 0 while returnValue: packet = [] packet_size = self.packetSize packet_string = file_content[size:(size + packet_size)] packet_size = len(packet_string) if packet_size == 0: infoMessage('\n') break else: size = (size + packet_size) packet.extend(packet_string) if progressReport: progressReport(size, file_size) else: infoMessage(('Verifying %05d/%05d\r' % (size, file_size))) arg1 = u32ToArray(address) arg1.reverse() reply = self.sendCommand('READ', [arg1, [(len(packet) - 1)]]) if reply[:3] != [ACK, ACK, ACK]: errorMessage(('\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size))) returnValue = False if len(reply[3:]) != len(packet): errorMessage(( 'Invalid data read, expected length = %d, received bytes = %d\n' % (len(packet), len(reply[3:])))) returnValue = False if (returnValue and reply[3:] != packet): returnValue = False infoMessage('Verify failed \n') infoMessage( ('%-8s: %5s %5s\n' % ('Addr', 'Flash', 'file'))) for i in range(len(packet)): if (reply[(3 + i)]) != (packet[i]): infoMessage( ('%08x: %02x %02x\n' % ((address + i), (reply[(i + 3)]), (packet[i])))) errors = (errors + 1) if errors > 64: break else: continue else: continue address = (address + packet_size) continue if returnValue: if progressReport == None: infoMessage('Done\n') return returnValue
def loadFile(self, inputFile=None, startAddress=None, progressReport=None, doErase=True): if inputFile is not None: self.inputFile = inputFile if startAddress is not None: self.startAddress = startAddress returnValue = True f = fileFormatReader(self.inputFile, self.startAddress) try: item0, item1 = f.getRawBinary() self.startAddress = item0 file_content = item1 except IOError: errorMessage((('File ' + self.inputFile) + ' open failed\n')) returnValue = False if returnValue: file_size = len(file_content) packet = [] address = self.startAddress pages = int(((file_size + 1023) / 1024)) startPage = (((self.startAddress & 4294966272L) - 134217728) / 1024) eraseArg = ([(pages - 1)] + range(startPage, (startPage + pages), 1)) infoMessage(('Erasing pages from %d to %d...' % (startPage, ((startPage + pages) - 1)))) if ('STM32W_FLASHER_JLINK_DONT_ERASE' in os.environ or (not doErase)): infoMessage('(skipped)', False) else: reply = self.sendCommand('ERASE', [eraseArg], timeout=10) if reply != [ACK, ACK]: errorMessage(('Unexpected reply %s\n' % repr(reply))) returnValue = False if returnValue: infoMessage('done\n', False) size = 0 while returnValue: packet = [] packet_size = self.packetSize packet_string = file_content[size:(size + packet_size)] packet_size = len(packet_string) if packet_size == 0: infoMessage('\n') break else: size = (size + packet_size) packet.extend(packet_string) if (len(packet) % 2) != 0: packet = (packet + [255]) packet = ([(len(packet) - 1)] + packet) if progressReport: progressReport(size, file_size) else: infoMessage(('Programming %05d/%05d\r' % (size, file_size))) arg1 = u32ToArray(address) arg1.reverse() if (self.serialMode or size == packet_size): reply = self.sendCommand('WRITE', [arg1, packet]) if reply != [ACK, ACK, ACK]: errorMessage(('\n\n+Unexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size))) returnValue = False else: retries = 0 MAX_RETRIES = 3 while returnValue: reply = self.sendCommand('WRITE_INCREMENTAL', [packet]) if reply != [ACK, ACK]: retries = (retries + 1) if retries > MAX_RETRIES: errorMessage(('\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size))) returnValue = False break else: errorMessage(('\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size))) infoMessage('Retrying...\n') continue else: break address = (address + packet_size) continue if returnValue: if progressReport == None: infoMessage('Done\n') return returnValue
def loadFile(self, inputFile=None, startAddress=None, progressReport=None, doErase=True): if inputFile is not None: self.inputFile = inputFile if startAddress is not None: self.startAddress = startAddress returnValue = True f = fileFormatReader(self.inputFile, self.startAddress) try: item0, item1 = f.getRawBinary() self.startAddress = item0 file_content = item1 except IOError: errorMessage((('File ' + self.inputFile) + ' open failed\n')) returnValue = False if returnValue: file_size = len(file_content) packet = [] address = self.startAddress pages = int(((file_size + 1023) / 1024)) startPage = (((self.startAddress & 4294966272L) - 134217728) / 1024) eraseArg = ([(pages - 1)] + range(startPage, (startPage + pages), 1)) infoMessage(('Erasing pages from %d to %d...' % (startPage, ((startPage + pages) - 1)))) if ('STM32W_FLASHER_JLINK_DONT_ERASE' in os.environ or (not doErase)): infoMessage('(skipped)', False) else: reply = self.sendCommand('ERASE', [eraseArg], timeout=10) if reply != [ACK, ACK]: errorMessage(('Unexpected reply %s\n' % repr(reply))) returnValue = False if returnValue: infoMessage('done\n', False) size = 0 while returnValue: packet = [] packet_size = self.packetSize packet_string = file_content[size:(size + packet_size)] packet_size = len(packet_string) if packet_size == 0: infoMessage('\n') break else: size = (size + packet_size) packet.extend(packet_string) if (len(packet) % 2) != 0: packet = (packet + [255]) packet = ([(len(packet) - 1)] + packet) if progressReport: progressReport(size, file_size) else: infoMessage( ('Programming %05d/%05d\r' % (size, file_size))) arg1 = u32ToArray(address) arg1.reverse() if (self.serialMode or size == packet_size): reply = self.sendCommand('WRITE', [arg1, packet]) if reply != [ACK, ACK, ACK]: errorMessage( ('\n\n+Unexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size))) returnValue = False else: retries = 0 MAX_RETRIES = 3 while returnValue: reply = self.sendCommand('WRITE_INCREMENTAL', [packet]) if reply != [ACK, ACK]: retries = (retries + 1) if retries > MAX_RETRIES: errorMessage(( '\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size))) returnValue = False break else: errorMessage(( '\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size))) infoMessage('Retrying...\n') continue else: break address = (address + packet_size) continue if returnValue: if progressReport == None: infoMessage('Done\n') return returnValue