Попытка изменить расположение прошивок ESP8266 по беспроводной сети.

Предыстория

Некоторые устройства Tasmota на базе ESP8285 необходимо прошить чужой прошивкой. Порты программирования устройств недоступны (за исключением одного макета устройства, который был взломан для тестирования).
Установленная в настоящее время прошивка Tasmota основана на ядре Arduino, использует ESP8266httpUpdate.h и позволяет осуществлять OTA-обновление с http-сервера.

Проблема

Проблема в том, что прошивка Tasmota для семейства ESP8266 (=8285) всегда использует схему разделов размером 1 МБ, в то время как мое конкретное устройство основано на ESP8285H16, который включает 2 МБ флэш-памяти. Таким образом, вторая половина флэш-памяти не используется.

Что я хочу сделать

Используя только беспроводные обновления. Я хочу обновить структуру флэш-памяти устройств Tasmota, чтобы можно было использовать все 2 МБ флэш-памяти и в конечном итоге загрузить прошивку, размер которой больше, чем возможно в настоящее время. .
В идеале в окончательном макете флэш-памяти используется совершенно новая схема разделов.

Как этого можно достичь?

Я знаю, что это может быть непросто и, вероятно, потребуется несколько промежуточных версий прошивки. Это нормально, поскольку процесс обновления не будет происходить «в полевых условиях». (но физического доступа к чипам по-прежнему нет) и случайные сбои допустимы - процесс будет проверен заранее.

Похожий ответ от @Majko уже есть здесь, но он касается ESP32. Я знаю, с чего начать с ESP32, но ESP8266/8285 меня немного озадачивает:

Я попытался прочитать все флэш-образы устройства, чтобы получить представление о том, с чем имею дело, и обнаружил, что флэш-макет полностью отличается от того, к чему я привык (ESP32).
В основном по адресу флэш-памяти 0x8000 не было таблицы разделов, хотя в документации Espressif указан именно этот адрес.

Я почти не нашел документации о схеме разделов ESP8266, определенной ядром Arduino:

  • Где во Flash находится таблица разделов?
  • Если его нет, как OTA работает на ESP8266?
  • Где во флэш-памяти находится загрузчик?
  • Где начинается файловая система (если она есть)?

Требования

  • Разметку Flash необходимо изменить, используя только OTA-обновления
  • Любая информация, хранящаяся в текущей флэш-памяти или файловой системе, может быть удалена.
  • Многоэтапное обновление не проблема.
  • Имеется физический доступ к одному устройству, что позволяет протестировать процедуру.

Изменить: иллюстрация

Это обычная процедура OTA согласно документации:

И вот что я имею в виду:

Процедура обновления раздела OTA

Но для этого мне нужно знать границы каждого раздела, в идеале во время выполнения.

, 👍0


1 ответ


1

Оказывается, процедура обновления ESPhttpUpdate.h работает нормально, когда макет флэш-памяти меняется после OTA-обновления. По крайней мере в моем случае, когда вторая половина флэш-памяти не используется. Если при первоначальной установке была файловая система, она будет утеряна.
Хотя файловую систему можно даже сохранить, если ее скопировать в нужное место до загрузки прошивки с другой схемой разделов, но сейчас мне нет необходимости идти по этому пути...< /п>

подведем итог...

  1. Прошивка Tasmota была установлена на ESP8285H16 объемом 2 МБ. Поскольку прошивка Tasmota для устройств ESP8266/8285 использует только 1 МБ флэш-памяти - может быть что-то вроде ~ 500 КБ скетча, ~ 400 КБ OTA, ~ 100 КБ FS).
    Вторая половина флэш-памяти не использовалась, поэтому максимальный размер прошивки, которую можно было загрузить напрямую по беспроводной сети, составлял ~400 КБ.

  2. На http-сервере была предоставлена промежуточная прошивка для обновления устройства.
    Эта прошивка:

    • был создан для флэш-макета размером 2 МБ (эскиз 1 МБ, ~ 700 КБ OTA, ~ 256 КБ FS)
    • не содержит ничего, кроме входа в систему Wi-Fi и процедуры OTA. В случае успеха это обновление оставит флэш-память в новом макете.
  3. Благодаря дополнительным 300 КБ OTA-памяти устройство теперь можно обновить до последней версии прошивки. Эта прошивка была построена с тем же разделением, что и промежуточная прошивка.

В моем случае использовался файл Platformio.ini:

[env:esp8285]
platform = espressif8266
framework = arduino
board = esp8285

board_build.filesystem = littlefs
board_build.ldscript = eagle.flash.2m256.ld
board_build.mcu=esp8285
board_upload.flash_size=2MB
board_build.flash_mode=dout

monitor_speed = 115200
upload_port = COM5

Если в исходном макете флэш-памяти осталось мало места для OTA, двоичный файл прошивки можно заархивировать с помощью gzip, чтобы сэкономить немного памяти.

,