esp-idf/docs/zh_CN/api-reference/storage/auto_suspend.inc

20 lines
1.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. _auto_suspend:
当使能 flash 擦除的自动暂停
--------------------------------------
当使能 flash 擦除的自动暂停,访问 SPI1 时(如擦除、写入、读取主 flash cache 便无需被禁用。硬件会负责仲裁二者的访问。
SPI1 操作较短时(如读取操作), CPU cache 会等待直到 SPI1 的操作结束。然而对于一个擦除操作,自动暂停会发生并打断擦除操作,允许 CPU 能够在有限时间内从 cache 读取数据。
因此,部分的代码及变量便可以放入 flash / PSRAM 而非 IRAM / DRAM ,同时仍然能够在 flash 擦除期间被执行。这样就减少了 IRAM / DRAM 的消耗。
请注意这个功能会带来 flash 暂停及恢复时的额外开销。如果被频繁打断, flash 的擦除时间可能异常的长。为了确保 flash 擦除操作在一个合理的时间内完成,请调整 FreeRTOS 任务优先级,这样仅有那些高于擦除任务优先级的任务,会在擦除进行过程中会被执行。
换句话说,代码可以分为以下三类:
1. 关键代码:放置在 IRAM / DRAM 中。这类代码通常有较高的性能要求,与 cache / flash / PSRAM 相关,或者被频繁调用。
2. cache 访问的代码:放置在 flash / PSRAM中。这类代码的性能要求较低或者较少被调用。他们会在 flash 擦除的时候被执行,带来一定的开销。
3. 低优先级代码:放置在 flash / PSRAM 中,并且在 flash 擦除的期间被禁止运行。这类代码的任务优先级应被设置的低于擦除任务,从而避免影响 flash 擦除的速度。