Для чего нужны файлы boot_app0.bin и bootloader_dio_80m.bin? (ESP32 - IDE Arduino)
Команда ESP32 flash, выполняемая IDE Arduino, по-видимому, запускает два файла загрузчика: по смещению и по смещению. Интересно, что на самом деле делают эти два файла загрузчика и почему их два. Ниже я привожу дополнительную информацию.
1. Контекст
Я часть команды, разрабатывающей новую бесплатную среду IDE для микроконтроллеров: Embeetle IDE. В ближайшем будущем мы планируем поддержать семейство микроконтроллеров ESP32. Поэтому сейчас я изучаю систему сборки ESP32 - как
ESP-IDF
инструмент и подход Arduino IDE к проектам ESP32.
2. Процедура прошивки Arduino IDE для проектов ESP32.
После создания
.elf
файла, IDE Arduino запускает команду для преобразования его в двоичный файл:
python esptool.py --chip esp32 elf2image
--flash_mode dio
--flash_freq 80m
--flash_size 4MB
-o /tmp/arduino_build_852524/WiFiScan.ino.bin
/tmp/arduino_build_852524/WiFiScan.ino.elf
Наконец, это
WiFiScan.ino.bin
файл записывается на плату вместе с двумя файлами загрузчика и таблицей разделов:
python esptool.py --chip esp32
--port /dev/ttyUSB0
--baud 921600
--before default_reset
--after hard_reset write_flash
-z
--flash_mode dio
--flash_freq 80m
--flash_size detect
0xe000 ~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin
0x1000 ~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/sdk/bin/bootloader_dio_80m.bin
0x10000 /tmp/arduino_build_852524/WiFiScan.ino.bin
0x8000 /tmp/arduino_build_852524/WiFiScan.ino.partitions.bin
Таблица разделов по умолчанию, используемая Arduino IDE, выглядит следующим образом (в формате csv):
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x140000,
app1, app, ota_1, 0x150000,0x140000,
spiffs, data, spiffs, 0x290000,0x170000,
Двоичный эквивалент этого csv-файла мигает по адресу
0x8000
. Также есть два файла загрузчика, которые прошиваются по адресам.
0xe000
и соответственно (см. следующий абзац).
3. Файлы загрузчика
Прошиваются два файла загрузчика:
# flashed at 0xe000
~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin
а также:
# flashed at 0x1000
~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/sdk/bin/bootloader_dio_80m.bin
Вопрос 1: что делают эти два файла загрузчика?
Также интересно наблюдать за их местонахождением. Первый,
boot_app0.bin
находится в папке с именем
'partitions'
. Он находится рядом с несколькими перегородками.
.csv
файлы. Почему? Но, может быть, это станет ясно, когда ответят на вопрос 1.
Другой,
bootloader_dio_80m.bin
находится в папке с именем
'sdk/bin/'
и находится рядом с другими файлами, имена которых начинаются с
'bootloader_'
приставка:
Вопрос 2: Насчет прошитого файла загрузчика по адресу
0x1000
, Я думаю'_40m'
а также'_80m'
суффиксы обозначают скорость вспышки в МГц. Но я понятия не имею, что за'_dio'
,'_dout'
а также'_qout'
суффиксы обозначают.
Пожалуйста, просветите меня ^_^
1 ответ
Бинарный файл по адресу 0x1000 является загрузчиком. Arduino ESP32 имеет двоичные файлы загрузчика, соответствующие параметрам плат в меню «Инструменты» в Arduino IDE (построены из файлаboards.txt).
Функции загрузчика описаны здесь .
Загрузчик программного обеспечения ESP-IDF выполняет следующие функции:
- Минимальная начальная конфигурация внутренних модулей;
- Инициализировать функции Flash Encryption и / или Secure, если они настроены;
- Выберите раздел приложения для загрузки на основе таблицы разделов и ota_data (если есть);
- Загрузите этот образ в RAM (IRAM и DRAM) и передайте ему управление.
Boot_app0.bin - это исходное содержимое раздела данных OTA. Это задокументировано здесь .
Раздел данных OTA представляет собой два флеш-сектора (0x2000 байт) размером, чтобы предотвратить проблемы в случае сбоя питания во время записи. Секторы независимо стираются и записываются с совпадающими данными, и если они не совпадают, используется поле счетчика, чтобы определить, какой сектор был записан позже.
DIO, QIO, DOUT, QOUT - это режимы SPI для флэш-памяти. Разные модули esp32 имеют разные микросхемы флеш-памяти и способы их подключения. (D - двойной, Q - четверной)