1、原有ESP32-S3功能基本实现,有些小Bug需要修复; 2、RAM内存不够导致Img界面图片显示画质不完整,并且当前未开启蓝牙功能,开机蓝牙功能后RAM内存压力加剧;
80 lines
3.5 KiB
Markdown
80 lines
3.5 KiB
Markdown
一、全尺寸图片 + BLE 同时运行需要多少 SRAM?
|
||
逐项计算:
|
||
|
||
内存需求 大小 说明
|
||
JPEG 输入缓冲 ~50 KB 从 SPIFFS 读取压缩文件
|
||
JPEG 输出缓冲 253 KB 360×360×2 RGB565(必须连续)
|
||
JPEG 解码工作区 ~3 KB TjpgDec scratchpad
|
||
LVGL .bss 静态 ~50 KB 对象池、样式缓存等
|
||
LVGL 帧缓冲 ~21 KB 360×30×2 行缓冲
|
||
FreeRTOS 核心 ~15 KB idle + timer + main 任务栈
|
||
SPI 驱动 + DMA ~12 KB LCD SPI 传输
|
||
SPIFFS + VFS ~10 KB 文件系统缓存
|
||
I2C + 触摸驱动 ~5 KB CST816S
|
||
BLE 协议栈 ~70-80 KB Bluedroid GATTS + controller
|
||
BLE 图片接收缓冲 ~10 KB 分包接收临时缓冲
|
||
系统杂项 ~20 KB HAL/heap管理/日志/NVS等
|
||
总计 ~520-530 KB 峰值(BLE接收+解码同时)
|
||
如果 BLE 和图片显示分时复用(先关 BLE 再解码):
|
||
|
||
场景 峰值 SRAM
|
||
仅显示图片(无 BLE) ~440 KB
|
||
仅 BLE 接收(无图片解码) ~270 KB
|
||
推荐安全余量 +20% ≈ 530 KB
|
||
结论:需要至少 ~450KB 可用堆内存,推荐 512KB+ SRAM 或带 PSRAM 的方案。
|
||
|
||
二、ESP32 各型号对比
|
||
ESP32-C 系列(RISC-V 单核,低成本低功耗路线)
|
||
型号 SRAM PSRAM 支持 能否满足需求 参考价格(模组)
|
||
ESP32-C3 (当前) 400 KB 不支持 不能 (堆249KB < 253KB输出缓冲) ~¥8-12
|
||
ESP32-C6 512 KB 支持外部 SPI RAM 勉强可以(无PSRAM时堆~350KB,仍紧张) ~¥12-18
|
||
ESP32-C5 320 KB 待确认 不能 尚未量产
|
||
ESP32-S 系列(Xtensa 双核,高性能路线)
|
||
型号 SRAM PSRAM 能否满足需求 参考价格(模组)
|
||
ESP32-S3-N4 512 KB 无 勉强(分时复用可行) ~¥15-20
|
||
ESP32-S3-N4R2 512 KB 2 MB (Quad SPI) 完全满足 ~¥18-22
|
||
ESP32-S3-N8R8 512 KB 8 MB (Octal SPI) 完全满足,富裕 ~¥22-28
|
||
ESP32-S3-N16R8 512 KB 8 MB (Octal SPI) 完全满足 ~¥25-32
|
||
三、综合推荐
|
||
最佳性价比推荐:ESP32-S3-WROOM-1-N4R2
|
||
理由:
|
||
|
||
内存充裕:512KB SRAM + 2MB PSRAM
|
||
|
||
JPEG 输出缓冲(253KB) 放 PSRAM → SRAM 零压力
|
||
BLE + 图片显示可同时运行,不需要分时复用
|
||
heap_caps_malloc(size, MALLOC_CAP_SPIRAM) 一行代码搞定
|
||
与当前项目兼容性最高:
|
||
|
||
ESP-IDF v5.4 完全支持
|
||
SPI LCD 驱动代码基本不变(ST77916 驱动已适配)
|
||
I2C 触摸驱动完全不变
|
||
LVGL 代码完全不变
|
||
BLE 代码完全不变(Bluedroid API 通用)
|
||
原项目就是从 ESP32-S3 适配来的,回迁难度最低
|
||
性价比:
|
||
|
||
模组单价 ~¥18-22(淘宝散件)
|
||
比 N4 只贵 ¥3-5,但多了 2MB PSRAM
|
||
2MB PSRAM 对这个项目绰绰有余(只需 253KB)
|
||
不需要 N8R8:
|
||
|
||
8MB PSRAM 对这个项目严重过剩
|
||
Octal SPI PSRAM 会多占用 GPIO(虽然 S3 GPIO 充裕)
|
||
价格高 ¥5-10,没必要
|
||
如果必须留在 C 系列:ESP32-C6 + 外部 PSRAM
|
||
ESP32-C6 支持外部 SPI RAM,但需要额外的 PSRAM 芯片
|
||
增加 BOM 成本和 PCB 复杂度
|
||
生态不如 S3 成熟
|
||
不推荐(总成本可能比 S3 模组还高)
|
||
迁移工作量评估
|
||
迁移项 难度 说明
|
||
GPIO 引脚重映射 低 改 gpio.h 中的宏定义
|
||
SPI LCD 驱动 无需改 esp_lcd + ST77916 驱动通用
|
||
I2C 触摸 无需改 CST816S 驱动通用
|
||
LVGL 无需改 esp_lvgl_port 通用
|
||
JPEG 解码 改 1 行 去掉 JPEG_IMAGE_SCALE_1_2,去掉 lv_img_set_zoom(512)
|
||
PSRAM 图片缓冲 改 1 行 malloc() → heap_caps_malloc(size, MALLOC_CAP_SPIRAM)
|
||
BLE 低 Bluedroid API 通用,可能需调整 controller 配置
|
||
sdkconfig 低 idf.py set-target esp32s3 后重新配置
|
||
总结:ESP32-S3-N4R2 是当前项目升级的最优选择,迁移成本极低(核心代码几乎不变),只需改 2-3 行代码就能实现全尺寸无损图片显示 + BLE 同时运行。 |