这是最新(主)开发分支的文档。如果您正在查找以前版本的文档,使用左侧的下拉菜单选择所需的版本。

分区表机制

概述

Flash 可以包含应用程序,用户资源等多种不同类型的数据。为了更方便的使用 flash 资源,我们于是提出了分区表的解决方案。

分区表中的每个条目都包括以下几个部分: Name (分区名)、 Offset (分区相对flash基址的偏移量)、 Size (分区大小) 以及 Flag (暂时未使用)。

使用分区表

在使用分区表时,可打开项目配置菜单 menuconfig ,并进入 Partition Table 菜单,在 Partition Table 栏下选择一种分区表方案。我们提供了三种预置的分区表和一种用户自定义的分区表,下面是预置的分区表,最后一种是用户自定义的分区表。

  • “partition_table_normal.txt, no OTA”

  • “partition_table_large.txt, no OTA”

  • “partition_table_with_ota.txt, with OTA”

  • “partition_table_custom.txt, no OTA”

内置分区表样式

以下是 “partition_table_normal.txt” 选项的分区表信息摘要:

# name,          offset,    size,      flag
ft,              0x0,       0x2000,    0x0
bootloader,      0x2000,    0xC000,    0x0
partition_table, 0xE000,    0x1000,    0x0
app,             0xF000,    0x100000,  0x0
nvs,             0x1F0000,  0x8000,    0x0

以下是 “partition_table_large.txt” 选项的分区表信息摘要:

# name,          offset,    size,      flag
ft,              0x0,       0x2000,    0x0
bootloader,      0x2000,    0xC000,    0x0
partition_table, 0xE000,    0x1000,    0x0
app,             0xF000,    0x1E1000,  0x0
nvs,             0x1F0000,  0x8000,    0x0

以下是 “partition_table_with_ota.txt” 选项的分区表信息摘要:

# name,          offset,    size,      flag
ft,              0x0,       0x2000,    0x0
bootloader,      0x2000,    0xC000,    0x0
partition_table, 0xE000,    0x1000,    0x0
app,             0xF000,    0x122A00,  0x0
app_ota,         0x131A00,  0xAE600,   0x0
user,            0x1E0000,  0x2000,    0x0
nvs,             0x1F0000,  0x8000,    0x0

这三种分区表中,Normal的分区不带app_ota和user分区,SDK 默认使用Large 这个分区表,可以从Kconfig配置中指定其他分区表。

  • ft分区:芯片的出厂固件,启动时将默认加载这个文件。

  • bootloader:存放bootloader的启动程序,完成OTA升级文件的解压和固件更新。

  • partition_table:存放分区表信息,包括各个分区的名称,地址,大小和FLAG。

  • app:存放应用程序。

  • app_ota:存放OTA升级的应用程序压缩包。

  • user:用户自定义分区,目前SDK框架没有使用。

  • nvs:非易失存储分区,用于NVS模块的key-value数据存放,该分区需要一块做垃圾回收,所以nvs的大小需要大于等于2*0x1000。

注意

ft,是芯片出厂固件,用户不能修改其中的内容。

注意

ft,bootloader,partition_table这3个分区的配置 不能修改 。app,app_ota,nvs这3个分区 不能修改名称 ,可以修改地址和大小。

用户自定义分区表

如果想要根据自己的程序使用灵活性更高的分区表,那么请在 menuconfigPartition Table 菜单中选择 Custom partition table 选项,启用自定义的分区表功能。之后在工程根目录下添加一个 partition_table_custom.txt 文件即可,在编译时构建系统会自动识别并进行处理。

以下是 “Custom partition table” 选项的分区表信息摘要:

# name,          offset,    size,      flag
ft,              0x0,       0x2000,    0x0
bootloader,      0x2000,    0xC000,    0x0
partition_table, 0xE000,    0x1000,    0x0
app,             0xF000,    0x1D1000,  0x0
user,            0x1E0000,  0x2000,    0x0
nvs,             0x1F0000,  0x8000,    0x0
  • 字段之间的空格会被忽略,任何以 # 开头的行(注释)也会被忽略。

  • TXT 文件中的每个非注释行均为一个分区定义。

  • user 是一个用户自己配置的分区的示例,我们在使用时只需要合理的设置 offset 和 size 字段的内容即可。

  • ft,bootloader,partition_table 这3个分区不能改,app,nvs 这2个分区名称不能改,地址和大小可以修改。

烧写与擦除分区表

按照规则填写相应的分区表文件的内容,之后编译并烧录项目工程固件。烧录固件的过程中会将工程目录下的所有分区表都进行烧录,如果想要清除已经存在的分区表里的内容,则在编译命令后面加上 -e 选项即可。