3.5 KiB
一、全尺寸图片 + 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 同时运行。