Таблица разделов ESP32 и место записи
В моем проекте ESP32 у меня есть следующее platformio.io файл:
[env:esp32-poe]
platform = espressif32
board = esp32-poe
framework = arduino
lib_deps =
openslab-osu/SSLClient@^1.6.7
knolleary/PubSubClient@^2.8
bblanchon/ArduinoJson@^6.16.1
monitor_speed = 115200
[env:custom_builtin_table]
board_build.partitions = default.csv
по умолчанию используется следующая таблица.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,
Я заметил, что когда я загружаю код на свой ESP32, результат выглядит следующим образом:
[...]
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 17104 bytes to 11193...
Writing at 0x00001000... (100 %)
Wrote 17104 bytes (11193 compressed) at 0x00001000 in 0.3 seconds (effective 521.5 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 128...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 5621.7 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 47...
Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 27422.0 kbit/s)...
Hash of data verified.
Compressed 1003456 bytes to 585011...
Writing at 0x00010000... (2 %)
[...]
Следовательно, он пишет по адресу:
- 0x1000
- 0x8000
- 0xe000 (otadata)
- 0x10000 (app0)
Но я не могу понять, что представляют собой первые два сочинения.
@Mark, 👍0
1 ответ
Лучший ответ:
0x1000-это загрузчик "второй ступени". Это код, который отвечает за загрузку кода в соответствии с макетом, указанным в таблице разделов.
В ESP-IDF двоичный образ, который находится со смещением 0x1000 во flash, является загрузчиком второй ступени. Исходный код загрузчика второго этапа доступен в каталоге components/bootloader ESP-IDF. Обратите внимание, что эта схема не является единственной возможной с чипом ESP32. Можно написать полнофункциональное приложение, которое будет работать при прошивке со смещением 0x1000, но это выходит за рамки данного документа. Загрузчик второго этапа используется в ESP-IDF для придания гибкости компоновке flash (с использованием таблиц разделов) и обеспечения различных потоков, связанных с шифрованием flash, безопасной загрузкой и обновлением по воздуху (OTA).
0x8000-это сама таблица разделов.
Загрузчик второго этапа считывает таблицу разделов, найденную со смещением 0x8000. Дополнительные сведения см. в документации по таблицам разделов. Загрузчик находит заводские и ОТА-разделы и решает, какой из них загрузить, основываясь на данных, найденных в информационном разделе ОТА.
Все это подробно описано в руководстве ESP-IDF.
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Почему OTA не работает с платой ESP32-CAM Ai-Thinker?
- Нет "Огромной схемы разделов приложений" (ESP32)
- Размер раздела ESP32 и максимальный размер программы
- ESP32-C3 — неопределенная ссылка на esp_ble_gap_start_advertising.
- Как использовать флаг ESP32 ESP32 config в platformio?
- Тот же код работает на Arduino IDE, но не в PlatformIO IDE
- Как оптимизировать проверку конкретной строки в потоке UART