You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32C3添加蓝牙功能后Flash存储器溢出问题求助

解决方案:ESP32C3 4MB Flash 蓝牙+WiFi+OTA 分区溢出问题

1. 修复分区表配置

你的分区表存在APP分区大小不足、分区偏移/大小设置不规范两个核心问题。4MB Flash总容量为0x400000,请替换为以下合理规划的分区表(适配当前APP大小0x184e30,预留后续代码增长空间):

# ESP-IDF Partition Table
Name,Type,SubType,Offset,Size,Flags
nvs,data,nvs,0x9000,0x4000,
ota_data,data,ota,0xd000,0x2000,
phy_init,data,phy,0xf000,0x1000,
factory,app,factory,0x10000,0x190000,
ota_0,app,ota_0,0x1a0000,0x190000,
  • 说明:每个APP分区分配0x190000(1.5625MB),刚好容纳当前0x184e30大小的bin文件,且预留了后续代码增长空间;数据分区保持默认最小配置,避免浪费Flash。
  • 注意:分区表必须用逗号分隔字段,Offset和Size需为十六进制,且各分区不能重叠。

2. 压缩APP二进制体积

通过编译优化和功能裁剪进一步减小bin文件大小:

  • 开启编译优化:在menuconfig中设置CONFIG_COMPILER_OPTIMIZATION_SIZE=y(使用-Os优化,优先减小代码体积)。
  • 裁剪蓝牙功能:仅保留必要模块,比如仅用BLE则关闭BR/EDR模式(CONFIG_BT_BR_EDR_ENABLED=n),关闭蓝牙调试日志(CONFIG_BT_DEBUG_LOG=n)。
  • 裁剪WiFi功能:关闭未使用的模式(如仅用STA则关闭AP模式),关闭WiFi调试日志。
  • 开启OTA压缩:启用CONFIG_APP_COMPRESSION_ENABLE=y,APP bin会被GZip压缩,烧录后在设备端解压,可大幅减小分区占用。
  • 移除冗余组件:检查项目CMakeLists.txt中的REQUIRES/PRIV_REQUIRES,删除未使用的组件;在menuconfig中关闭不需要的驱动、协议栈功能。

3. 验证基础配置正确性

  • 确认Flash大小配置:在menuconfig中设置CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y,避免识别错误。
  • 检查Bootloader分区:默认Bootloader占用0x0到0x8000,分区表占用0x8000到0x9000,不要修改这些默认偏移,否则会导致分区映射错误。
  • 烧录分区表:执行idf.py partition_table-flash确保新分区表生效,再重新编译烧录APP。

4. 极端情况处理(若后续代码仍增长)

如果后续APP体积继续增大,可考虑:

  • 更换更大容量的Flash(如8MB),ESP32C3支持最高16MB Flash。
  • 使用分区表的encrypted标志开启Flash加密(需配合Secure Boot),加密后的bin会有一定压缩效果,但需额外配置。

内容的提问来源于stack exchange,提问作者Huy Bui Quang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:07:19