【IoT】分區表(Partition Tables):ESP32 FLASH 分區功能簡析

1、背景:

ESP32 是一款藍牙與 WIFI 合一的 IoT 芯片,並且支持 OTA 在線升級功能,在實際產品開發過程中需要對 FLASH 分區定製才能更好地滿足產品需求,做剛剛好的產品。

ESP32 系統可以運行多個應用程序,同時包括大量的數據(校正數據、文件系統、參數保存等),分區表存放在 FLASH 偏移地址 0x8000。

2、分區表簡析

 

分區表長度爲 0xC00 字節,最多支持 95 個分區入口,使用 MD5 校驗,筆者使用的 ESP32 模組是 ESP-WROOM-32,該模組集成了 4MB SPI Flash,在編譯esp32程序時,通過make menuconfig -> PartitionTable 可以看到三種分區選擇:

工廠程序(無OTA分區):

偏移地址 0x10000 處存放出廠固件,bootloader 啓動時默認加載該偏移地址應用程序

# Espressif ESP32 Partition Table
# Name,   Type, SubType, Offset,  Size
nvs,      data, nvs,     0x9000,  0x6000
phy_init, data, phy,     0xf000,  0x1000
factory,  app,  factory, 0x10000, 1M

工廠程序(雙OTA分區):

otadata 分區存儲 OTA 升級數據,用於啓動時判斷加載哪個入口的應用程序:factory、ota_0,ota_1

# Espressif ESP32 Partition Table
# Name,   Type, SubType, Offset,  Size
nvs,      data, nvs,     0x9000,  0x4000
otadata,  data, ota,     0xd000,  0x2000
phy_init, data, phy,     0xf000,  0x1000
factory,  0,    0,       0x10000, 1M
ota_0,    0,    ota_0,   ,        1M
ota_1,    0,    ota_1,   ,        1M

用戶自定義分區:

# Name,   Type, SubType, Offset,   Size
nvs,      data, nvs,     0x9000,  0x4000
otadata,  data, ota,     0xd000,  0x2000
phy_init, data, phy,     0xf000,  0x1000
factory,  app,  factory, 0x10000,  1M
ota_0,    app,  ota_0,   ,         1M
ota_1,    app,  ota_1,   ,         1M

menuconfig 中的配置只是修改配置文件中的宏,實際上 ESP32 SDK 對應 FLASH 分區配置的源碼路徑是:

\esp-idf\components\partition_table

該路徑下有文件:

partitions_singleapp

partitions_singleapp_coredump

partitions_two_ota

partitions_two_ota_coredump

都是用來對Flash分區進行配置的。

以 partitions_two_ota_coredump 爲例,使用 partitions_two_ota_coredump 配置分區時4M SPI Flash的分區情況如下圖所示:  

3、生成分區二進制文件

分區文件是 CSV 格式,但是需要生成二進制文件才能被寫入 FLASH,工具 gen_esp32part.py 被用於文件轉化(CVS 和 二進制)。

轉化 CVS 爲二進制文件:

python gen_esp32part.py input_partitions.csv binary_partitions.bin

轉化二進制爲 CVS 文件:

python gen_esp32part.py binary_partitions.bin input_partitions.csv

 

refer:

https://esp-idf.readthedocs.io/en/latest/api-guides/partition-tables.html

https://blog.csdn.net/abc517789065/article/details/79891568

https://github.com/espressif/esp-idf/blob/be81d2c/components/partition_table/gen_esp32part.py

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章