IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 解决方法:ESP32同时打开蓝牙、WIFI和OTA后程序过大导致无法启动 -> 正文阅读

[嵌入式]解决方法:ESP32同时打开蓝牙、WIFI和OTA后程序过大导致无法启动

一、问题

使用 ESP32-WROOM-32E(4MB) 模组,同时使用了蓝牙模块、WIFI模块功能,编译的时候没问题,然后运行的时候报以下错误:

二、原因

ESP32 如果使同时使用了蓝牙模块、WIFI模块和OTA的话很有可能会导致程序过大(超过1M),系统无法启动的情况。这里提供一种通过修改分区表扩大程序储存空间的方法来避免这一问题。这一解决方法同样只用于因为其他问题导致的程序过大的情况。

三、解决方法

3.1 分区表

每片 ESP32 的 Flash 可以包含多个应用程序,以及多种不同类型的数据(例如校准数据、文件系统数据、参数存储器数据等)。因此,引入分区表的概念。

具体来说,ESP32 在 Flash 的 默认偏移地址 0x8000 处烧写一张分区表。该分区表的长度为 0xC00 字节(最多可以保存 95 条分区表条目)。分区表数据后还保存着该表的 MD5 校验和,用于验证分区表的完整性。此外,如果芯片使能了安全启动功能,则该分区表后还会保存签名信息。

分区表中的每个条目都包括以下几个部分:Name(标签)、Type(app、data 等)、SubType 以及在 flash 中的偏移量(分区的加载地址)。

具体内容参见:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/api-guides/partition-tables.html

esp-idf/components/partition_table 有多个分区表文件供参考。

简单的来说,分区表就是对Flash进行划分,不同区域存放不同的东西。如下面一个是双OTA备份分区表文件partitions_two_ota_coredump.csv对应的是下图的划分。通过对比文件和图片,很容易理解分区表。每一行对应的内容顺序分别是Name, Type, SubType, Offset,Size。如果Offset没有填写则默认在上一个分区的末尾添加。

# Name, Type, SubType, Offset, Size
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs,      data,  nvs,      ,  0x4000,
otadata,  data,  ota,      ,  0x2000,
phy_init, data,  phy,      ,  0x1000,
factory,  app,   factory,  ,  1M,
coredump, data,  coredump, ,  64K,
ota_0,    app,   ota_0,    ,  1M,
ota_1,    app,   ota_1,    ,  1M,

3.2 创建分区表文件

在项目下创建一个分区表 partitions.csv

这里提供一个我的分区表,程序存储空间应该是0x10000的整数倍:

# Name, Type, SubType, Offset, Size, Flags
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs,       data,  nvs,     ,     0x4000,
otadata,   data,  ota,     ,     0x2000,
phy_init,  data,  phy,     ,     0x1000,
factory,   app,   factory, ,     0x140000,
ota_0,     app,   ota_0,   ,     0x140000,
ota_1,     app,   ota_1,   ,     0x140000,

注意:
1、分配分区表的时候空间一定要是 4k 的整数倍也就是:存储空间%4096=0。这是因为 Flash 的一个区块是 4k。
2、ota分区(ota_0,ota_1)的空间最好和原厂程序(factory)相同。

3.3 修改menuconfig

idf.py menuconfig
  • 修改模块Flash大小(根据实际情况修改)
    Serial flasher config --->Flash size
  • 修改分区表
    Partition Table --->Partition Table --->(Custom partition table CSV)选择自定义分区表方式
    (partitions.csv) Custom partition CSV file选择自定义分区表文件
  • 重新编译运行

? 由 Leung 写于 2022 年 3 月 4 日

? 参考:esp32 同时打开蓝牙,wifi和ota后程序过大导致无法启动

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:42:39  更:2022-03-08 22:45:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:39:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码