Таблица разделов ESP32 и место записи

esp32 platformio partition

В моем проекте 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)

Но я не могу понять, что представляют собой первые два сочинения.

, 👍0


1 ответ


Лучший ответ:

4

0x1000-это загрузчик "второй ступени". Это код, который отвечает за загрузку кода в соответствии с макетом, указанным в таблице разделов.

В ESP-IDF двоичный образ, который находится со смещением 0x1000 во flash, является загрузчиком второй ступени. Исходный код загрузчика второго этапа доступен в каталоге components/bootloader ESP-IDF. Обратите внимание, что эта схема не является единственной возможной с чипом ESP32. Можно написать полнофункциональное приложение, которое будет работать при прошивке со смещением 0x1000, но это выходит за рамки данного документа. Загрузчик второго этапа используется в ESP-IDF для придания гибкости компоновке flash (с использованием таблиц разделов) и обеспечения различных потоков, связанных с шифрованием flash, безопасной загрузкой и обновлением по воздуху (OTA).

0x8000-это сама таблица разделов.

Загрузчик второго этапа считывает таблицу разделов, найденную со смещением 0x8000. Дополнительные сведения см. в документации по таблицам разделов. Загрузчик находит заводские и ОТА-разделы и решает, какой из них загрузить, основываясь на данных, найденных в информационном разделе ОТА.

Все это подробно описано в руководстве ESP-IDF.

,