doc: Add external ram note link to CN translation

This commit is contained in:
Marius Vikhammer
2019-12-10 12:54:13 +08:00
committed by Angus Gratton
parent d56ea52ea1
commit a7bac4721a
3 changed files with 15 additions and 13 deletions

View File

@@ -412,7 +412,7 @@ Below is a "big scenario" which describes some small scenarios in AP mode:
{IDF_TARGET_NAME} Wi-Fi Scan {IDF_TARGET_NAME} Wi-Fi Scan
------------------------ ----------------------------
Currently, the esp_wifi_scan_start() API is supported only in Station or Station+AP mode. Currently, the esp_wifi_scan_start() API is supported only in Station or Station+AP mode.

View File

@@ -9,19 +9,19 @@
简介 简介
============ ============
ESP32 提供了 520 KB 的片上 SRAM可以满足大部分需求。但有些场景可能需要更多 RAM因此 ESP32 另外提供了高达 4 MB 的片外 SPI RAM 存储器以供用户使用。片外 RAM 被添加到内存映射中,在某些范围内与片上 RAM 使用方式相同。 {IDF_TARGET_NAME} 提供了 520 KB 的片上 SRAM可以满足大部分需求。但有些场景可能需要更多 RAM因此 {IDF_TARGET_NAME} 另外提供了高达 4 MB 的片外 SPI RAM 存储器以供用户使用。片外 RAM 被添加到内存映射中,在某些范围内与片上 RAM 使用方式相同。
硬件 硬件
======== ========
ESP32 支持与 SPI Flash 芯片并联的 SPI PSRAM。ESP32 支持多种类型的 RAM 芯片,但 ESP32 SDK 当前仅支持 ESP-PSRAM32 芯片。 {IDF_TARGET_NAME} 支持与 SPI Flash 芯片并联的 SPI PSRAM。{IDF_TARGET_NAME} 支持多种类型的 RAM 芯片,但 {IDF_TARGET_NAME} SDK 当前仅支持 ESP-PSRAM32 芯片。
ESP-PSRAM32 芯片的工作电压为 1.8 V只能与 1.8 V flash 并联使用。请确保在启动时将 MTDI 管脚设置为高电平,或者将 ESP32 中的熔丝设置为始终使用 1.8 V 的 VDD_SIO 电平,否则有可能会损坏 PSRAM 和/或 flash 芯片。 ESP-PSRAM32 芯片的工作电压为 1.8 V只能与 1.8 V flash 并联使用。请确保在启动时将 MTDI 管脚设置为高电平,或者将 {IDF_TARGET_NAME} 中的熔丝设置为始终使用 1.8 V 的 VDD_SIO 电平,否则有可能会损坏 PSRAM 和/或 flash 芯片。
要将 ESP-PSRAM 芯片连接到 ESP32D0W*,请连接以下信号: 要将 ESP-PSRAM 芯片连接到 ESP32D0W*,请连接以下信号:
* PSRAM /CE (pin 1) > ESP32 GPIO 16 * PSRAM /CE (pin 1) > ESP32 GPIO 16
* PSRAM SO (pin 2) > flash DO * PSRAM SO (pin 2) > flash DO
* PSRAM SIO[2] (pin 3) > flash WP * PSRAM SIO[2] (pin 3) > flash WP
* PSRAM SI (pin 5) > flash DI * PSRAM SI (pin 5) > flash DI
* PSRAM SCLK (pin 6) > ESP32 GPIO 17 * PSRAM SCLK (pin 6) > ESP32 GPIO 17
* PSRAM SIO[3] (pin 7) > flash HOLD * PSRAM SIO[3] (pin 7) > flash HOLD
@@ -46,10 +46,10 @@ ESP-IDF 完全支持将外部存储器集成到您的应用程序中。您可以
.. _external_ram_config_memory_map: .. _external_ram_config_memory_map:
集成片外 RAM 到 ESP32 内存映射 集成片外 RAM 到 {IDF_TARGET_NAME} 内存映射
----------------------------------- -----------------------------------
:ref:`CONFIG_SPIRAM_USE` 中选择 "Integrate RAM into ESP32 memory map集成片外 RAM 到 ESP32 内存映射)" 选项。 :ref:`CONFIG_SPIRAM_USE` 中选择 "Integrate RAM into {IDF_TARGET_NAME} memory map集成片外 RAM 到 {IDF_TARGET_NAME} 内存映射)" 选项。
这是集成片外 RAM 最基础的设置选项,大多数用户需要用到其他更高级的选项。 这是集成片外 RAM 最基础的设置选项,大多数用户需要用到其他更高级的选项。
@@ -62,24 +62,24 @@ ESP-IDF 启动过程中,片外 RAM 被映射到以 0x3F800000 起始的数据
添加片外 RAM 到内存分配程序 添加片外 RAM 到内存分配程序
-------------------------------------------- --------------------------------------------
:ref:`CONFIG_SPIRAM_USE` 中选择 "Make RAM allocatable using heap_caps_malloc(..., MALLOC_CAP_SPIRAM)" 选项。 :ref:`CONFIG_SPIRAM_USE` 中选择 "Make RAM allocatable using heap_caps_malloc(..., MALLOC_CAP_SPIRAM)" 选项。
启用上述选项后,片外 RAM 被映射到地址 0x3F800000并将这个区域添加到 :doc:`内存分配程序 </api-reference/system/mem_alloc>` 里携带 ``MALLOC_CAP_SPIRAM`` 的标志 启用上述选项后,片外 RAM 被映射到地址 0x3F800000并将这个区域添加到 :doc:`内存分配程序 </api-reference/system/mem_alloc>` 里携带 ``MALLOC_CAP_SPIRAM`` 的标志
程序如果想从片外存储器分配存储空间,则需要调用 ``heap_caps_malloc(size, MALLOC_CAP_SPIRAM)``,之后可以调用 ``free()`` 函数释放这部分存储空间。 程序如果想从片外存储器分配存储空间,则需要调用 ``heap_caps_malloc(size, MALLOC_CAP_SPIRAM)``,之后可以调用 ``free()`` 函数释放这部分存储空间。
.. _external_ram_config_malloc: .. _external_ram_config_malloc:
调用 malloc() 分配片外 RAM 调用 malloc() 分配片外 RAM
--------------------------------- ---------------------------------
:ref:`CONFIG_SPIRAM_USE` 中选择 "Make RAM allocatable using malloc() as well" 选项,该选项为默认选项。 :ref:`CONFIG_SPIRAM_USE` 中选择 "Make RAM allocatable using malloc() as well" 选项,该选项为默认选项。
启用此选项后,片外存储器将被添加到内存分配程序(与上一选项相同),同时也将被添加到由标准 ``malloc()`` 返回的 RAM 中。 启用此选项后,片外存储器将被添加到内存分配程序(与上一选项相同),同时也将被添加到由标准 ``malloc()`` 返回的 RAM 中。
这允许应用程序使用片外 RAM 而无需重写代码以使用 ``heap_caps_malloc(..., MALLOC_CAP_SPIRAM)`` 这允许应用程序使用片外 RAM 而无需重写代码以使用 ``heap_caps_malloc(..., MALLOC_CAP_SPIRAM)``
如果某次内存分配偏向于片外存储器,您也可以使用 :ref:`CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL` 设置分配空间的大小阈值,控制分配结果: 如果某次内存分配偏向于片外存储器,您也可以使用 :ref:`CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL` 设置分配空间的大小阈值,控制分配结果:
- 如果分配的空间小于阈值,分配程序将首先选择内部存储器。 - 如果分配的空间小于阈值,分配程序将首先选择内部存储器。
- 如果分配的空间等于或大于阈值,分配程序将首先选择外部存储器。 - 如果分配的空间等于或大于阈值,分配程序将首先选择外部存储器。
@@ -115,7 +115,7 @@ ESP-IDF 启动过程中,片外 RAM 被映射到以 0x3F800000 起始的数据
* 片外 RAM 与片外 flash 使用相同的 cache 区域,即频繁在片外 RAM 访问的变量可以像在片上 RAM 中一样快速读取和修改。但访问大块数据时(大于 32 KBcache 空间可能会不足,访问速度将回落到片外 RAM 访问速度。此外,访问大块数据可以“挤出” flash cache可能会降低代码执行速度。 * 片外 RAM 与片外 flash 使用相同的 cache 区域,即频繁在片外 RAM 访问的变量可以像在片上 RAM 中一样快速读取和修改。但访问大块数据时(大于 32 KBcache 空间可能会不足,访问速度将回落到片外 RAM 访问速度。此外,访问大块数据可以“挤出” flash cache可能会降低代码执行速度。
* 片外 RAM 不可用作任务堆栈存储器。因此 :cpp:func:`xTaskCreate` 及类似函数将始终为堆栈和任务 TCB 分配片上储存器,而 :cpp:func:`xTaskCreateStatic` 类型的函数将检查传递的 Buffer 是否属于片上存储器。但对于不以任何方式直接或间接调用 ROM 中代码的任务menuconfig 选项 :ref:`CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY` 将消除 `xTaskCreateStatic` 中的检查,从而允许任务堆栈存储在外部 RAM 中。但是,不建议使用此方法。 * 片外 RAM 不可用作任务堆栈存储器。因此 :cpp:func:`xTaskCreate` 及类似函数将始终为堆栈和任务 TCB 分配片上储存器,而 :cpp:func:`xTaskCreateStatic` 类型的函数将检查传递的 Buffer 是否属于片上存储器。但对于不以任何方式直接或间接调用 ROM 中代码的任务menuconfig 选项 :ref:`CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY` 将消除 `xTaskCreateStatic` 中的检查,从而允许任务堆栈存储在外部 RAM 中。但是,不建议使用此方法。
* 默认情况下,片外 RAM 初始化失败将终止 ESP-IDF 启动。如果想禁用此功能,可启用 :ref:`CONFIG_SPIRAM_IGNORE_NOTFOUND` 配置选项。如果启用 :ref:`CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY`:ref:`CONFIG_SPIRAM_IGNORE_NOTFOUND` 选项将不能使用,这是因为在链接时,链接器已经向片外 RAM 分配符号。 * 默认情况下,片外 RAM 初始化失败将终止 ESP-IDF 启动。如果想禁用此功能,可启用 :ref:`CONFIG_SPIRAM_IGNORE_NOTFOUND` 配置选项。如果启用 :ref:`CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY`:ref:`CONFIG_SPIRAM_IGNORE_NOTFOUND` 选项将不能使用,这是因为在链接时,链接器已经向片外 RAM 分配符号。
@@ -123,5 +123,6 @@ ESP-IDF 启动过程中,片外 RAM 被映射到以 0x3F800000 起始的数据
.. include:: inc/external-ram-esp32-notes.rst .. include:: inc/external-ram-esp32-notes.rst
.. _ESP32 ECO: https://www.espressif.com/sites/default/files/documentation/eco_and_workarounds_for_bugs_in_esp32_en.pdf

View File

@@ -0,0 +1 @@
.. include:: ../../en/api-guides/inc/external-ram-esp32-notes.rst