NOTE: This only fixes the problem where it can’t read the flash, because the bootstrap pins configured the device to use 1.8V for the on-board flash. Setting these three efuse should result in a final output line:
Flash voltage (VDD_SDIO) set to 3.3V by efuse.
You can get the python script from Espressif’s depot on github.
The relevant fuses on my WT32-ETH01:
Config fuses:
XPD_SDIO_FORCE Ignore MTDI pin (GPIO12) for VDD_SDIO on reset = 1 R/W (0x1)
XPD_SDIO_REG If XPD_SDIO_FORCE, enable VDD_SDIO reg on reset = 1 R/W (0x1)
XPD_SDIO_TIEH If XPD_SDIO_FORCE & XPD_SDIO_REG, 1=3.3V 0=1.8V = 1 R/W (0x1)
WARNING!
You can PERMANENTLY mess up your WT32-ETH01 device (or any ESP32, really) by applying incorrect efuse settings. Once set to a non-zero value, it cannot be set back to a zero value.
WARNING!
I make no representation, other than it worked for me. Seriously, don’t do this if you aren’t willing to brick your device.
Presuming you can program your WT32-ETH01 using esptool.py...
Serial port | WT32-ETH01 |
---|---|
RTS |
EN |
DTR |
GPIO0 |
RXD |
TX0 |
TXD |
RX0 |
You'll want to do something along the lines of:
python ./espefuse.py --port COMx burn_efuse XPD_SDIO_TIEH
python ./espefuse.py --port COMx burn_efuse XPD_SDIO_REG
python ./espefuse.py --port COMx burn_efuse XPD_SDIO_FORCE
Alternative I just learned about:
python ./espefuse.py --port COMx set_flash_voltage 3.3V