diff --git a/boards.txt b/boards.txt
index 0883567123..e362408c44 100644
--- a/boards.txt
+++ b/boards.txt
@@ -29,7 +29,7 @@ generic.build.board=ESP8266_GENERIC
 generic.upload.tool=esptool
 generic.upload.maximum_data_size=81920
 generic.upload.wait_for_upload_port=true
-generic.upload.erase_cmd=version
+generic.upload.erase_cmd=flash_id
 generic.serial.disableDTR=true
 generic.serial.disableRTS=true
 generic.build.mcu=esp8266
@@ -61,14 +61,12 @@ generic.menu.ssl.all=All SSL ciphers (most compatible)
 generic.menu.ssl.all.build.sslflags=
 generic.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 generic.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-generic.menu.ResetMethod.ck=ck
-generic.menu.ResetMethod.ck.upload.resetmethod=ck
-generic.menu.ResetMethod.nodemcu=nodemcu
-generic.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu
-generic.menu.ResetMethod.none=none
-generic.menu.ResetMethod.none.upload.resetmethod=none
-generic.menu.ResetMethod.dtrset=dtrset
-generic.menu.ResetMethod.dtrset.upload.resetmethod=dtrset
+generic.menu.ResetMethod.nodemcu=dtr (aka nodemcu)
+generic.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset
+generic.menu.ResetMethod.ck=no dtr (aka ck)
+generic.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset
+generic.menu.ResetMethod.nodtr_nosync=no dtr, no_sync
+generic.menu.ResetMethod.nodtr_nosync.upload.resetmethod=--before no_reset_no_sync --after soft_reset
 generic.menu.CrystalFreq.26=26 MHz
 generic.menu.CrystalFreq.40=40 MHz
 generic.menu.CrystalFreq.40.build.extra_flags=-DF_CRYSTAL=40000000 -DESP8266
@@ -472,7 +470,7 @@ generic.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
 generic.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 generic.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 generic.menu.wipe.none=Only Sketch
-generic.menu.wipe.none.upload.erase_cmd=version
+generic.menu.wipe.none.upload.erase_cmd=flash_id
 generic.menu.wipe.sdk=Sketch + WiFi Settings
 generic.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 generic.menu.wipe.all=All Flash Contents
@@ -503,7 +501,7 @@ esp8285.build.variant=esp8285
 esp8285.upload.tool=esptool
 esp8285.upload.maximum_data_size=81920
 esp8285.upload.wait_for_upload_port=true
-esp8285.upload.erase_cmd=version
+esp8285.upload.erase_cmd=flash_id
 esp8285.serial.disableDTR=true
 esp8285.serial.disableRTS=true
 esp8285.build.mcu=esp8266
@@ -534,14 +532,12 @@ esp8285.menu.ssl.all=All SSL ciphers (most compatible)
 esp8285.menu.ssl.all.build.sslflags=
 esp8285.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 esp8285.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-esp8285.menu.ResetMethod.ck=ck
-esp8285.menu.ResetMethod.ck.upload.resetmethod=ck
-esp8285.menu.ResetMethod.nodemcu=nodemcu
-esp8285.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu
-esp8285.menu.ResetMethod.none=none
-esp8285.menu.ResetMethod.none.upload.resetmethod=none
-esp8285.menu.ResetMethod.dtrset=dtrset
-esp8285.menu.ResetMethod.dtrset.upload.resetmethod=dtrset
+esp8285.menu.ResetMethod.nodemcu=dtr (aka nodemcu)
+esp8285.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset
+esp8285.menu.ResetMethod.ck=no dtr (aka ck)
+esp8285.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset
+esp8285.menu.ResetMethod.nodtr_nosync=no dtr, no_sync
+esp8285.menu.ResetMethod.nodtr_nosync.upload.resetmethod=--before no_reset_no_sync --after soft_reset
 esp8285.menu.CrystalFreq.26=26 MHz
 esp8285.menu.CrystalFreq.40=40 MHz
 esp8285.menu.CrystalFreq.40.build.extra_flags=-DF_CRYSTAL=40000000 -DESP8266
@@ -749,7 +745,7 @@ esp8285.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
 esp8285.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 esp8285.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 esp8285.menu.wipe.none=Only Sketch
-esp8285.menu.wipe.none.upload.erase_cmd=version
+esp8285.menu.wipe.none.upload.erase_cmd=flash_id
 esp8285.menu.wipe.sdk=Sketch + WiFi Settings
 esp8285.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 esp8285.menu.wipe.all=All Flash Contents
@@ -778,9 +774,9 @@ espduino.name=ESPDuino (ESP-13 Module)
 espduino.build.board=ESP8266_ESP13
 espduino.build.variant=ESPDuino
 espduino.menu.ResetMethod.v1=ESPduino-V1
-espduino.menu.ResetMethod.v1.upload.resetmethod=ck
+espduino.menu.ResetMethod.v1.upload.resetmethod=--before no_reset --after soft_reset
 espduino.menu.ResetMethod.v2=ESPduino-V2
-espduino.menu.ResetMethod.v2.upload.resetmethod=nodemcu
+espduino.menu.ResetMethod.v2.upload.resetmethod=--before default_reset --after hard_reset
 espduino.menu.UploadTool.espota=OTA
 espduino.menu.UploadTool.espota.upload.tool=espota
 espduino.menu.UploadTool.esptool=Serial
@@ -789,7 +785,7 @@ espduino.menu.UploadTool.esptool.upload.verbose=--trace
 espduino.upload.tool=esptool
 espduino.upload.maximum_data_size=81920
 espduino.upload.wait_for_upload_port=true
-espduino.upload.erase_cmd=version
+espduino.upload.erase_cmd=flash_id
 espduino.serial.disableDTR=true
 espduino.serial.disableRTS=true
 espduino.build.mcu=esp8266
@@ -950,7 +946,7 @@ espduino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO
 espduino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 espduino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 espduino.menu.wipe.none=Only Sketch
-espduino.menu.wipe.none.upload.erase_cmd=version
+espduino.menu.wipe.none.upload.erase_cmd=flash_id
 espduino.menu.wipe.sdk=Sketch + WiFi Settings
 espduino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 espduino.menu.wipe.all=All Flash Contents
@@ -981,7 +977,7 @@ huzzah.build.variant=adafruit
 huzzah.upload.tool=esptool
 huzzah.upload.maximum_data_size=81920
 huzzah.upload.wait_for_upload_port=true
-huzzah.upload.erase_cmd=version
+huzzah.upload.erase_cmd=flash_id
 huzzah.serial.disableDTR=true
 huzzah.serial.disableRTS=true
 huzzah.build.mcu=esp8266
@@ -1012,7 +1008,7 @@ huzzah.menu.ssl.all=All SSL ciphers (most compatible)
 huzzah.menu.ssl.all.build.sslflags=
 huzzah.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 huzzah.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-huzzah.upload.resetmethod=nodemcu
+huzzah.upload.resetmethod=--before default_reset --after hard_reset
 huzzah.build.flash_mode=qio
 huzzah.build.flash_flags=-DFLASHMODE_QIO
 huzzah.build.flash_freq=40
@@ -1143,7 +1139,7 @@ huzzah.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM
 huzzah.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 huzzah.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 huzzah.menu.wipe.none=Only Sketch
-huzzah.menu.wipe.none.upload.erase_cmd=version
+huzzah.menu.wipe.none.upload.erase_cmd=flash_id
 huzzah.menu.wipe.sdk=Sketch + WiFi Settings
 huzzah.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 huzzah.menu.wipe.all=All Flash Contents
@@ -1174,7 +1170,7 @@ inventone.build.variant=inventone
 inventone.upload.tool=esptool
 inventone.upload.maximum_data_size=81920
 inventone.upload.wait_for_upload_port=true
-inventone.upload.erase_cmd=version
+inventone.upload.erase_cmd=flash_id
 inventone.serial.disableDTR=true
 inventone.serial.disableRTS=true
 inventone.build.mcu=esp8266
@@ -1205,7 +1201,7 @@ inventone.menu.ssl.all=All SSL ciphers (most compatible)
 inventone.menu.ssl.all.build.sslflags=
 inventone.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 inventone.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-inventone.upload.resetmethod=nodemcu
+inventone.upload.resetmethod=--before default_reset --after hard_reset
 inventone.build.flash_mode=dio
 inventone.build.flash_flags=-DFLASHMODE_DIO
 inventone.build.flash_freq=40
@@ -1336,7 +1332,7 @@ inventone.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
 inventone.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 inventone.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 inventone.menu.wipe.none=Only Sketch
-inventone.menu.wipe.none.upload.erase_cmd=version
+inventone.menu.wipe.none.upload.erase_cmd=flash_id
 inventone.menu.wipe.sdk=Sketch + WiFi Settings
 inventone.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 inventone.menu.wipe.all=All Flash Contents
@@ -1367,7 +1363,7 @@ cw01.build.variant=xinabox
 cw01.upload.tool=esptool
 cw01.upload.maximum_data_size=81920
 cw01.upload.wait_for_upload_port=true
-cw01.upload.erase_cmd=version
+cw01.upload.erase_cmd=flash_id
 cw01.serial.disableDTR=true
 cw01.serial.disableRTS=true
 cw01.build.mcu=esp8266
@@ -1398,7 +1394,7 @@ cw01.menu.ssl.all=All SSL ciphers (most compatible)
 cw01.menu.ssl.all.build.sslflags=
 cw01.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 cw01.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-cw01.upload.resetmethod=nodemcu
+cw01.upload.resetmethod=--before default_reset --after hard_reset
 cw01.menu.CrystalFreq.26=26 MHz
 cw01.menu.CrystalFreq.40=40 MHz
 cw01.menu.CrystalFreq.40.build.extra_flags=-DF_CRYSTAL=40000000 -DESP8266
@@ -1532,7 +1528,7 @@ cw01.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMD
 cw01.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 cw01.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 cw01.menu.wipe.none=Only Sketch
-cw01.menu.wipe.none.upload.erase_cmd=version
+cw01.menu.wipe.none.upload.erase_cmd=flash_id
 cw01.menu.wipe.sdk=Sketch + WiFi Settings
 cw01.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 cw01.menu.wipe.all=All Flash Contents
@@ -1563,7 +1559,7 @@ espresso_lite_v1.build.variant=espresso_lite_v1
 espresso_lite_v1.upload.tool=esptool
 espresso_lite_v1.upload.maximum_data_size=81920
 espresso_lite_v1.upload.wait_for_upload_port=true
-espresso_lite_v1.upload.erase_cmd=version
+espresso_lite_v1.upload.erase_cmd=flash_id
 espresso_lite_v1.serial.disableDTR=true
 espresso_lite_v1.serial.disableRTS=true
 espresso_lite_v1.build.mcu=esp8266
@@ -1634,10 +1630,10 @@ espresso_lite_v1.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld
 espresso_lite_v1.menu.eesz.4M.build.spiffs_pagesize=256
 espresso_lite_v1.menu.eesz.4M.upload.maximum_size=1044464
 espresso_lite_v1.menu.eesz.4M.build.rfcal_addr=0x3FC000
-espresso_lite_v1.menu.ResetMethod.ck=ck
-espresso_lite_v1.menu.ResetMethod.ck.upload.resetmethod=ck
-espresso_lite_v1.menu.ResetMethod.nodemcu=nodemcu
-espresso_lite_v1.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu
+espresso_lite_v1.menu.ResetMethod.nodemcu=dtr (aka nodemcu)
+espresso_lite_v1.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset
+espresso_lite_v1.menu.ResetMethod.ck=no dtr (aka ck)
+espresso_lite_v1.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset
 espresso_lite_v1.menu.ip.lm2f=v2 Lower Memory
 espresso_lite_v1.menu.ip.lm2f.build.lwip_include=lwip2/include
 espresso_lite_v1.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat
@@ -1728,7 +1724,7 @@ espresso_lite_v1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPD
 espresso_lite_v1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 espresso_lite_v1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 espresso_lite_v1.menu.wipe.none=Only Sketch
-espresso_lite_v1.menu.wipe.none.upload.erase_cmd=version
+espresso_lite_v1.menu.wipe.none.upload.erase_cmd=flash_id
 espresso_lite_v1.menu.wipe.sdk=Sketch + WiFi Settings
 espresso_lite_v1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 espresso_lite_v1.menu.wipe.all=All Flash Contents
@@ -1759,7 +1755,7 @@ espresso_lite_v2.build.variant=espresso_lite_v2
 espresso_lite_v2.upload.tool=esptool
 espresso_lite_v2.upload.maximum_data_size=81920
 espresso_lite_v2.upload.wait_for_upload_port=true
-espresso_lite_v2.upload.erase_cmd=version
+espresso_lite_v2.upload.erase_cmd=flash_id
 espresso_lite_v2.serial.disableDTR=true
 espresso_lite_v2.serial.disableRTS=true
 espresso_lite_v2.build.mcu=esp8266
@@ -1830,10 +1826,10 @@ espresso_lite_v2.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld
 espresso_lite_v2.menu.eesz.4M.build.spiffs_pagesize=256
 espresso_lite_v2.menu.eesz.4M.upload.maximum_size=1044464
 espresso_lite_v2.menu.eesz.4M.build.rfcal_addr=0x3FC000
-espresso_lite_v2.menu.ResetMethod.ck=ck
-espresso_lite_v2.menu.ResetMethod.ck.upload.resetmethod=ck
-espresso_lite_v2.menu.ResetMethod.nodemcu=nodemcu
-espresso_lite_v2.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu
+espresso_lite_v2.menu.ResetMethod.nodemcu=dtr (aka nodemcu)
+espresso_lite_v2.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset
+espresso_lite_v2.menu.ResetMethod.ck=no dtr (aka ck)
+espresso_lite_v2.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset
 espresso_lite_v2.menu.ip.lm2f=v2 Lower Memory
 espresso_lite_v2.menu.ip.lm2f.build.lwip_include=lwip2/include
 espresso_lite_v2.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat
@@ -1924,7 +1920,7 @@ espresso_lite_v2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPD
 espresso_lite_v2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 espresso_lite_v2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 espresso_lite_v2.menu.wipe.none=Only Sketch
-espresso_lite_v2.menu.wipe.none.upload.erase_cmd=version
+espresso_lite_v2.menu.wipe.none.upload.erase_cmd=flash_id
 espresso_lite_v2.menu.wipe.sdk=Sketch + WiFi Settings
 espresso_lite_v2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 espresso_lite_v2.menu.wipe.all=All Flash Contents
@@ -1955,7 +1951,7 @@ phoenix_v1.build.variant=phoenix_v1
 phoenix_v1.upload.tool=esptool
 phoenix_v1.upload.maximum_data_size=81920
 phoenix_v1.upload.wait_for_upload_port=true
-phoenix_v1.upload.erase_cmd=version
+phoenix_v1.upload.erase_cmd=flash_id
 phoenix_v1.serial.disableDTR=true
 phoenix_v1.serial.disableRTS=true
 phoenix_v1.build.mcu=esp8266
@@ -2026,10 +2022,10 @@ phoenix_v1.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld
 phoenix_v1.menu.eesz.4M.build.spiffs_pagesize=256
 phoenix_v1.menu.eesz.4M.upload.maximum_size=1044464
 phoenix_v1.menu.eesz.4M.build.rfcal_addr=0x3FC000
-phoenix_v1.menu.ResetMethod.ck=ck
-phoenix_v1.menu.ResetMethod.ck.upload.resetmethod=ck
-phoenix_v1.menu.ResetMethod.nodemcu=nodemcu
-phoenix_v1.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu
+phoenix_v1.menu.ResetMethod.nodemcu=dtr (aka nodemcu)
+phoenix_v1.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset
+phoenix_v1.menu.ResetMethod.ck=no dtr (aka ck)
+phoenix_v1.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset
 phoenix_v1.menu.ip.lm2f=v2 Lower Memory
 phoenix_v1.menu.ip.lm2f.build.lwip_include=lwip2/include
 phoenix_v1.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat
@@ -2120,7 +2116,7 @@ phoenix_v1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROT
 phoenix_v1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 phoenix_v1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 phoenix_v1.menu.wipe.none=Only Sketch
-phoenix_v1.menu.wipe.none.upload.erase_cmd=version
+phoenix_v1.menu.wipe.none.upload.erase_cmd=flash_id
 phoenix_v1.menu.wipe.sdk=Sketch + WiFi Settings
 phoenix_v1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 phoenix_v1.menu.wipe.all=All Flash Contents
@@ -2151,7 +2147,7 @@ phoenix_v2.build.variant=phoenix_v2
 phoenix_v2.upload.tool=esptool
 phoenix_v2.upload.maximum_data_size=81920
 phoenix_v2.upload.wait_for_upload_port=true
-phoenix_v2.upload.erase_cmd=version
+phoenix_v2.upload.erase_cmd=flash_id
 phoenix_v2.serial.disableDTR=true
 phoenix_v2.serial.disableRTS=true
 phoenix_v2.build.mcu=esp8266
@@ -2222,10 +2218,10 @@ phoenix_v2.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld
 phoenix_v2.menu.eesz.4M.build.spiffs_pagesize=256
 phoenix_v2.menu.eesz.4M.upload.maximum_size=1044464
 phoenix_v2.menu.eesz.4M.build.rfcal_addr=0x3FC000
-phoenix_v2.menu.ResetMethod.ck=ck
-phoenix_v2.menu.ResetMethod.ck.upload.resetmethod=ck
-phoenix_v2.menu.ResetMethod.nodemcu=nodemcu
-phoenix_v2.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu
+phoenix_v2.menu.ResetMethod.nodemcu=dtr (aka nodemcu)
+phoenix_v2.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset
+phoenix_v2.menu.ResetMethod.ck=no dtr (aka ck)
+phoenix_v2.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset
 phoenix_v2.menu.ip.lm2f=v2 Lower Memory
 phoenix_v2.menu.ip.lm2f.build.lwip_include=lwip2/include
 phoenix_v2.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat
@@ -2316,7 +2312,7 @@ phoenix_v2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROT
 phoenix_v2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 phoenix_v2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 phoenix_v2.menu.wipe.none=Only Sketch
-phoenix_v2.menu.wipe.none.upload.erase_cmd=version
+phoenix_v2.menu.wipe.none.upload.erase_cmd=flash_id
 phoenix_v2.menu.wipe.sdk=Sketch + WiFi Settings
 phoenix_v2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 phoenix_v2.menu.wipe.all=All Flash Contents
@@ -2347,7 +2343,7 @@ nodemcu.build.variant=nodemcu
 nodemcu.upload.tool=esptool
 nodemcu.upload.maximum_data_size=81920
 nodemcu.upload.wait_for_upload_port=true
-nodemcu.upload.erase_cmd=version
+nodemcu.upload.erase_cmd=flash_id
 nodemcu.serial.disableDTR=true
 nodemcu.serial.disableRTS=true
 nodemcu.build.mcu=esp8266
@@ -2378,7 +2374,7 @@ nodemcu.menu.ssl.all=All SSL ciphers (most compatible)
 nodemcu.menu.ssl.all.build.sslflags=
 nodemcu.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 nodemcu.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-nodemcu.upload.resetmethod=nodemcu
+nodemcu.upload.resetmethod=--before default_reset --after hard_reset
 nodemcu.build.flash_mode=qio
 nodemcu.build.flash_flags=-DFLASHMODE_QIO
 nodemcu.build.flash_freq=40
@@ -2509,7 +2505,7 @@ nodemcu.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
 nodemcu.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 nodemcu.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 nodemcu.menu.wipe.none=Only Sketch
-nodemcu.menu.wipe.none.upload.erase_cmd=version
+nodemcu.menu.wipe.none.upload.erase_cmd=flash_id
 nodemcu.menu.wipe.sdk=Sketch + WiFi Settings
 nodemcu.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 nodemcu.menu.wipe.all=All Flash Contents
@@ -2540,7 +2536,7 @@ nodemcuv2.build.variant=nodemcu
 nodemcuv2.upload.tool=esptool
 nodemcuv2.upload.maximum_data_size=81920
 nodemcuv2.upload.wait_for_upload_port=true
-nodemcuv2.upload.erase_cmd=version
+nodemcuv2.upload.erase_cmd=flash_id
 nodemcuv2.serial.disableDTR=true
 nodemcuv2.serial.disableRTS=true
 nodemcuv2.build.mcu=esp8266
@@ -2571,7 +2567,7 @@ nodemcuv2.menu.ssl.all=All SSL ciphers (most compatible)
 nodemcuv2.menu.ssl.all.build.sslflags=
 nodemcuv2.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 nodemcuv2.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-nodemcuv2.upload.resetmethod=nodemcu
+nodemcuv2.upload.resetmethod=--before default_reset --after hard_reset
 nodemcuv2.build.flash_mode=dio
 nodemcuv2.build.flash_flags=-DFLASHMODE_DIO
 nodemcuv2.build.flash_freq=40
@@ -2702,7 +2698,7 @@ nodemcuv2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
 nodemcuv2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 nodemcuv2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 nodemcuv2.menu.wipe.none=Only Sketch
-nodemcuv2.menu.wipe.none.upload.erase_cmd=version
+nodemcuv2.menu.wipe.none.upload.erase_cmd=flash_id
 nodemcuv2.menu.wipe.sdk=Sketch + WiFi Settings
 nodemcuv2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 nodemcuv2.menu.wipe.all=All Flash Contents
@@ -2733,7 +2729,7 @@ modwifi.build.variant=modwifi
 modwifi.upload.tool=esptool
 modwifi.upload.maximum_data_size=81920
 modwifi.upload.wait_for_upload_port=true
-modwifi.upload.erase_cmd=version
+modwifi.upload.erase_cmd=flash_id
 modwifi.serial.disableDTR=true
 modwifi.serial.disableRTS=true
 modwifi.build.mcu=esp8266
@@ -2764,7 +2760,7 @@ modwifi.menu.ssl.all=All SSL ciphers (most compatible)
 modwifi.menu.ssl.all.build.sslflags=
 modwifi.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 modwifi.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-modwifi.upload.resetmethod=ck
+modwifi.upload.resetmethod=--before no_reset --after soft_reset
 modwifi.build.flash_mode=qio
 modwifi.build.flash_flags=-DFLASHMODE_QIO
 modwifi.build.flash_freq=40
@@ -2915,7 +2911,7 @@ modwifi.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
 modwifi.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 modwifi.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 modwifi.menu.wipe.none=Only Sketch
-modwifi.menu.wipe.none.upload.erase_cmd=version
+modwifi.menu.wipe.none.upload.erase_cmd=flash_id
 modwifi.menu.wipe.sdk=Sketch + WiFi Settings
 modwifi.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 modwifi.menu.wipe.all=All Flash Contents
@@ -2946,7 +2942,7 @@ thing.build.variant=thing
 thing.upload.tool=esptool
 thing.upload.maximum_data_size=81920
 thing.upload.wait_for_upload_port=true
-thing.upload.erase_cmd=version
+thing.upload.erase_cmd=flash_id
 thing.serial.disableDTR=true
 thing.serial.disableRTS=true
 thing.build.mcu=esp8266
@@ -2977,7 +2973,7 @@ thing.menu.ssl.all=All SSL ciphers (most compatible)
 thing.menu.ssl.all.build.sslflags=
 thing.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 thing.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-thing.upload.resetmethod=ck
+thing.upload.resetmethod=--before no_reset --after soft_reset
 thing.build.flash_mode=qio
 thing.build.flash_flags=-DFLASHMODE_QIO
 thing.build.flash_freq=40
@@ -3108,7 +3104,7 @@ thing.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMM
 thing.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 thing.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 thing.menu.wipe.none=Only Sketch
-thing.menu.wipe.none.upload.erase_cmd=version
+thing.menu.wipe.none.upload.erase_cmd=flash_id
 thing.menu.wipe.sdk=Sketch + WiFi Settings
 thing.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 thing.menu.wipe.all=All Flash Contents
@@ -3139,7 +3135,7 @@ thingdev.build.variant=thing
 thingdev.upload.tool=esptool
 thingdev.upload.maximum_data_size=81920
 thingdev.upload.wait_for_upload_port=true
-thingdev.upload.erase_cmd=version
+thingdev.upload.erase_cmd=flash_id
 thingdev.serial.disableDTR=true
 thingdev.serial.disableRTS=true
 thingdev.build.mcu=esp8266
@@ -3170,7 +3166,7 @@ thingdev.menu.ssl.all=All SSL ciphers (most compatible)
 thingdev.menu.ssl.all.build.sslflags=
 thingdev.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 thingdev.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-thingdev.upload.resetmethod=nodemcu
+thingdev.upload.resetmethod=--before default_reset --after hard_reset
 thingdev.build.flash_mode=dio
 thingdev.build.flash_flags=-DFLASHMODE_DIO
 thingdev.build.flash_freq=40
@@ -3301,7 +3297,7 @@ thingdev.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO
 thingdev.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 thingdev.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 thingdev.menu.wipe.none=Only Sketch
-thingdev.menu.wipe.none.upload.erase_cmd=version
+thingdev.menu.wipe.none.upload.erase_cmd=flash_id
 thingdev.menu.wipe.sdk=Sketch + WiFi Settings
 thingdev.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 thingdev.menu.wipe.all=All Flash Contents
@@ -3332,7 +3328,7 @@ blynk.build.variant=thing
 blynk.upload.tool=esptool
 blynk.upload.maximum_data_size=81920
 blynk.upload.wait_for_upload_port=true
-blynk.upload.erase_cmd=version
+blynk.upload.erase_cmd=flash_id
 blynk.serial.disableDTR=true
 blynk.serial.disableRTS=true
 blynk.build.mcu=esp8266
@@ -3363,7 +3359,7 @@ blynk.menu.ssl.all=All SSL ciphers (most compatible)
 blynk.menu.ssl.all.build.sslflags=
 blynk.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 blynk.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-blynk.upload.resetmethod=nodemcu
+blynk.upload.resetmethod=--before default_reset --after hard_reset
 blynk.build.flash_mode=qio
 blynk.build.flash_flags=-DFLASHMODE_QIO
 blynk.build.flash_freq=40
@@ -3494,7 +3490,7 @@ blynk.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMM
 blynk.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 blynk.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 blynk.menu.wipe.none=Only Sketch
-blynk.menu.wipe.none.upload.erase_cmd=version
+blynk.menu.wipe.none.upload.erase_cmd=flash_id
 blynk.menu.wipe.sdk=Sketch + WiFi Settings
 blynk.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 blynk.menu.wipe.all=All Flash Contents
@@ -3524,7 +3520,7 @@ esp210.build.board=ESP8266_ESP210
 esp210.upload.tool=esptool
 esp210.upload.maximum_data_size=81920
 esp210.upload.wait_for_upload_port=true
-esp210.upload.erase_cmd=version
+esp210.upload.erase_cmd=flash_id
 esp210.serial.disableDTR=true
 esp210.serial.disableRTS=true
 esp210.build.mcu=esp8266
@@ -3556,7 +3552,7 @@ esp210.menu.ssl.all=All SSL ciphers (most compatible)
 esp210.menu.ssl.all.build.sslflags=
 esp210.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 esp210.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-esp210.upload.resetmethod=ck
+esp210.upload.resetmethod=--before no_reset --after soft_reset
 esp210.build.flash_mode=qio
 esp210.build.flash_flags=-DFLASHMODE_QIO
 esp210.build.flash_freq=40
@@ -3687,7 +3683,7 @@ esp210.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM
 esp210.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 esp210.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 esp210.menu.wipe.none=Only Sketch
-esp210.menu.wipe.none.upload.erase_cmd=version
+esp210.menu.wipe.none.upload.erase_cmd=flash_id
 esp210.menu.wipe.sdk=Sketch + WiFi Settings
 esp210.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 esp210.menu.wipe.all=All Flash Contents
@@ -3718,7 +3714,7 @@ d1_mini.build.variant=d1_mini
 d1_mini.upload.tool=esptool
 d1_mini.upload.maximum_data_size=81920
 d1_mini.upload.wait_for_upload_port=true
-d1_mini.upload.erase_cmd=version
+d1_mini.upload.erase_cmd=flash_id
 d1_mini.serial.disableDTR=true
 d1_mini.serial.disableRTS=true
 d1_mini.build.mcu=esp8266
@@ -3749,7 +3745,7 @@ d1_mini.menu.ssl.all=All SSL ciphers (most compatible)
 d1_mini.menu.ssl.all.build.sslflags=
 d1_mini.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 d1_mini.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-d1_mini.upload.resetmethod=nodemcu
+d1_mini.upload.resetmethod=--before default_reset --after hard_reset
 d1_mini.build.flash_mode=dio
 d1_mini.build.flash_flags=-DFLASHMODE_DIO
 d1_mini.build.flash_freq=40
@@ -3880,7 +3876,7 @@ d1_mini.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
 d1_mini.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 d1_mini.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 d1_mini.menu.wipe.none=Only Sketch
-d1_mini.menu.wipe.none.upload.erase_cmd=version
+d1_mini.menu.wipe.none.upload.erase_cmd=flash_id
 d1_mini.menu.wipe.sdk=Sketch + WiFi Settings
 d1_mini.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 d1_mini.menu.wipe.all=All Flash Contents
@@ -3911,7 +3907,7 @@ d1_mini_pro.build.variant=d1_mini
 d1_mini_pro.upload.tool=esptool
 d1_mini_pro.upload.maximum_data_size=81920
 d1_mini_pro.upload.wait_for_upload_port=true
-d1_mini_pro.upload.erase_cmd=version
+d1_mini_pro.upload.erase_cmd=flash_id
 d1_mini_pro.serial.disableDTR=true
 d1_mini_pro.serial.disableRTS=true
 d1_mini_pro.build.mcu=esp8266
@@ -3942,7 +3938,7 @@ d1_mini_pro.menu.ssl.all=All SSL ciphers (most compatible)
 d1_mini_pro.menu.ssl.all.build.sslflags=
 d1_mini_pro.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 d1_mini_pro.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-d1_mini_pro.upload.resetmethod=nodemcu
+d1_mini_pro.upload.resetmethod=--before default_reset --after hard_reset
 d1_mini_pro.build.flash_mode=dio
 d1_mini_pro.build.flash_flags=-DFLASHMODE_DIO
 d1_mini_pro.build.flash_freq=40
@@ -4056,7 +4052,7 @@ d1_mini_pro.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATERO
 d1_mini_pro.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 d1_mini_pro.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 d1_mini_pro.menu.wipe.none=Only Sketch
-d1_mini_pro.menu.wipe.none.upload.erase_cmd=version
+d1_mini_pro.menu.wipe.none.upload.erase_cmd=flash_id
 d1_mini_pro.menu.wipe.sdk=Sketch + WiFi Settings
 d1_mini_pro.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 d1_mini_pro.menu.wipe.all=All Flash Contents
@@ -4087,7 +4083,7 @@ d1_mini_lite.build.variant=d1_mini
 d1_mini_lite.upload.tool=esptool
 d1_mini_lite.upload.maximum_data_size=81920
 d1_mini_lite.upload.wait_for_upload_port=true
-d1_mini_lite.upload.erase_cmd=version
+d1_mini_lite.upload.erase_cmd=flash_id
 d1_mini_lite.serial.disableDTR=true
 d1_mini_lite.serial.disableRTS=true
 d1_mini_lite.build.mcu=esp8266
@@ -4118,7 +4114,7 @@ d1_mini_lite.menu.ssl.all=All SSL ciphers (most compatible)
 d1_mini_lite.menu.ssl.all.build.sslflags=
 d1_mini_lite.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 d1_mini_lite.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-d1_mini_lite.upload.resetmethod=nodemcu
+d1_mini_lite.upload.resetmethod=--before default_reset --after hard_reset
 d1_mini_lite.build.flash_mode=dout
 d1_mini_lite.build.flash_flags=-DFLASHMODE_DOUT
 d1_mini_lite.build.flash_freq=40
@@ -4289,7 +4285,7 @@ d1_mini_lite.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATER
 d1_mini_lite.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 d1_mini_lite.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 d1_mini_lite.menu.wipe.none=Only Sketch
-d1_mini_lite.menu.wipe.none.upload.erase_cmd=version
+d1_mini_lite.menu.wipe.none.upload.erase_cmd=flash_id
 d1_mini_lite.menu.wipe.sdk=Sketch + WiFi Settings
 d1_mini_lite.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 d1_mini_lite.menu.wipe.all=All Flash Contents
@@ -4320,7 +4316,7 @@ d1.build.variant=d1
 d1.upload.tool=esptool
 d1.upload.maximum_data_size=81920
 d1.upload.wait_for_upload_port=true
-d1.upload.erase_cmd=version
+d1.upload.erase_cmd=flash_id
 d1.serial.disableDTR=true
 d1.serial.disableRTS=true
 d1.build.mcu=esp8266
@@ -4351,7 +4347,7 @@ d1.menu.ssl.all=All SSL ciphers (most compatible)
 d1.menu.ssl.all.build.sslflags=
 d1.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 d1.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-d1.upload.resetmethod=nodemcu
+d1.upload.resetmethod=--before default_reset --after hard_reset
 d1.build.flash_mode=dio
 d1.build.flash_flags=-DFLASHMODE_DIO
 d1.build.flash_freq=40
@@ -4482,7 +4478,7 @@ d1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS
 d1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 d1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 d1.menu.wipe.none=Only Sketch
-d1.menu.wipe.none.upload.erase_cmd=version
+d1.menu.wipe.none.upload.erase_cmd=flash_id
 d1.menu.wipe.sdk=Sketch + WiFi Settings
 d1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 d1.menu.wipe.all=All Flash Contents
@@ -4513,7 +4509,7 @@ espino.build.variant=espino
 espino.upload.tool=esptool
 espino.upload.maximum_data_size=81920
 espino.upload.wait_for_upload_port=true
-espino.upload.erase_cmd=version
+espino.upload.erase_cmd=flash_id
 espino.serial.disableDTR=true
 espino.serial.disableRTS=true
 espino.build.mcu=esp8266
@@ -4544,10 +4540,10 @@ espino.menu.ssl.all=All SSL ciphers (most compatible)
 espino.menu.ssl.all.build.sslflags=
 espino.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 espino.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-espino.menu.ResetMethod.ck=ck
-espino.menu.ResetMethod.ck.upload.resetmethod=ck
-espino.menu.ResetMethod.nodemcu=nodemcu
-espino.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu
+espino.menu.ResetMethod.nodemcu=dtr (aka nodemcu)
+espino.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset
+espino.menu.ResetMethod.ck=no dtr (aka ck)
+espino.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset
 espino.build.flash_mode=qio
 espino.build.flash_flags=-DFLASHMODE_QIO
 espino.build.flash_freq=40
@@ -4678,7 +4674,7 @@ espino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM
 espino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 espino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 espino.menu.wipe.none=Only Sketch
-espino.menu.wipe.none.upload.erase_cmd=version
+espino.menu.wipe.none.upload.erase_cmd=flash_id
 espino.menu.wipe.sdk=Sketch + WiFi Settings
 espino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 espino.menu.wipe.all=All Flash Contents
@@ -4709,7 +4705,7 @@ espinotee.build.variant=espinotee
 espinotee.upload.tool=esptool
 espinotee.upload.maximum_data_size=81920
 espinotee.upload.wait_for_upload_port=true
-espinotee.upload.erase_cmd=version
+espinotee.upload.erase_cmd=flash_id
 espinotee.serial.disableDTR=true
 espinotee.serial.disableRTS=true
 espinotee.build.mcu=esp8266
@@ -4740,7 +4736,7 @@ espinotee.menu.ssl.all=All SSL ciphers (most compatible)
 espinotee.menu.ssl.all.build.sslflags=
 espinotee.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 espinotee.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-espinotee.upload.resetmethod=nodemcu
+espinotee.upload.resetmethod=--before default_reset --after hard_reset
 espinotee.build.flash_mode=qio
 espinotee.build.flash_flags=-DFLASHMODE_QIO
 espinotee.build.flash_freq=40
@@ -4871,7 +4867,7 @@ espinotee.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
 espinotee.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 espinotee.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 espinotee.menu.wipe.none=Only Sketch
-espinotee.menu.wipe.none.upload.erase_cmd=version
+espinotee.menu.wipe.none.upload.erase_cmd=flash_id
 espinotee.menu.wipe.sdk=Sketch + WiFi Settings
 espinotee.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 espinotee.menu.wipe.all=All Flash Contents
@@ -4919,7 +4915,7 @@ wifinfo.menu.ESPModule.ESP12.upload.maximum_size=1044464
 wifinfo.upload.tool=esptool
 wifinfo.upload.maximum_data_size=81920
 wifinfo.upload.wait_for_upload_port=true
-wifinfo.upload.erase_cmd=version
+wifinfo.upload.erase_cmd=flash_id
 wifinfo.serial.disableDTR=true
 wifinfo.serial.disableRTS=true
 wifinfo.build.mcu=esp8266
@@ -4950,7 +4946,7 @@ wifinfo.menu.ssl.all=All SSL ciphers (most compatible)
 wifinfo.menu.ssl.all.build.sslflags=
 wifinfo.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 wifinfo.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-wifinfo.upload.resetmethod=nodemcu
+wifinfo.upload.resetmethod=--before default_reset --after hard_reset
 wifinfo.build.flash_mode=qio
 wifinfo.build.flash_flags=-DFLASHMODE_QIO
 wifinfo.menu.FlashFreq.40=40MHz
@@ -5128,7 +5124,7 @@ wifinfo.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
 wifinfo.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 wifinfo.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 wifinfo.menu.wipe.none=Only Sketch
-wifinfo.menu.wipe.none.upload.erase_cmd=version
+wifinfo.menu.wipe.none.upload.erase_cmd=flash_id
 wifinfo.menu.wipe.sdk=Sketch + WiFi Settings
 wifinfo.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 wifinfo.menu.wipe.all=All Flash Contents
@@ -5170,7 +5166,7 @@ arduino-esp8266.menu.BoardModel.unowifideved.build.variant=arduino_uart
 arduino-esp8266.upload.tool=esptool
 arduino-esp8266.upload.maximum_data_size=81920
 arduino-esp8266.upload.wait_for_upload_port=true
-arduino-esp8266.upload.erase_cmd=version
+arduino-esp8266.upload.erase_cmd=flash_id
 arduino-esp8266.serial.disableDTR=true
 arduino-esp8266.serial.disableRTS=true
 arduino-esp8266.build.mcu=esp8266
@@ -5202,7 +5198,7 @@ arduino-esp8266.menu.ssl.all=All SSL ciphers (most compatible)
 arduino-esp8266.menu.ssl.all.build.sslflags=
 arduino-esp8266.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 arduino-esp8266.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-arduino-esp8266.upload.resetmethod=ck
+arduino-esp8266.upload.resetmethod=--before no_reset --after soft_reset
 arduino-esp8266.build.flash_mode=qio
 arduino-esp8266.build.flash_flags=-DFLASHMODE_QIO
 arduino-esp8266.build.flash_freq=40
@@ -5333,7 +5329,7 @@ arduino-esp8266.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDA
 arduino-esp8266.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 arduino-esp8266.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 arduino-esp8266.menu.wipe.none=Only Sketch
-arduino-esp8266.menu.wipe.none.upload.erase_cmd=version
+arduino-esp8266.menu.wipe.none.upload.erase_cmd=flash_id
 arduino-esp8266.menu.wipe.sdk=Sketch + WiFi Settings
 arduino-esp8266.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 arduino-esp8266.menu.wipe.all=All Flash Contents
@@ -5365,7 +5361,7 @@ gen4iod.build.variant=generic
 gen4iod.upload.tool=esptool
 gen4iod.upload.maximum_data_size=81920
 gen4iod.upload.wait_for_upload_port=true
-gen4iod.upload.erase_cmd=version
+gen4iod.upload.erase_cmd=flash_id
 gen4iod.serial.disableDTR=true
 gen4iod.serial.disableRTS=true
 gen4iod.build.mcu=esp8266
@@ -5396,7 +5392,7 @@ gen4iod.menu.ssl.all=All SSL ciphers (most compatible)
 gen4iod.menu.ssl.all.build.sslflags=
 gen4iod.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 gen4iod.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-gen4iod.upload.resetmethod=nodemcu
+gen4iod.upload.resetmethod=--before default_reset --after hard_reset
 gen4iod.build.flash_mode=dio
 gen4iod.build.flash_flags=-DFLASHMODE_DIO
 gen4iod.build.flash_freq=80
@@ -5527,7 +5523,7 @@ gen4iod.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
 gen4iod.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 gen4iod.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 gen4iod.menu.wipe.none=Only Sketch
-gen4iod.menu.wipe.none.upload.erase_cmd=version
+gen4iod.menu.wipe.none.upload.erase_cmd=flash_id
 gen4iod.menu.wipe.sdk=Sketch + WiFi Settings
 gen4iod.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 gen4iod.menu.wipe.all=All Flash Contents
@@ -5559,7 +5555,7 @@ oak.upload.maximum_size=1040368
 oak.upload.tool=esptool
 oak.upload.maximum_data_size=81920
 oak.upload.wait_for_upload_port=true
-oak.upload.erase_cmd=version
+oak.upload.erase_cmd=flash_id
 oak.serial.disableDTR=true
 oak.serial.disableRTS=true
 oak.build.mcu=esp8266
@@ -5590,7 +5586,7 @@ oak.menu.ssl.all=All SSL ciphers (most compatible)
 oak.menu.ssl.all.build.sslflags=
 oak.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 oak.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-oak.upload.resetmethod=none
+oak.upload.resetmethod=--before no_reset --after soft_reset
 oak.build.flash_mode=dio
 oak.build.flash_flags=-DFLASHMODE_DIO
 oak.build.flash_freq=40
@@ -5721,7 +5717,7 @@ oak.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDN
 oak.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 oak.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 oak.menu.wipe.none=Only Sketch
-oak.menu.wipe.none.upload.erase_cmd=version
+oak.menu.wipe.none.upload.erase_cmd=flash_id
 oak.menu.wipe.sdk=Sketch + WiFi Settings
 oak.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 oak.menu.wipe.all=All Flash Contents
@@ -5752,7 +5748,7 @@ wifiduino.build.variant=wifiduino
 wifiduino.upload.tool=esptool
 wifiduino.upload.maximum_data_size=81920
 wifiduino.upload.wait_for_upload_port=true
-wifiduino.upload.erase_cmd=version
+wifiduino.upload.erase_cmd=flash_id
 wifiduino.serial.disableDTR=true
 wifiduino.serial.disableRTS=true
 wifiduino.build.mcu=esp8266
@@ -5783,7 +5779,7 @@ wifiduino.menu.ssl.all=All SSL ciphers (most compatible)
 wifiduino.menu.ssl.all.build.sslflags=
 wifiduino.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 wifiduino.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-wifiduino.upload.resetmethod=nodemcu
+wifiduino.upload.resetmethod=--before default_reset --after hard_reset
 wifiduino.build.flash_mode=dio
 wifiduino.build.flash_flags=-DFLASHMODE_DIO
 wifiduino.build.flash_freq=40
@@ -5914,7 +5910,7 @@ wifiduino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
 wifiduino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 wifiduino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 wifiduino.menu.wipe.none=Only Sketch
-wifiduino.menu.wipe.none.upload.erase_cmd=version
+wifiduino.menu.wipe.none.upload.erase_cmd=flash_id
 wifiduino.menu.wipe.sdk=Sketch + WiFi Settings
 wifiduino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 wifiduino.menu.wipe.all=All Flash Contents
@@ -5945,7 +5941,7 @@ wifi_slot.build.variant=wifi_slot
 wifi_slot.upload.tool=esptool
 wifi_slot.upload.maximum_data_size=81920
 wifi_slot.upload.wait_for_upload_port=true
-wifi_slot.upload.erase_cmd=version
+wifi_slot.upload.erase_cmd=flash_id
 wifi_slot.serial.disableDTR=true
 wifi_slot.serial.disableRTS=true
 wifi_slot.build.mcu=esp8266
@@ -5976,7 +5972,7 @@ wifi_slot.menu.ssl.all=All SSL ciphers (most compatible)
 wifi_slot.menu.ssl.all.build.sslflags=
 wifi_slot.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 wifi_slot.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-wifi_slot.upload.resetmethod=nodemcu
+wifi_slot.upload.resetmethod=--before default_reset --after hard_reset
 wifi_slot.menu.FlashFreq.40=40MHz
 wifi_slot.menu.FlashFreq.40.build.flash_freq=40
 wifi_slot.menu.FlashFreq.80=80MHz
@@ -6221,7 +6217,7 @@ wifi_slot.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
 wifi_slot.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 wifi_slot.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 wifi_slot.menu.wipe.none=Only Sketch
-wifi_slot.menu.wipe.none.upload.erase_cmd=version
+wifi_slot.menu.wipe.none.upload.erase_cmd=flash_id
 wifi_slot.menu.wipe.sdk=Sketch + WiFi Settings
 wifi_slot.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 wifi_slot.menu.wipe.all=All Flash Contents
@@ -6252,7 +6248,7 @@ wiolink.build.variant=wiolink
 wiolink.upload.tool=esptool
 wiolink.upload.maximum_data_size=81920
 wiolink.upload.wait_for_upload_port=true
-wiolink.upload.erase_cmd=version
+wiolink.upload.erase_cmd=flash_id
 wiolink.serial.disableDTR=true
 wiolink.serial.disableRTS=true
 wiolink.build.mcu=esp8266
@@ -6283,7 +6279,7 @@ wiolink.menu.ssl.all=All SSL ciphers (most compatible)
 wiolink.menu.ssl.all.build.sslflags=
 wiolink.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 wiolink.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-wiolink.upload.resetmethod=nodemcu
+wiolink.upload.resetmethod=--before default_reset --after hard_reset
 wiolink.build.flash_mode=qio
 wiolink.build.flash_flags=-DFLASHMODE_QIO
 wiolink.build.flash_freq=40
@@ -6414,7 +6410,7 @@ wiolink.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
 wiolink.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 wiolink.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 wiolink.menu.wipe.none=Only Sketch
-wiolink.menu.wipe.none.upload.erase_cmd=version
+wiolink.menu.wipe.none.upload.erase_cmd=flash_id
 wiolink.menu.wipe.sdk=Sketch + WiFi Settings
 wiolink.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 wiolink.menu.wipe.all=All Flash Contents
@@ -6445,7 +6441,7 @@ espectro.build.variant=espectro
 espectro.upload.tool=esptool
 espectro.upload.maximum_data_size=81920
 espectro.upload.wait_for_upload_port=true
-espectro.upload.erase_cmd=version
+espectro.upload.erase_cmd=flash_id
 espectro.serial.disableDTR=true
 espectro.serial.disableRTS=true
 espectro.build.mcu=esp8266
@@ -6476,7 +6472,7 @@ espectro.menu.ssl.all=All SSL ciphers (most compatible)
 espectro.menu.ssl.all.build.sslflags=
 espectro.menu.ssl.basic=Basic SSL ciphers (lower ROM use)
 espectro.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC
-espectro.upload.resetmethod=nodemcu
+espectro.upload.resetmethod=--before default_reset --after hard_reset
 espectro.build.flash_mode=dio
 espectro.build.flash_flags=-DFLASHMODE_DIO
 espectro.build.flash_freq=40
@@ -6607,7 +6603,7 @@ espectro.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO
 espectro.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
 espectro.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
 espectro.menu.wipe.none=Only Sketch
-espectro.menu.wipe.none.upload.erase_cmd=version
+espectro.menu.wipe.none.upload.erase_cmd=flash_id
 espectro.menu.wipe.sdk=Sketch + WiFi Settings
 espectro.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
 espectro.menu.wipe.all=All Flash Contents
diff --git a/platform.txt b/platform.txt
index dfeee3ae0b..37512c1d1b 100644
--- a/platform.txt
+++ b/platform.txt
@@ -144,7 +144,7 @@ tools.esptool.upload.params.quiet=
 # First, potentially perform an erase or nothing
 # Next, do the binary upload
 # Combined in one rule because Arduino doesn't suport upload.1.pattern/upload.3.pattern
-tools.esptool.upload.pattern="{cmd}" "{runtime.platform.path}/tools/upload.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} --end --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" write_flash 0x0 "{build.path}/{build.project_name}.bin" --end
+tools.esptool.upload.pattern="{cmd}" "{runtime.platform.path}/tools/upload.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} --end --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" {upload.resetmethod} "{upload.verbose}" write_flash 0x0 "{build.path}/{build.project_name}.bin" --end
 
 tools.esptool.upload.network_pattern="{network_cmd}" "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin"
 
diff --git a/tools/boards.txt.py b/tools/boards.txt.py
index eaf34b3f85..16414352ea 100755
--- a/tools/boards.txt.py
+++ b/tools/boards.txt.py
@@ -296,9 +296,9 @@
             ( '.build.board', 'ESP8266_ESP13' ),
             ( '.build.variant', 'ESPDuino' ),
             ( '.menu.ResetMethod.v2', 'ESPduino-V2' ),
-            ( '.menu.ResetMethod.v2.upload.resetmethod', 'nodemcu' ),
+            ( '.menu.ResetMethod.v2.upload.resetmethod', '--before default_reset --after hard_reset' ),
             ( '.menu.ResetMethod.v1', 'ESPduino-V1' ),
-            ( '.menu.ResetMethod.v1.upload.resetmethod', 'ck' ),
+            ( '.menu.ResetMethod.v1.upload.resetmethod', '--before no_reset --after soft_reset' ),
             ( '.menu.UploadTool.esptool', 'Serial' ),
             ( '.menu.UploadTool.esptool.upload.tool', 'esptool' ),
             ( '.menu.UploadTool.esptool.upload.verbose', '--trace' ),
@@ -867,7 +867,7 @@
         ( '.upload.tool', 'esptool' ),
         ( '.upload.maximum_data_size', '81920' ),
         ( '.upload.wait_for_upload_port', 'true' ),
-        ( '.upload.erase_cmd', 'version'),
+        ( '.upload.erase_cmd', 'flash_id'),
         ( '.serial.disableDTR', 'true' ),
         ( '.serial.disableRTS', 'true' ),
         ( '.build.mcu', 'esp8266' ),
@@ -936,37 +936,39 @@
     ####################### menu.resetmethod
 
     'resetmethod_menu': collections.OrderedDict([
-        ( '.menu.ResetMethod.ck', 'ck' ),
-        ( '.menu.ResetMethod.ck.upload.resetmethod', 'ck' ),
-        ( '.menu.ResetMethod.nodemcu', 'nodemcu' ),
-        ( '.menu.ResetMethod.nodemcu.upload.resetmethod', 'nodemcu' ),
+        ( '.menu.ResetMethod.nodemcu', 'dtr (aka nodemcu)' ),
+        ( '.menu.ResetMethod.nodemcu.upload.resetmethod', '--before default_reset --after hard_reset' ),
+        ( '.menu.ResetMethod.ck', 'no dtr (aka ck)' ),
+        ( '.menu.ResetMethod.ck.upload.resetmethod', '--before no_reset --after soft_reset' ),
         ]),
 
     'resetmethod_menu_extra': collections.OrderedDict([
-        ( '.menu.ResetMethod.none', 'none' ),
-        ( '.menu.ResetMethod.none.upload.resetmethod', 'none' ),
-        ( '.menu.ResetMethod.dtrset', 'dtrset' ),
-        ( '.menu.ResetMethod.dtrset.upload.resetmethod', 'dtrset' ),
+        ( '.menu.ResetMethod.nodtr_nosync', 'no dtr, no_sync' ),
+        ( '.menu.ResetMethod.nodtr_nosync.upload.resetmethod', '--before no_reset_no_sync --after soft_reset' ),
         ]),
 
-    ####################### upload.resetmethod
+    ####################### upload.resetmethod (new esptool.py options)
 
     'resetmethod_ck': collections.OrderedDict([
-        ( '.upload.resetmethod', 'ck' ),
+        ( '.upload.resetmethod', '--before no_reset --after soft_reset' ),
         ]),
 
     'resetmethod_nodemcu': collections.OrderedDict([
-        ( '.upload.resetmethod', 'nodemcu' ),
+        ( '.upload.resetmethod', '--before default_reset --after hard_reset' ),
         ]),
     
     'resetmethod_none': collections.OrderedDict([
-        ( '.upload.resetmethod', 'none' ),
+        ( '.upload.resetmethod', '--before no_reset --after soft_reset' ),
         ]),
 
     'resetmethod_dtrset': collections.OrderedDict([
-        ( '.upload.resetmethod', 'dtrset' ),
+        ( '.upload.resetmethod', '--before default_reset --after hard_reset' ),
         ]),
-    
+
+    'resetmethod_nodtr_nosync': collections.OrderedDict([
+        ( '.upload.resetmethod', '--before no_reset_no_sync --after soft_reset' ),
+        ]),
+  
     ####################### menu.FlashMode
 
     'flashmode_menu': collections.OrderedDict([
@@ -1093,7 +1095,7 @@
 
     'flash_erase_menu': collections.OrderedDict([
         ( '.menu.wipe.none', 'Only Sketch' ),
-        ( '.menu.wipe.none.upload.erase_cmd', 'version' ),
+        ( '.menu.wipe.none.upload.erase_cmd', 'flash_id' ),
         ( '.menu.wipe.sdk', 'Sketch + WiFi Settings' ),
         ( '.menu.wipe.sdk.upload.erase_cmd', 'erase_region "{build.rfcal_addr}" 0x4000' ),
         ( '.menu.wipe.all', 'All Flash Contents' ),