[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分区表例子,大家可以按照自己需要进行调整:
NameTypeSubTypeOffsetSizeFlags
bootloaderbootloaderbootloader0x10000x7000
partitionpartitionpartition0x80000x1000
nvsdatanvs0x90000x4000
otadatadataota0xd0000x2000
phy_initdataphy0xf0000x1000
factoryappfactory0x100000x130000
ota_0appota_00x130000
ota_1appota_10x130000
storagedataspiffs0x60000

如果没有修改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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值