4 ms·
As an example: By default, on bootup, an ESP32 uses the value of pin IO12 to determine SPI Flash chip voltage. It has an internal pull-down so defaults to low
by brotchie 3y ago
As an example:
By default, on bootup, an ESP32 uses the value of pin IO12 to determine SPI Flash chip voltage. It has an internal pull-down so defaults to low (3.3V flash chip). If held high during bootup, then ESP32 treats Flash Chip voltage as 1.8V.
If you an input (say DIP switches) with pull-ups on IO12 and the dip switch is "off", i.e. disconnecting the ground circuit / pulled-up. Then, at boot, the ESP32 thinks it need to use 1.8V to talk with the flash chip, instantly crashing boot.
The use-case is to signal to the chip (since it's going to be booting off flash) what voltage to use (if you're using a 1.8V logic chip).
Luckily (on the ESP32 at least) there's a bunch of internal fuses you can blow to stop it from sampling certain strapping pins at boot, and hard coding certain settings (in a irreversible way).
$ espefuse.py --do-not-confirm --port /dev/ttyUSBx set_flash_voltage 3.3V
Blows this fuse so you can use IO12 normally again.