mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-03 03:31:41 +03:00
docs(kconfig): update kconfig ref links to use menuitem
This commit is contained in:
@@ -19,7 +19,7 @@ flash 自动暂停功能
|
||||
|
||||
4. flash 从暂停模式恢复后,支持立即下达另一个暂停命令。
|
||||
|
||||
启用 :ref:`CONFIG_SPI_FLASH_AUTO_SUSPEND` 后,缓存将保持启用状态,禁用该选项即可禁用缓存。SPI0 和 SPI1 之间的仲裁由硬件决定。当 SPI1 进行读取等耗时较短的操作时,CPU 和缓存将等待至 SPI1 操作完成。然而,在擦除、页面写入或状态寄存器写入等过程中,如 ``SE``、``PP`` 和 ``WRSR``,自动暂停功能将中断正在进行的 flash 操作,使 CPU 得以在有限的时间内读取缓存及 flash 中的数据。
|
||||
启用 :menuitem:`CONFIG_SPI_FLASH_AUTO_SUSPEND` 后,缓存将保持启用状态,禁用该选项即可禁用缓存。SPI0 和 SPI1 之间的仲裁由硬件决定。当 SPI1 进行读取等耗时较短的操作时,CPU 和缓存将等待至 SPI1 操作完成。然而,在擦除、页面写入或状态寄存器写入等过程中,如 ``SE``、``PP`` 和 ``WRSR``,自动暂停功能将中断正在进行的 flash 操作,使 CPU 得以在有限的时间内读取缓存及 flash 中的数据。
|
||||
|
||||
基于此功能,部分的代码及变量现可存放在 flash/PSRAM 中,同时仍能保证在 flash 擦除期间的正常执行,减少了 IRAM/DRAM 的消耗。
|
||||
|
||||
@@ -47,7 +47,7 @@ flash 自动暂停功能
|
||||
|
||||
2. ISR 间隔时间 (ISR interval):由于不能频繁触发 ISR,需格外注意 **ISR 间隔时间减去 ISR 时间后的剩余时间** (图中 b 点至 c 点的距离)。在此期间,SPI1 会发送恢复命令重新启动操作,所需准备时间 ``tsus`` 的典型值约为 **40 us**。如果在 SPI1 完成恢复操作前接收到了新的暂停命令,可能导致 CPU 饥饿,触发 ``TWDT``。
|
||||
|
||||
对于第 2 点中所提到的 ``tsus`` 时间可以通过翻阅 flash datasheets 查找,通常在 AC CHARACTERISTICS 章节中。用户需要保证从 datasheets 获得的 ``tsus`` 值不大于 :ref:`CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US` 值。
|
||||
对于第 2 点中所提到的 ``tsus`` 时间可以通过翻阅 flash datasheets 查找,通常在 AC CHARACTERISTICS 章节中。用户需要保证从 datasheets 获得的 ``tsus`` 值不大于 :menuitem:`CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US` 值。
|
||||
|
||||
此外,flash 暂停可能延迟。CPU 和缓存通过 SPI0 频繁访问 flash,且 SPI1 频繁发送暂停命令时,会导致 MSPI 数据传输效率下降。可以通过在内部使用 **锁** 来避免此种情况。当 SPI1 发送暂停命令时,SPI0 将接管内存 SPI 总线并启用锁。SPI0 完成数据传输后,在锁延迟时间结束前,都将保有对内存 SPI 总线的控制权。在此锁延迟期间,如果接收到其他 SPI0 事务,则该 SPI0 事务将正常进行,并开启新一轮锁延迟周期。如无其他 SPI0 事务,则 SPI0 释放内存总线并启动 SPI0/1 仲裁。
|
||||
|
||||
@@ -60,7 +60,7 @@ suspend-resume 进阶用法
|
||||
|
||||
通常情况下,硬件在发出暂停命令后,会按 ``tsus`` 设定的时间延迟一段时间,再开放内存总线给 SPI0/CPU 使用。该延迟必须按 datasheet 中的最坏情况进行设置,因此在大多数情况下都偏保守。
|
||||
|
||||
通过启用 :ref:`CONFIG_SPI_FLASH_AUTO_CHECK_SUSPEND_STATUS` 后,硬件将通过读取 flash 状态寄存器中的 ``WIP`` 位,来判断暂停命令是否真正生效,而不再依据 :ref:`CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US` 给出的固定时间进行等待。由于实际的暂停建立时间通常远小于 datasheet 给出的最大值,所以这种方式可以显著降低暂停过程中的开销,提升整体性能。
|
||||
通过启用 :menuitem:`CONFIG_SPI_FLASH_AUTO_CHECK_SUSPEND_STATUS` 后,硬件将通过读取 flash 状态寄存器中的 ``WIP`` 位,来判断暂停命令是否真正生效,而不再依据 :menuitem:`CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US` 给出的固定时间进行等待。由于实际的暂停建立时间通常远小于 datasheet 给出的最大值,所以这种方式可以显著降低暂停过程中的开销,提升整体性能。
|
||||
|
||||
.. important::
|
||||
|
||||
@@ -70,10 +70,10 @@ suspend-resume 进阶用法
|
||||
|
||||
通常情况下,硬件在 flash 被暂停后,会自动安排合适的时机发送 resume 命令,让 flash 继续完成原有的擦除/写入操作。这种实现对软件透明,但存在一个副作用:在高优先级任务/中断仍在运行时,硬件可能再次发起 suspend/resume 流程,从而打断这些任务,影响其执行的连续性与时序。
|
||||
|
||||
通过启用 :ref:`CONFIG_SPI_FLASH_SOFTWARE_RESUME` 后,硬件自动 resume 功能将被关闭,flash 的恢复操作改由软件在合适的时机主动发出。此时,flash 在被暂停后将一直保持暂停状态,直到软件显式恢复。在 SPI1 的等待空闲流程中,软件会主动检查 flash 的 suspend 状态,若发现处于暂停状态则调用驱动的 resume 接口让 flash 重新开始原有操作。这意味着只有当高优先级任务或中断真正完成、软件回到 SPI1 操作上下文时,才会发出 resume,从而避免 suspend-resume 行为在高优先级路径上反复抢占总线。
|
||||
通过启用 :menuitem:`CONFIG_SPI_FLASH_SOFTWARE_RESUME` 后,硬件自动 resume 功能将被关闭,flash 的恢复操作改由软件在合适的时机主动发出。此时,flash 在被暂停后将一直保持暂停状态,直到软件显式恢复。在 SPI1 的等待空闲流程中,软件会主动检查 flash 的 suspend 状态,若发现处于暂停状态则调用驱动的 resume 接口让 flash 重新开始原有操作。这意味着只有当高优先级任务或中断真正完成、软件回到 SPI1 操作上下文时,才会发出 resume,从而避免 suspend-resume 行为在高优先级路径上反复抢占总线。
|
||||
|
||||
由于该机制依赖软件层在确定的执行点完成 resume,且当前实现没有针对多核做相应保护,因此该选项有以下限制:
|
||||
|
||||
- 仅支持单核场景,需要使能 :ref:`CONFIG_FREERTOS_UNICORE`。
|
||||
- 属于实验性功能,需要使能 :ref:`CONFIG_IDF_EXPERIMENTAL_FEATURES` 后才能可见。
|
||||
- 仅支持单核场景,需要使能 :menuitem:`CONFIG_FREERTOS_UNICORE`。
|
||||
- 属于实验性功能,需要使能 :menuitem:`CONFIG_IDF_EXPERIMENTAL_FEATURES` 后才能可见。
|
||||
- 该功能会提升中断响应的连续性,提升应用的性能。但同时,单次操作 flash 的耗时会上升。
|
||||
|
||||
@@ -118,7 +118,7 @@ SPI flash 容量
|
||||
|
||||
SPI flash 容量由引导加载程序镜像头部(烧录偏移量为 0x1000)的一个字段进行配置。
|
||||
|
||||
默认情况下,引导加载程序被写入 flash 时,``esptool`` 会自动检测 SPI flash 容量,同时使用正确容量更新引导加载程序的头部。也可以在工程配置中设置 :ref:`CONFIG_ESPTOOLPY_FLASHSIZE`,生成固定的 flash 容量。
|
||||
默认情况下,引导加载程序被写入 flash 时,``esptool`` 会自动检测 SPI flash 容量,同时使用正确容量更新引导加载程序的头部。也可以在工程配置中设置 :menuitem:`CONFIG_ESPTOOLPY_FLASHSIZE`,生成固定的 flash 容量。
|
||||
|
||||
如需在运行时覆盖已配置的 flash 容量,请配置 ``g_rom_flashchip`` 结构中的 ``chip_size``。``esp_flash_*`` 函数使用此容量(于软件和 ROM 中)进行边界检查。
|
||||
|
||||
@@ -254,16 +254,16 @@ OS 函数层目前支持访问锁和延迟的方法。
|
||||
|
||||
顶层 API 将芯片驱动和 OS 函数封装成一个完整的组件,并提供参数检查。
|
||||
|
||||
使用 OS 函数还可以在一定程度上避免在擦除大块 flash 区域时出现看门狗超时的情况。在这段时间内,CPU 将被 flash 擦除任务占用,从而阻止其他任务的执行,包括为看门狗定时器 (WDT) 供电的空闲任务。若已选中配置选项 :ref:`CONFIG_ESP_TASK_WDT_PANIC`,并且 flash 操作时间长于看门狗的超时时间,系统将重新启动。
|
||||
使用 OS 函数还可以在一定程度上避免在擦除大块 flash 区域时出现看门狗超时的情况。在这段时间内,CPU 将被 flash 擦除任务占用,从而阻止其他任务的执行,包括为看门狗定时器 (WDT) 供电的空闲任务。若已选中配置选项 :menuitem:`CONFIG_ESP_TASK_WDT_PANIC`,并且 flash 操作时间长于看门狗的超时时间,系统将重新启动。
|
||||
|
||||
不过,由于不同的 flash 芯片擦除时间不同,flash 驱动几乎无法兼容,很难完全规避超时的风险,这一点需要格外注意。请遵照以下指南:
|
||||
|
||||
1. 建议启用 :ref:`CONFIG_SPI_FLASH_YIELD_DURING_ERASE` 选项,允许调度器在擦除 flash 时进行重新调度。此外,还可以使用下列参数。
|
||||
1. 建议启用 :menuitem:`CONFIG_SPI_FLASH_YIELD_DURING_ERASE` 选项,允许调度器在擦除 flash 时进行重新调度。此外,还可以使用下列参数。
|
||||
|
||||
- 在 menuconfig 中增加 :ref:`CONFIG_SPI_FLASH_ERASE_YIELD_TICKS` 或减少 :ref:`CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS` 的时间。
|
||||
- 在 menuconfig 中增加 :ref:`CONFIG_ESP_TASK_WDT_TIMEOUT_S` 的时间,以设置更长的看门狗超时周期。然而,看门狗超时周期拉长后,可能无法再检测到以前可检测到的超时。
|
||||
- 在 menuconfig 中增加 :menuitem:`CONFIG_SPI_FLASH_ERASE_YIELD_TICKS` 或减少 :menuitem:`CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS` 的时间。
|
||||
- 在 menuconfig 中增加 :menuitem:`CONFIG_ESP_TASK_WDT_TIMEOUT_S` 的时间,以设置更长的看门狗超时周期。然而,看门狗超时周期拉长后,可能无法再检测到以前可检测到的超时。
|
||||
|
||||
1. 请注意,在进行长时间的 SPI flash 操作时,启用 :ref:`CONFIG_ESP_TASK_WDT_PANIC` 选项将会在超时时触发紧急处理程序。不过,启用该选项也可以帮助处理应用程序中的意外异常,请根据实际情况决定是否需要启用这个选项。
|
||||
1. 请注意,在进行长时间的 SPI flash 操作时,启用 :menuitem:`CONFIG_ESP_TASK_WDT_PANIC` 选项将会在超时时触发紧急处理程序。不过,启用该选项也可以帮助处理应用程序中的意外异常,请根据实际情况决定是否需要启用这个选项。
|
||||
|
||||
2. 在开发过程中,请根据项目对擦除 flash 的具体要求和时间限制,谨慎进行 flash 操作。在配置 flash 擦除超时周期时,请在实际产品要求的基础上留出合理的冗余时间,从而提高产品的可靠性。
|
||||
|
||||
@@ -285,7 +285,7 @@ flash 操作完成后,CPU A 上的函数将设置另一标志位,即 ``s_fla
|
||||
|
||||
另外,所有 API 函数均受互斥量 ``s_flash_op_mutex`` 保护。
|
||||
|
||||
在单核环境中(启用 :ref:`CONFIG_FREERTOS_UNICORE`),需要禁用上述两个 cache,以防发生 CPU 间通信。
|
||||
在单核环境中(启用 :menuitem:`CONFIG_FREERTOS_UNICORE`),需要禁用上述两个 cache,以防发生 CPU 间通信。
|
||||
|
||||
.. only:: SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND
|
||||
|
||||
@@ -294,13 +294,13 @@ flash 操作完成后,CPU A 上的函数将设置另一标志位,即 ``s_fla
|
||||
flash 驱动的内部存储优化
|
||||
-----------------------------
|
||||
|
||||
ESP-IDF 提供了优化 IRAM 使用的选项。通过禁用 :ref:`CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM` 选项,可以选择性地将某些函数地放入 flash,使 SPI flash 操作函数在 flash 中执行,而不是从 IRAM 中执行。这种方式能够节省 IRAM 内存,用于其他对时间敏感的函数或任务。
|
||||
ESP-IDF 提供了优化 IRAM 使用的选项。通过禁用 :menuitem:`CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM` 选项,可以选择性地将某些函数地放入 flash,使 SPI flash 操作函数在 flash 中执行,而不是从 IRAM 中执行。这种方式能够节省 IRAM 内存,用于其他对时间敏感的函数或任务。
|
||||
|
||||
然而,这种方式对 flash 性能具有一定的影响。与 IRAM 中的函数相比,放在 flash 中的函数执行时间可能略有增加。因此对于具有严格时序要求或严重依赖 SPI flash 操作的应用程序,采取此方式前需进行权衡。
|
||||
|
||||
.. note::
|
||||
|
||||
未启用 :ref:`CONFIG_SPI_FLASH_AUTO_SUSPEND` 时,不应禁用 :ref:`CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM`,否则会导致严重崩溃。关于 flash 挂起功能,请参阅 :ref:`auto-suspend`。
|
||||
未启用 :menuitem:`CONFIG_SPI_FLASH_AUTO_SUSPEND` 时,不应禁用 :menuitem:`CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM`,否则会导致严重崩溃。关于 flash 挂起功能,请参阅 :ref:`auto-suspend`。
|
||||
|
||||
资源消耗
|
||||
^^^^^^^^^^^^
|
||||
@@ -309,7 +309,7 @@ flash 操作完成后,CPU A 上的函数将设置另一标志位,即 ``s_fla
|
||||
|
||||
**请注意,以下数据并非精确值,仅供参考;不同芯片型号可能会有所差异。**
|
||||
|
||||
启用 :ref:`CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM` 时的资源消耗如下表所示:
|
||||
启用 :menuitem:`CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM` 时的资源消耗如下表所示:
|
||||
|
||||
.. list-table:: 选项启用时的资源消耗
|
||||
:widths: 20 10 10 10 10 10 10 10 10 10
|
||||
@@ -346,7 +346,7 @@ flash 操作完成后,CPU A 上的函数将设置另一标志位,即 ``s_fla
|
||||
- 247
|
||||
- 247
|
||||
|
||||
禁用 :ref:`CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM` 时的资源消耗如下表所示:
|
||||
禁用 :menuitem:`CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM` 时的资源消耗如下表所示:
|
||||
|
||||
.. list-table:: 选项禁用时的资源消耗
|
||||
:widths: 20 10 10 10 10 10 10 10 10 10
|
||||
|
||||
@@ -19,7 +19,7 @@ SPI0/1 总线上可能发生三种活动:
|
||||
.. list::
|
||||
|
||||
- 调用非加密 SPI flash 读取 API(:cpp:func:`esp_flash_read` 等)
|
||||
:esp32: - 或 SPI1 总线上的其他驱动程序用于用户定义的 SPI 操作(启用实验性功能 :ref:`CONFIG_SPI_FLASH_SHARE_SPI1_BUS`)
|
||||
:esp32: - 或 SPI1 总线上的其他驱动程序用于用户定义的 SPI 操作(启用实验性功能 :menuitem:`CONFIG_SPI_FLASH_SHARE_SPI1_BUS`)
|
||||
|
||||
- 缓存读取(通过 SPI0)。以下 API 和操作可以触发缓存读取:
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ SPI Flash API ESP-IDF 版本与芯片 ROM 版本的对比
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
芯片 ROM 中有一组 SPI flash 驱动程序,可以通过启用 :ref:`CONFIG_SPI_FLASH_ROM_IMPL` 来使用。大多数 ESP-IDF SPI flash 驱动程序的代码都在内部 RAM 中,因此启用此选项可以释放一些内部 RAM 的占用量。请注意,如果启用此选项,一些 ESP-IDF 中的 SPI flash 驱动程序功能和错误修复可能不会体现在芯片 ROM 版本中。
|
||||
芯片 ROM 中有一组 SPI flash 驱动程序,可以通过启用 :menuitem:`CONFIG_SPI_FLASH_ROM_IMPL` 来使用。大多数 ESP-IDF SPI flash 驱动程序的代码都在内部 RAM 中,因此启用此选项可以释放一些内部 RAM 的占用量。请注意,如果启用此选项,一些 ESP-IDF 中的 SPI flash 驱动程序功能和错误修复可能不会体现在芯片 ROM 版本中。
|
||||
|
||||
|
||||
ESP-IDF 支持但不包含在芯片 ROM 中的功能
|
||||
@@ -17,16 +17,16 @@ ESP-IDF 支持但不包含在芯片 ROM 中的功能
|
||||
- 八线 flash 芯片。详情请参阅 :ref:`oct-flash-doc`。
|
||||
- Flash 的 32 位地址。请注意,此功能为可选功能,详情请参阅 :ref:`32-bit-flash-doc`。
|
||||
- TH flash 芯片。
|
||||
- Kconfig 选项 :ref:`CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED`。
|
||||
- :ref:`CONFIG_SPI_FLASH_VERIFY_WRITE`,启用此选项可检测错误写入。
|
||||
- :ref:`CONFIG_SPI_FLASH_LOG_FAILED_WRITE`,启用此选项会打印错误写入。
|
||||
- :ref:`CONFIG_SPI_FLASH_WARN_SETTING_ZERO_TO_ONE`,启用此选项会检查是否将 0 写入为 1。
|
||||
- :ref:`CONFIG_SPI_FLASH_DANGEROUS_WRITE`,启用此选项会检查是否对某些受保护的区域(如引导加载程序、分区表或应用程序本身)进行了 flash 编程。
|
||||
- :ref:`CONFIG_SPI_FLASH_ENABLE_COUNTERS`,启用此选项以收集 ESP-IDF SPI flash 驱动程序 API 的性能数据。
|
||||
- :ref:`CONFIG_SPI_FLASH_AUTO_SUSPEND`,启用此选项可在 flash 短时操作时自动挂起或恢复 flash 长时操作。请注意,此功能为可选功能,详情请参阅 :ref:`auto-suspend-intro`。
|
||||
- :ref:`CONFIG_ESP_SLEEP_SET_FLASH_DPD`,启用此选项可在休眠时配置 flash 进入 deep power-down 模式以降低功耗。请注意,此功能为可选功能,详情请参阅 :ref:`deep-power-down-mode`。
|
||||
:ESP_ROM_HAS_SPI_FLASH_MMAP and SOC_SPIRAM_XIP_SUPPORTED and not esp32s3: - :ref:`CONFIG_SPIRAM_XIP_FROM_PSRAM`,启用该选项后,可将外部 PSRAM 用作指令 cache 和只读数据 cache。但请注意,ROM 中的某些函数不支持此用法,而 ESP-IDF 提供了这些 ROM 函数的替代版本。
|
||||
:esp32s3: - 启用 :ref:`CONFIG_SPIRAM_FETCH_INSTRUCTIONS` 和 :ref:`CONFIG_SPIRAM_RODATA` 后,可将外部 PSRAM 用作指令 cache 和只读数据 cache。但请注意,ROM 中的某些函数不支持此用法,而 ESP-IDF 提供了这些 ROM 函数的替代版本。
|
||||
- Kconfig 选项 :menuitem:`CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED`。
|
||||
- :menuitem:`CONFIG_SPI_FLASH_VERIFY_WRITE`,启用此选项可检测错误写入。
|
||||
- :menuitem:`CONFIG_SPI_FLASH_LOG_FAILED_WRITE`,启用此选项会打印错误写入。
|
||||
- :menuitem:`CONFIG_SPI_FLASH_WARN_SETTING_ZERO_TO_ONE`,启用此选项会检查是否将 0 写入为 1。
|
||||
- :menuitem:`CONFIG_SPI_FLASH_DANGEROUS_WRITE`,启用此选项会检查是否对某些受保护的区域(如引导加载程序、分区表或应用程序本身)进行了 flash 编程。
|
||||
- :menuitem:`CONFIG_SPI_FLASH_ENABLE_COUNTERS`,启用此选项以收集 ESP-IDF SPI flash 驱动程序 API 的性能数据。
|
||||
- :menuitem:`CONFIG_SPI_FLASH_AUTO_SUSPEND`,启用此选项可在 flash 短时操作时自动挂起或恢复 flash 长时操作。请注意,此功能为可选功能,详情请参阅 :ref:`auto-suspend-intro`。
|
||||
- :menuitem:`CONFIG_ESP_SLEEP_SET_FLASH_DPD`,启用此选项可在休眠时配置 flash 进入 deep power-down 模式以降低功耗。请注意,此功能为可选功能,详情请参阅 :ref:`deep-power-down-mode`。
|
||||
:ESP_ROM_HAS_SPI_FLASH_MMAP and SOC_SPIRAM_XIP_SUPPORTED and not esp32s3: - :menuitem:`CONFIG_SPIRAM_XIP_FROM_PSRAM`,启用该选项后,可将外部 PSRAM 用作指令 cache 和只读数据 cache。但请注意,ROM 中的某些函数不支持此用法,而 ESP-IDF 提供了这些 ROM 函数的替代版本。
|
||||
:esp32s3: - 启用 :menuitem:`CONFIG_SPIRAM_FETCH_INSTRUCTIONS` 和 :menuitem:`CONFIG_SPIRAM_RODATA` 后,可将外部 PSRAM 用作指令 cache 和只读数据 cache。但请注意,ROM 中的某些函数不支持此用法,而 ESP-IDF 提供了这些 ROM 函数的替代版本。
|
||||
|
||||
在 ESP-IDF 中引入,但不包含在芯片 ROM 中的错误修复
|
||||
--------------------------------------------------
|
||||
|
||||
@@ -94,7 +94,7 @@ QSPI flash 芯片的高性能模式
|
||||
|
||||
启用高性能模式的方法:
|
||||
|
||||
1. 取消选择 :ref:`CONFIG_ESPTOOLPY_OCT_FLASH` 和 :ref:`CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT`。高性能模式不用于八线 flash,启用相关选项可能会导致无法使用高性能模式。
|
||||
1. 取消选择 :menuitem:`CONFIG_ESPTOOLPY_OCT_FLASH` 和 :menuitem:`CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT`。高性能模式不用于八线 flash,启用相关选项可能会导致无法使用高性能模式。
|
||||
|
||||
2. 启用 ``CONFIG_SPI_FLASH_HPM_ENA`` 选项。
|
||||
|
||||
@@ -108,13 +108,13 @@ QSPI flash 芯片的高性能模式
|
||||
|
||||
通过以下方式检查引导加载程序是否支持 `DC Aware`:
|
||||
|
||||
- 如果启动了新项目,建议通过在引导加载程序菜单中选择 :ref:`CONFIG_BOOTLOADER_FLASH_DC_AWARE` 选项来启用 `DC Aware`。请注意,此选项无法通过 OTA 修改,因为支持代码在引导加载程序中。
|
||||
- 如果启动了新项目,建议通过在引导加载程序菜单中选择 :menuitem:`CONFIG_BOOTLOADER_FLASH_DC_AWARE` 选项来启用 `DC Aware`。请注意,此选项无法通过 OTA 修改,因为支持代码在引导加载程序中。
|
||||
|
||||
- 如果想在现有项目中通过 OTA 来更新 `HPM-DC` 配置选项,请检查用于构建引导加载程序的 sdkconfig 文件(升级 ESP-IDF 版本可能会使此文件与用于构建引导加载程序的文件不同):
|
||||
|
||||
- 对于最新版本的 ESP-IDF(v4.4.7+、v5.0.7+、v5.1.4+、v5.2 及以上),如果选择了 :ref:`CONFIG_BOOTLOADER_FLASH_DC_AWARE`,则引导加载程序支持 `DC Aware`。
|
||||
- 对于最新版本的 ESP-IDF(v4.4.7+、v5.0.7+、v5.1.4+、v5.2 及以上),如果选择了 :menuitem:`CONFIG_BOOTLOADER_FLASH_DC_AWARE`,则引导加载程序支持 `DC Aware`。
|
||||
|
||||
- 对于某些范围内的 ESP-IDF 版本(v4.4.4-v4.4.6、v5.0-v5.0.6 和 v5.1-v5.1.3),如果选择了 ``CONFIG_ESPTOOLPY_FLASHFREQ_120M``,则引导加载程序支持 `DC Aware`。此时,可启用 :ref:`CONFIG_BOOTLOADER_FLASH_DC_AWARE` 进行确认(不会影响实际应用中的引导加载程序)。
|
||||
- 对于某些范围内的 ESP-IDF 版本(v4.4.4-v4.4.6、v5.0-v5.0.6 和 v5.1-v5.1.3),如果选择了 ``CONFIG_ESPTOOLPY_FLASHFREQ_120M``,则引导加载程序支持 `DC Aware`。此时,可启用 :menuitem:`CONFIG_BOOTLOADER_FLASH_DC_AWARE` 进行确认(不会影响实际应用中的引导加载程序)。
|
||||
|
||||
- 对于低于 v4.4.4 的 ESP-IDF 版本,引导加载程序不支持 `DC Aware`。
|
||||
|
||||
@@ -185,12 +185,12 @@ QSPI flash 芯片的 32 位地址支持
|
||||
默认情况下,上述超过 16 MB 内存的 flash 区域可用于数据存储,例如使用文件系统。
|
||||
|
||||
*实验性功能*:如需在超过 16 MB 的四线 flash 区域实现完整支持(包括代码执行和数据访问),请启用以下实验性配置选项:
|
||||
- :ref:`CONFIG_IDF_EXPERIMENTAL_FEATURES`
|
||||
- :ref:`CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH`
|
||||
- :menuitem:`CONFIG_IDF_EXPERIMENTAL_FEATURES`
|
||||
- :menuitem:`CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH`
|
||||
|
||||
请注意,此选项为实验性功能,无法在所有四线 flash 芯片上稳定使用。详情请咨询 `乐鑫商务部 <https://www.espressif.com/zh-hans/contact-us/sales-questions>`_。
|
||||
|
||||
对于八线 flash 芯片,如果启用了 :ref:`CONFIG_ESPTOOLPY_OCT_FLASH`,则该功能默认启用。
|
||||
对于八线 flash 芯片,如果启用了 :menuitem:`CONFIG_ESPTOOLPY_OCT_FLASH`,则该功能默认启用。
|
||||
|
||||
.. _oct-flash-doc:
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
|
||||
.. important::
|
||||
|
||||
flash 芯片的硬件设计各不相同,因此启用 :ref:`CONFIG_SPI_FLASH_AUTO_SUSPEND` 选项暂停 flash 时应仔细且系统地进行测试。如果想在量产过程中使用挂起功能,请联系 `乐鑫商务部 <https://www.espressif.com/zh-hans/contact-us/sales-questions>`_。
|
||||
flash 芯片的硬件设计各不相同,因此启用 :menuitem:`CONFIG_SPI_FLASH_AUTO_SUSPEND` 选项暂停 flash 时应仔细且系统地进行测试。如果想在量产过程中使用挂起功能,请联系 `乐鑫商务部 <https://www.espressif.com/zh-hans/contact-us/sales-questions>`_。
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
@@ -232,7 +232,7 @@
|
||||
|
||||
- 步骤 5:在 cache 被禁用时,通过 ``linker.lf`` 文件把要使用的所有芯片驱动程序放入内部 RAM 中。详情请参阅 :doc:`/api-guides/linker-script-generation`。请确保 ``linker.lf`` 包含了你添加的所有源文件。
|
||||
|
||||
- 步骤 6:在项目中添加一个新的组件,例如 ``custom_chip_driver``。在 ``custom_chip_driver/chip_drivers.c`` 文件中将芯片对象列在 ``default_registered_chips`` 下。启用 :ref:`CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST` 配置选项,防止编译和链接由 ESP-IDF 提供的默认芯片驱动程序列表 ``default_registered_chips``;相反,链接器会搜索由你自定义的同名结构体 ``default_registered_chips``。详情请参阅 :example_file:`storage/custom_flash_driver/components/custom_chip_driver/chip_drivers.c`。
|
||||
- 步骤 6:在项目中添加一个新的组件,例如 ``custom_chip_driver``。在 ``custom_chip_driver/chip_drivers.c`` 文件中将芯片对象列在 ``default_registered_chips`` 下。启用 :menuitem:`CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST` 配置选项,防止编译和链接由 ESP-IDF 提供的默认芯片驱动程序列表 ``default_registered_chips``;相反,链接器会搜索由你自定义的同名结构体 ``default_registered_chips``。详情请参阅 :example_file:`storage/custom_flash_driver/components/custom_chip_driver/chip_drivers.c`。
|
||||
|
||||
- 步骤 7:构建项目,你将看到新的 flash 驱动程序。
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
从 PSRAM 执行代码功能
|
||||
----------------------
|
||||
|
||||
选择 :ref:`CONFIG_SPIRAM_XIP_FROM_PSRAM` 配置以启用此模式。在此模式下,代码从 PSRAM 执行,在大多数情况下,缓存不会在写入 API 期间被禁用。
|
||||
选择 :menuitem:`CONFIG_SPIRAM_XIP_FROM_PSRAM` 配置以启用此模式。在此模式下,代码从 PSRAM 执行,在大多数情况下,缓存不会在写入 API 期间被禁用。
|
||||
|
||||
在此模式下,flash ``.text`` 段(用于指令)和 flash ``.rodata`` 段(用于只读数据)将在启动时加载到 PSRAM。相应的虚拟地址将映射到 PSRAM。您无需确保在 flash 被擦除/编程时执行的代码/数据位于 IRAM 中。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user