[ESP32]啓動過程與分區表

[ESP32]啓動過程與分區表

ESP32啓動大概分爲三個步驟:

  1. ESP32內部ROM的引導程序啓動,把spi flash是0x1000的bootloader程序加載到RAM中;
  2. bootloader啓動,讀取分區表和主應用程序映像
  3. 主程序運行,啓動第二個CPU和RTOS程序。

所以我們簡單開發,一般需要燒寫三個部分內容即可:

  1. bootloader
  2. 分區表
  3. 主程序
    在這裏插入圖片描述
    當然一般情況下,bootloader我們是不會修改的,主要是合理的設計分區表。
    除了上面三個分區之後,通過還有nvs和phy_init分區:
    nvs(non-volatile storate)可以保存一些自定義的數據,類似序列號
    phy_init則用來存放一些無線校準參數。
    當然,除此之外,如果用到OTA,還會有otadata,ota_0和ota_1這三個分區。
    如果使用了spiffs,還會有spiffs分區。
    下面給出一個完整的OTA分區表例子,大家可以按照自己需要進行調整:
Name Type SubType Offset Size Flags
bootloader bootloader bootloader 0x1000 0x7000
partition partition partition 0x8000 0x1000
nvs data nvs 0x9000 0x4000
otadata data ota 0xd000 0x2000
phy_init data phy 0xf000 0x1000
factory app factory 0x10000 0x130000
ota_0 app ota_0 0x130000
ota_1 app ota_1 0x130000
storage data spiffs 0x60000

如果沒有修改bootloader,大概分佈如下:
nvs:從0x9000開始,長度爲0x4000(16KB),若無OTA則爲0x6000(24KB)
otadata:從0xd000開始,長度爲0x2000(8KB),未使用OTA,則此分區劃爲nvs
phy_init:從0xf000開始,長度爲0x1000(4KB)。
factory或APP:正常的主程序會從0x10000位置開始,這裏我的factory,ota_0和ota_1都劃分爲0x1300000(1216KB),沒有寫偏移地址,則會接着上一個分區線束地址。
storage:這個是存儲分區劃分了0x60000(384KB)

如果修改了bootloader,並且長度超過了劃分的大小(0x7000),劃分分區表的時候最好不要指定offset,不然內容重疊之後會出現不可預料的問題。

參考分區表cvs:

# Name,   Type, SubType, Offset,   Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,      data, nvs,     0x9000,        0x4000,
otadata,  data, ota,     0xd000,        0x2000,
phy_init, data, phy,     0xf000,        0x1000,
factory,  app,  factory, 0x10000,       0x130000,
ota_0,    app,  ota_0,   ,        0x130000,
ota_1,    app,  ota_1,   ,        0x130000,
storage,  data, spiffs,  ,        0x60000, 

我們可以看到啓動信息裏面的分區信息如下:

I (66) boot: Partition Table:
I (69) boot: ## Label            Usage          Type ST Offset   Length
I (76) boot:  0 nvs              WiFi data        01 02 00009000 00004000
I (84) boot:  1 otadata          OTA data         01 00 0000d000 00002000
I (91) boot:  2 phy_init         RF data          01 01 0000f000 00001000
I (99) boot:  3 factory          factory app      00 00 00010000 00130000
I (106) boot:  4 ota_0            OTA app          00 10 00140000 00130000
I (114) boot:  5 ota_1            OTA app          00 11 00270000 00130000
I (121) boot:  6 storage          Unknown data     01 82 003a0000 00060000
I (129) boot: End of partition table
I (133) boot: Defaulting to factory image
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章