Может ли ESP32 прошить собственную вспышку с SD-карты?

#esp32

Вопрос:

Итак, мне было интересно, можно ли создать своего рода «загрузчик» для программ ESP32, который загружал бы указанные программы с SD-карты?

Я знаю, что не могу сделать это во время полета, поэтому моя идея заключалась в следующем: создайте что-то вроде OTA без Интернета и второго раздела, потому что для моего конкретного использования потребуется каждый бит памяти, который он может получить, поэтому разделение его на самом деле не вариант.

Прямо сейчас я вижу две проблемы:

  1. Мне нужно завершить все, как только я начну загружать программу (в основном бесплатные, так что никаких потенциальных прерываний нет).
  2. Мне нужно поместить все в IRAM и оставить достаточно места для остальной части приложения. Для этого потребуется полная перепись функций esp-idf, поскольку большинство из них не входят в IRAM.

Комментарии:

1. что еще могло бы написать обновление OTA для flash, если бы не esp32. не имеет значения, что является источником нового двоичного файла. его просто нужно записать в нужный раздел, а затем активировать

Ответ №1:

ДА. Нет необходимости в IRAM, вы можете запускать свое приложение с флэш-памяти и одновременно писать на одну и ту же флэш-память без каких-либо проблем. Espressif предоставил API для выполнения именно того, что вы хотите: Обновления по воздуху (OTA). Вам необходимо создать отдельные разделы для текущей и «свежей» прошивки (как описано в документе). Затем вы просто считываете данные вашего нового образа прошивки с SD-карты и передаете их в функцию API esp_ota_write...() .

Комментарии:

1. Стоит отметить недостаток ОТА, уменьшающего вдвое максимальный полезный размер изображения, так как он разбивает флэш-память на два раздела.

2. Да, ОТА сработало бы, но мне нужна вся вспышка, я действительно не могу позволить себе разделить ее…

3. Альтернативой ОТА Espressif является создание его самостоятельно с нуля, что не является тривиальным. Решать вам, но вам предстоит на несколько порядков больше работы, чем принятие готового решения. Возможно, вы можете использовать модуль с 8 или 16 МБ флэш-памяти?

4. @haberturdeur, вы создали пользовательское разделение, в котором используется вся флэш-память? в разделе по умолчанию есть раздел для второй копии приложения

5. По сути, да. Я еще не сделал этого, потому что я все еще занимаюсь низкоуровневыми вещами, но я делал это несколько раз в других проектах…