Тут прикинул время записи flash после компиляции. Выходит, что можно записать всю Flash в 512 кило за 5 секунд.
Проект обычно меньше 512 к. Например коды web-свалки на сегодня до 256 кило.
Стандартное время стирания и записи у полных 512 кило составляет (при скорости 160...200 кило/сек при +25C и стандартных функциях работы с Flash через HTTP!) до 4.2 секунды.
Стирание секторов/блоков Flash из этого составляет половину времени - около 2 секунды.
Т.е. скорость заливки по прерываниям по UART должна составлять к примеру 3 МегаБит/s, чтобы за время стирания (2сек) принять 512 кило: 512*1024*11бит/2ceк = 2883584 Baud.
Надо выкидывать всякие esptool в помойку! Делать загрузчик, загружаемый в IRAM по стандартному интерфейсу программирования ESP8266 на скорости к примеру 230400 baud.
После загрузки кода ( на всё про всё уходит не более 1 сек, т.к. коду там не более 8 кило) запускать его и переходить к 3 MBaud UART. С ожиданием прихода первых ACK до 1..5 ms - Этап первичной синхронизации.
Далее Программатор:
1) Принимает данные с UART в циклический буфер памяти RAM до 80 кило (RAM у нас 96-16 кило на Bios и стек) блоками до 4 кило (больше возможны частые ошибки на больших скоростях и придется чаше 'перепередавать' блок). Передача нового блока с компа должна начинаться по приему компом ACK от Программатора. Данная коммутация при правильно писанной проге на компе не занимает более 1 ms на каждые 4 кило.
2) По приему блоков и команд Программатор стирает Flash и перекидывает данные в буфер записи в IRAM до 48 кило (IRAM у нас 64 кило без включения "кеша Flash").
3) Стирает необходимые блоки в Flash одновременно передавая ACK (- готов принять ещё) и принимая в буфер данные.
4) При накоплении для записи уже готовых блоков в IRAM, не передает ACK, а начинает писать Flash. Не передает, чтобы комп затормозил передачу данных, т.к проц ESP8266 будет занят записью Flash (передача в регистры SPI по 32 байта занимает много тактов CPU и необходимо ждать подтверждения записи...)
5) После записи блока из IRAM Программатор передает ACK. Выходит что-типа синхронизации.
6) Комп ждет ACK до передачи следующих блоков до 300ms и, если не пришел за это время - значит соединение утеряно или бага
Примерно псё. Кто возьмется и напишет программатор для ESP8266 с такой скоростью программирования (выходит гарантированно более 100 кило/сек)? Чтение Flash определяется исключительно скоростью UART (при 3Mbaud = 3000000/11 = 272 кило в сек).
Делать это недолго - основное время уходит на сопровождение и обяснялово 'телепузикам' как и что