def _get_default_serial_port(args): # Import is done here in order to move it after the check_environment() ensured that pyserial has been installed try: import serial.tools.list_ports esptool_path = os.path.join(os.environ['IDF_PATH'], 'components/esptool_py/esptool/') sys.path.insert(0, esptool_path) import esptool ports = list( sorted(p.device for p in serial.tools.list_ports.comports())) # high baud rate could cause the failure of creation of the connection esp = esptool.get_default_connected_device(serial_list=ports, port=None, connect_attempts=4, initial_baud=115200) if esp is None: raise NoSerialPortFoundError( "No serial ports found. Connect a device, or use '-p PORT' option to set a specific port." ) serial_port = esp.serial_port esp._port.close() return serial_port except NoSerialPortFoundError: raise except Exception as e: raise FatalError( 'An exception occurred during detection of the serial port: {}' .format(e))
def _get_default_serial_port(args): # Import is done here in order to move it after the check_environment() ensured that pyserial has been installed try: import serial.tools.list_ports esptool_path = os.path.join(os.environ["IDF_PATH"], "components/esptool_py/esptool/") sys.path.insert(0, esptool_path) import esptool ports = list(sorted(p.device for p in serial.tools.list_ports.comports())) esp = esptool.get_default_connected_device(serial_list=ports, port=None, connect_attempts=3, initial_baud=args.baud) return esp.serial_port except Exception: raise FatalError("No serial ports found. Connect a device, or use '-p PORT' option to set a specific port.")
def board_reset(self): self.text_out('Performing target reset...') try: # this will only take a short moment, so we are not doing this # in the background eport = self.get_port() args = Namespace( chip=self.setup["esptool"]["chip"], connect_attempts=self.setup["esptool"]["connect_attempts"]) esp = esptool.get_default_connected_device( serial_list=[eport], port=eport, initial_baud=ESPROM_BAUD, chip=args.chip, connect_attempts=args.connect_attempts) esp.hard_reset() esp._port.close() self.text_out('ok\n') except Exception as e: self.text_out('failed: {}\n'.format(str(e)))
def test_read_write_memory_stub(self): esp = esptool.get_default_connected_device([serialport], serialport, 10, 115200, chip) esp = esp.run_stub() self._test_read_write(esp)
def run(self): esp = None args = None vargs = None ok = False try: # build the args namespace esptool expects args = Namespace() # copy all enties from setup file for a in self.setup: setattr(args, a, self.setup[a]) # We only verify the app portion as the other portions incl # nvm and may/will change during runtime. So we need a special copy # of args for verify. # verify only if we have a single image that starts at 0x1000 if len(self.setup["files"] ) == 1 and self.setup["files"][0]["addr"] == 0x1000: vargs = Namespace() for a in self.setup: setattr(vargs, a, self.setup[a]) # map files to addr_filename tuples args.addr_filename = [] for f in self.setup["files"]: # load file into ram as older python version cannot # seek within zip files but esptool expects to be # able to seek # read "source" if present, otherwise read "filename" if "source" in f: fname = f["source"] else: fname = f["filename"] with self.setup["open"](fname, "rb") as fh: data = fh.read() fh = io.BytesIO(data) setattr(fh, "name", fname) args.addr_filename.append((f["addr"], fh)) # for verify create a ram copy of the firmware which skips to 0x10000 if vargs: vargs.addr_filename = [] f = self.setup["files"][0] if "source" in f: fname = f["source"] else: fname = f["filename"] with self.setup["open"](fname, "rb") as fh: # get access to full image data but skip the first # (0x10000 - addr) = 0xf000 bytes data = args.addr_filename[0][1].getbuffer()[0x10000 - f["addr"]:] dio = io.BytesIO(data) setattr(dio, "name", "app area of {}".format(fname)) vargs.addr_filename.append((0x10000, dio)) esp = esptool.get_default_connected_device( serial_list=[self.port], port=self.port, initial_baud=ESPROM_BAUD, chip=args.chip, connect_attempts=args.connect_attempts) print("Chip is %s" % (esp.get_chip_description())) print("Features: %s" % ", ".join(esp.get_chip_features())) print("Crystal is %dMHz" % esp.get_crystal_freq()) esptool.read_mac(esp, args) esp = esp.run_stub() if args.baud > ESPROM_BAUD: esp.change_baud(args.baud) esptool.detect_flash_size(esp, args) if args.flash_size != 'keep': esp.flash_set_parameters( esptool.flash_size_bytes(args.flash_size)) do_write = True if vargs: try: esptool.verify_flash(esp, vargs) do_write = False # verify successful, no need to write except: pass if do_write: esptool.write_flash(esp, args) else: print("Firmware verified successfully, skipping flash") esp.hard_reset() esp._port.close() ok = True except IOException as e: self.alert.emit({ "title": "esptool", "message": "Esptool error", "info": "Exception when accessing\n" + str(self.port), "detail": str(e) }) if esp: esp._port.close() # since the files are now stored in memory we don't have to # close them here anymore self.done.emit(ok)