From: He Yin Ling Date: Wed, 2 Jan 2019 06:51:36 +0000 (+0800) Subject: test: fix failed to download in example test: X-Git-Tag: v3.3-beta2~126^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1c54630eaa8a946891b20d04ee197aeb1ec6df84;p=esp-idf test: fix failed to download in example test: 1. example test uses auto detect flash size. we need to call `detect_flash_size` before write flash 2. fix incorrect baudrate used: when using WROVER-Kits, it's likely that download with baudrate 921600 will fail. If we don't reset serial setting in decorator, 921600 will become the default baudrate. This causes all the subsequent communication fails 3. do hw reset after used esptool function --- diff --git a/tools/tiny-test-fw/IDF/IDFDUT.py b/tools/tiny-test-fw/IDF/IDFDUT.py index 9d2f25caf6..ec690a1776 100644 --- a/tools/tiny-test-fw/IDF/IDFDUT.py +++ b/tools/tiny-test-fw/IDF/IDFDUT.py @@ -22,8 +22,6 @@ import tempfile from serial.tools import list_ports -from collections import namedtuple - import DUT try: @@ -51,14 +49,20 @@ def _uses_esptool(func): settings = self.port_inst.get_settings() - rom = esptool.ESP32ROM(self.port_inst) - rom.connect('hard_reset') - esp = rom.run_stub() + try: + rom = esptool.ESP32ROM(self.port_inst) + rom.connect('hard_reset') + esp = rom.run_stub() - ret = func(self, esp, *args, **kwargs) + ret = func(self, esp, *args, **kwargs) + # do hard reset after use esptool + esp.hard_reset() + finally: + # always need to restore port settings + self.port_inst.apply_settings(settings) - self.port_inst.apply_settings(settings) self.start_receive() + return ret return handler @@ -94,6 +98,8 @@ class IDFDUT(DUT.SerialDUT): except RuntimeError: return None finally: + # do hard reset after use esptool + esp.hard_reset() esp._port.close() @classmethod @@ -121,31 +127,27 @@ class IDFDUT(DUT.SerialDUT): # fake flasher args object, this is a hack until # esptool Python API is improved - Flash_Args = namedtuple('write_flash_args', - ['flash_size', - 'flash_mode', - 'flash_freq', - 'addr_filename', - 'no_stub', - 'compress', - 'verify', - 'encrypt']) - - flash_args = Flash_Args( - self.app.flash_settings["flash_size"], - self.app.flash_settings["flash_mode"], - self.app.flash_settings["flash_freq"], - flash_files, - False, - True, - False, - False - ) + class FlashArgs(object): + def __init__(self, attributes): + for key, value in attributes.items(): + self.__setattr__(key, value) + + flash_args = FlashArgs({ + 'flash_size': self.app.flash_settings["flash_size"], + 'flash_mode': self.app.flash_settings["flash_mode"], + 'flash_freq': self.app.flash_settings["flash_freq"], + 'addr_filename': flash_files, + 'no_stub': False, + 'compress': True, + 'verify': False, + 'encrypt': False, + }) esp.change_baud(baud_rate) + esptool.detect_flash_size(esp, flash_args) esptool.write_flash(esp, flash_args) finally: - for (_,f) in flash_files: + for (_, f) in flash_files: f.close() def start_app(self, erase_nvs=ERASE_NVS): @@ -171,7 +173,9 @@ class IDFDUT(DUT.SerialDUT): :return: None """ - esp.hard_reset() + # decorator `_use_esptool` will do reset + # so we don't need to do anything in this method + pass @_uses_esptool def erase_partition(self, esp, partition):