Puedes actualizar el firmware usando ESPTOOL con un comando como
./esptool.py write_flash 0x00000 my_app.elf-0x00000.bin 0x40000 my_app.elf-0x40000.bin
esto sobrescribirá el chip SPI FLASH con un nuevo contenido. Pero si sobrescribe la región 0x0, ¿se pierde el cargador de arranque que permite flashear el chip a través de UART? ¿O es un código de máscara rom real?