How to Update Flash ESP8266 Firmware – Flashing Official AT Firmware

Table of Contents

This is the second project on ESP8266 and in this project, I’ll show you how to flash the Official Espressif Firmware in ESP8266 using Arduino. This project can also be used if you want to update to the latest ESP8266 Firmware.

In the previous ESP8266 Project, we have seen how to write our own program in ESP8266 using Arduino IDE and control an LED using the GPIO Pins. In the same project, I’ve mentioned that by default, the ESP8266 ESP-01 Module comes with an AT Command Firmware.

But if we write our own program to access the GPIO Pins (like we did in the previous project), the existing firmware will be completely erased and the new program will be written.

Even though ESP8266 WiFi Module is manufactured by Espressif Systems, the SoC is used by many third party manufacturers to implement their own custom modules. In my case, I have the ESP8266 ESP-01 Module by AI-Thinker.

This leads to a lot of questions like whether the firmware is original or not, is the firmware up to date or not and many other.

So, in this project, we will flash the official Espressif Systems’ firmware for ESP8266 Module using the official ESP8266 Flasher Tool provided by Espressif Systems which is the ESP8266 FLASH DOWNLOAD TOOL and Arduino UNO as the USB to Serial Interface.

The ESP8266 Firmware can be installed for two reasons: If you want to update the ESP8266 Firmware to its latest version or to completely install the new firmware (in case it was overwritten by any program). So, let’s get started.

Hardware Setup for ESP8266 Firmware Update

Before proceeding into the process of updating the ESP8266 SoC’s Firmware, it is important to configure the ESP8266 WiFi Module in Download Mode or Programming Mode.

If you remember in the GETTING STARTED WITH ESP8266 AND ARDUINO project, I’ve mentioned that GPIO0 and RST Pins of the ESP8266 Module play an important role in configuring it in Download Mode.

We will implement the same setup here as well. So, the connections are as follows.

  • VCC to 3.3V
  • GND to GND
  • TX to TX of Arduino UNO
  • RX to RX of Arduino UNO (through level converter)
  • GPIO0 to GND
  • RST to GND through Push Button
  • CH_PD to 3.3V

Circuit Diagram for Flashing the Firmware to ESP8266

The following image shows the circuit diagram for enabling the Flashing Mode in ESP8266. In order to put the ESP8266 SoC in Flashing Mode, the GPIO0 Pin must be connected to GND and a momentary GND Pulse on RST Pin.

Flash ESP8266 Firmware Image 11

Components Required

  • Arduino UNO
  • ESP8266 ESP-01 (any ESP8266 Module)
  • 1 KΩ Resistor
  • 2.2 KΩ Resistor
  • Push Button
  • SPDT Switch
  • Connecting Wires
  • Mini Breadboard


  • Before proceeding further, please refer the previous project for configuring Arduino IDE and getting the Arduino UNO ready for flashing the firmware.
  • I’ve connected the GPIO0 Pin to GND directly. And after flashing the Firmware, I’ve disconnected it from GND. You can use a SPDT switch to achieve this action i.e. in one position, the GPIO0 is connected to GND and in the other position, it is free to use as a GPIO.
  • ESP8266 can’t tolerate 5V. It must be connected to 3.3V. Even the RX Pin of ESP8266 is connected through a level converter.

Checking the Current Firmware Version

Before installing the Firmware, we will first check the existing firmware in the ESP8266 Module using serial communication. For this, we need to disconnect the GPIO0 pin from GND. *IMPORTANT*.

After making the connections as per the circuit diagram given above (and disconnecting the GPIO0 from GND), plug-in the USB Cable of Arduino to the Computer and Open any Serial Monitor Software. I am using the Arduino’s Serial Monitor. You can use any software like Putty, Terminal, etc.

In Arduino IDE, select the correct COM Port and open the Serial Monitor. Set the baud rate to 115200 and select Both NL and CR option in the serial monitor. After this press the RST Button of the ESP8266 for a second and release. The ESP8266 Module will reset and display “ready” after some garbage data on the serial monitor.

Flash ESP8266 Firmware Image 1

In order to check for the firmware version, you need to type the following AT Command and hit send. This command will return the firmware version of the ESP8266 Module. All the AT Commands should be in Upper Case.




Flash ESP8266 Firmware Image 2

If you notice, my firmware is by Ai-Thinker Technology, the manufacturer of my ESP8266 ESP-01 Module and it is pretty old one. The AT Command Set Version is and the SDK Version is 0.9.5.

I will now replace this firmware with the Espressif Firmware (the manufacturer of ESP8266 SoC).

NOTE: Make sure that GPIO0 Pin connected to GND before proceeding further.

Downloading the Latest ESP8266 Firmware

There are two types of SDK or Software Development Kits for ESP8266: Non-OS SDK and RTOS SDK. The Non-OS SDK, as the name suggests, isn’t based on any OS. Using this SDK, you can compile IOT_Demo and AT Commands. The RTOS SDK on the other hand is based on FreeRTOS.

I’ll be using the Non-OS SDK (well, technically, the Firmware files based on the Non-OS SDK). The ESP8266 Firmware files are in the form of Binary Files i.e. .bin files.

Now since I will be using only the AT Command Set of the ESP8266, I will download only the Bin Files associated with the AT Commands. In order to download the AT Commands Firmware for ESP8266, visit the official link here or directly download from this link.

Flash ESP8266 Firmware Image 3

There are other firmware versions for ESP8266 Module. Try the procedure mentioned in this project first and if you succeed, you can try installing other ESP8266 Firmware. Other firmware can be downloaded from the SDK section in the link mentioned above.

Downloading the ESP8266 Flash Download Tool

The next step is to download the Tool to update the Firmware of ESP8266. Espressif Systems developed a small software just for this purpose. It is called the ESP Flash Download Tool.

In order to download the ESP8266 Firmware Flash Download Tool, visit this link and in the Tools section, download the ESP Flash Download Tools or you can directly download from this link.

Flash ESP8266 Firmware Image 4

Now that we have downloaded the Firmware and the Flasher Tool for ESP8266, we will proceed with installing the Firmware in ESP8266.

Installing the Firmware in ESP8266

In order to flash the firmware in ESP8266, first open the Flash Download Tool or the Flasher Software of ESP8266. At the time of working on this project, I have the version So, open the application file ESPFlashDownloadTool_v3.6.2.2.

You will then get various options like ESP8266 Download Tool, ESP8285 Download Tool, ESP32 Download Tool and ESP32D2WD Download Tool. Select the ESP8266 Download Tool.

Flash ESP8266 Firmware Image 5

After opening the ESP8266 Flash Download Tool, you need to select the firmware files that we need to install. You need to upload four files at four different addresses. The following table will give you the list of files and their corresponding addresses.

NOTE: This list is for Firmware over the Air (FOTA) Flash Memory Mapping for ESP8266 Modules with 1MB of Flash. For other flash sizes, please refer to the ESP8266 Getting Started Guide, from this link.



File Address in Flash Memory
boot_v1.7.bin 0x00000 0x10000
esp_init_data_default.bin 0xFC000
blank.bin 0xFE000



In the ESP8266 Download Tool, in the SPI Download Tab, select the necessary files in the “Download Path Config” option by click on the (…) button. Also, add the corresponding addresses in the space provided.

Flash ESP8266 Firmware Image 6

After selecting the four files and filling in the Addresses, set the crystal frequency to 26MHz (it is usually 26MHz but in case your ESP8266 board has a different crystal, enter that value). Next select the flash size. Since I have a 1MB flash on-board, I have selected the 8Mbit (which is equal to 1MB) flash size option.

Finally, select the correct COM Port and set the baud rate to 115200. Make sure that all the serial terminal are closed.

Before starting the flashing, check that GPIO0 is connected to GND and give a pulse LOW (push the Reset button) on the RST pin.

Now click on START button. The flashing of the firmware in ESP8266 should begin. If you notice in the ESP8266 Firmware Flash Tool, the moment you click on START, you will get two MAC Address as AP and STA and also information about the Module in the DETECTED INFO section.

Flash ESP8266 Firmware Image 7

If everything goes well, the ESP8266 Module must be updated with new firmware. If there is any error, disconnect the USB cable, connect it once again, and after clicking on START, push the Reset button of the ESP8266.

You will get a FINISH message on the Tool and you can close the tool after this. Disconnect the GPIO0 from GND and reset the device. Open the serial monitor of Arduino once again and check for new firmware.

Flash ESP8266 Firmware Image 8

NOTE: Click on Reset button after opening the serial monitor.

In order to check the firmware version, type AT+GMR and hit send. You will get a response with the AT Version number and the SDK Version number. In my case, the new AT Command Set Version is and the SDK Version is 2.1.0.

Flash ESP8266 Firmware Image 9

In this project, you have seen how to update/flash firmware in ESP8266 Module using the official Espressif ESP8266 Firmware.


Similar Articles & Blogs

Explore similar articles on various electronics and electrical topics – 

Logic OR Function

The Logic OR Function function states that an output action will become TRUE if either one “OR” more events are TRUE, but the order at which they

Learn More >>

Logic AND Function

In 1854, George Boole performed an investigation into the “laws of thought” which were based around a simplified version of the “group” or “set” theory, and from

Learn More >>

Binary Coded Decimal

As we have seen in this Binary Numbers section of tutorials, there are many different binary codes used in digital and electronic circuits, each with

Learn More >>

Binary Fractions

We know that decimal (or denary) numbers use the base ten (base-10) numbering system where each digit in a decimal number is allowed to take one

Learn More >>