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
andVDD_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 to1.8V
or3.3V
set_flash_voltage 1.8V
can be changed to3.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