【IoT】分区表(Partition Tables):ESP32 FLASH 分区功能简析

简介: ESP32基础

1、背景:

ESP32 是一款蓝牙与 WIFI 合一的 IoT 芯片,并且支持 OTA 在线升级功能,在实际产品开发过程中需要对 FLASH 分区定制才能更好地满足产品需求,做刚刚好的产品。

ESP32 系统可以运行多个应用程序,同时包括大量的数据(校正数据、文件系统、参数保存等),分区表存放在 FLASH 偏移地址 0x8000。

2、分区表简析

20180715120152448.png

分区表长度为 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

卫朋

人人都是产品经理受邀专栏作家,CSDN 嵌入式领域新星创作者、资深技术博主。2020 年 8 月开始写产品相关内容,截至目前,人人都是产品经理单渠道阅读 56 万+,鸟哥笔记单渠道阅读200 万+,CSDN 单渠道阅读 210 万+,51CTO单渠道阅读 180 万+。

卫朋入围2021/2022年人人都是产品经理平台年度作者,光环国际学习社区首批原创者、知识合作伙伴,商业新知 2021 年度产品十佳创作者,腾讯调研云2022年达人榜第三名。

文章被人人都是产品经理、CSDN、华为云、运营派、产品壹佰、鸟哥笔记、光环国际、商业新知、腾讯调研云等头部垂直类媒体转载。文章见仁见智,各位看官可策略性选择对于自己有用的部分。

相关文章
|
SQL 物联网 Apache
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(11)
目前,IoTDB中不存在冲突的权限,因此用户的真正权限是用户自身权限和用户角色权限的结合。也就是说,要确定用户是否可以执行操作,取决于用户自己的权限之一或用户角色的权限是否允许该操作。用户自己的特权和用户角色的特权可能会重叠,但这并不重要。
202 1
|
存储 物联网 数据管理
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(12)
现在到了使用Apache IoTDB进行IoT相关开发的架构设计与功能实现的最后一个环境,在本文中我将向大家介绍IoTDB的查询语言。IoTDB为咱们广大开发者提供了类似SQL的查询语言,用于与IoTDB进行交互,查询语言可以分为4个主要部分:架构语句、数据管理语句、数据库管理语句、功能。
208 0
|
SQL 传感器 物联网
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)
物联网提供限制/限制条款和偏移/偏移子句,以使用户对查询结果有更多的控制权。使用 LIMIT 和 SLIMIT 子句允许用户控制查询结果的行数和列数,使用 OFFSET 和 SOFSET 子句允许用户设置结果的起始位置进行显示。
142 0
|
SQL 传感器 物联网
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(8)
IoTDB为用户提供了多种插入实时数据的方式,如直接输入插入SQL语句在客户端,这插入SQL语句语句可用于将数据插入到一个或多个已创建的指定时间序列中。
314 1
|
SQL 物联网 Java
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(9)
GROUP BY 语句为用户提供了三种类型的指定参数: 参数1:时间轴上的显示窗口 参数2:划分时间轴的时间间隔(应为正) 参数3:时间滑动步长(可选,不应小于时间间隔,如果未设置,则默认等于时间间隔)
243 0
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(9)
|
SQL 存储 缓存
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(7)
IoTDB支持存储级TTL设置,这意味着它能够定期自动删除旧数据。使用TTL的好处是,希望咱们程序猿可以控制总磁盘空间的使用,并防止机器用完磁盘。此外,随着文件总数的增加,查询性能可能会降低,并且随着文件的增加,内存使用也会增加。及时删除此类文件有助于保持较高的查询性能并减少内存使用。
239 0
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(7)
|
存储 SQL 传感器
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(6)
接下来我们讨论一下关于创建存储组的相关方面,在这里值得注意的是,当路径本身或路径的父/子层已经被设置为存储组时,则不允许将路径设置为存储组。例如,设置是不可行的​​root.ln.wf01​​存在两个存储组时,作为一个存储组​​root.ln​​和​​root.sgcc​​。系统会给出相应的错误提示。
217 0
|
安全 IDE 物联网