Summary

The espefuse.py summary command reads the eFuses from the chip and outputs them in text or json format. It is also possible to save it to a file. The command also supports eFuse filtering by name.

Optional arguments:

  • --format - Select the summary format:
    • summary - text format (default option).

    • json - json format. Usage --format json.

    • value_only - only the value of the eFuse specified as an argument will be displayed. For more information, refer to the Filtering eFuses section.

  • --file - File to save the efuse summary. Usage --file efuses.json.

  • List of eFuses to filter. For more information, refer to the Filtering eFuses section.

Text Format Summary

The text format of summary consists of 3 main columns:

  1. This column consists of the eFuse name and additional information: the block name associated with this eFuse field and encoding errors (if any).

  2. Description of eFuse field.

  3. This column has human readable value, read/write protection status, raw value (hexadecimal or binary).

Read and Write Protection Status

The R/W output indicates a protection status of a specific eFuse field/block:

  • -/W indicates that read protection is set. Value of such eFuse field will always show all-zeroes, even though hardware may use the correct value. In espefuse v2.6 and newer, read-protected eFuse values are displayed as question marks (??). On earlier versions, they are displayed as zeroes.

    BLOCK1 (BLOCK1):
    = ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? -/W
    
  • R/- indicates that write protection is set. No further bits can be set.

  • -/- means both read and write protection are set.

Some eFuses have no protection at all, and some eFuses have only one read or write protection. There is no mark in the summary to expose it.

Display Efuse Summary

The eFuse summary may vary from version to version of this tool and differ for different chips. Below is the summary for the ESP32-C5 chip.

For details on the meaning of each eFuse value, refer to the Technical Reference Manual.

> espefuse.py -p PORT summary

Connecting....
Detecting chip type... ESP32-C5

=== Run "summary" command ===
EFUSE_NAME (Block) Description  = [Meaningful Value] [Readable/Writeable] (Hex Value)
----------------------------------------------------------------------------------------
Config fuses:
WR_DIS (BLOCK0)                                    Disable programming of individual eFuses           = 4608 R/W (0x00001200)
RD_DIS (BLOCK0)                                    Disable reading from BlOCK4-10                     = 0 R/W (0b0000000)
DIS_ICACHE (BLOCK0)                                Represents whether icache is disabled or enabled.\ = False R/W (0b0)
                                                \ 1: disabled\\ 0: enabled\\
DIS_TWAI (BLOCK0)                                  Represents whether TWAI function is disabled or en = False R/W (0b0)
                                                abled.\\ 1: disabled\\ 0: enabled\\
KM_DISABLE_DEPLOY_MODE (BLOCK0)                    Represents whether the deploy mode of key manager  = 0 R/W (0x0)
                                                is disable or not. \\ 1: disabled \\ 0: enabled.\\
KM_RND_SWITCH_CYCLE (BLOCK0)                       Set the bits to control key manager random number  = 0 R/W (0b00)
                                                switch cycle. 0: control by register. 1: 8 km clk
                                                cycles. 2: 16 km cycles. 3: 32 km cycles
KM_DEPLOY_ONLY_ONCE (BLOCK0)                       Set each bit to control whether corresponding key  = 0 R/W (0x0)
                                                can only be deployed once. 1 is true; 0 is false.
                                                bit 0: ecsda; bit 1: xts; bit2: hmac; bit3: ds
DIS_DIRECT_BOOT (BLOCK0)                           Represents whether direct boot mode is disabled or = False R/W (0b0)
                                                    enabled.\\ 1: disabled\\ 0: enabled\\
UART_PRINT_CONTROL (BLOCK0)                        Set the default UARTboot message output mode       = Enable R/W (0b00)
HYS_EN_PAD (BLOCK0)                                Represents whether the hysteresis function of corr = False R/W (0b0)
                                                esponding PAD is enabled.\\ 1: enabled\\ 0:disable
                                                d\\
HUK_GEN_STATE (BLOCK0)                             Set the bits to control validation of HUK generate = 0 R/W (0b000000000)
                                                    mode.\\ Odd of 1 is invalid.\\ Even of 1 is valid
                                                .\\
XTAL_48M_SEL (BLOCK0)                              Represents whether XTAL frequency is 48MHz or not. = 1 R/W (0b001)
                                                    If not; 40MHz XTAL will be used. If this field co
                                                ntains Odd number bit 1: Enable 48MHz XTAL\ Even n
                                                umber bit 1: Enable 40MHz XTAL
XTAL_48M_SEL_MODE (BLOCK0)                         Specify the XTAL frequency selection is decided by = True R/W (0b1)
                                                    eFuse or strapping-PAD-state. 1: eFuse\\ 0: strap
                                                ping-PAD-state
ECC_FORCE_CONST_TIME (BLOCK0)                      Represents whether to force ecc to use const-time  = False R/W (0b0)
                                                calculation mode. \\ 1: Enable. \\ 0: Disable
PSRAM_CAP (BLOCK1)                                 Psram capacity                                     = 0 R/W (0b000)
PSRAM_VENDOR (BLOCK1)                              Psram vendor                                       = 0 R/W (0b00)
TEMP (BLOCK1)                                      Temp (die embedded inside)                         = 0 R/W (0b00)
TRIM_N_BIAS (BLOCK1)                               PADC CAL N bias                                    = 0 R/W (0b00000)
TRIM_P_BIAS (BLOCK1)                               PADC CAL P bias                                    = 0 R/W (0b00000)
BLOCK_USR_DATA (BLOCK3)                            User data
= 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
BLOCK_SYS_DATA2 (BLOCK10)                          System data part 2 (reserved)
= 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

Flash fuses:
FLASH_TPUW (BLOCK0)                                Represents the flash waiting time after power-up;  = 0 R/W (0x0)
                                                in unit of ms. When the value less than 15; the wa
                                                iting time is the programmed value. Otherwise; the
                                                    waiting time is 2 times the programmed value
FORCE_SEND_RESUME (BLOCK0)                         Represents whether ROM code is forced to send a re = False R/W (0b0)
                                                sume command during SPI boot.\\ 1: forced\\ 0:not
                                                forced\\
FLASH_CAP (BLOCK1)                                 Flash capacity                                     = 0 R/W (0b000)
FLASH_VENDOR (BLOCK1)                              Flash vendor                                       = 0 R/W (0b000)

Identity fuses:
WAFER_VERSION_MINOR (BLOCK1)                       Minor chip version                                 = 0 R/W (0x0)
WAFER_VERSION_MAJOR (BLOCK1)                       Minor chip version                                 = 0 R/W (0b00)
DISABLE_WAFER_VERSION_MAJOR (BLOCK1)               Disables check of wafer version major              = False R/W (0b0)
DISABLE_BLK_VERSION_MAJOR (BLOCK1)                 Disables check of blk version major                = False R/W (0b0)
BLK_VERSION_MINOR (BLOCK1)                         BLK_VERSION_MINOR of BLOCK2                        = 0 R/W (0b000)
BLK_VERSION_MAJOR (BLOCK1)                         BLK_VERSION_MAJOR of BLOCK2                        = 0 R/W (0b00)
PKG_VERSION (BLOCK1)                               Package version                                    = 0 R/W (0b000)
PA_TRIM_VERSION (BLOCK1)                           PADC CAL PA trim version                           = 0 R/W (0b000)
OPTIONAL_UNIQUE_ID (BLOCK2)                        Optional unique 128-bit ID
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W

Jtag fuses:
JTAG_SEL_ENABLE (BLOCK0)                           Represents whether the selection between usb_to_jt = False R/W (0b0)
                                                ag and pad_to_jtag through strapping gpio15 when b
                                                oth EFUSE_DIS_PAD_JTAG and EFUSE_DIS_USB_JTAG are
                                                equal to 0 is enabled or disabled.\\ 1: enabled\\
                                                0: disabled\\
SOFT_DIS_JTAG (BLOCK0)                             Represents whether JTAG is disabled in soft way.\\ = 0 R/W (0b000)
                                                    Odd number: disabled\\ Even number: enabled\\
DIS_PAD_JTAG (BLOCK0)                              Represents whether JTAG is disabled in the hard wa = False R/W (0b0)
                                                y(permanently).\\ 1: disabled\\ 0: enabled\\

Mac fuses:
MAC (BLOCK1)                                       MAC address
= 60:55:f9:f9:54:1c (OK) R/W
MAC_EXT (BLOCK1)                                   Represents the extended bits of MAC address        = ff:fe (OK) R/W
CUSTOM_MAC (BLOCK3)                                Custom MAC
= 00:00:00:00:00:00 (OK) R/W
MAC_EUI64 (BLOCK1)                                 calc MAC_EUI64 = MAC[0]:MAC[1]:MAC[2]:MAC_EXT[0]:M
= 60:55:f9:ff:fe:f9:54:1c (OK) R/W
                                                AC_EXT[1]:MAC[3]:MAC[4]:MAC[5]

Security fuses:
DIS_FORCE_DOWNLOAD (BLOCK0)                        Represents whether the function that forces chip i = False R/W (0b0)
                                                nto download mode is disabled or enabled.\\ 1: dis
                                                abled\\ 0: enabled\\
SPI_DOWNLOAD_MSPI_DIS (BLOCK0)                     Represents whether SPI0 controller during boot_mod = False R/W (0b0)
                                                e_download is disabled or enabled.\\ 1: disabled\\
                                                    0: enabled\\
DIS_DOWNLOAD_MANUAL_ENCRYPT (BLOCK0)               Represents whether flash encrypt function is disab = False R/W (0b0)
                                                led or enabled(except in SPI boot mode).\\ 1: disa
                                                bled\\ 0: enabled\\
FORCE_USE_KEY_MANAGER_KEY (BLOCK0)                 Set each bit to control whether corresponding key  = 0 R/W (0x0)
                                                must come from key manager. 1 is true; 0 is false.
                                                    bit 0: ecsda; bit 1: xts; bit2: hmac; bit3: ds
FORCE_DISABLE_SW_INIT_KEY (BLOCK0)                 Set this bit to disable software written init key; = False R/W (0b0)
                                                    and force use efuse_init_key
SPI_BOOT_CRYPT_CNT (BLOCK0)                        Enables flash encryption when 1 or 3 bits are set  = Disable R/W (0b000)
                                                and disables otherwise
SECURE_BOOT_KEY_REVOKE0 (BLOCK0)                   Revoke 1st secure boot key                         = False R/W (0b0)
SECURE_BOOT_KEY_REVOKE1 (BLOCK0)                   Revoke 2nd secure boot key                         = False R/W (0b0)
SECURE_BOOT_KEY_REVOKE2 (BLOCK0)                   Revoke 3rd secure boot key                         = False R/W (0b0)
KEY_PURPOSE_0 (BLOCK0)                             Represents the purpose of Key0                     = USER R/W (0x0)
KEY_PURPOSE_1 (BLOCK0)                             Represents the purpose of Key1                     = USER R/- (0x0)
KEY_PURPOSE_2 (BLOCK0)                             Represents the purpose of Key2                     = USER R/W (0x0)
KEY_PURPOSE_3 (BLOCK0)                             Represents the purpose of Key3                     = USER R/W (0x0)
KEY_PURPOSE_4 (BLOCK0)                             Represents the purpose of Key4                     = USER R/- (0x0)
KEY_PURPOSE_5 (BLOCK0)                             Represents the purpose of Key5                     = USER R/W (0x0)
SEC_DPA_LEVEL (BLOCK0)                             Represents the spa secure level by configuring the = 0 R/W (0b00)
                                                    clock random divide mode
SECURE_BOOT_EN (BLOCK0)                            Represents whether secure boot is enabled or disab = False R/W (0b0)
                                                led.\\ 1: enabled\\ 0: disabled\\
SECURE_BOOT_AGGRESSIVE_REVOKE (BLOCK0)             Represents whether revoking aggressive secure boot = False R/W (0b0)
                                                    is enabled or disabled.\\ 1: enabled.\\ 0: disabl
                                                ed\\
KM_XTS_KEY_LENGTH_256 (BLOCK0)                     Set this bitto configure flash encryption use xts- = False R/W (0b0)
                                                128 key. else use xts-256 key
DIS_DOWNLOAD_MODE (BLOCK0)                         Represents whether Download mode is disabled or en = False R/W (0b0)
                                                abled.\\ 1: disabled\\ 0: enabled\\
LOCK_KM_KEY (BLOCK0)                               Represetns whether to lock the efuse xts key.\\ 1. = False R/W (0b0)
                                                    Lock\\ 0: Unlock\\
ENABLE_SECURITY_DOWNLOAD (BLOCK0)                  Represents whether security download is enabled or = False R/W (0b0)
                                                    disabled.\\ 1: enabled\\ 0: disabled\\
SECURE_VERSION (BLOCK0)                            Represents the version used by ESP-IDF anti-rollba = 0 R/W (0x0000)
                                                ck feature
SECURE_BOOT_DISABLE_FAST_WAKE (BLOCK0)             Represents whether FAST VERIFY ON WAKE is disabled = False R/W (0b0)
                                                    or enabled when Secure Boot is enabled.\\ 1: disa
                                                bled\\ 0: enabled\\
XTS_DPA_PSEUDO_LEVEL (BLOCK0)                      Represents the pseudo round level of xts-aes anti- = 0 R/W (0b00)
                                                dpa attack.\\ 3: High.\\ 2: Moderate 1. Low\\ 0: D
                                                isabled\\
XTS_DPA_CLK_ENABLE (BLOCK0)                        Represents whether xts-aes anti-dpa attack clock i = False R/W (0b0)
                                                s enabled.\\ 1. Enable.\\ 0: Disable.\\
ECDSA_DISABLE_P192 (BLOCK0)                        Represents whether to disable P192 curve in ECDSA. = False R/W (0b0)
                                                \\ 1: Disabled.\\ 0: Not disable
BLOCK_KEY0 (BLOCK4)
Purpose: USER
            Key0 or user data
= 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
BLOCK_KEY1 (BLOCK5)
Purpose: USER
            Key1 or user data
= 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
BLOCK_KEY2 (BLOCK6)
Purpose: USER
            Key2 or user data
= 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
BLOCK_KEY3 (BLOCK7)
Purpose: USER
            Key3 or user data
= 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
BLOCK_KEY4 (BLOCK8)
Purpose: USER
            Key4 or user data
= 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
BLOCK_KEY5 (BLOCK9)
Purpose: USER
            Key5 or user data
= 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

Usb fuses:
DIS_USB_JTAG (BLOCK0)                              Represents whether the function of usb switch to j = False R/W (0b0)
                                                tag is disabled or enabled.\\ 1: disabled\\ 0: ena
                                                bled\\
USB_EXCHG_PINS (BLOCK0)                            Represents whether the D+ and D- pins is exchanged = False R/W (0b0)
                                                .\\ 1: exchanged\\ 0: not exchanged\\
DIS_USB_SERIAL_JTAG_ROM_PRINT (BLOCK0)             Represents whether print from USB-Serial-JTAG is d = False R/W (0b0)
                                                isabled or enabled.\\ 1: disabled\\ 0: enabled\\
DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE (BLOCK0)         Represents whether the USB-Serial-JTAG download fu = False R/W (0b0)
                                                nction is disabled or enabled.\\ 1: Disable\\ 0: E
                                                nable\\

Vdd fuses:
VDD_SPI_AS_GPIO (BLOCK0)                           Represents whether vdd spi pin is functioned as gp = False R/W (0b0)
                                                io.\\ 1: functioned\\ 0: not functioned\\

Wdt fuses:
WDT_DELAY_SEL (BLOCK0)                             Represents the threshold level of the RTC watchdog = 0 R/W (0b00)
                                                    STG0 timeout.\\ 0: Original threshold configurati
                                                on value of STG0 *2 \\1: Original threshold config
                                                uration value of STG0 *4 \\2: Original threshold c
                                                onfiguration value of STG0 *8 \\3: Original thresh
                                                old configuration value of STG0 *16 \\

Json Format Summary

The json representation of eFuses for the ESP32 chip is shown below.

> espefuse.py summary --format json

{
    "ABS_DONE_0": {
        "bit_len": 1,
        "block": 0,
        "category": "security",
        "description": "Secure boot V1 is enabled for bootloader image",
        "efuse_type": "bool",
        "name": "ABS_DONE_0",
        "pos": 4,
        "readable": true,
        "value": false,
        "word": 6,
        "writeable": true
    },
    "BLOCK1": {
        "bit_len": 256,
        "block": 1,
        "category": "security",
        "description": "Flash encryption key",
        "efuse_type": "bytes:32",
        "name": "BLOCK1",
        "pos": 0,
        "readable": true,
        "value": "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",
        "word": 0,
        "writeable": true
    },
...
    "CODING_SCHEME": {
        "bit_len": 2,
        "block": 0,
        "category": "efuse",
        "description": "Efuse variable block length scheme",
        "efuse_type": "uint:2",
        "name": "CODING_SCHEME",
        "pos": 0,
        "readable": true,
        "value": "NONE (BLK1-3 len=256 bits)",
        "word": 6,
        "writeable": true
    },
....
}

Save Json Format Summary To File

> espefuse.py summary --format json --file efuses.json

Connecting..........
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP32

=== Run "summary" command ===
Saving efuse values to efuses.json

Filtering Efuses and Displaying Only the Value

The espefuse.py summary command supports filtering eFuses by name. The eFuses to filter needs to be specified as positional arguments. If no eFuses are specified, complete summary will be displayed. Example:

> espefuse.py summary ABS_DONE_0 BLOCK1

=== Run "summary" command ===
EFUSE_NAME (Block) Description  = [Meaningful Value] [Readable/Writeable] (Hex Value)
----------------------------------------------------------------------------------------
Security fuses:
ABS_DONE_0 (BLOCK0)                                Secure boot V1 is enabled for bootloader image     = False R/W (0b0)
BLOCK1 (BLOCK1)                                    Flash encryption key
= 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

If --format value_only is specified, only the value of the eFuse specified as an argument will be displayed. Only one eFuse can be specified as an argument for this format. Example:

> espefuse.py summary --format value_only MAC

=== Run "summary" command ===
00:00:00:00:00:00 (CRC 0x00 OK)