Set Flash Voltage

The espefuse.py set_flash_voltage command permanently sets the internal flash voltage regulator to either 1.8V, 3.3V or OFF. This means a GPIO can be high or low at reset without changing the flash voltage.

Positional arguments:

  • voltage - Voltage selection [‘1.8V’, ‘3.3V’, ‘OFF’].

Setting Flash Voltage (VDD_SPI)

After reset, the default ESP32-S2 behaviour is to enable and configure the flash voltage regulator (VDD_SPI) based on the level of the MTDI pin (GPIO45).

The default behaviour on reset is:

MTDI

Internal Regulator

Low or unconnected

Enabled at 3.3V

High

Enabled at 1.8V

Consult ESP32-S2 Technical Reference Manual for details.

A combination of 3 efuses (VDD_SPI_FORCE, VDD_SPI_XPD, VDD_SPI_TIEH) can be burned in order to override this behaviour and disable VDD_SPI regulator, or set it to a fixed voltage. These efuses can be burned with individual burn_efuse commands, but the set_flash_voltage command makes it easier:

Disable VDD_SPI Regulator

espefuse.py set_flash_voltage OFF

Once set:

  • VDD_SPI regulator always disabled.

  • MTDI pin (GPIO45) is ignored.

  • Flash must be powered externally and voltage supplied to VDD_SPI pin of ESP32-S2.

  • Efuse VDD_SPI_FORCE is burned.

Fixed 1.8V VDD_SPI

espefuse.py set_flash_voltage 1.8V

Once set:

  • VDD_SPI regulator always enables at 1.8V.

  • MTDI pin (GPIO45) is ignored.

  • External voltage should not be supplied to VDD_SPI.

  • Efuses VDD_SPI_FORCE and VDD_SPI_XPD are burned.

Fixed 3.3V VDD_SPI

espefuse.py set_flash_voltage 3.3V

Once set:

  • VDD_SPI regulator always enables at 3.3V.

  • MTDI pin (GPIO45) is ignored.

  • External voltage should not be supplied to VDD_SPI.

  • Efuses VDD_SPI_FORCE, VDD_SPI_XPD, VDD_SPI_TIEH are burned.

Subsequent Changes

Once an efuse is burned it cannot be un-burned. However, changes can be made by burning additional efuses:

  • set_flash_voltage OFF can be changed to 1.8V or 3.3V

  • set_flash_voltage 1.8V can be changed to 3.3V

> espefuse.py set_flash_voltage 1.8V

=== Run "set_flash_voltage" command ===
Set internal flash voltage regulator (VDD_SPI) to 1.8V.

VDD_SPI setting complete.

Check all blocks for burn...
idx, BLOCK_NAME,          Conclusion
[00] BLOCK0               is empty, will burn the new value
.
This is an irreversible operation!
Type 'BURN' (all capitals) to continue.
BURN
BURN BLOCK0  - OK (write block == read block)
Reading updated efuses...
Successful
> espefuse.py set_flash_voltage 3.3V

=== Run "set_flash_voltage" command ===
Enable internal flash voltage regulator (VDD_SPI) to 3.3V.

VDD_SPI setting complete.

Check all blocks for burn...
idx, BLOCK_NAME,          Conclusion
[00] BLOCK0               is empty, will burn the new value
.
This is an irreversible operation!
Type 'BURN' (all capitals) to continue.
BURN
BURN BLOCK0  - OK (write block == read block)
Reading updated efuses...
Successful
> espefuse.py set_flash_voltage OFF

=== Run "set_flash_voltage" command ===
Disable internal flash voltage regulator (VDD_SPI). SPI flash will
VDD_SPI setting complete.

Check all blocks for burn...
idx, BLOCK_NAME,          Conclusion
[00] BLOCK0               is empty, will burn the new value
.
This is an irreversible operation!
Type 'BURN' (all capitals) to continue.
BURN
BURN BLOCK0  - OK (write block == read block)
Reading updated efuses...
Successful