Merge branch 'feature/doc_update_efuse' into 'master'

doc(efuse): Updates efuse article

Closes IDF-4223, IDF-4895, IDFGH-7228, and IDFGH-7216

See merge request espressif/esp-idf!18349
This commit is contained in:
morris 2022-06-14 10:50:51 +08:00
commit 066289fbd0
14 changed files with 891 additions and 109 deletions

View File

@ -104,7 +104,6 @@ api-reference/system/ota
api-reference/system/app_trace
api-reference/system/perfmon
api-reference/system/esp_function_with_shared_stack
api-reference/system/efuse
api-reference/system/async_memcpy
api-reference/system/random
api-reference/system/esp_timer

View File

@ -27,22 +27,30 @@ For more details, see *{IDF_TARGET_NAME} Technical Reference Manual* > *eFuse Co
* EFUSE_BLK2 is used for security boot key. If not using that Secure Boot feature, they can be used for another purpose;
* EFUSE_BLK3 can be partially reserved for the custom MAC address, or used entirely for user application. Note that some bits are already used in IDF.
.. only:: not esp32
.. only:: not esp32 and not esp32c2
{IDF_TARGET_NAME} has 11 eFuse blocks each of the size of 256 bits (not all bits are available):
* EFUSE_BLK0 is used entirely for system purposes;
* EFUSE_BLK1 is used entirely for system purposes;
* EFUSE_BLK2 is used entirely for system purposes;
* EFUSE_BLK3 or EFUSE_BLK_USER_DATA can be used for user purposes;
* EFUSE_BLK4 or EFUSE_BLK_KEY0 can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK5 or EFUSE_BLK_KEY1 can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK6 or EFUSE_BLK_KEY2 can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK7 or EFUSE_BLK_KEY3 can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK8 or EFUSE_BLK_KEY4 can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK9 or EFUSE_BLK_KEY5 can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK10 or EFUSE_BLK_SYS_DATA_PART2 is reseved for system purposes.
* EFUSE_BLK3 (also named EFUSE_BLK_USER_DATA) can be used for user purposes;
* EFUSE_BLK4 (also named EFUSE_BLK_KEY0) can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK5 (also named EFUSE_BLK_KEY1) can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK6 (also named EFUSE_BLK_KEY2) can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK7 (also named EFUSE_BLK_KEY3) can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK8 (also named EFUSE_BLK_KEY4) can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK9 (also named EFUSE_BLK_KEY5) can be used as key (for secure_boot or flash_encryption) or for user purposes;
* EFUSE_BLK10 (also named EFUSE_BLK_SYS_DATA_PART2) is reseved for system purposes.
.. only:: esp32c2
{IDF_TARGET_NAME} has 4 eFuse blocks each of the size of 256 bits (not all bits are available):
* EFUSE_BLK0 is used entirely for system purposes;
* EFUSE_BLK1 is used entirely for system purposes;
* EFUSE_BLK2 is used entirely for system purposes;
* EFUSE_BLK3 (also named EFUSE_BLK_KEY0) can be used as key (for secure_boot or flash_encryption) or for user purposes;
Each block is divided into 8 32-bits registers.
@ -64,7 +72,7 @@ Description CSV file
The CSV file contains a description of the eFuse fields. In the simple case, one field has one line of description.
Table header:
{IDF_TARGET_MAX_EFUSE_BLK:default = "EFUSE_BLK10", esp32 = "EFUSE_BLK3"}
{IDF_TARGET_MAX_EFUSE_BLK:default = "EFUSE_BLK10", esp32 = "EFUSE_BLK3", esp32c2 = "EFUSE_BLK3"}
.. code-block:: none
@ -110,6 +118,8 @@ If a non-sequential bit order is required to describe a field, then the field de
This field will available in code as ESP_EFUSE_MAC_FACTORY and ESP_EFUSE_MAC_FACTORY_CRC.
.. _structured-efuse-fields:
Structured efuse fields
-----------------------
@ -133,6 +143,20 @@ It is possible to create aliases for fields with the same range, see ``WR_DIS.FI
The IDF names for structured efuse fields should be unique. The ``efuse_table_gen`` tool will generate the final names where the dot will be replaced by ``_``. The names for using in IDF are ESP_EFUSE_WR_DIS, ESP_EFUSE_WR_DIS_RD_DIS, ESP_EFUSE_WR_DIS_FIELD_2_B1, etc.
The ``efuse_table_gen`` tool checks that the fields do not overlap each other and must be within the range of a field if there is a violation, then throws the following error:
.. code-block:: none
Field at USER_DATA, EFUSE_BLK3, 0, 256 intersected with SERIAL_NUMBER, EFUSE_BLK3, 0, 32
Solution: Describe ``SERIAL_NUMBER`` to be included in ``USER_DATA``. (``USER_DATA.SERIAL_NUMBER``).
.. code-block:: none
Field at FEILD, EFUSE_BLK3, 0, 50 out of range FEILD.MAJOR_NUMBER, EFUSE_BLK3, 60, 32
Solution: Change ``bit_start`` for ``FIELD.MAJOR_NUMBER`` from 60 to 0, so ``MAJOR_NUMBER`` is in the ``FEILD`` range.
efuse_table_gen.py tool
-----------------------
@ -143,7 +167,7 @@ To generate a `common` files, use the following command ``idf.py efuse-common-ta
.. code-block:: bash
cd $IDF_PATH/components/efuse/
./efuse_table_gen.py {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv
./efuse_table_gen.py --idf_target {IDF_TARGET_PATH_NAME} {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv
After generation in the folder $IDF_PATH/components/efuse/`{IDF_TARGET_PATH_NAME}` create:
@ -155,7 +179,7 @@ To generate a `custom` files, use the following command ``idf.py efuse-custom-ta
.. code-block:: bash
cd $IDF_PATH/components/efuse/
./efuse_table_gen.py {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv PROJECT_PATH/main/esp_efuse_custom_table.csv
./efuse_table_gen.py --idf_target {IDF_TARGET_PATH_NAME} {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv PROJECT_PATH/main/esp_efuse_custom_table.csv
After generation in the folder PROJECT_PATH/main create:
@ -167,7 +191,7 @@ To use the generated fields, you need to include two files:
.. code-block:: c
#include "esp_efuse.h"
#include "esp_efuse_table.h" or "esp_efuse_custom_table.h"
#include "esp_efuse_table.h" // or "esp_efuse_custom_table.h"
Supported coding scheme
@ -213,7 +237,7 @@ Supported coding scheme
Coding schemes are used to protect against data corruption. {IDF_TARGET_NAME} supports two coding schemes:
* ``None``. EFUSE_BLK0 is stored with four backups, meaning each bit is stored four times. This backup scheme is automatically applied by the hardware and is not visible to software. EFUSE_BLK0 can be written many times.
* ``RS``. EFUSE_BLK1 - EFUSE_BLK10 use Reed-Solomon coding scheme that supports up to 5 bytes of automatic error correction. Software will encode the 32-byte EFUSE_BLKx using RS (44, 32) to generate a 12-byte check code, and then burn the EFUSE_BLKx and the check code into eFuse at the same time. The eFuse Controller automatically decodes the RS encoding and applies error correction when reading back the eFuse block. Because the RS check codes are generated across the entire 256-bit eFuse block, each block can only be written to one time.
* ``RS``. EFUSE_BLK1 - {IDF_TARGET_MAX_EFUSE_BLK} use Reed-Solomon coding scheme that supports up to 5 bytes of automatic error correction. Software will encode the 32-byte EFUSE_BLKx using RS (44, 32) to generate a 12-byte check code, and then burn the EFUSE_BLKx and the check code into eFuse at the same time. The eFuse Controller automatically decodes the RS encoding and applies error correction when reading back the eFuse block. Because the RS check codes are generated across the entire 256-bit eFuse block, each block can only be written to one time.
To write some fields into one block, or different blocks in one time, you need to use ``the batch writing mode``. Firstly set this mode through :cpp:func:`esp_efuse_batch_write_begin` function then write some fields as usual using the ``esp_efuse_write_...`` functions. At the end to burn them, call the :cpp:func:`esp_efuse_batch_write_commit` function. It burns prepared data to the eFuse blocks and disables the ``batch recording mode``.
@ -254,29 +278,34 @@ Access to the fields is via a pointer to the description structure. API function
For frequently used fields, special functions are made, like this :cpp:func:`esp_efuse_get_chip_ver`, :cpp:func:`esp_efuse_get_pkg_ver`.
.. only:: not esp32
.. only:: SOC_EFUSE_KEY_PURPOSE_FIELD or SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY
eFuse API for keys
------------------
EFUSE_BLK_KEY0 - EFUSE_BLK_KEY5 are intended to keep up to 6 keys with a length of 256-bits. Each key has an ``ESP_EFUSE_KEY_PURPOSE_x`` field which defines the purpose of these keys. The purpose field is described in :cpp:type:`esp_efuse_purpose_t`.
.. only:: SOC_EFUSE_KEY_PURPOSE_FIELD
The purposes like ``ESP_EFUSE_KEY_PURPOSE_XTS_AES_...`` are used for flash encryption.
EFUSE_BLK_KEY0 - EFUSE_BLK_KEY5 are intended to keep up to 6 keys with a length of 256-bits. Each key has an ``ESP_EFUSE_KEY_PURPOSE_x`` field which defines the purpose of these keys. The purpose field is described in :cpp:type:`esp_efuse_purpose_t`.
The purposes like ``ESP_EFUSE_KEY_PURPOSE_SECURE_BOOT_DIGEST...`` are used for secure boot.
The purposes like ``ESP_EFUSE_KEY_PURPOSE_XTS_AES_...`` are used for flash encryption.
There are some eFuse APIs useful to work with states of keys.
The purposes like ``ESP_EFUSE_KEY_PURPOSE_SECURE_BOOT_DIGEST...`` are used for secure boot.
* :cpp:func:`esp_efuse_get_purpose_field` - Returns a pointer to a key purpose for an eFuse key block.
* :cpp:func:`esp_efuse_get_key` - Returns a pointer to a key block.
* :cpp:func:`esp_efuse_set_key_purpose` - Sets a key purpose for an eFuse key block.
* :cpp:func:`esp_efuse_set_keypurpose_dis_write` - Sets a write protection of the key purpose field for an eFuse key block.
* :cpp:func:`esp_efuse_find_unused_key_block` - Search for an unused key block and return the first one found.
* :cpp:func:`esp_efuse_count_unused_key_blocks` - Returns the number of unused eFuse key blocks in the range EFUSE_BLK_KEY0..EFUSE_BLK_KEY_MAX
* :cpp:func:`esp_efuse_get_digest_revoke` - Returns the status of the Secure Boot public key digest revocation bit.
* :cpp:func:`esp_efuse_set_digest_revoke` - Sets the Secure Boot public key digest revocation bit.
* :cpp:func:`esp_efuse_get_write_protect_of_digest_revoke` - Returns a write protection of the Secure Boot public key digest revocation bit.
* :cpp:func:`esp_efuse_set_write_protect_of_digest_revoke` - Sets a write protection of the Secure Boot public key digest revocation bit.
There are some eFuse APIs useful to work with states of keys.
* :cpp:func:`esp_efuse_get_purpose_field` - Returns a pointer to a key purpose for an eFuse key block.
* :cpp:func:`esp_efuse_get_key` - Returns a pointer to a key block.
* :cpp:func:`esp_efuse_set_key_purpose` - Sets a key purpose for an eFuse key block.
* :cpp:func:`esp_efuse_set_keypurpose_dis_write` - Sets a write protection of the key purpose field for an eFuse key block.
* :cpp:func:`esp_efuse_find_unused_key_block` - Search for an unused key block and return the first one found.
* :cpp:func:`esp_efuse_count_unused_key_blocks` - Returns the number of unused eFuse key blocks in the range EFUSE_BLK_KEY0..EFUSE_BLK_KEY_MAX
.. only:: SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY
* :cpp:func:`esp_efuse_get_digest_revoke` - Returns the status of the Secure Boot public key digest revocation bit.
* :cpp:func:`esp_efuse_set_digest_revoke` - Sets the Secure Boot public key digest revocation bit.
* :cpp:func:`esp_efuse_get_write_protect_of_digest_revoke` - Returns a write protection of the Secure Boot public key digest revocation bit.
* :cpp:func:`esp_efuse_set_write_protect_of_digest_revoke` - Sets a write protection of the Secure Boot public key digest revocation bit.
How to add a new field
@ -284,79 +313,92 @@ How to add a new field
1. Find a free bits for field. Show `esp_efuse_table.csv` file or run ``idf.py show-efuse-table`` or the next command:
.. include:: inc/show-efuse-table_{IDF_TARGET_NAME}.rst
The number of bits not included in square brackets is free (some bits are reserved for Espressif). All fields are checked for overlapping.
To add fields to an existing field, use the :ref:`Structured efuse fields <structured-efuse-fields>` technique. For example, adding the fields: SERIAL_NUMBER, MODEL_NUMBER and HARDWARE REV to an existing ``USER_DATA`` field. Use ``.`` (dot) to show an attachment in a field.
.. code-block:: none
$ ./efuse_table_gen.py {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv --info
eFuse coding scheme: NONE
# field_name efuse_block bit_start bit_count
1 WR_DIS_FLASH_CRYPT_CNT EFUSE_BLK0 2 1
2 WR_DIS_BLK1 EFUSE_BLK0 7 1
3 WR_DIS_BLK2 EFUSE_BLK0 8 1
4 WR_DIS_BLK3 EFUSE_BLK0 9 1
5 RD_DIS_BLK1 EFUSE_BLK0 16 1
6 RD_DIS_BLK2 EFUSE_BLK0 17 1
7 RD_DIS_BLK3 EFUSE_BLK0 18 1
8 FLASH_CRYPT_CNT EFUSE_BLK0 20 7
9 MAC_FACTORY EFUSE_BLK0 32 8
10 MAC_FACTORY EFUSE_BLK0 40 8
11 MAC_FACTORY EFUSE_BLK0 48 8
12 MAC_FACTORY EFUSE_BLK0 56 8
13 MAC_FACTORY EFUSE_BLK0 64 8
14 MAC_FACTORY EFUSE_BLK0 72 8
15 MAC_FACTORY_CRC EFUSE_BLK0 80 8
16 CHIP_VER_DIS_APP_CPU EFUSE_BLK0 96 1
17 CHIP_VER_DIS_BT EFUSE_BLK0 97 1
18 CHIP_VER_PKG EFUSE_BLK0 105 3
19 CHIP_CPU_FREQ_LOW EFUSE_BLK0 108 1
20 CHIP_CPU_FREQ_RATED EFUSE_BLK0 109 1
21 CHIP_VER_REV1 EFUSE_BLK0 111 1
22 ADC_VREF_AND_SDIO_DREF EFUSE_BLK0 136 6
23 XPD_SDIO_REG EFUSE_BLK0 142 1
24 SDIO_TIEH EFUSE_BLK0 143 1
25 SDIO_FORCE EFUSE_BLK0 144 1
26 ENCRYPT_CONFIG EFUSE_BLK0 188 4
27 CONSOLE_DEBUG_DISABLE EFUSE_BLK0 194 1
28 ABS_DONE_0 EFUSE_BLK0 196 1
29 DISABLE_JTAG EFUSE_BLK0 198 1
30 DISABLE_DL_ENCRYPT EFUSE_BLK0 199 1
31 DISABLE_DL_DECRYPT EFUSE_BLK0 200 1
32 DISABLE_DL_CACHE EFUSE_BLK0 201 1
33 ENCRYPT_FLASH_KEY EFUSE_BLK1 0 256
34 SECURE_BOOT_KEY EFUSE_BLK2 0 256
35 MAC_CUSTOM_CRC EFUSE_BLK3 0 8
36 MAC_CUSTOM EFUSE_BLK3 8 48
37 ADC1_TP_LOW EFUSE_BLK3 96 7
38 ADC1_TP_HIGH EFUSE_BLK3 103 9
39 ADC2_TP_LOW EFUSE_BLK3 112 7
40 ADC2_TP_HIGH EFUSE_BLK3 119 9
41 SECURE_VERSION EFUSE_BLK3 128 32
42 MAC_CUSTOM_VER EFUSE_BLK3 184 8
Used bits in eFuse table:
EFUSE_BLK0
[2 2] [7 9] [16 18] [20 27] [32 87] [96 97] [105 109] [111 111] [136 144] [188 191] [194 194] [196 196] [198 201]
EFUSE_BLK1
[0 255]
EFUSE_BLK2
[0 255]
EFUSE_BLK3
[0 55] [96 159] [184 191]
Note: Not printed ranges are free for using. (bits in EFUSE_BLK0 are reserved for Espressif)
Parsing eFuse CSV input file $IDF_PATH/components/efuse/{IDF_TARGET_PATH_NAME}/esp_efuse_table.csv ...
Verifying eFuse table...
The number of bits not included in square brackets is free (bits in EFUSE_BLK0 are reserved for Espressif). All fields are checked for overlapping.
USER_DATA.SERIAL_NUMBER, EFUSE_BLK3, 0, 32,
USER_DATA.MODEL_NUMBER, EFUSE_BLK3, 32, 10,
USER_DATA.HARDWARE_REV, EFUSE_BLK3, 42, 10,
2. Fill a line for field: field_name, efuse_block, bit_start, bit_count, comment.
3. Run a ``show_efuse_table`` command to check eFuse table. To generate source files run ``efuse_common_table`` or ``efuse_custom_table`` command.
You may get errors such as ``intersects with`` or ``out of range``. Please see how to solve them in the :ref:`Structured efuse fields <structured-efuse-fields>` article.
Bit Order
---------
The eFuses bit order is little endian (see the example below), it means that eFuse bits are read and written from LSB to MSB:
.. code-block:: none
$ espefuse.py dump
USER_DATA (BLOCK3 ) [3 ] read_regs: 03020100 07060504 0B0A0908 0F0E0D0C 13121111 17161514 1B1A1918 1F1E1D1C
BLOCK4 (BLOCK4 ) [4 ] read_regs: 03020100 07060504 0B0A0908 0F0E0D0C 13121111 17161514 1B1A1918 1F1E1D1C
where is the register representation:
EFUSE_RD_USR_DATA0_REG = 0x03020100
EFUSE_RD_USR_DATA1_REG = 0x07060504
EFUSE_RD_USR_DATA2_REG = 0x0B0A0908
EFUSE_RD_USR_DATA3_REG = 0x0F0E0D0C
EFUSE_RD_USR_DATA4_REG = 0x13121111
EFUSE_RD_USR_DATA5_REG = 0x17161514
EFUSE_RD_USR_DATA6_REG = 0x1B1A1918
EFUSE_RD_USR_DATA7_REG = 0x1F1E1D1C
where is the byte representation:
byte[0] = 0x00, byte[1] = 0x01, ... byte[3] = 0x03, byte[4] = 0x04, ..., byte[31] = 0x1F
For example, csv file describes the ``USER_DATA`` field, which occupies all 256 bits (a whole block).
.. code-block:: none
USER_DATA, EFUSE_BLK3, 0, 256, User data
USER_DATA.FIELD1, EFUSE_BLK3, 16, 16, Field1
ID, EFUSE_BLK4, 8, 3, ID bit[0..2]
, EFUSE_BLK4, 16, 2, ID bit[3..4]
, EFUSE_BLK4, 32, 3, ID bit[5..7]
Thus, reading the eFuse ``USER_DATA`` block written as above gives the following results:
.. code-block:: c
uint8_t buf[32] = { 0 };
esp_efuse_read_field_blob(ESP_EFUSE_USER_DATA, &buf, sizeof(buf) * 8);
// buf[0] = 0x00, buf[1] = 0x01, ... buf[31] = 0x1F
uint32_t field1 = 0;
size_t field1_size = ESP_EFUSE_USER_DATA[0]->bit_count; // can be used for this case because it only consists of one entry
esp_efuse_read_field_blob(ESP_EFUSE_USER_DATA, &field1, field1_size);
// field1 = 0x0302
uint32_t field1_1 = 0;
esp_efuse_read_field_blob(ESP_EFUSE_USER_DATA, &field1_1, 2); // reads only first 2 bits
// field1 = 0x0002
uint8_t id = 0;
size_t id_size = esp_efuse_get_field_size(ESP_EFUSE_ID); // returns 6
// size_t id_size = ESP_EFUSE_USER_DATA[0]->bit_count; // can NOT be used because it consists of 3 entries. It returns 3 not 6.
esp_efuse_read_field_blob(ESP_EFUSE_ID, &id, id_size);
// id = 0x91
// b'100 10 001
// [3] [2] [3]
uint8_t id_1 = 0;
esp_efuse_read_field_blob(ESP_EFUSE_ID, &id_1, 3);
// id = 0x01
// b'001
Debug eFuse & Unit tests
------------------------
@ -374,7 +416,7 @@ espefuse.py
esptool includes a useful tool for reading/writing {IDF_TARGET_NAME} eFuse bits - `espefuse.py <https://docs.espressif.com/projects/esptool/en/latest/{IDF_TARGET_PATH_NAME}/espefuse/index.html>`_.
.. include:: inc/espefuse_summary_{IDF_TARGET_NAME}.rst
.. include:: inc/espefuse_summary_{IDF_TARGET_NAME}.rst
.. include-build-file:: inc/components/efuse/{IDF_TARGET_PATH_NAME}/include/esp_efuse.inc

View File

@ -1,10 +1,100 @@
.. code-block:: none
TO BE UPDATED WITH TARGET SPECIFIC INFORMATION, IDF-4223
espefuse.py -p PORT summary
Connecting...................
Detecting chip type... ESP32-C2
espefuse.py v4.1
=== Run "summary" command ===
EFUSE_NAME (Block) Description = [Meaningful Value] [Readable/Writeable] (Hex Value)
----------------------------------------------------------------------------------------
Adc_Calib fuses:
ADC_CALIBRATION_0 (BLOCK2) = 0 R/W (0b0000000000000000000000)
ADC_CALIBRATION_1 (BLOCK2) = 0 R/W (0x00000000)
ADC_CALIBRATION_2 (BLOCK2) = 0 R/W (0x00000000)
Config fuses:
UART_PRINT_CONTROL (BLOCK0) Set UART boot message output mode = Force print R/W (0b00)
FORCE_SEND_RESUME (BLOCK0) Force ROM code to send a resume cmd during SPI boo = False R/W (0b0)
t
DIS_DIRECT_BOOT (BLOCK0) Disable direct_boot mode = False R/W (0b0)
Efuse fuses:
WR_DIS (BLOCK0) Disables programming of individual eFuses = 0 R/W (0x00)
RD_DIS (BLOCK0) Disables software reading from BLOCK3 = 0 R/W (0b00)
Flash Config fuses:
FLASH_TPUW (BLOCK0) Configures flash startup delay after SoC power-up, = 0 R/W (0x0)
unit is (ms/2). When the value is 15, delay is 7.
5 ms
Identity fuses:
SECURE_VERSION (BLOCK0) Secure version (anti-rollback feature) = 0 R/W (0x0)
CUSTOM_MAC_USED (BLOCK0) Enable CUSTOM_MAC programming = False R/W (0b0)
CUSTOM_MAC (BLOCK1) Custom MAC addr
= 00:00:00:00:00:00 (OK) R/W
MAC (BLOCK2) Factory MAC Address
= 94:b5:55:80:00:d0 (OK) R/W
WAFER_VERSION (BLOCK2) WAFER version = (revision 0) R/W (0b000)
PKG_VERSION (BLOCK2) Package version = ESP32-C2 R/W (0b000)
BLOCK2_VERSION (BLOCK2) Version of BLOCK2 = No calibration R/W (0b000)
Jtag Config fuses:
DIS_PAD_JTAG (BLOCK0) Permanently disable JTAG access via padsUSB JTAG i = False R/W (0b0)
s controlled separately
Ldo fuses:
LDO_VOL_BIAS_CONFIG_LOW (BLOCK2) = 0 R/W (0b000)
LDO_VOL_BIAS_CONFIG_HIGH (BLOCK2) = 0 R/W (0b000000000000000000000000000)
Pvt fuses:
PVT_LOW (BLOCK2) = 0 R/W (0b00000)
PVT_HIGH (BLOCK2) = 0 R/W (0b0000000000)
Rf fuses:
RF_REF_I_BIAS_CONFIG (BLOCK2) = 0 R/W (0b000)
Security fuses:
DIS_DOWNLOAD_ICACHE (BLOCK0) Disables iCache in download mode = False R/W (0b0)
DIS_DOWNLOAD_MANUAL_ENCRYPT (BLOCK0) Disables flash encryption in Download boot modes = False R/W (0b0)
SPI_BOOT_CRYPT_CNT (BLOCK0) Enables encryption and decryption, when an SPI boo = Disable R/W (0b000)
t mode is set. Enabled when 1 or 3 bits are set,dis
abled otherwise
XTS_KEY_LENGTH_256 (BLOCK0) Flash encryption key length = 128 bits key R/W (0b0)
DIS_DOWNLOAD_MODE (BLOCK0) Disables all Download boot modes = False R/W (0b0)
ENABLE_SECURITY_DOWNLOAD (BLOCK0) Enables secure UART download mode (read/write flas = False R/W (0b0)
h only)
SECURE_BOOT_EN (BLOCK0) Configures secure boot = Flase R/W (0b0)
BLOCK_KEY0 (BLOCK3) BLOCK_KEY0 - 256-bits. 256-bit key of Flash Encryp
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
tion
BLOCK_KEY0_LOW_128 (BLOCK3) BLOCK_KEY0 - lower 128-bits. 128-bit key of Flash
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
Encryption
BLOCK_KEY0_HI_128 (BLOCK3) BLOCK_KEY0 - higher 128-bits. 128-bits key of Secu
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
re Boot.
Wdt Config fuses:
WDT_DELAY_SEL (BLOCK0) RTC WDT timeout threshold = 0 R/W (0b00)
To get a dump for all eFuse registers.
.. code-block:: none
espefuse.py -p PORT dump
TO BE UPDATED WITH TARGET SPECIFIC INFORMATION, IDF-4223
Connecting..............
Detecting chip type... ESP32-C2
BLOCK0 (BLOCK0 ) [0 ] read_regs: 00000000 00000000
BLOCK1 (BLOCK1 ) [1 ] read_regs: 00000000 00000000 00000000
BLOCK2 (BLOCK2 ) [2 ] read_regs: 558000d0 000094b5 00000000 00000000 00000000 00000000 00000000 00000000
BLOCK_KEY0 (BLOCK3 ) [3 ] read_regs: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
BLOCK0 (BLOCK0 ) [0 ] err__regs: 00000000 00000000
EFUSE_RD_RS_ERR_REG 0x00000000
espefuse.py v4.1
=== Run "dump" command ===

View File

@ -0,0 +1,76 @@
.. code-block:: none
$ ./efuse_table_gen.py {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv --info
Parsing efuse CSV input file $IDF_PATH/components/efuse/esp32c2/esp_efuse_table.csv ...
Verifying efuse table...
Max number of bits in BLK 256
Sorted efuse table:
# field_name efuse_block bit_start bit_count
1 WR_DIS EFUSE_BLK0 0 8
2 WR_DIS.KEY0_RD_DIS EFUSE_BLK0 0 1
3 WR_DIS.GROUP_1 EFUSE_BLK0 1 1
4 WR_DIS.GROUP_2 EFUSE_BLK0 2 1
5 WR_DIS.SPI_BOOT_CRYPT_CNT EFUSE_BLK0 2 1
6 WR_DIS.GROUP_3 EFUSE_BLK0 3 1
7 WR_DIS.BLK0_RESERVED EFUSE_BLK0 4 1
8 WR_DIS.SYS_DATA_PART0 EFUSE_BLK0 5 1
9 WR_DIS.SYS_DATA_PART1 EFUSE_BLK0 6 1
10 WR_DIS.KEY0 EFUSE_BLK0 7 1
11 RD_DIS EFUSE_BLK0 32 2
12 RD_DIS.KEY0 EFUSE_BLK0 32 2
13 RD_DIS.KEY0.LOW EFUSE_BLK0 32 1
14 RD_DIS.KEY0.HI EFUSE_BLK0 33 1
15 WDT_DELAY_SEL EFUSE_BLK0 34 2
16 DIS_PAD_JTAG EFUSE_BLK0 36 1
17 DIS_DOWNLOAD_ICACHE EFUSE_BLK0 37 1
18 DIS_DOWNLOAD_MANUAL_ENCRYPT EFUSE_BLK0 38 1
19 SPI_BOOT_CRYPT_CNT EFUSE_BLK0 39 3
20 XTS_KEY_LENGTH_256 EFUSE_BLK0 42 1
21 UART_PRINT_CONTROL EFUSE_BLK0 43 2
22 FORCE_SEND_RESUME EFUSE_BLK0 45 1
23 DIS_DOWNLOAD_MODE EFUSE_BLK0 46 1
24 DIS_DIRECT_BOOT EFUSE_BLK0 47 1
25 ENABLE_SECURITY_DOWNLOAD EFUSE_BLK0 48 1
26 FLASH_TPUW EFUSE_BLK0 49 4
27 SECURE_BOOT_EN EFUSE_BLK0 53 1
28 SECURE_VERSION EFUSE_BLK0 54 4
29 USER_DATA EFUSE_BLK1 0 88
30 USER_DATA.MAC_CUSTOM EFUSE_BLK1 0 48
31 MAC_FACTORY EFUSE_BLK2 0 8
32 MAC_FACTORY EFUSE_BLK2 8 8
33 MAC_FACTORY EFUSE_BLK2 16 8
34 MAC_FACTORY EFUSE_BLK2 24 8
35 MAC_FACTORY EFUSE_BLK2 32 8
36 MAC_FACTORY EFUSE_BLK2 40 8
37 WAFER_VERSION EFUSE_BLK2 48 3
38 PKG_VERSION EFUSE_BLK2 51 3
39 BLOCK2_VERSION EFUSE_BLK2 54 3
40 RF_REF_I_BIAS_CONFIG EFUSE_BLK2 57 4
41 LDO_VOL_BIAS_CONFIG_LOW EFUSE_BLK2 61 3
42 LDO_VOL_BIAS_CONFIG_HIGH EFUSE_BLK2 64 27
43 PVT_LOW EFUSE_BLK2 91 5
44 PVT_HIGH EFUSE_BLK2 96 10
45 ADC_CALIBRATION_0 EFUSE_BLK2 106 22
46 ADC_CALIBRATION_1 EFUSE_BLK2 128 32
47 ADC_CALIBRATION_2 EFUSE_BLK2 160 32
48 KEY0 EFUSE_BLK3 0 256
49 KEY0.FE_256BIT EFUSE_BLK3 0 256
50 KEY0.FE_128BIT EFUSE_BLK3 0 128
51 KEY0.SB_128BIT EFUSE_BLK3 128 128
Used bits in efuse table:
EFUSE_BLK0
[0 7] [0 2] [2 7] [32 33] [32 33] [32 57]
EFUSE_BLK1
[0 87] [0 47]
EFUSE_BLK2
[0 191]
EFUSE_BLK3
[0 255] [0 255] [0 255]
Note: Not printed ranges are free for using. (bits in EFUSE_BLK0 are reserved for Espressif)

View File

@ -0,0 +1,168 @@
.. code-block:: none
$ ./efuse_table_gen.py {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv --info
Max number of bits in BLK 256
Sorted efuse table:
# field_name efuse_block bit_start bit_count
1 WR_DIS EFUSE_BLK0 0 32
2 WR_DIS.RD_DIS EFUSE_BLK0 0 1
3 WR_DIS.GROUP_1 EFUSE_BLK0 2 1
4 WR_DIS.GROUP_2 EFUSE_BLK0 3 1
5 WR_DIS.SPI_BOOT_CRYPT_CNT EFUSE_BLK0 4 1
6 WR_DIS.SECURE_BOOT_KEY_REVOKE0 EFUSE_BLK0 5 1
7 WR_DIS.SECURE_BOOT_KEY_REVOKE1 EFUSE_BLK0 6 1
8 WR_DIS.SECURE_BOOT_KEY_REVOKE2 EFUSE_BLK0 7 1
9 WR_DIS.KEY0_PURPOSE EFUSE_BLK0 8 1
10 WR_DIS.KEY1_PURPOSE EFUSE_BLK0 9 1
11 WR_DIS.KEY2_PURPOSE EFUSE_BLK0 10 1
12 WR_DIS.KEY3_PURPOSE EFUSE_BLK0 11 1
13 WR_DIS.KEY4_PURPOSE EFUSE_BLK0 12 1
14 WR_DIS.KEY5_PURPOSE EFUSE_BLK0 13 1
15 WR_DIS.SECURE_BOOT_EN EFUSE_BLK0 15 1
16 WR_DIS.SECURE_BOOT_AGGRESSIVE_REVOKE EFUSE_BLK0 16 1
17 WR_DIS.GROUP_3 EFUSE_BLK0 18 1
18 WR_DIS.BLK1 EFUSE_BLK0 20 1
19 WR_DIS.SYS_DATA_PART1 EFUSE_BLK0 21 1
20 WR_DIS.USER_DATA EFUSE_BLK0 22 1
21 WR_DIS.KEY0 EFUSE_BLK0 23 1
22 WR_DIS.KEY1 EFUSE_BLK0 24 1
23 WR_DIS.KEY2 EFUSE_BLK0 25 1
24 WR_DIS.KEY3 EFUSE_BLK0 26 1
25 WR_DIS.KEY4 EFUSE_BLK0 27 1
26 WR_DIS.KEY5 EFUSE_BLK0 28 1
27 WR_DIS.SYS_DATA_PART2 EFUSE_BLK0 29 1
28 RD_DIS EFUSE_BLK0 32 7
29 RD_DIS.KEY0 EFUSE_BLK0 32 1
30 RD_DIS.KEY1 EFUSE_BLK0 33 1
31 RD_DIS.KEY2 EFUSE_BLK0 34 1
32 RD_DIS.KEY3 EFUSE_BLK0 35 1
33 RD_DIS.KEY4 EFUSE_BLK0 36 1
34 RD_DIS.KEY5 EFUSE_BLK0 37 1
35 RD_DIS.SYS_DATA_PART2 EFUSE_BLK0 38 1
36 DIS_ICACHE EFUSE_BLK0 40 1
37 DIS_USB_JTAG EFUSE_BLK0 41 1
38 DIS_DOWNLOAD_ICACHE EFUSE_BLK0 42 1
39 DIS_USB_DEVICE EFUSE_BLK0 43 1
40 DIS_FORCE_DOWNLOAD EFUSE_BLK0 44 1
41 DIS_CAN EFUSE_BLK0 46 1
42 JTAG_SEL_ENABLE EFUSE_BLK0 47 1
43 SOFT_DIS_JTAG EFUSE_BLK0 48 3
44 DIS_PAD_JTAG EFUSE_BLK0 51 1
45 DIS_DOWNLOAD_MANUAL_ENCRYPT EFUSE_BLK0 52 1
46 USB_DREFH EFUSE_BLK0 53 2
47 USB_DREFL EFUSE_BLK0 55 2
48 USB_EXCHG_PINS EFUSE_BLK0 57 1
49 VDD_SPI_AS_GPIO EFUSE_BLK0 58 1
50 BTLC_GPIO_ENABLE EFUSE_BLK0 59 2
51 POWERGLITCH_EN EFUSE_BLK0 61 1
52 POWER_GLITCH_DSENSE EFUSE_BLK0 62 2
53 WDT_DELAY_SEL EFUSE_BLK0 80 2
54 SPI_BOOT_CRYPT_CNT EFUSE_BLK0 82 3
55 SECURE_BOOT_KEY_REVOKE0 EFUSE_BLK0 85 1
56 SECURE_BOOT_KEY_REVOKE1 EFUSE_BLK0 86 1
57 SECURE_BOOT_KEY_REVOKE2 EFUSE_BLK0 87 1
58 KEY_PURPOSE_0 EFUSE_BLK0 88 4
59 KEY_PURPOSE_1 EFUSE_BLK0 92 4
60 KEY_PURPOSE_2 EFUSE_BLK0 96 4
61 KEY_PURPOSE_3 EFUSE_BLK0 100 4
62 KEY_PURPOSE_4 EFUSE_BLK0 104 4
63 KEY_PURPOSE_5 EFUSE_BLK0 108 4
64 SECURE_BOOT_EN EFUSE_BLK0 116 1
65 SECURE_BOOT_AGGRESSIVE_REVOKE EFUSE_BLK0 117 1
66 FLASH_TPUW EFUSE_BLK0 124 4
67 DIS_DOWNLOAD_MODE EFUSE_BLK0 128 1
68 DIS_DIRECT_BOOT EFUSE_BLK0 129 1
69 DIS_USB_SERIAL_JTAG_ROM_PRINT EFUSE_BLK0 130 1
70 DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE EFUSE_BLK0 132 1
71 ENABLE_SECURITY_DOWNLOAD EFUSE_BLK0 133 1
72 UART_PRINT_CONTROL EFUSE_BLK0 134 2
73 FORCE_SEND_RESUME EFUSE_BLK0 141 1
74 SECURE_VERSION EFUSE_BLK0 142 16
75 ERR_RST_ENABLE EFUSE_BLK0 159 1
76 MAC_FACTORY EFUSE_BLK1 0 8
77 MAC_FACTORY EFUSE_BLK1 8 8
78 MAC_FACTORY EFUSE_BLK1 16 8
79 MAC_FACTORY EFUSE_BLK1 24 8
80 MAC_FACTORY EFUSE_BLK1 32 8
81 MAC_FACTORY EFUSE_BLK1 40 8
82 SPI_PAD_CONFIG_CLK EFUSE_BLK1 48 6
83 SPI_PAD_CONFIG_Q_D1 EFUSE_BLK1 54 6
84 SPI_PAD_CONFIG_D_D0 EFUSE_BLK1 60 6
85 SPI_PAD_CONFIG_CS EFUSE_BLK1 66 6
86 SPI_PAD_CONFIG_HD_D3 EFUSE_BLK1 72 6
87 SPI_PAD_CONFIG_WP_D2 EFUSE_BLK1 78 6
88 SPI_PAD_CONFIG_DQS EFUSE_BLK1 84 6
89 SPI_PAD_CONFIG_D4 EFUSE_BLK1 90 6
90 SPI_PAD_CONFIG_D5 EFUSE_BLK1 96 6
91 SPI_PAD_CONFIG_D6 EFUSE_BLK1 102 6
92 SPI_PAD_CONFIG_D7 EFUSE_BLK1 108 6
93 WAFER_VERSION EFUSE_BLK1 114 3
94 PKG_VERSION EFUSE_BLK1 117 3
95 BLOCK1_VERSION EFUSE_BLK1 120 3
96 K_RTC_LDO EFUSE_BLK1 135 7
97 K_DIG_LDO EFUSE_BLK1 142 7
98 V_RTC_DBIAS20 EFUSE_BLK1 149 8
99 V_DIG_DBIAS20 EFUSE_BLK1 157 8
100 DIG_DBIAS_HVT EFUSE_BLK1 165 5
101 THRES_HVT EFUSE_BLK1 170 10
102 SYS_DATA_PART2 EFUSE_BLK10 0 256
103 OPTIONAL_UNIQUE_ID EFUSE_BLK2 0 128
104 BLOCK2_VERSION EFUSE_BLK2 128 3
105 TEMP_CALIB EFUSE_BLK2 131 9
106 OCODE EFUSE_BLK2 140 8
107 ADC1_INIT_CODE_ATTEN0 EFUSE_BLK2 148 10
108 ADC1_INIT_CODE_ATTEN1 EFUSE_BLK2 158 10
109 ADC1_INIT_CODE_ATTEN2 EFUSE_BLK2 168 10
110 ADC1_INIT_CODE_ATTEN3 EFUSE_BLK2 178 10
111 ADC1_CAL_VOL_ATTEN0 EFUSE_BLK2 188 10
112 ADC1_CAL_VOL_ATTEN1 EFUSE_BLK2 198 10
113 ADC1_CAL_VOL_ATTEN2 EFUSE_BLK2 208 10
114 ADC1_CAL_VOL_ATTEN3 EFUSE_BLK2 218 10
115 USER_DATA EFUSE_BLK3 0 256
116 USER_DATA.MAC_CUSTOM EFUSE_BLK3 200 48
117 KEY0 EFUSE_BLK4 0 256
118 KEY1 EFUSE_BLK5 0 256
119 KEY2 EFUSE_BLK6 0 256
120 KEY3 EFUSE_BLK7 0 256
121 KEY4 EFUSE_BLK8 0 256
122 KEY5 EFUSE_BLK9 0 256
Used bits in efuse table:
EFUSE_BLK0
[0 31] [0 0] [2 13] [15 16] [18 18] [20 29] [32 38] [32 38] [40 44] [46 63] [80 111] [116 117] [124 130] [132 135] [141 157] [159 159]
EFUSE_BLK1
[0 122] [135 179]
EFUSE_BLK10
[0 255]
EFUSE_BLK2
[0 227]
EFUSE_BLK3
[0 255] [200 247]
EFUSE_BLK4
[0 255]
EFUSE_BLK5
[0 255]
EFUSE_BLK6
[0 255]
EFUSE_BLK7
[0 255]
EFUSE_BLK8
[0 255]
EFUSE_BLK9
[0 255]
Note: Not printed ranges are free for using. (bits in EFUSE_BLK0 are reserved for Espressif)
Parsing efuse CSV input file $IDF_PATH/components/efuse/esp32c3/esp_efuse_table.csv ...
Verifying efuse table...

View File

@ -0,0 +1,158 @@
.. code-block:: none
$ ./efuse_table_gen.py {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv --info
Parsing efuse CSV input file $IDF_PATH/components/efuse/esp32s2/esp_efuse_table.csv ...
Verifying efuse table...
Max number of bits in BLK 256
Sorted efuse table:
# field_name efuse_block bit_start bit_count
1 WR_DIS EFUSE_BLK0 0 32
2 WR_DIS.RD_DIS EFUSE_BLK0 0 1
3 WR_DIS.DIS_RTC_RAM_BOOT EFUSE_BLK0 1 1
4 WR_DIS.GROUP_1 EFUSE_BLK0 2 1
5 WR_DIS.GROUP_2 EFUSE_BLK0 3 1
6 WR_DIS.SPI_BOOT_CRYPT_CNT EFUSE_BLK0 4 1
7 WR_DIS.SECURE_BOOT_KEY_REVOKE0 EFUSE_BLK0 5 1
8 WR_DIS.SECURE_BOOT_KEY_REVOKE1 EFUSE_BLK0 6 1
9 WR_DIS.SECURE_BOOT_KEY_REVOKE2 EFUSE_BLK0 7 1
10 WR_DIS.KEY0_PURPOSE EFUSE_BLK0 8 1
11 WR_DIS.KEY1_PURPOSE EFUSE_BLK0 9 1
12 WR_DIS.KEY2_PURPOSE EFUSE_BLK0 10 1
13 WR_DIS.KEY3_PURPOSE EFUSE_BLK0 11 1
14 WR_DIS.KEY4_PURPOSE EFUSE_BLK0 12 1
15 WR_DIS.KEY5_PURPOSE EFUSE_BLK0 13 1
16 WR_DIS.SECURE_BOOT_EN EFUSE_BLK0 15 1
17 WR_DIS.SECURE_BOOT_AGGRESSIVE_REVOKE EFUSE_BLK0 16 1
18 WR_DIS.GROUP_3 EFUSE_BLK0 18 1
19 WR_DIS.BLK1 EFUSE_BLK0 20 1
20 WR_DIS.SYS_DATA_PART1 EFUSE_BLK0 21 1
21 WR_DIS.USER_DATA EFUSE_BLK0 22 1
22 WR_DIS.KEY0 EFUSE_BLK0 23 1
23 WR_DIS.KEY1 EFUSE_BLK0 24 1
24 WR_DIS.KEY2 EFUSE_BLK0 25 1
25 WR_DIS.KEY3 EFUSE_BLK0 26 1
26 WR_DIS.KEY4 EFUSE_BLK0 27 1
27 WR_DIS.KEY5 EFUSE_BLK0 28 1
28 WR_DIS.SYS_DATA_PART2 EFUSE_BLK0 29 1
29 WR_DIS.USB_EXCHG_PINS EFUSE_BLK0 30 1
30 RD_DIS EFUSE_BLK0 32 7
31 RD_DIS.KEY0 EFUSE_BLK0 32 1
32 RD_DIS.KEY1 EFUSE_BLK0 33 1
33 RD_DIS.KEY2 EFUSE_BLK0 34 1
34 RD_DIS.KEY3 EFUSE_BLK0 35 1
35 RD_DIS.KEY4 EFUSE_BLK0 36 1
36 RD_DIS.KEY5 EFUSE_BLK0 37 1
37 RD_DIS.SYS_DATA_PART2 EFUSE_BLK0 38 1
38 DIS_RTC_RAM_BOOT EFUSE_BLK0 39 1
39 DIS_ICACHE EFUSE_BLK0 40 1
40 DIS_DCACHE EFUSE_BLK0 41 1
41 DIS_DOWNLOAD_ICACHE EFUSE_BLK0 42 1
42 DIS_DOWNLOAD_DCACHE EFUSE_BLK0 43 1
43 DIS_FORCE_DOWNLOAD EFUSE_BLK0 44 1
44 DIS_USB EFUSE_BLK0 45 1
45 DIS_CAN EFUSE_BLK0 46 1
46 DIS_BOOT_REMAP EFUSE_BLK0 47 1
47 SOFT_DIS_JTAG EFUSE_BLK0 49 1
48 HARD_DIS_JTAG EFUSE_BLK0 50 1
49 DIS_DOWNLOAD_MANUAL_ENCRYPT EFUSE_BLK0 51 1
50 USB_EXCHG_PINS EFUSE_BLK0 56 1
51 USB_EXT_PHY_ENABLE EFUSE_BLK0 57 1
52 BLOCK0_VERSION EFUSE_BLK0 59 2
53 VDD_SPI_XPD EFUSE_BLK0 68 1
54 VDD_SPI_TIEH EFUSE_BLK0 69 1
55 VDD_SPI_FORCE EFUSE_BLK0 70 1
56 WDT_DELAY_SEL EFUSE_BLK0 80 2
57 SPI_BOOT_CRYPT_CNT EFUSE_BLK0 82 3
58 SECURE_BOOT_KEY_REVOKE0 EFUSE_BLK0 85 1
59 SECURE_BOOT_KEY_REVOKE1 EFUSE_BLK0 86 1
60 SECURE_BOOT_KEY_REVOKE2 EFUSE_BLK0 87 1
61 KEY_PURPOSE_0 EFUSE_BLK0 88 4
62 KEY_PURPOSE_1 EFUSE_BLK0 92 4
63 KEY_PURPOSE_2 EFUSE_BLK0 96 4
64 KEY_PURPOSE_3 EFUSE_BLK0 100 4
65 KEY_PURPOSE_4 EFUSE_BLK0 104 4
66 KEY_PURPOSE_5 EFUSE_BLK0 108 4
67 SECURE_BOOT_EN EFUSE_BLK0 116 1
68 SECURE_BOOT_AGGRESSIVE_REVOKE EFUSE_BLK0 117 1
69 FLASH_TPUW EFUSE_BLK0 124 4
70 DIS_DOWNLOAD_MODE EFUSE_BLK0 128 1
71 DIS_LEGACY_SPI_BOOT EFUSE_BLK0 129 1
72 UART_PRINT_CHANNEL EFUSE_BLK0 130 1
73 DIS_USB_DOWNLOAD_MODE EFUSE_BLK0 132 1
74 ENABLE_SECURITY_DOWNLOAD EFUSE_BLK0 133 1
75 UART_PRINT_CONTROL EFUSE_BLK0 134 2
76 PIN_POWER_SELECTION EFUSE_BLK0 136 1
77 FLASH_TYPE EFUSE_BLK0 137 1
78 FORCE_SEND_RESUME EFUSE_BLK0 138 1
79 SECURE_VERSION EFUSE_BLK0 139 16
80 MAC_FACTORY EFUSE_BLK1 0 8
81 MAC_FACTORY EFUSE_BLK1 8 8
82 MAC_FACTORY EFUSE_BLK1 16 8
83 MAC_FACTORY EFUSE_BLK1 24 8
84 MAC_FACTORY EFUSE_BLK1 32 8
85 MAC_FACTORY EFUSE_BLK1 40 8
86 SPI_PAD_CONFIG_CLK EFUSE_BLK1 48 6
87 SPI_PAD_CONFIG_Q_D1 EFUSE_BLK1 54 6
88 SPI_PAD_CONFIG_D_D0 EFUSE_BLK1 60 6
89 SPI_PAD_CONFIG_CS EFUSE_BLK1 66 6
90 SPI_PAD_CONFIG_HD_D3 EFUSE_BLK1 72 6
91 SPI_PAD_CONFIG_WP_D2 EFUSE_BLK1 78 6
92 SPI_PAD_CONFIG_DQS EFUSE_BLK1 84 6
93 SPI_PAD_CONFIG_D4 EFUSE_BLK1 90 6
94 SPI_PAD_CONFIG_D5 EFUSE_BLK1 96 6
95 SPI_PAD_CONFIG_D6 EFUSE_BLK1 102 6
96 SPI_PAD_CONFIG_D7 EFUSE_BLK1 108 6
97 WAFER_VERSION EFUSE_BLK1 114 3
98 FLASH_VERSION EFUSE_BLK1 117 4
99 BLOCK1_VERSION EFUSE_BLK1 121 3
100 PSRAM_VERSION EFUSE_BLK1 124 4
101 PKG_VERSION EFUSE_BLK1 128 4
102 SYS_DATA_PART2 EFUSE_BLK10 0 256
103 OPTIONAL_UNIQUE_ID EFUSE_BLK2 0 128
104 BLOCK2_VERSION EFUSE_BLK2 132 3
105 USER_DATA EFUSE_BLK3 0 256
106 USER_DATA.MAC_CUSTOM EFUSE_BLK3 200 48
107 KEY0 EFUSE_BLK4 0 256
108 KEY1 EFUSE_BLK5 0 256
109 KEY2 EFUSE_BLK6 0 256
110 KEY3 EFUSE_BLK7 0 256
111 KEY4 EFUSE_BLK8 0 256
112 KEY5 EFUSE_BLK9 0 256
Used bits in efuse table:
EFUSE_BLK0
[0 31] [0 13] [15 16] [18 18] [20 30] [32 38] [32 47] [49 51] [56 57] [59 60] [68 70] [80 111] [116 117] [124 130] [132 154]
EFUSE_BLK1
[0 131]
EFUSE_BLK10
[0 255]
EFUSE_BLK2
[0 127] [132 134]
EFUSE_BLK3
[0 255] [200 247]
EFUSE_BLK4
[0 255]
EFUSE_BLK5
[0 255]
EFUSE_BLK6
[0 255]
EFUSE_BLK7
[0 255]
EFUSE_BLK8
[0 255]
EFUSE_BLK9
[0 255]
Note: Not printed ranges are free for using. (bits in EFUSE_BLK0 are reserved for Espressif)

View File

@ -0,0 +1,180 @@
.. code-block:: none
$ ./efuse_table_gen.py {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv --info
Max number of bits in BLK 256
Sorted efuse table:
# field_name efuse_block bit_start bit_count
1 WR_DIS EFUSE_BLK0 0 32
2 WR_DIS.RD_DIS EFUSE_BLK0 0 1
3 WR_DIS.GROUP_1 EFUSE_BLK0 2 1
4 WR_DIS.GROUP_2 EFUSE_BLK0 3 1
5 WR_DIS.SPI_BOOT_CRYPT_CNT EFUSE_BLK0 4 1
6 WR_DIS.SECURE_BOOT_KEY_REVOKE0 EFUSE_BLK0 5 1
7 WR_DIS.SECURE_BOOT_KEY_REVOKE1 EFUSE_BLK0 6 1
8 WR_DIS.SECURE_BOOT_KEY_REVOKE2 EFUSE_BLK0 7 1
9 WR_DIS.KEY0_PURPOSE EFUSE_BLK0 8 1
10 WR_DIS.KEY1_PURPOSE EFUSE_BLK0 9 1
11 WR_DIS.KEY2_PURPOSE EFUSE_BLK0 10 1
12 WR_DIS.KEY3_PURPOSE EFUSE_BLK0 11 1
13 WR_DIS.KEY4_PURPOSE EFUSE_BLK0 12 1
14 WR_DIS.KEY5_PURPOSE EFUSE_BLK0 13 1
15 WR_DIS.SECURE_BOOT_EN EFUSE_BLK0 15 1
16 WR_DIS.SECURE_BOOT_AGGRESSIVE_REVOKE EFUSE_BLK0 16 1
17 WR_DIS.GROUP_3 EFUSE_BLK0 18 1
18 WR_DIS.BLK1 EFUSE_BLK0 20 1
19 WR_DIS.SYS_DATA_PART1 EFUSE_BLK0 21 1
20 WR_DIS.USER_DATA EFUSE_BLK0 22 1
21 WR_DIS.KEY0 EFUSE_BLK0 23 1
22 WR_DIS.KEY1 EFUSE_BLK0 24 1
23 WR_DIS.KEY2 EFUSE_BLK0 25 1
24 WR_DIS.KEY3 EFUSE_BLK0 26 1
25 WR_DIS.KEY4 EFUSE_BLK0 27 1
26 WR_DIS.KEY5 EFUSE_BLK0 28 1
27 WR_DIS.SYS_DATA_PART2 EFUSE_BLK0 29 1
28 WR_DIS.USB_EXCHG_PINS EFUSE_BLK0 30 1
29 RD_DIS EFUSE_BLK0 32 7
30 RD_DIS.KEY0 EFUSE_BLK0 32 1
31 RD_DIS.KEY1 EFUSE_BLK0 33 1
32 RD_DIS.KEY2 EFUSE_BLK0 34 1
33 RD_DIS.KEY3 EFUSE_BLK0 35 1
34 RD_DIS.KEY4 EFUSE_BLK0 36 1
35 RD_DIS.KEY5 EFUSE_BLK0 37 1
36 RD_DIS.SYS_DATA_PART2 EFUSE_BLK0 38 1
37 DIS_ICACHE EFUSE_BLK0 40 1
38 DIS_DCACHE EFUSE_BLK0 41 1
39 DIS_DOWNLOAD_ICACHE EFUSE_BLK0 42 1
40 DIS_DOWNLOAD_DCACHE EFUSE_BLK0 43 1
41 DIS_FORCE_DOWNLOAD EFUSE_BLK0 44 1
42 DIS_USB EFUSE_BLK0 45 1
43 DIS_CAN EFUSE_BLK0 46 1
44 DIS_APP_CPU EFUSE_BLK0 47 1
45 SOFT_DIS_JTAG EFUSE_BLK0 48 3
46 HARD_DIS_JTAG EFUSE_BLK0 51 1
47 DIS_DOWNLOAD_MANUAL_ENCRYPT EFUSE_BLK0 52 1
48 USB_EXCHG_PINS EFUSE_BLK0 57 1
49 USB_EXT_PHY_ENABLE EFUSE_BLK0 58 1
50 BTLC_GPIO_ENABLE EFUSE_BLK0 59 2
51 VDD_SPI_XPD EFUSE_BLK0 68 1
52 VDD_SPI_TIEH EFUSE_BLK0 69 1
53 VDD_SPI_FORCE EFUSE_BLK0 70 1
54 WDT_DELAY_SEL EFUSE_BLK0 80 2
55 SPI_BOOT_CRYPT_CNT EFUSE_BLK0 82 3
56 SECURE_BOOT_KEY_REVOKE0 EFUSE_BLK0 85 1
57 SECURE_BOOT_KEY_REVOKE1 EFUSE_BLK0 86 1
58 SECURE_BOOT_KEY_REVOKE2 EFUSE_BLK0 87 1
59 KEY_PURPOSE_0 EFUSE_BLK0 88 4
60 KEY_PURPOSE_1 EFUSE_BLK0 92 4
61 KEY_PURPOSE_2 EFUSE_BLK0 96 4
62 KEY_PURPOSE_3 EFUSE_BLK0 100 4
63 KEY_PURPOSE_4 EFUSE_BLK0 104 4
64 KEY_PURPOSE_5 EFUSE_BLK0 108 4
65 SECURE_BOOT_EN EFUSE_BLK0 116 1
66 SECURE_BOOT_AGGRESSIVE_REVOKE EFUSE_BLK0 117 1
67 DIS_USB_JTAG EFUSE_BLK0 118 1
68 DIS_USB_SERIAL_JTAG EFUSE_BLK0 119 1
69 STRAP_JTAG_SEL EFUSE_BLK0 120 1
70 USB_PHY_SEL EFUSE_BLK0 121 1
71 FLASH_TPUW EFUSE_BLK0 124 4
72 DIS_DOWNLOAD_MODE EFUSE_BLK0 128 1
73 DIS_DIRECT_BOOT EFUSE_BLK0 129 1
74 DIS_USB_SERIAL_JTAG_ROM_PRINT EFUSE_BLK0 130 1
75 FLASH_ECC_MODE EFUSE_BLK0 131 1
76 DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE EFUSE_BLK0 132 1
77 ENABLE_SECURITY_DOWNLOAD EFUSE_BLK0 133 1
78 UART_PRINT_CONTROL EFUSE_BLK0 134 2
79 PIN_POWER_SELECTION EFUSE_BLK0 136 1
80 FLASH_TYPE EFUSE_BLK0 137 1
81 FLASH_PAGE_SIZE EFUSE_BLK0 138 2
82 FLASH_ECC_EN EFUSE_BLK0 140 1
83 FORCE_SEND_RESUME EFUSE_BLK0 141 1
84 SECURE_VERSION EFUSE_BLK0 142 16
85 DIS_USB_OTG_DOWNLOAD_MODE EFUSE_BLK0 159 1
86 MAC_FACTORY EFUSE_BLK1 0 8
87 MAC_FACTORY EFUSE_BLK1 8 8
88 MAC_FACTORY EFUSE_BLK1 16 8
89 MAC_FACTORY EFUSE_BLK1 24 8
90 MAC_FACTORY EFUSE_BLK1 32 8
91 MAC_FACTORY EFUSE_BLK1 40 8
92 SPI_PAD_CONFIG_CLK EFUSE_BLK1 48 6
93 SPI_PAD_CONFIG_Q_D1 EFUSE_BLK1 54 6
94 SPI_PAD_CONFIG_D_D0 EFUSE_BLK1 60 6
95 SPI_PAD_CONFIG_CS EFUSE_BLK1 66 6
96 SPI_PAD_CONFIG_HD_D3 EFUSE_BLK1 72 6
97 SPI_PAD_CONFIG_WP_D2 EFUSE_BLK1 78 6
98 SPI_PAD_CONFIG_DQS EFUSE_BLK1 84 6
99 SPI_PAD_CONFIG_D4 EFUSE_BLK1 90 6
100 SPI_PAD_CONFIG_D5 EFUSE_BLK1 96 6
101 SPI_PAD_CONFIG_D6 EFUSE_BLK1 102 6
102 SPI_PAD_CONFIG_D7 EFUSE_BLK1 108 6
103 WAFER_VERSION EFUSE_BLK1 114 3
104 PKG_VERSION EFUSE_BLK1 117 3
105 BLK_VER_MINOR EFUSE_BLK1 120 3
106 ADC2_CAL_VOL_ATTEN3 EFUSE_BLK1 186 6
107 SYS_DATA_PART2 EFUSE_BLK10 0 256
108 OPTIONAL_UNIQUE_ID EFUSE_BLK2 0 128
109 BLK_VER_MAJOR EFUSE_BLK2 128 2
110 TEMP_CALIB EFUSE_BLK2 132 9
111 OCODE EFUSE_BLK2 141 8
112 ADC1_INIT_CODE_ATTEN0 EFUSE_BLK2 149 8
113 ADC1_INIT_CODE_ATTEN1 EFUSE_BLK2 157 6
114 ADC1_INIT_CODE_ATTEN2 EFUSE_BLK2 163 6
115 ADC1_INIT_CODE_ATTEN3 EFUSE_BLK2 169 6
116 ADC2_INIT_CODE_ATTEN0 EFUSE_BLK2 175 8
117 ADC2_INIT_CODE_ATTEN1 EFUSE_BLK2 183 6
118 ADC2_INIT_CODE_ATTEN2 EFUSE_BLK2 189 6
119 ADC2_INIT_CODE_ATTEN3 EFUSE_BLK2 195 6
120 ADC1_CAL_VOL_ATTEN0 EFUSE_BLK2 201 8
121 ADC1_CAL_VOL_ATTEN1 EFUSE_BLK2 209 8
122 ADC1_CAL_VOL_ATTEN2 EFUSE_BLK2 217 8
123 ADC1_CAL_VOL_ATTEN3 EFUSE_BLK2 225 8
124 ADC2_CAL_VOL_ATTEN0 EFUSE_BLK2 233 8
125 ADC2_CAL_VOL_ATTEN1 EFUSE_BLK2 241 7
126 ADC2_CAL_VOL_ATTEN2 EFUSE_BLK2 248 7
127 USER_DATA EFUSE_BLK3 0 256
128 USER_DATA.MAC_CUSTOM EFUSE_BLK3 200 48
129 KEY0 EFUSE_BLK4 0 256
130 KEY1 EFUSE_BLK5 0 256
131 KEY2 EFUSE_BLK6 0 256
132 KEY3 EFUSE_BLK7 0 256
133 KEY4 EFUSE_BLK8 0 256
134 KEY5 EFUSE_BLK9 0 256
Used bits in efuse table:
EFUSE_BLK0
[0 31] [0 0] [2 13] [15 16] [18 18] [20 30] [32 38] [32 38] [40 52] [57 60] [68 70] [80 111] [116 121] [124 157] [159 159]
EFUSE_BLK1
[0 122] [186 191]
EFUSE_BLK10
[0 255]
EFUSE_BLK2
[0 129] [132 254]
EFUSE_BLK3
[0 255] [200 247]
EFUSE_BLK4
[0 255]
EFUSE_BLK5
[0 255]
EFUSE_BLK6
[0 255]
EFUSE_BLK7
[0 255]
EFUSE_BLK8
[0 255]
EFUSE_BLK9
[0 255]
Note: Not printed ranges are free for using. (bits in EFUSE_BLK0 are reserved for Espressif)
Parsing efuse CSV input file $IDF_PATH/components/efuse/esp32s3/esp_efuse_table.csv ...
Verifying efuse table...

View File

@ -0,0 +1,72 @@
.. code-block:: none
$ ./efuse_table_gen.py {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv --info
Parsing efuse CSV input file $IDF_PATH/components/efuse/esp32/esp_efuse_table.csv ...
Verifying efuse table...
Max number of bits in BLK 192
Sorted efuse table:
# field_name efuse_block bit_start bit_count
1 WR_DIS_EFUSE_RD_DISABLE EFUSE_BLK0 0 1
2 WR_DIS_FLASH_CRYPT_CNT EFUSE_BLK0 2 1
3 WR_DIS_BLK1 EFUSE_BLK0 7 1
4 WR_DIS_BLK2 EFUSE_BLK0 8 1
5 WR_DIS_BLK3 EFUSE_BLK0 9 1
6 RD_DIS_BLK1 EFUSE_BLK0 16 1
7 RD_DIS_BLK2 EFUSE_BLK0 17 1
8 RD_DIS_BLK3 EFUSE_BLK0 18 1
9 FLASH_CRYPT_CNT EFUSE_BLK0 20 7
10 UART_DOWNLOAD_DIS EFUSE_BLK0 27 1
11 MAC_FACTORY EFUSE_BLK0 32 8
12 MAC_FACTORY EFUSE_BLK0 40 8
13 MAC_FACTORY EFUSE_BLK0 48 8
14 MAC_FACTORY EFUSE_BLK0 56 8
15 MAC_FACTORY EFUSE_BLK0 64 8
16 MAC_FACTORY EFUSE_BLK0 72 8
17 MAC_FACTORY_CRC EFUSE_BLK0 80 8
18 CHIP_VER_DIS_APP_CPU EFUSE_BLK0 96 1
19 CHIP_VER_DIS_BT EFUSE_BLK0 97 1
20 CHIP_VER_PKG EFUSE_BLK0 98 1
21 CHIP_VER_PKG EFUSE_BLK0 105 3
22 CHIP_CPU_FREQ_LOW EFUSE_BLK0 108 1
23 CHIP_CPU_FREQ_RATED EFUSE_BLK0 109 1
24 CHIP_VER_REV1 EFUSE_BLK0 111 1
25 ADC_VREF_AND_SDIO_DREF EFUSE_BLK0 136 6
26 XPD_SDIO_REG EFUSE_BLK0 142 1
27 SDIO_TIEH EFUSE_BLK0 143 1
28 SDIO_FORCE EFUSE_BLK0 144 1
29 CHIP_VER_REV2 EFUSE_BLK0 180 1
30 ENCRYPT_CONFIG EFUSE_BLK0 188 4
31 CONSOLE_DEBUG_DISABLE EFUSE_BLK0 194 1
32 ABS_DONE_0 EFUSE_BLK0 196 1
33 ABS_DONE_1 EFUSE_BLK0 197 1
34 DISABLE_JTAG EFUSE_BLK0 198 1
35 DISABLE_DL_ENCRYPT EFUSE_BLK0 199 1
36 DISABLE_DL_DECRYPT EFUSE_BLK0 200 1
37 DISABLE_DL_CACHE EFUSE_BLK0 201 1
38 ENCRYPT_FLASH_KEY EFUSE_BLK1 0 192
39 SECURE_BOOT_KEY EFUSE_BLK2 0 192
40 MAC_CUSTOM_CRC EFUSE_BLK3 0 8
41 MAC_CUSTOM EFUSE_BLK3 8 48
42 ADC1_TP_LOW EFUSE_BLK3 96 7
43 ADC1_TP_HIGH EFUSE_BLK3 103 9
44 ADC2_TP_LOW EFUSE_BLK3 112 7
45 ADC2_TP_HIGH EFUSE_BLK3 119 9
46 SECURE_VERSION EFUSE_BLK3 128 32
47 MAC_CUSTOM_VER EFUSE_BLK3 184 8
Used bits in efuse table:
EFUSE_BLK0
[0 0] [2 2] [7 9] [16 18] [20 27] [32 87] [96 98] [105 109] [111 111] [136 144] [180 180] [188 191] [194 194] [196 201]
EFUSE_BLK1
[0 191]
EFUSE_BLK2
[0 191]
EFUSE_BLK3
[0 55] [96 159] [184 191]
Note: Not printed ranges are free for using. (bits in EFUSE_BLK0 are reserved for Espressif)

View File

@ -1,10 +1,2 @@
.. code-block:: none
TO BE UPDATED WITH TARGET SPECIFIC INFORMATION, IDF-4223
To get a dump for all eFuse registers.
.. code-block:: none
TO BE UPDATED WITH TARGET SPECIFIC INFORMATION, IDF-4223
.. include:: ../../../en/api-reference/system/inc/espefuse_summary_ESP32-C2.rst

View File

@ -0,0 +1 @@
.. include:: ../../../en/api-reference/system/inc/show-efuse-table_ESP32-C2.rst

View File

@ -0,0 +1 @@
.. include:: ../../../en/api-reference/system/inc/show-efuse-table_ESP32-C3.rst

View File

@ -0,0 +1 @@
.. include:: ../../../en/api-reference/system/inc/show-efuse-table_ESP32-S2.rst

View File

@ -0,0 +1 @@
.. include:: ../../../en/api-reference/system/inc/show-efuse-table_ESP32-S3.rst

View File

@ -0,0 +1 @@
.. include:: ../../../en/api-reference/system/inc/show-efuse-table_ESP32.rst