Тип раздела можно указать с помощью строкового идентификатора или как 8-битное число в HEX-формате. Загрузчик ESP-IDF игнорирует любые типы разделов, кроме двух:
app (application ) - ESP_PARTITION_TYPE_APP (цифровое значение 0x00) – данные прошивки. data - ESP_PARTITION_TYPE_DATA (цифровое значение 0x01) – прикладные данные.
Подтипы разделов
Для разделов типа app (0x00)
Когда type равен "app", поле SubType может быть указано как:
factory (0x00) – это раздел приложения по умолчанию. Не обязательный раздел, если вы используете OTA /// и обязательный – если OTA не используется. Сюда “по умолчанию” ESP-IDF помещает скомпилированный код во время прошивки по проводам.
Но если этот раздел отсутствует, прошивка будет записана в свободный ota-раздел. Загрузчик запустит это “заводское” приложение, если не найдет разделы типа ota.
ОТА никогда не перезаписывает этот раздел, поэтому вы можете быть уверены, что ваше устройство гарантировано запустится, даже если вы путем сложной комбинации кривых рук ушатали все свои ota-разделы.
ota_0 (0x10) … ota_15 (0x1F) – слоты для OTA-прошивок. Сюда будет помещен код прошивки, полученный через WiFi и OTA. Сюда же упадет ваш код “с проводов” в случае, если раздел factory отсутствует. Если вы планируете использовать OTA – то вам нужно как минимум два таких раздела.
test (0x20) – это зарезервированный подтип для процедур заводских испытаний. Он будет использоваться в качестве резервного загрузочного раздела, если не будет найден другой допустимый раздел приложения (factory или ota). Можно настроить загрузчик на чтение специального strapping pin во время каждой загрузки, если соответствующее GPIO удерживается на низком уровне..
Важно! Для разделов типа "app" размер и посадочное место (смещение) должны быть выровненными до 0x10000 (64 КБ)! Ну и конечно же, размер раздела должен быть не меньше размера скомпилировано кода с запасом на будущие модификации.
----- Для разделов типа data (0x01) (см. subtype enum)
ota (0x00) — это раздел данных OTA , в котором хранится информация о выбранном в данный момент слоте приложения OTA. Этот раздел обязателен при наличии OTA разделов типа app и должен иметь размер ровно 0x2000 байт.
phy (0x01) - предназначен для хранения данных инициализации устройства PHY. Это позволяет настраивать константы для каждого устройства без внесения изменений в прошивку. В конфигурации по умолчанию раздел "phy" не используется, а данные инициализации PHY компилируются в само приложение. Таким образом, этот раздел можно удалить из таблицы разделов для экономии места. Особенно если вы не выпускаете свои устройства крупными партиями.
nvs (0x02) - предназначен для API энергонезависимого хранилища (NVS). NVS используется для хранения данных калибровки PHY для каждого устройства (отличных от данных инициализации) и для хранения данных WiFi, если используется функция инициализации esp_wifi_set_storage (WIFI_STORAGE_FLASH).
NVS API также можно (и нужно!) использовать для данных вашего приложения. Разработчики рекомендуют включить в проект "NVS" размером не менее 0x3000 байт. Если вы используете NVS API для хранения большого количества данных, увеличьте размер раздела NVS со значения по умолчанию 0x6000 байт.
nvs_keys (0x04) – это ключевой раздел NVS и используется для хранения ключей шифрования NVS, когда включена функция шифрования NVS. Размер этого раздела должен быть ровно 0x1000 байт. Если шифрование данных не используется, то и этот раздел не нужен.
fat (ESP_PARTITION_SUBTYPE_DATA_FAT) – позволяет организовать файловую систему FAT
spiffs (ESP_PARTITION_SUBTYPE_DATA_SPIFFS) – позволяет организовать файловую систему SPIFFS
Существуют и другие предопределенные подтипы данных для хранения данных, поддерживаемые ESP-IDF.
Каждый сектор flash памяти имеет минимальный размер 4 КБ ( 0x1000 байт ) Начальная область Flash-памяти по умолчанию занята под загрузчик 32КБ ( 0x8000 байт ) Длина таблицы разделов составляет 3КБ (0xC00 байт), то есть допускается максимум 95 записей Контрольная сумма MD5 - 1КБ добавляется сразу же после данных таблицы. Таким образом, таблица разделов занимает целый сектор флэш-памяти. ( 4КБ ) ( 0x1000 байт )
В результате любой следующий за ними раздел должен располагаться по адресу смещения То есть начало “нашей” таблицы разделов находится на 0x9000. не успеваю за своими мыслями......
Из-за аппаратных ограничений пользователям недоступны для выделения 8 МБ внешних адресов памяти (от 0x4040_0000 до 0x40C0_0000), для чтения и выполнения.
Внешняя флэш-память Для флэш-памяти взаимосвязи между номерами записей, диапазонами виртуальной памяти и PID подробно описаны в таблицах 4.3-10 и 4.3-11, которые для каждой комбинации области памяти и PID определяют первую запись MMU, управляющую отображением.
Это число относится к записи MMU, управляющей самой первой страницей; вся область описывается количеством страниц, указанным в столбце «count».
Эти две таблицы по сути одинаковы, единственное различие заключается в том, что номера записей APP_CPU ( application ) на 2048 выше, чем соответствующие номера PRO_CPU. ( Programm )
Обратите внимание, что области памяти V Addr0 и V Addr1 доступны только с использованием PID 0 и 1, в то время как доступ к V Addr4 - возможен только с использованием PID 2 ~ 7. Как показывают эти таблицы, виртуальный адрес VAddr1 может использоваться только процессами с PID 0 или 1.
Внимание: V Addr4 это подмножество V Addr0
----- ниже специальный режим ----
Существует специальный режим, позволяющий процессам с PID от 2 до 7 считывать внешнюю флэш-память по адресу VAddr1. Когда бит DPORT_PRO_SINGLE_IRAM_ENA регистра DPORT_PRO_CACHE_CTRL_REG равен 1, MMU переходит в этот специальный режим для доступа к памяти PRO_CPU. Аналогично, когда бит DPORT_APP_SINGLE_IRAM_ENA регистра DPORT_APP_CACHE_CTRL_REG равен 1, APP_CPU обращается к памяти, используя этот специальный режим.
В этом режиме процесс и страница виртуального адреса, поддерживаемые каждой записью конфигурации MMU, различаются. Для получения более подробной информации см. таблицы 4.3-12 и 4.3-13. Как показано в этих таблицах, в этом специальном режиме VAddr2 и VAddr3 не могут использоваться для доступа к внешней флэш-памяти.