doc(spi_flash): Add more flash suspend information

This commit is contained in:
C.S.M
2026-05-08 18:20:47 +08:00
parent 887fd1cfe6
commit efd344e4b3
4 changed files with 58 additions and 8 deletions

View File

@@ -50,3 +50,30 @@ flash 自动暂停功能
对于第 2 点中所提到的 ``tsus`` 时间可以通过翻阅 flash datasheets 查找,通常在 AC CHARACTERISTICS 章节中。用户需要保证从 datasheets 获得的 ``tsus`` 值不大于 :ref:`CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US` 值。
此外flash 暂停可能延迟。CPU 和缓存通过 SPI0 频繁访问 flash SPI1 频繁发送暂停命令时,会导致 MSPI 数据传输效率下降。可以通过在内部使用 **** 来避免此种情况。当 SPI1 发送暂停命令时SPI0 将接管内存 SPI 总线并启用锁。SPI0 完成数据传输后,在锁延迟时间结束前,都将保有对内存 SPI 总线的控制权。在此锁延迟期间,如果接收到其他 SPI0 事务,则该 SPI0 事务将正常进行,并开启新一轮锁延迟周期。如无其他 SPI0 事务,则 SPI0 释放内存总线并启动 SPI0/1 仲裁。
suspend-resume 进阶用法
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在默认配置下flash 暂停由硬件自动发出恢复也由硬件在合适的时机自动完成并采用基于固定时间的延迟来等待暂停命令生效。这种实现已经可以满足绝大多数场景。然而在某些对实时性、性能或暂停粒度有更高要求的场景下ESP-IDF 还提供了进阶配置项,用于精细化控制 suspend-resume 行为。
1. 通过 flash 寄存器自动判断暂停是否生效
通常情况下,硬件在发出暂停命令后,会按 ``tsus`` 设定的时间延迟一段时间,再开放内存总线给 SPI0/CPU 使用。该延迟必须按 datasheet 中的最坏情况进行设置,因此在大多数情况下都偏保守。
通过启用 :ref:`CONFIG_SPI_FLASH_AUTO_CHECK_SUSPEND_STATUS` 后,硬件将通过读取 flash 状态寄存器中的 ``WIP`` 位,来判断暂停命令是否真正生效,而不再依据 :ref:`CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US` 给出的固定时间进行等待。由于实际的暂停建立时间通常远小于 datasheet 给出的最大值,所以这种方式可以显著降低暂停过程中的开销,提升整体性能。
.. important::
使用前需确认所用 flash 在暂停后 ``WIP`` 位的行为符合预期。绝大多数支持 suspend/resume flash 都满足该条件,但仍建议查阅相应 datasheet 进行确认。
2. 软件控制的 flash resume
通常情况下,硬件在 flash 被暂停后,会自动安排合适的时机发送 resume 命令,让 flash 继续完成原有的擦除/写入操作。这种实现对软件透明,但存在一个副作用:在高优先级任务/中断仍在运行时,硬件可能再次发起 suspend/resume 流程,从而打断这些任务,影响其执行的连续性与时序。
通过启用 :ref:`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` 后才能可见。
- 该功能会提升中断响应的连续性,提升应用的性能。但同时,单次操作 flash 的耗时会上升。

View File

@@ -34,15 +34,13 @@ flash 的可选功能
自动挂起和恢复
--------------
目前仅有 ESP32-S3、ESP32-C2、ESP32-C3、ESP32-C6 及 ESP32-H2 支持此功能。
未来 ESP32-P4 可能会添加此功能。
乐鑫芯片除 ESP32、ESP32-S2 外,均支持此功能。
.. only:: SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND
支持此功能的 flash 芯片列表:
1. XM25QxxC 系列
1. XM25QxxD 系列
2. GD25QxxE 系列
3. FM25Q32