Flash Mode and Normal Operation Mode
The ESP-01S has two primary boot modes: Flash mode and Normal Operation mode. Flash mode is for uploading code, while Normal Operation mode runs the code.
Flash mode, also known as programming or flashing mode, is a crucial state on the ESP-01S module for uploading new firmware or programming the module. To access flash mode, you'll need to interact with the GPIO0 (General-Purpose Input/Output 0) pin during the module's boot-up sequence.
Ensure you have a USB-to-Serial adapter with connections for
- TX Pin2 GPIO1
- RX Pin7 GPIO3
- GND Pin1
- VCC Pin8 3.3V
FT232RL USB to Serial adapter is high recommended. The CH340 USB to Serial adatper usually doesn't have 3.3V LDO on board and it uses CH340 IC itself to provide 3.3V power which usually coudn't provide enough current for ESP-01S.
To enter flash mode, connect the GPIO0 pin to GND while powering on the ESP-01S module or performing a reset. When starting up with GPIO0 grounded, the module will enter flash mode.
Important Note: GPIO2 and Initial Logic State

It's crucial to keep in mind that GPIO2 should be in a logic HIGH state during the boot process. Fortunately, the ESP-01S module is designed with a built-in 12K resistor that pulls GPIO2 up to this desired logic HIGH state. This means you can typically leave GPIO2 as is, without any specific manipulation.
However, if you choose to connect GPIO2 to a sensor or utilize it as an input for your project, exercise caution to ensure that it doesn't inadvertently register a logic LOW state during the initial boot phase. This precaution is essential to maintain the module's intended behavior and prevent any unexpected operational issues.
With the ESP-01S in flash mode, use Arduino IDE to upload your firmware or program the module. Configure your flashing tool with the correct serial port, baud rate, and other settings.
Once programming is complete, disconnect GPIO0 from GND. Reset the module using the RST (Reset) pin to switch to normal operation mode and run your newly flashed firmware.
Video: Use FT232RL to program ESP-01S
1 thought on “ESP-01S Boot Mode”
Daniel Thackeray
The table is confusing. It says that GPIO0 and GPIO2 both high is ‘Flash’ Mode. Flash mode is described as the mode to use in order to flash the device using the IDE. But the table says that this mode is ‘Boot from SPI flash (Normal running)’. Surely ‘Normal running’ means executing the loaded program, not flashing a new application – booting in SPI flashing mode is not ‘Normal running’! The description of how to boot the ESP01 for normal operation is to disconnect GPIO0, but there is no description of what this does. Is GPIO0 just left floating? Is it pulled high or low on the chip? What happens if I want to use GPIO0 for something? That seems to me to be important information for a topic like “Flash Mode and Normal Operation Mode”.
1. Remove ‘(Normal running)’ from the first line of the table.
2. Add a third line to the table with the required settings for GPIO0 and GPIO2 and the comment ‘Normal operation’.
3. Add a comment on what the table entry for GPIO0 means for normal operation (similar to the comment for GPIO2).