PSRAM

[English]


使用 ESP32 模组,如何查看模组的 PSRAM 的大小?

对于使用 ESP32 模组的情况,可以使用 ESP-IDF 中的 esp_spiram_get_size() 函数来获取模组的 PSRAM 大小。该函数会返回 PSRAM 的总大小(单位为字节),可以用于进行内存分配和管理等操作。

以下是获取 PSRAM 大小的示例代码:

size_t psram_size = esp_spiram_get_size();
printf("PSRAM size: %d bytes\n", psram_size);

注意,该函数需要在使用 PSRAM 之前调用,以确保正确获取 PSRAM 的大小。另外,需要先在 make menuconfig 中配置开启 PSRAM 功能,以便正确启用和配置 PSRAM。 此外,PSRAM 的大小可通过 bootloader 的 log 信息来查看。


ESP32 外接 PSRAM 后,如何更改 PSRAM 的 clock 来源?

在 menuconfig 中修改。具体位置:menuconfig -> Component config -> ESP32-specific -> SPI RAM config。


ESP32 模组挂载 8 MB PSRAM, 为何实际映射的只有 4 MB?

  • 使用 ESP32 芯片建议搭配使用官方 ESP-PSRAM 芯片。

  • 片外 RAM 最大可映射 4 MB (0x3F80_0000 ~ 0x3FBF_FFFF) 到数据地址空间,可参考 ESP32 技术规格书 中 3.1.4 节存储器映射的说明。

  • 对于 8 MB PSRAM,可参考例程 himem 访问其余的 4 MB 空间。


使用 ESP32 开发板,上面用了官方 PSRAM 芯片 PSRAM64H,当更换了另一个型号的 PSRAM 芯片后,运行 ESP-IDF 的例程并开启 PSRAM 配置,却无法正常识别,是什么原因?

  • 更换 PSRAM 芯片的型号,需要在 menuconfig > Component config > ESP32-specific > Support for external, SPI-connected RAM > SPI RAM config > Type of SPI RAM chip in use 中修改相应配置选项。

  • 若更换的 PSRAM 芯片型号在 menuconfig 中没有相应的配置选项,则需要自行加入 PSRAM 芯片的驱动。


使用 ESP32-WROOM-32E 模组下载 hello-world 例程,打印如下报错,是什么原因?

E (225) psram: PSRAM ID read error: 0xffffffff
E (225) spiram: SPI RAM enabled but initialization failed. Bailing out.

报错原因是:软件上开启了 PSRAM (Component config > ESP32-specific > Support for external, SPI-connected RAM) 的设置,但硬件上没有检测到可用的 PSRAM。


ESP32 支持 16 MB 的 External Flash 和 8 MB 的 External PSRAM 共存吗?

ESP32 可以支持 16 MB 的 External Flash 和 8 MB 的 External PSRAM 共存使用。


基于 ESP32-S3-WROOM-N4R2 开启 BT/BLE will first malloc the memory form the PARAM 配置选项后,软件运行报错如下日志,但关闭 Bluetooth LE 5.0 配置后,运行正常。是什么原因?

E(36997)BLE_INIT:Mallocfailed
E(37307)BLE_INIT:Mallocfailed
E(38307)BLE_INIT:Mallocfailed
E(39307)BLE_INIT:Mallocfailed
E(40307)BLE_INIT:Mallocfailed
  • 当前报错是因为 Malloc 内存不足,当应用内存小于 idf.py menuconfig > ``Component config > ESP PSRAM > Support for external, SPI-connected RAM > SPI RAM config > (16384) Maximum malloc() zise , in bytes , to always put in internal memory 配置时,会默认使用芯片内部内存。可以将此配置调小,或者将 idf.py menuconfig > Component config > ESP PSRAM > Support for external, SPI-connected RAM > SPI RAM config > SPI RAM access method 配置改为 Make RAM allocatable using heap_caps_malloc(...... MALLOC_CAP_SPIRAM) 的配置。


ESP32-C6 支持外挂 PSRAM 芯片吗?

  • ESP32-C6 不支持外挂 PSRAM,但 ESP32-C61 支持外挂 PSRAM 芯片。


使用 ESP32-PICO-V3-02 芯片在 ESP-IDF v5.1.2 上进行开发时,PSRAM speed 仅支持 40 MHz 吗?

  • PSRAM speed 还支持 80 MHz。将 idf.py menuconfig > Serial flasher config > Flash SPI speed 设置为 80 MHz 之后,PSRAM speed 即可支持 80 MHz。

  • 通常,我们更推荐使用 80 MHz flash speed + 80 MHz PSRAM speed 的软件设置。


当使用 xTaskCreateWithCaps() API 分配外部 PSRAM 时,软件编译报错如下,是什么原因?

assert failed: xTaskCreateStaticPinnedToCore freertos_tasks_c_additions.h:314 (xPortcheckValidStackMem(puxStackBuffer))

当使用 xTaskCreateWithCaps() 分配 PSRAM 时,menuconfig 中需要启用 Component config > ESP PSRAM > Support for external, SPI-connected RAM 配置,然后将 SPI RAM config > SPI RAM access method 设置为 (X) Make RAM allocatable using malloc() as well 模式,最后需要启用 [*] Allow external memory as an argument to xTaskCreateStatic 配置选项。