mirror of
https://github.com/espressif/esp-idf.git
synced 2025-11-18 18:40:13 +00:00
docs: Provide CN Translation for four docs in api-guides
This commit is contained in:
@@ -7,11 +7,11 @@ This document provides an architecture overview of the Bluetooth stack in ESP-ID
|
||||
|
||||
.. only:: esp32
|
||||
|
||||
{IDF_TARGET_NAME} supports Dual-Mode Bluetooth 4.2 and is certified for Bluetooth 4.2.
|
||||
{IDF_TARGET_NAME} supports Dual-Mode Bluetooth 4.2 and is certified for Dual-Mode Bluetooth 4.2 and Bluetooth LE 5.0.
|
||||
|
||||
.. only:: esp32c3 or esp32s3
|
||||
|
||||
{IDF_TARGET_NAME} supports Bluetooth 5.0 (LE) and is certified for Bluetooth LE 5.0.
|
||||
{IDF_TARGET_NAME} supports Bluetooth 5.0 (LE) and is certified for Bluetooth LE 5.4.
|
||||
|
||||
.. only:: esp32c2 or esp32c6 or esp32h2
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
Current Consumption Measurement of Modules
|
||||
==========================================
|
||||
|
||||
:link_to_translation:`zh_CN:[中文]`
|
||||
|
||||
{IDF_TARGET_SOC_BOOT_PIN:default="Not updated", esp32="IO0", esp32s2="IO0", esp32s3="IO0", esp32c3="IO9", esp32c2="IO9", "esp32c6"="IO9", "esp32h2"="IO9"}
|
||||
|
||||
You may want to know the current consumption of a `module <https://www.espressif.com/en/products/modules>`__ in deep-sleep mode, :doc:`other power-saving modes </api-reference/system/sleep_modes>`, and active mode to develop some applications sensitive to power consumption. This section introduces how to measure the current consumption of a module running such an application.
|
||||
You may want to know the current consumption of a `module <https://www.espressif.com/en/products/modules>`__ in Deep-sleep mode, :doc:`other power-saving modes </api-reference/system/sleep_modes>`, and Active mode to develop some applications sensitive to power consumption. This section introduces how to measure the current consumption of a module running such an application.
|
||||
|
||||
|
||||
Notes to Measurement
|
||||
@@ -22,7 +24,7 @@ Can We Use a Development Board?
|
||||
|
||||
.. only:: esp32c6 or esp32h2
|
||||
|
||||
With such development boards, you can measure current consumption of modules in deep-sleep mode by flashing chips with the :example:`deep_sleep <system/deep_sleep>` example. However, you can also measure current of bare modules equipped with {IDF_TARGET_NAME} chip using the following method.
|
||||
With such development boards, you can measure current consumption of modules in Deep-sleep mode by flashing chips with the :example:`deep_sleep <system/deep_sleep>` example. However, you can also measure current of bare modules equipped with {IDF_TARGET_NAME} chip using the following method.
|
||||
|
||||
.. only:: esp32 or esp32s2 or esp32s3 or esp32c2 or esp32c3
|
||||
|
||||
@@ -32,17 +34,17 @@ Can We Use a Development Board?
|
||||
How to Choose an Appropriate Ammeter?
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In the :example:`deep_sleep <system/deep_sleep>` example, the module will be woken up every 20 seconds. In deep-sleep mode, the current in the module is just several microamps (μA), while in active mode, the current is in the order of milliamps (mA). The high dynamic current range makes accurate measurement difficult. Ordinary ammeters cannot dynamically switch the measurement range fast enough.
|
||||
In the :example:`deep_sleep <system/deep_sleep>` example, the module will be woken up every 20 seconds. In Deep-sleep mode, the current in the module is just several microamps (μA), while in active mode, the current is in the order of milliamps (mA). The high dynamic current range makes accurate measurement difficult. Ordinary ammeters cannot dynamically switch the measurement range fast enough.
|
||||
|
||||
Additionally, ordinary ammeters have a relatively high internal resistance, resulting in a significant voltage drop. This may cause the module to enter an unstable state, as it is powered by a voltage smaller than the minimum required voltage supply.
|
||||
|
||||
Therefore, an ammeter suitable for measuring current in deep-sleep mode should have low internal resistance and, ideally, switch current ranges dynamically. We recommend two options: the `Joulescope ammeter <https://www.joulescope.com/>`__ and the `Power Profiler Kit II from Nordic <https://www.nordicsemi.com/Products/Development-hardware/Power-Profiler-Kit-2.?lang=en>`__.
|
||||
Therefore, an ammeter suitable for measuring current in Deep-sleep mode should have low internal resistance and, ideally, switch current ranges dynamically. We recommend two options: the `Joulescope ammeter <https://www.joulescope.com/>`__ and the `Power Profiler Kit II from Nordic <https://www.nordicsemi.com/Products/Development-hardware/Power-Profiler-Kit-2.?lang=en>`__.
|
||||
|
||||
|
||||
Joulescope Ammeter
|
||||
""""""""""""""""""
|
||||
|
||||
The Joulescope ammeter combines high-speed sampling and rapid dynamic current range switching to provide accurate and seamless current and energy measurements, even for devices with rapidly varying current consumption. Joulescope accurately measures electrical current over nine orders of magnitude from amps down to nanoamps. This wide range allows for accurate and precise current measurements for devices. Additionally, Joulescope has a total voltage drop of 25 mV at 1 A, which keeps the module running normally. These two features make Joulescope a perfect option for measuring the module switching between deep-sleep mode and wake-up mode.
|
||||
The Joulescope ammeter combines high-speed sampling and rapid dynamic current range switching to provide accurate and seamless current and energy measurements, even for devices with rapidly varying current consumption. Joulescope accurately measures electrical current over nine orders of magnitude from amps down to nanoamps. This wide range allows for accurate and precise current measurements for devices. Additionally, Joulescope has a total voltage drop of 25 mV at 1 A, which keeps the module running normally. These two features make Joulescope a perfect option for measuring the module switching between Deep-sleep mode and wake-up mode.
|
||||
|
||||
Joulescope has no display screen. You need to connect it to a PC to visualize the current waveforms of the measured module. For specific instructions, please follow the documentation provided by the manufacturer.
|
||||
|
||||
@@ -50,7 +52,7 @@ Joulescope has no display screen. You need to connect it to a PC to visualize th
|
||||
Nordic Power Profiler Kit II
|
||||
""""""""""""""""""""""""""""
|
||||
|
||||
The Nordic Power Profiler Kit II has an advanced analog measurement unit with a high dynamic measurement range. This allows for accurate power consumption measurements for the entire range typically seen in low-power embedded applications, all the way from single μAs to 1 A. The resolution varies between 100 nA and 1 mA, depending on the measurement range, and is high enough to detect small spikes often seen in low-power optimized systems.
|
||||
The Nordic Power Profiler Kit II has an advanced analog measurement unit with a high dynamic measurement range. This allows for accurate power consumption measurements for the entire range typically seen in low-power embedded applications, all the way from several microamps to 1 A. The resolution varies between 100 nA and 1 mA, depending on the measurement range, and is high enough to detect small spikes often seen in low-power optimized systems.
|
||||
|
||||
|
||||
Hardware Connection
|
||||
@@ -113,7 +115,7 @@ Measurement Steps
|
||||
|
||||
ESP32-S3-WROOM-1 is used as an example in the measurement, and other modules can be measured similarly. For the specific current consumption of chips in different modes, please refer to the Current Consumption subsection in the corresponding `chip datasheet <https://www.espressif.com/en/support/download/documents/chips?keys=&field_download_document_type_tid%5B%5D=510>`__.
|
||||
|
||||
You can refer to the following steps to measure the current in deep-sleep mode.
|
||||
You can refer to the following steps to measure the current in Deep-sleep mode.
|
||||
|
||||
- Connect the aforementioned devices according to the hardware connection.
|
||||
|
||||
@@ -125,13 +127,13 @@ You can refer to the following steps to measure the current in deep-sleep mode.
|
||||
|
||||
.. only:: esp32
|
||||
|
||||
For modules with an external resistor on GPIO12 (such as ESP32-WROVER-E/IE), you should call :cpp:func:`rtc_gpio_isolate` before going into deep sleep. This is to isolate the GPIO12 pin from external circuits to further minimize current consumption. Please note, for other modules, you do not have to call this function, otherwise, you may get abnormal results.
|
||||
For modules with an external resistor on GPIO12 (such as ESP32-WROVER-E/IE), you should call :cpp:func:`rtc_gpio_isolate` before going into Deep-sleep. This is to isolate the GPIO12 pin from external circuits to further minimize current consumption. Please note, for other modules, you do not have to call this function, otherwise, you may get abnormal results.
|
||||
|
||||
- By default, the module will be woken up every 20 seconds (you can change the timing by modifying the code of this example). To check if the example runs as expected, you can monitor the module operation by running ``idf.py -p PORT monitor`` (please replace PORT with your serial port name).
|
||||
|
||||
- Open the Joulescope software to see the current waveform as shown in the image below.
|
||||
|
||||
From the waveforms, you can obtain that the current of the module in deep-sleep mode is 8.14 μA. In addition, you can also see the current of the module in active mode, which is about 23.88 mA. The waveforms also show that the average power consumption during deep-sleep mode is 26.85 μW, and the average power consumption during active mode is 78.32 mW.
|
||||
From the waveforms, you can obtain that the current of the module in Deep-sleep mode is 8.14 μA. In addition, you can also see the current of the module in active mode, which is about 23.88 mA. The waveforms also show that the average power consumption during Deep-sleep mode is 26.85 μW, and the average power consumption during active mode is 78.32 mW.
|
||||
|
||||
.. figure:: /../_static/current_measure_waveform.png
|
||||
:align: center
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
Deep Sleep Wake Stubs
|
||||
Deep-sleep Wake Stubs
|
||||
=====================
|
||||
|
||||
:link_to_translation:`zh_CN:[中文]`
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
The wakeup time from Deep-sleep mode is much longer, compared to Light-sleep and Modem-sleep modes as ROM and RAM are both powered down in this case, and the CPU needs more time for SPI booting. However, {IDF_TARGET_NAME} supports running a “deep sleep wake stub” when coming out of deep sleep. This function runs immediately as soon as the chip wakes up - before any normal initialization, bootloader, or ESP-IDF code has run.
|
||||
The wakeup time from Deep-sleep mode is much longer, compared to Light-sleep and Modem-sleep modes as ROM and RAM are both powered down in this case, and the CPU needs more time for SPI booting. However, {IDF_TARGET_NAME} supports running a “Deep-sleep wake stub” when coming out of Deep-sleep. This function runs immediately as soon as the chip wakes up - before any normal initialization, bootloader, or ESP-IDF code has run.
|
||||
|
||||
Specifically, after waking up from Deep-sleep mode, {IDF_TARGET_NAME} starts partial initialization. Then RTC fast memory will be validated with CRC. If validation passes, the wake stub code will be executed.
|
||||
|
||||
As {IDF_TARGET_NAME} has just woken up from deep sleep, most of the peripherals are in the reset state. The SPI flash has not been mapped. Thus, wake stub code can only call functions implemented in ROM or loaded into RTC fast memory, which retains content during deep sleep.
|
||||
As {IDF_TARGET_NAME} has just woken up from Deep-sleep, most of the peripherals are in the reset state. The SPI flash has not been mapped. Thus, wake stub code can only call functions implemented in ROM or loaded into RTC fast memory, which retains content during Deep-sleep.
|
||||
|
||||
From the above, utilizing the wake stub functionality in an application you can quickly run some code when waking up from Deep-sleep mode, without having to wait for the whole boot-up process. However, the stub size is restricted by the size of RTC fast memory.
|
||||
From the above, by utilizing the wake stub functionality in an application, you can quickly run some code when waking up from Deep-sleep mode, without having to wait for the whole boot-up process. However, the stub size is restricted by the size of RTC fast memory.
|
||||
|
||||
.. only:: SOC_RTC_SLOW_MEM_SUPPORTED
|
||||
|
||||
@@ -25,9 +27,9 @@ Next we will introduce how to implement the wake stub code in an application.
|
||||
Implement wake stub
|
||||
-------------------
|
||||
|
||||
The wake stub in esp-idf is realized by the function :cpp:func:`esp_wake_deep_sleep()`. This function is executed whenever the SoC wakes from deep sleep. As this function is weakly-linked to the default function :cpp:func:`esp_default_wake_deep_sleep()`, if your application contains a function with the name ``esp_wake_deep_sleep()``, the default version :cpp:func:`esp_default_wake_deep_sleep()` in esp-idf will be overridden.
|
||||
The wake stub in esp-idf is realized by the function :cpp:func:`esp_wake_deep_sleep()`. This function is executed whenever the SoC wakes from Deep-sleep. As this function is weakly-linked to the default function :cpp:func:`esp_default_wake_deep_sleep()`, if your application contains a function with the name ``esp_wake_deep_sleep()``, the default version :cpp:func:`esp_default_wake_deep_sleep()` in esp-idf will be overridden.
|
||||
|
||||
Please note that implementing the function :cpp:func:`esp_wake_deep_sleep()` in your application is not mandatory for utilizing the deep sleep functionality. It becomes necessary only if you want to introduce certain behavior immediately upon the SoC's wake-up.
|
||||
Please note that implementing the function :cpp:func:`esp_wake_deep_sleep()` in your application is not mandatory for utilizing the Deep-sleep functionality. It becomes necessary only if you want to introduce certain behavior immediately upon the SoC's wake-up.
|
||||
|
||||
When you develop a customized wake stub, the first step it should do is to call the default function :cpp:func:`esp_default_wake_deep_sleep()`.
|
||||
|
||||
@@ -44,7 +46,7 @@ Implementing the wake stub function in your application includes the following s
|
||||
Load Wake Stub Code into RTC Fast Memory
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The wake stub code can only call functions present in ROM or loaded into RTC fast memory. All other RAM locations are unintiailized and contain random data. While the wake stub code can use other RAM areas for temporary storage, the contents of these areas will be overwritten either upon returning to deep sleep mode or upon initiating esp-idf.
|
||||
The wake stub code can only call functions present in ROM or loaded into RTC fast memory. All other RAM locations are unintiailized and contain random data. While the wake stub code can use other RAM areas for temporary storage, the contents of these areas will be overwritten either upon returning to Deep-sleep mode or upon initiating esp-idf.
|
||||
|
||||
Wake stub code is a part of the main esp-idf application. During regular execution of esp-idf, functions can call the wake stub code or access RTC memory, treating them as a regular part of the application.
|
||||
|
||||
@@ -70,7 +72,7 @@ The second method is preferable when writing longer code segments in RTC fast me
|
||||
Load Wake Stub Data into RTC memory
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
RTC memory must include read-only data used by the wake stub code. Data in RTC memory is initialized whenever the SoC restarts, except when waking from deep sleep. In such cases, the data retained before entering to deep sleep are kept. Data used by the wake stub code must be resident in RTC memory, i.e. RTC fast memory or in RTC slow memory.
|
||||
RTC memory must include read-only data used by the wake stub code. Data in RTC memory is initialized whenever the SoC restarts, except when waking from Deep-sleep. In such cases, the data retained before entering to Deep-sleep are kept. Data used by the wake stub code must be resident in RTC memory, i.e. RTC fast memory or in RTC slow memory.
|
||||
|
||||
The data can be specified in the following two methods:
|
||||
|
||||
@@ -143,7 +145,7 @@ However, any string constants used in this way must be declared as arrays and ma
|
||||
|
||||
The second approach is advisable when incorporating strings or more complex code segments.
|
||||
|
||||
You can enable the Kconfig option :ref:`CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP` to reduce wake-up time. See more information in :doc:`Fast boot from Deep Sleep <bootloader>`.
|
||||
You can enable the Kconfig option :ref:`CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP` to reduce wake-up time. See more information in :doc:`Fast boot from Deep-sleep <bootloader>`.
|
||||
|
||||
All of the above functions are declared in :component_file:`esp_hw_support/include/esp_sleep.h`.
|
||||
|
||||
@@ -152,6 +154,6 @@ Example
|
||||
|
||||
.. only:: SOC_RTC_FAST_MEM_SUPPORTED
|
||||
|
||||
ESP-IDF provides an example to show how to implement the deep sleep wake stub.
|
||||
ESP-IDF provides an example to show how to implement the Deep-sleep wake stub.
|
||||
|
||||
- :example:`system/deep_sleep_wake_stub`
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
SPI Flash and External SPI RAM Configuration
|
||||
============================================
|
||||
|
||||
This page is a guide for configuring SPI Flash and external SPI RAM. Supported frequency and mode combination, error handling are also elaborated.
|
||||
:link_to_translation:`zh_CN:[中文]`
|
||||
|
||||
This page is a guide for configuring SPI flash and external SPI RAM. Supported frequency and mode combination, error handling are also elaborated.
|
||||
|
||||
Terminology
|
||||
-----------
|
||||
@@ -24,11 +26,11 @@ Terminology
|
||||
* - **line mode**
|
||||
- Number of signals used to transfer data in the data phase of SPI transactions. e.g., for 4-bit-mode, the speed of the data phase would be 4 bit per clock cycle.
|
||||
* - **FxRx**
|
||||
- F stands for Flash, R stands for PSRAM, x stands for line mode. e.g., F4R4 stands for an {IDF_TARGET_NAME} with Quad Flash and Quad PSRAM.
|
||||
- F stands for flash, R stands for PSRAM, x stands for line mode. e.g., F4R4 stands for an {IDF_TARGET_NAME} with Quad flash and Quad PSRAM.
|
||||
|
||||
.. note::
|
||||
|
||||
On {IDF_TARGET_NAME}, MSPI stands for the SPI0/1. SPI0 and SPI1 share a common SPI bus. The main Flash and PSRAM are connected to the MSPI peripheral. CPU accesses them via Cache.
|
||||
On {IDF_TARGET_NAME}, MSPI stands for the SPI0/1. SPI0 and SPI1 share a common SPI bus. The main flash and PSRAM are connected to the MSPI peripheral. CPU accesses them via Cache.
|
||||
|
||||
|
||||
.. _flash-psram-configuration:
|
||||
@@ -41,13 +43,13 @@ How to Configure Flash and PSRAM
|
||||
Configure the Flash
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The Flash related configurations are under ``Serial flasher config`` menu.
|
||||
The flash related configurations are under ``Serial flasher config`` menu.
|
||||
|
||||
1. Flash type used on the board. For Octal Flash, select :ref:`CONFIG_ESPTOOLPY_OCT_FLASH`. For Quad Flash, uncheck this configuration.
|
||||
1. Flash type used on the board. For Octal flash, select :ref:`CONFIG_ESPTOOLPY_OCT_FLASH`. For Quad flash, uncheck this configuration.
|
||||
2. Flash line mode. Select a line mode in :ref:`CONFIG_ESPTOOLPY_FLASHMODE`. The higher the line mode is, the faster the SPI speed is. See terminology above about the line mode.
|
||||
3. Flash sample mode. Select a sample mode in :ref:`CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE`. DDR mode is faster than SDR mode. See terminology above about SDR and DDR mode.
|
||||
4. Flash speed. Select a Flash frequency in :ref:`CONFIG_ESPTOOLPY_FLASHFREQ`.
|
||||
5. Flash size. Flash size, in megabytes. Select a Flash size in :ref:`CONFIG_ESPTOOLPY_FLASHSIZE`.
|
||||
5. Flash size. Flash size, in megabytes. Select a flash size in :ref:`CONFIG_ESPTOOLPY_FLASHSIZE`.
|
||||
|
||||
Configure the PSRAM
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
@@ -59,19 +61,19 @@ To enable PSRAM, please enable the :ref:`CONFIG_SPIRAM` under ``Component config
|
||||
|
||||
.. note::
|
||||
|
||||
Configuration 1 of Flash and PSRAM should be selected according to your actual hardware.
|
||||
Configuration 1 of flash and PSRAM should be selected according to your actual hardware.
|
||||
|
||||
For the reset of the above configurations:
|
||||
|
||||
- Flash and PSRAM share the same internal clock.
|
||||
- Quad Flash only supports STR mode. Octal Flash may support either/both STR/DTR modes under OPI mode, depending on the flash model and the vendor.
|
||||
- Quad flash only supports STR mode. Octal flash may support either/both STR/DTR modes under OPI mode, depending on the flash model and the vendor.
|
||||
- Quad PSRAM only supports STR mode, while Octal PSRAM only supports DTR mode.
|
||||
|
||||
Therefore, some limitations should be noticed when configuring configuration 2, 3 and 4 of Flash, and configuration 2 of PSRAM. Please refer to :ref:`All Supported Modes and Speeds <flash-psram-combination>`
|
||||
Therefore, some limitations should be noticed when configuring configuration 2, 3 and 4 of flash, and configuration 2 of PSRAM. Please refer to :ref:`All Supported Modes and Speeds <flash-psram-combination>`.
|
||||
|
||||
.. note::
|
||||
|
||||
If a board with Octal Flash resets before the second-stage bootloader, please refer to :ref:`Error Handling Chapter <flash-psram-error>`
|
||||
If a board with Octal flash resets before the second-stage bootloader, please refer to :ref:`Error Handling Chapter <flash-psram-error>`.
|
||||
|
||||
|
||||
.. _flash-psram-combination:
|
||||
@@ -81,7 +83,7 @@ All Supported Modes and Speeds
|
||||
|
||||
.. note::
|
||||
|
||||
For MSPI DDR mode, the data are sampled on both the positive edge and the negative edge. e.g., if a Flash is set to 80 MHz and DDR mode, then the final speed of the Flash is 160 MHz. This is faster than the Flash setting to 120 Mhz and STR mode.
|
||||
For MSPI DDR mode, the data are sampled on both the positive edge and the negative edge. e.g., if a flash is set to 80 MHz and DDR mode, then the final speed of the flash is 160 MHz. This is faster than the flash setting to 120 Mhz and STR mode.
|
||||
|
||||
.. important::
|
||||
|
||||
@@ -93,62 +95,128 @@ All Supported Modes and Speeds
|
||||
|
||||
Risks:
|
||||
|
||||
If your chip powers on at a certain temperature, then after the temperature increases or decreases over 20 celsius degree, the accesses to/from PSRAM/Flash will crash randomly. Flash access crash will lead to program crash.
|
||||
If your chip powers on at a certain temperature, then after the temperature increases or decreases over 20 celsius degree, the accesses to/from PSRAM/flash will crash randomly. Flash access crash will lead to program crash.
|
||||
|
||||
Note 20 celsius degree is not a totally correct number. This value may changes among chips.
|
||||
|
||||
F8R8 Hardware
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
======= =============== ======= =============
|
||||
Group Flash mode Group PSRAM mode
|
||||
======= =============== ======= =============
|
||||
A 120 MHz DDR A 120 MHz DDR
|
||||
A 120 MHz SDR A
|
||||
B 80 MHz DDR B 80 MHz DDR
|
||||
C 80 MHz SDR C 40 MHz DDR
|
||||
C 40 MHz DDR C
|
||||
C < 40 MHz C
|
||||
D D disable
|
||||
======= =============== ======= =============
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 20 30 20 30
|
||||
:align: center
|
||||
|
||||
1. Flash mode in group A works with PSRAM mode in group A/D
|
||||
2. Flash mode in group B/C works with PSRAM mode in group B/C/D
|
||||
* - Group
|
||||
- Flash mode
|
||||
- Group
|
||||
- PSRAM mode
|
||||
* - A
|
||||
- 120 MHz DDR
|
||||
- A
|
||||
- 120 MHz DDR
|
||||
* - A
|
||||
- 120 MHz SDR
|
||||
- A
|
||||
-
|
||||
* - B
|
||||
- 80 MHz DDR
|
||||
- B
|
||||
- 80 MHz DDR
|
||||
* - C
|
||||
- 80 MHz SDR
|
||||
- C
|
||||
- 40 MHz DDR
|
||||
* - C
|
||||
- 40 MHz DDR
|
||||
- C
|
||||
-
|
||||
* - C
|
||||
- < 40 MHz
|
||||
- C
|
||||
-
|
||||
* - D
|
||||
-
|
||||
- D
|
||||
- disable
|
||||
|
||||
1. Flash mode in group A works with PSRAM mode in group A/D.
|
||||
2. Flash mode in group B/C works with PSRAM mode in group B/C/D.
|
||||
|
||||
|
||||
F4R8 Hardware
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
======= =============== ======= ============
|
||||
Group Flash mode Group PSRAM mode
|
||||
======= =============== ======= ============
|
||||
A 120 MHz SDR A 120 MHz DDR
|
||||
B 80 MHz SDR B 80 MHz DDR
|
||||
C 40 MHz SDR C 40 MHz DDR
|
||||
C 20 MHz SDR C
|
||||
D D disable
|
||||
======= =============== ======= ============
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 20 30 20 30
|
||||
:align: center
|
||||
|
||||
1. Flash mode in group A works with PSRAM mode in group A/D
|
||||
2. Flash mode in group B/C works with PSRAM mode in group B/C/D
|
||||
* - Group
|
||||
- Flash mode
|
||||
- Group
|
||||
- PSRAM mode
|
||||
* - A
|
||||
- 120 MHz SDR
|
||||
- A
|
||||
- 120 MHz DDR
|
||||
* - B
|
||||
- 80 MHz SDR
|
||||
- B
|
||||
- 80 MHz DDR
|
||||
* - C
|
||||
- 40 MHz SDR
|
||||
- C
|
||||
- 40 MHz DDR
|
||||
* - C
|
||||
- 20 MHz SDR
|
||||
- C
|
||||
-
|
||||
* - D
|
||||
-
|
||||
- D
|
||||
- disable
|
||||
|
||||
1. Flash mode in group A works with PSRAM mode in group A/D.
|
||||
2. Flash mode in group B/C works with PSRAM mode in group B/C/D.
|
||||
|
||||
|
||||
F4R4 Hardware
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
====== =============== ====== ============
|
||||
Type Flash Type PSRAM
|
||||
====== =============== ====== ============
|
||||
A 120 MHz A 120 MHz
|
||||
B 80 MHz B 80 MHz
|
||||
C 40 MHz C 40 MHz
|
||||
C 20 MHz C
|
||||
D D disable
|
||||
====== =============== ====== ============
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 20 30 20 30
|
||||
:align: center
|
||||
|
||||
1. Flash in A works with PSRAM in A/C/D
|
||||
2. Flash in B works with PSRAM in B/C/D
|
||||
3. Flash in C works with PSRAM in A/B/C/D
|
||||
* - Group
|
||||
- Flash mode
|
||||
- Group
|
||||
- PSRAM mode
|
||||
* - A
|
||||
- 120 MHz
|
||||
- A
|
||||
- 120 MHz
|
||||
* - B
|
||||
- 80 MHz
|
||||
- B
|
||||
- 80 MHz
|
||||
* - C
|
||||
- 40 MHz
|
||||
- C
|
||||
- 40 MHz
|
||||
* - C
|
||||
- 20 MHz
|
||||
- C
|
||||
-
|
||||
* - D
|
||||
-
|
||||
- D
|
||||
- disable
|
||||
|
||||
1. Flash mode in group A works with PSRAM in group A/C/D.
|
||||
2. Flash mode in group B works with PSRAM in group B/C/D.
|
||||
3. Flash mode in group C works with PSRAM in group A/B/C/D.
|
||||
|
||||
|
||||
.. _flash-psram-error:
|
||||
@@ -156,7 +224,7 @@ F4R4 Hardware
|
||||
Error Handling
|
||||
--------------
|
||||
|
||||
1. If a board with Octal Flash resets before the second-stage bootloader:
|
||||
1. If a board with Octal flash resets before the second-stage bootloader:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
@@ -171,18 +239,18 @@ Error Handling
|
||||
|
||||
this may mean that the necessary efuses are not correctly burnt. Please check the eFuse bits of the chip using command ``espefuse.py summary``.
|
||||
|
||||
The ROM bootloader relies on an eFuse bit ``FLASH_TYPE`` to reset the Flash into the default mode (SPI mode). If this bit is not burnt and the flash is working in OPI mode, ROM bootloader may not be able to read from the flash and load the following images.
|
||||
The ROM bootloader relies on an eFuse bit ``FLASH_TYPE`` to reset the flash into the default mode (SPI mode). If this bit is not burnt and the flash is working in OPI mode, ROM bootloader may not be able to read from the flash and load the following images.
|
||||
|
||||
2. If you enabled :ref:`CONFIG_ESPTOOLPY_OCT_FLASH`, and there's an error log saying:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
Octal Flash option selected, but EFUSE not configured!
|
||||
Octal flash option selected, but EFUSE not configured!
|
||||
|
||||
this means:
|
||||
|
||||
- either you're using a board with a Quad Flash
|
||||
- or you're using a board with an Octal Flash, but the eFuse bit ``FLASH_TYPE`` isn't burnt. Espressif guarantees this bit is burnt during module manufacturing, but if the module is manufactured by others, this may happen.
|
||||
- either you're using a board with a Quad flash,
|
||||
- or you're using a board with an Octal flash, but the eFuse bit ``FLASH_TYPE`` isn't burnt. Espressif guarantees this bit is burnt during module manufacturing, but if the module is manufactured by others, this may happen.
|
||||
|
||||
|
||||
Here is a method to burn the eFuse bit:
|
||||
@@ -193,4 +261,4 @@ Here is a method to burn the eFuse bit:
|
||||
|
||||
.. note::
|
||||
|
||||
This step is irreversible. Please do check if your hardware is actually using an Octal Flash.
|
||||
This step is irreversible. Please do check if your hardware is actually using an Octal flash.
|
||||
|
||||
Reference in New Issue
Block a user