Beispiel #1
0
    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))
Beispiel #2
0
    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.")
Beispiel #3
0
 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)))
Beispiel #4
0
 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)
Beispiel #5
0
    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)