I've come across many Arduino shields for various boards like the Uno, ESP8266, and ESP32 which sometimes have a button for flashing and other times they do not because the flashing is automatic.

When I upload a binary sketch to ESP32 directly through a separate Serial to USB converter, I have to make the button connections and press the buttons manually for the uploading process to work.

The manual button pressing flashing process for the ESP32 goes like this:

  • Hold the Reset button (IO0 to ground)
  • Hold the Flash button (EN to ground)
  • Release the Reset button (IO0 to float)
  • Release the Flash button (EN to 3.3v)
  • The board is now in flashing mode
  • Press "Upload" in Arduino IDE
  • Wait until the IDE log shows "Connecting..."
  • Wait until the sketch is fully uploaded
  • Press the Reset button (IO0 to ground then float)

Arduino boards like the WeMos Lolin32 board eliminate the button pressing process completely during the flashing process.

QUESTION: Which part of the hardware on the Lolin32 board makes the flashing process autonomous?

Here's the manual uploading schematic: Manual uploading schematic

And here's the WeMos Lolin32 board, that eliminates the button pressing process completely when I upload a sketch: Photo of a Lolin32 board

I believe the answer will also apply to any other auto-flashing board out there.

1 Answer 1


I'm not familiar with this board, but according to this schematic: https://wiki.wemos.cc/_media/products:lolin32:sch_lolin32_v1.0.0.pdf

U4 (one of the small 6-leg components) connects to IO0 (pin 25) on the ESP-32. The transistor inside U4 combines the RTS and DTR signals (from U6 USB-Serial converter IC, which will be the large IC marked SIL2104) to put IO0 in the correct state for flashing. The RTS and DTR signals can be set by the host (the computer doing the flashing).

Apologies for the lack of depth, but the short answer is components U4 and U6 on the board work together on the command from the host computer to put IO0 in the correct state for flashing.

  • Now I know a little bit more about the components on Arduino shields! Thank you for looking into this for me.
    – DemSec
    Aug 7, 2018 at 4:13
  • From this, I went on to learn more about the U6 component (SIL 2104 F01BP 1711+) and find out why it has 4 GPIO pins: silabs.com/documents/public/data-sheets/cp2104.pdf
    – DemSec
    Aug 7, 2018 at 4:20
  • @DemSec, i think that it has 4 GPIO pins because the manufacturer has decided that it would make the device more useful
    – jsotola
    Aug 8, 2018 at 15:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.