2020 年末,乐鑫推出安全、低功耗、低成本的 RISC-V MCU ESP32-C3,支持 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE),广受用户关注。目前,ESP32-C3 已进入稳定量产,用户可以点此购买样品,或联系我们批量订购。
对于已使用 ESP32 实现 Wi-Fi 和/或低功耗蓝牙连接功能的用户,ESP32-C3 是一个不错的升级选择。那么,我们先从这个角度对比一下 ESP32 和 ESP32-C3 的性能:
使用过 ESP32 的用户可能会问:ESP32-C3 只有 400 KB SRAM,如何跟 ESP32 的 520 KB SRAM 空间比?毕竟大部分情况下可用内存空间是开发嵌入式应用的一大重要因素。其实,ESP32-C3 可提供与 ESP32 同等或更多的剩余内存空间。本文中,我们将简单介绍 ESP32-C3 是如何改进存储空间管理的,并向大家展示与 ESP32 相比,ESP32-C3 如何为各种应用提供同等或更多的剩余内存空间。
动态 IRAM-DRAM 分区
上面两张图分别展示了 ESP32 和 ESP32-C3 的存储映射方式。如图所示,ESP32 为静态 IRAM-DRAM 分区,整个 SRAM 中 192 KB 用于 IRAM,剩余 328 KB 用于 DRAM。部分 IRAM(32 KB 或 64 KB)配置为 cache 专用。链接器脚本会将因为功能或性能原因不能放入 flash 中的代码,填充到 IRAM 中。除此之外,未使用的 IRAM 空间将被闲置。
在 ESP32-C3 中,没有对 IRAM 和 DRAM 进行静态划分。SRAM 的前 16 KB 被配置为 cache 专用。与 ESP32 不同的是,ESP32-C3 的 IRAM 和 DRAM 地址在相同方向递增。基于应用需求,链接器脚本可将所需的空间配置为 IRAM,其后便为 DRAM 空间。因此相比 ESP32 来说,ESP32-C3 的存储空间使用效率更高。
减少 IRAM 占用
相比 ESP32,ESP32-C3 基于下述改进减少了对 IRAM 空间的占用:
提升蓝牙存储管理
ESP32 的蓝牙子系统需要占用 DRAM 中某一固定位置的连续存储空间(双模式为 56 KB,低功耗蓝牙为 38 KB)。如果某个应用要使用蓝牙功能,但并不需要连续使用,这便是一个相当大的缺陷。此时,即使蓝牙功能未被使用,这些空间依然是占用状态。
ESP32-C3 的蓝牙子系统不要求其存储必须为某固定位置的连续空间。反之,它使用标准的系统堆来分配存储空间,因此应用可以在需要的时候打开或禁用蓝牙。要实现这一点,仅需确保堆中有足够的存储空间即可。
基于上述 3 个原因,ESP32-C3 可为应用提供更高效的内存使用方式。接下来,让我们以常见的应用为例,看看这些案例下 ESP32 和 ESP32-C3 的内存使用情况,以及可用的剩余内存空间。
下表对比实验中,已尽量确保 ESP32 和 ESP32-C3 的配置相同,且使用同一 SDK 版本 (IDF v4.3-beta3) 运行应用。
由上表明显可知:
因此,正如上文所述,ESP32-C3 可为应用提供等同于或更多于 ESP32 的剩余内存空间。但如果您考虑选择 ESP32-C3 芯片或将原有 ESP32 程序迁移至 ESP32-C3 平台,也请您充分考虑芯片其他重要特性,比如 PSRAM 空间、IO 数量以及 CPU 性能等。