How to Flash ESP-01 Firmware to the Improved SDK v2.0.0

March 17, 2017 by Charles R. Hampton

Learn about SKD v2.0.0 and how flashing your ESP-01's firmware just got easier.

Despite the difficulty of updating the firmware in modules like the ESP-01, the ESP8266 microcontroller with built-in Wi-Fi has become extremely popular among electronic designers. Now, thanks to more information and better tools, the flashing process is significantly easier, and SDK v2.0.0 adds new capabilities.


The success of the ESP8266 from Espressif Systems is undeniable. It is a powerful microcontroller with built-in Wi-Fi capabilities and is readily adaptable to a multitude of uses in the rapidly growing IoT (Internet of Things). One of the few difficulties to using the IC has been updating the firmware in the thousands and thousands of development modules that have permeated the market. Judging by the large number of comments posted, this article on All About Circuits has been a help to many. However, the passage of time has revealed some corrections and improvements needed in the information that was provided in October of 2015, and presenting that information is the goal of this article.

Specifically, the following improvements will be addressed:

  • a better flashing circuit
  • an easier-to-use terminal program
  • a revised Flash Download Tool
  • updated SDK v2.0.0 ESP8266 firmware

Taken collectively, and supported by better documentation from Espressif, these changes will streamline the firmware flashing process, and increase the ESP8266's usability to both hobbyists and professional designers.

As a note, this article is a successor to a previous version that was published in October of 2015. You may want to peruse that article for some worthwhile background information.

The Flashing Circuit

An improved flashing circuit for the ESP-01 module is shown in the following schematic diagram; several changes have been made to the original design:

  1. The 3.3VDC power is no longer taken from the USB-to-TTL converter. Some converters do not provide sufficient current to properly drive the ESP8266, especially when it is in the Wi-Fi transmitting mode. A separate, well-filtered and regulated 3.3VDC supply capable of supplying at least 500mA should be used.
  2. Capacitors C1 and C2 have been added to provide noise reduction on the power bus. They should be located as close as possible to the Gnd and Vcc pins on the ESP8266.
  3. R2 and R3 are pullup resistors that were added to ensure that the GPIO2 and GPIO0 pins on the ESP8266 are never allowed to float.

These changes do not indicate that the original flashing circuit was nonfunctional; the fact is that it did work for the author and for many other users. However, its shortcomings were such that the circuit could and did fail for some users at least some of the time. These failures could have been due to differences in environmental factors, power supply quality, and/or component tolerances. The improved circuit should eliminate those weaknesses.


Click to enlarge


The improved flashing circuit is shown built on a solderless breadboard in the following photographs. The first photo shows the entire circuit with the ESP-01 module in place; the second photo shows the circuit with the ESP-01 module removed in order to reveal the locations of C2, R2, and R3. Note that the wire colors in the breadboard assembly correspond to the color designations in the schematic drawing.



The PCB assembly at the right side of the breadboard is a well regulated and filtered 3.3VDC power supply. For complete information on building a copy of this power supply, see this article on AAC. Otherwise, you may use any power source with similar capabilities.

The PCB assembly in the upper left corner of the breadboard is the USB-to-TTL converter. As you see, it is inserted directly into the solderless breadboard using six Dupont style header pins that protrude down from the bottom of the PCB. You can modify your USB-to-TTL converter to work in that very convenient way, or you can use discrete wires to make the connections. Whichever you choose, be certain to follow the pinout sequence as shown in the schematic drawing and the photographs. Note that only three connections are required: RxD from the converter to TxD on the ESP-01, TxD on the converter to RxD on the ESP-01, and common ground.

Even though the USB-to-TTL converter is not being used to power the ESP-01, be sure that the converter is set to 3.3VDC so that the signal voltage levels will not exceed the input range of the ESP8266. Any voltage higher than 3.3VDC connected to the ESP8266 may damage it beyond repair.



In the photo immediately above, the ESP-01 module has been removed from the assembly revealing the author's home-built breadboard adapter for the ESP-01. In the photo just below, the home-built adapter is shown on the left, as well as an almost identical professionally built adapter from Addicore on the right. They work identically and make it much easier to use an ESP-01 module in a solderless breadboard or any similar device with connectors on 0.1 inch (2.54 mm) centers.



Once you have completed construction of your flashing circuit, it's almost time for testing. But before attaching the USB cable or applying power, recheck the wiring—especially the power wiring. It's better to take a few extra minutes now than to damage something because of incorrect wiring.

First, connect the USB cable from the PC to the USB-to-TTL converter. A positive indication is when the red LED at the corner of the PCB close to the USB connector lights, and the PC recognizes the converter. At that point, note what COM port number has been assigned to the converter. As you can see in the photos, COM4 has been assigned to the converter shown, and a label has been attached to identify the relevant COM port.

Next, apply 3.3VDC power to the flashing circuit. You should see a couple of flashes from a blue LED on the ESP-01 module, and a red LED on the module should be steadily illuminated. No smoke or odd smell should be coming from the circuit.

Now, press and release SW1 (the reset switch); the blue LED should flash. Then, press and release SW2 (the flash switch); nothing noticeable should happen.

If all that went according to plan, your flash circuit is probably wired correctly. It's time to perform the definitive check: will the ESP8266 answer when you call it to attention?

Parts List

The parts for the flashing circuit are shown in the following table. In addition, you may need assorted wire, solder, and a well-regulated and filtered 3.3VDC power supply.


Part Ref. Description Source Item No.
C1 Capacitor, Ceramic, 0.1µF, 50V Digi-Key 399-9797-ND
C2 Capacitor, Aluminum Electrolytic, 220µF, 16V Digi-Key 493-1041-ND
R1-R4 Resistor, ¼ W, 10kΩ Digi-Key 10KQBK-ND
N/A Breadboard, Solderless, 400 Contact Digi-Key 377-2094-ND
N/A Adapter, Breadboard, DIP8, for ESP-01 & nRF24L01 Addicore BB-ADTR
N/A Module, ESP8266, ESP-01 Digi-Key 1568-1235-ND
SW1-SW2 Switch, Tactile, Momentary, Normally Open, SPST, Pushbutton, 2-Pin on-line* N/A
N/A Converter, USB-to-TTL, with 3.3V Capability on-line* N/A
*All parts are readily available from a variety of suppliers with the possible exception of the USB-to-TTL converter, and SW1-SW2, which may have to be located via online searches. SW1 and SW2 are ordinary tactile, momentary, normally open, SPST pushbutton switches, but with only two pins on the bottom. Because the pins are on 0.2" centers, they work well in solderless breadboards; see the photo in this article.

Getting Started with Termite

PuTTY was the recommended terminal program in the original article on flashing ESP8266 ICs, and if that is what you have and want to use, it works fine. However, Termite is somewhat more user-friendly in this application and will be used in the step-by-step instructions that follow. Termite is free for both personal and commercial use.

The following instructions assume that the ESP-01 module is programmed just as it is normally received from a supplier. If you (or someone else) has made changes to the default program settings, you will need to experiment to find the current settings for your ESP-01 module.

After checking your ESP-01 flashing circuit as previously described, power it up. Start Termite on your PC and click the Settings button; you should see a window similar to the one below. Be certain that the COM port to which the USB-to-TTL converter is connected is correctly selected in the Serial port settings window. Adjust all other settings as shown in the Serial port settings window below, and click OK to close the Serial port settings window.



At this point, the cursor should be flashing in the bottom section of the Termite window; if not, click on the bottom section of the Termite window to position the cursor there. Type AT and press Enter on your keyboard; if all is well, the ESP-01 will respond with OK in the Termite window. If it does, breathe a big sigh of relief because you have just cleared a major hurdle.

Next, type AT+GMR and press Enter. The ESP-01 should respond with something very similar to the window below.



The AT+GMR command tells the ESP8266 to report what version of the AT command set it contains, what SDK (Software Development Kit) has been loaded on it, what company built the ESP module, and when the SDK was loaded on the module. Finally, as usual, the ESP8266 concludes its transmission with OK.

If the ESP-01 responded correctly, you are finished with Termite (unless you want to play some more). You will use it again in this project to confirm a successful firmware flash.

ESP8266 Downloads

All the necessary documentation and tools for flashing the firmware on ESP8266 chips are available online, and much of it resides at the Espressif website. As a convenience to AAC readers, much of it is also available here. The Flash Download Tool and the Software Development Kit are absolutely essential. Not all the documents are required, but they are all potentially helpful. Please download the files and store them on your computer in a directory where you can find them, so that you can perform an ESP8266 firmware flash as described just ahead in this article.

Flash Download Tool v3.4.4

Version 3.4.4 of the Flash Download Tool is the latest version available from Espressif at the time this article is being prepared. The tool for the ESP8266 looks almost identical to the past several versions all the way back to v2.3, except that two new tools have been added to the package. One is for the ESP8285 and the other is for the ESP32, neither of which are of any use with the ESP8266. Click the button below to download v3.4.4; you will note that it contains a version for PCs and a Mac version. This article will use the PC version.

Software Development Kit 2.0.0

As of this writing, the latest available version of the ESP8266 Software Development Kit is version 2.0.0, which was released in July of 2016. While almost nothing is certain in firmware development, one might conclude that v2.0.0 is the last version that will be released. At any rate, it seems to be a stable version and will be used in this article. It is available free to download from Espressif, but to save the readers some trouble, it is also available here by clicking the button below.

ESP8266 Documentation

As is often said, "When all else fails, read the instructions," and to that end, Espressif has an impressive collection of documents pertaining to the ESP8266. There is little doubt that the answers to many questions are contained in their pages. Three of the documents used most frequently by the author are ESP8266 Quick Start Guide, version 1.3, ESP8266 SDK Getting Started Guide, version 2.7, and ESP AT Instruction Set, version 2.0.0. These three, along with several others, are included in the zip file available for download via the button below. Note that additional documents and more current documents may be available at the Espressif website.

Bits and Bytes Recollected

The amount of EEPROM on an ESP8266 module (such as the ESP-01) is a very important factor in the exact flashing procedure that is to be used. That EEPROM quantity can be expressed in a variety of different units of measurement, and the units used vary from place to place in the documentation, which can be confusing. The bullet points and the table below are included as a ready reference to minimize the muddle.

  • The abbreviation for bit is b, and the abbreviation for byte is B.
  • There are eight bits (b) in one byte (B).
  • The abbreviation for kilobit is Kb, and the abbreviation for kilobyte is KB. Likewise, megabit is abbreviated Mb, and megabyte is abbreviated MB, etc.
  • It's also good to note that most (maybe all) ESP-01 modules built on black PCBs have 1 MB of EEPROM.



Byte (B) Kilobyte (KB) Megabyte (MB) Gigabyte (GB) Terabyte (TB)
Number of Bytes 1 1,024 1,048,576 1,073,741,824 1,099,511,627,776

The Flashing Process

Reading from Your ESP-01 Module

Install the ESP-01 module in the flashing circuit, connect the USB-to-TTL converter to a USB port on your PC, and power up the circuit with 3.3VDC. Start version 3.4.4 of the Flash Download Tool, and you should see the startup screens as shown below. The back window is where a complete activity log for the download tool is recorded. The top window is a tool selection window; because you are working with an ESP8266 module, click the ESP8266 Download Tool button.



If this is the first time the ESP8266 download tool has been used, a window like the one below will open with no data in the form fields. If the SPIDownload tab near the top of the window is not selected, select it now.



If any of the boxes have check marks in them, uncheck them all. Next, make sure that the COM port you are using and the correct BAUD rate are selected at the bottom right. Click the radio button under SPI SPEED for 40MHz, and the radio button under SPI MODE for QIO. Do not click any other radio buttons, add any check marks, or enter any data.

  1. Press and hold the Reset button (SW1) on your flashing circuit.
  2. Press and hold the Flash button (SW2) on your flashing circuit.
  3. Release the Reset button.
  4. Release the Flash button.
  5. Click the Start button at the lower left portion of the download tool window.

The download tool will work for a few seconds to read the contents of the ESP-01 module and print the results in the appropriate panels as shown below.



Here's what has happened during the download tool process time:

  1. The download tool determined the size of the EEPROM on the module as "QUAD;8Mbit," which translates to 1Megabyte.
  2. The download tool determined the crystal speed to be 26MHz.
  3. The download tool read the MAC addresses for your ESP-01 module in both the AP (Access Point) mode and in the STA (Station) mode, and entered them in Download Panel 1. (Note that the MAC addresses for your ESP-01 module will be different from the addresses shown above; record the MAC addresses of your module for future reference.)

Writing to Your ESP-01 Module

Finally, you are ready to select and write the new firmware to your module. Set SpiFlashConfig as follows:

  1. Select CrystalFreq as 26M.
  2. Click the SPI SPEED radio button for 40MHz.
  3. Click the SPI MODE radio button for QIO.
  4. Click the FLASH SIZE radio button for 8Mbit.

Select the binary files to be downloaded from their storage locations as shown in the table below. (The files listed below are contained in the ESP8266 SDK v2.0.0 folder that you dowloaded and stored on your PC.)


Binary File Name Binary File Location ESP-01 Flash Address
blank.bin ...\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin 0xFB000
esp_init_data_default.bin ...\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin 0xFC000
blank.bin ...\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin 0x7E000
blank.bin ...\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin 0xFE000
boot_v1.6.bin ...\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin 0x00000 ...\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin\at\512+512 0x01000


A. Click to place a check in the first (top left) check box below Download Path Config; the entire data entry line will turn red as shown below.



B. Click the ellipsis (...) button in the first line and navigate to the location on your PC where the SDK 2.0.0 binary files are stored; select the blank.bin file. The entire file path will be entered into the box to the left of the ellipsis button.

C. Next, enter the hexadecimal address to the right of the ellipsis button where the blank.bin file is to be stored: 0xFB000 in this case.

Repeat steps A through C for each of the six binary files. The completed data will appear as shown below.



After rechecking all the file paths and hexadecimal storage locations, take the following actions:

  1. Press and hold the Reset button (SW1) on your flashing circuit.
  2. Press and hold the Flash button (SW2) on your flashing circuit.
  3. Release the Reset button.
  4. Release the Flash button.
  5. Click the Start button at the lower left portion of the download tool window.

The download tool will work for several seconds to write the binary files to your ESP-01 module. When the blue progress bar reaches the right side of the window, the flashing process is complete as shown below.



Press and release the Reset button (SW1) on your flashing circuit. Power down the flashing circuit.

Confirming a Successful Flash

To confirm that the flash process was successfully completed, power up the flashing circuit. Start Termite and check the firmware version as previously described, and as shown below. You should see the following results.



Your ESP-01 module is updated to SDK version 2.0.0, and to AT command set version Congratulations! You are ready to put the ESP-01 to work in your IoT project.


Give this project a try for yourself! Get the BOM.

  • Rotten Ronnie March 19, 2017

    Brilliant. I followed this guide almost exactly although I purchased a “ESP01 Programmer Adapter UART GPIO0 ESP-01” on ebay, and resorted to some alligator clips to pull_down RST and GPIO0.


    Like. Reply
    • Charles R. Hampton March 19, 2017
      Wow, that's great to hear; I am thrilled to have helped. As you can see, yours is the first comment and it's great that the process worked well for you. Hopefully, many others will also benefit. Thanks for the input. Spread the word!
      Like. Reply
  • keaaw March 19, 2017

    Question about the power supply. In an earlier article you wrote, “Estimates of the current required for the ESP-01 during Wi-Fi operation vary from 250mA to 750mA. The current supplied by the USB to TTL converter should suffice for programming the ESP-01, but may prove to be inadequate for long term use. A better choice is a filtered regulated 3.3VDC supply capable of 1A or more.”  Yet the 3.3v version of the DIY power supply you’re using is rated for 500mA…?

    Like. Reply
    • Charles R. Hampton March 19, 2017
      Excellent observation. In doing research for the first article, I read somewhere (didn't note where) that current could be as much as 750mA. I remember thinking at the time that seemed excessive and was probably an outlier, but I put it at the top end of the range just to be on the safe side. Current estimates seem to top out at 320mA, which I now believe; thus, a 500mA supply is ample. I will amend the latest article to that effect. Thanks for the correction.
      Like. Reply
      • keaaw March 20, 2017
        p.s. thank you for the excellent articles! I know how much effort goes into writeups like this. Your articles are clear, with great schematics, photos, clear parts lists (with sources links!), definitely among the best instructables I've come across. I'm really keen to learn about IoT, and the esp8266 seems a great place to start.
        Like. Reply
  • SergioVels March 22, 2017

    Excellent Post
    Work 100%

    Like. Reply
  • jerry.berry April 05, 2017

    The first stable circuit and instructions that I have found!  I’d been banging my head off and on for months to flash my first ESP-01 that I thought I might have bricked.  I was afraid to touch the other two I purchased and bought a more expensive WeMos D1 for my project (which was fine but this small package is so great I wanted to use it!).  Thanks!

    Like. Reply
    • Charles R. Hampton April 05, 2017
      You are very welcome. Congratulations. Please spread the word about the article.
      Like. Reply
    • mharmon12 April 14, 2018
      I'm on windows 10 with ESP8366 DOWNLOAD TOOL and USB to FTDI serial converter. I have found that the voltage supply to ESP-01S (darkish color boards) was very critical. I used a variable one that took 5VDC from USB to FTDI serial converter and adjusted the output to 3.6VDC. This solved two "bricked" ESPs. However, this tutorial got me back to a "usable" flash very easily.
      Like. Reply
  • casanovg April 06, 2017

    The best and easiest to follow posting about flashing this module, congratulations! I was almost there, but you can imagine what a 0x10000 vs 0x01000 flashing position difference can do. I revised it hundred of times to no avail, until I read this guide. Thank you!

    Like. Reply
    • tracecom April 06, 2017
      Thanks so much for the high praise, and you are welcome. You are correct in that a tiny mistake can cause total failure. Spread the word.
      Like. Reply
  • atexit8 May 05, 2017

    Thank you for this terrific article. It worked for me.
    I had a ESP-01 module that had “unknown” firmware.
    I must have updated it from the original Ai-Thinker one, but I don’t remember exactly where or how I updated the firmware.

    One thing though. I had to downgrade to version 3.3.6 of the ESP8266 Download Tool. I am on a Windows 10 laptop. Version 3.4.4 just sat there and did nothing. It was able to read from the ESP-01 fine, but the downloading did not work.

    Like. Reply

    Like. Reply
    • Charles R. Hampton December 27, 2017
      Thanks for reading the article and trying the procedure. I am sorry that you couldn’t make it work. Unfortunately, I have moved on to other projects and cannot revisit this one.
      Like. Reply
  • Haoran Su May 14, 2017

    Thank you so much for your post! But I need your help, I followed the steps exactly and everything works perfect, but after flashed it, my ESP8266 is now not responding to any AT command. When I push reset button, there will be some unreadable messages show up. I think there is something wrong with the baud rate, could you please help me? I have tried 3 times on three ESP modules. Thank you!

    Like. Reply
    • gert3d July 01, 2017
      message at boot-up can be seen at 74880 baud Baud rate after flashing is probably 115200 baud. AT command should be followed by NL/CR
      Like. Reply
    • Charles R. Hampton December 27, 2017
      Thanks for reading the article and trying the procedure. I am sorry that you couldn't make it work. Unfortunately, I have moved on to other projects and cannot revisit this one.
      Like. Reply
  • YAMAZAKI8266 June 14, 2017

    Note to noobs like me that will get an error during the first part of the flashing process in determining the size of the EEPROM and so on, which is an error saying COM FAIL , and in the log terminal Exception at COM_CONNECT.

    You have to turn off ALL serial monitor when flashing/determining ESP8266 specs, that’s probably because the UART when in Serial monitor mode cannot be used for flashing. You may turn on the serial monitor again AFTER flashing to check with the outcome, but not when you’re going to or in the midst of flashing.

    Hope this helps.

    Like. Reply
    • mharmon12 April 14, 2018
      Yes. Comports can only be open for ONE device at a time. So yes, close PuTTY or Termite or whatever your serial comm tool is.
      Like. Reply
  • Vishal Verma June 25, 2017

    #1.Great Article. To the point and immaculate. Thank you Charles.
    #2. I am observing some constant serial junk output coming out on Termite/Arduino Serial Monitor; so upgraded to SDK 2.1.0 (only change seems to be “boot_v1.7.bin”); but this constant serial junk output issue is still open. Will update if I get any further clues.

    Like. Reply
    • Vishal Verma June 26, 2017
      Also looked at @Ben_QC comments on your previous article, and I think we can optimize this page further by just having 4 addresses that must be flashed with new sdk. We don't need 6 addresses. The below list and address looks correct to me. ...bin\blank.bin 0x7E000 ...bin\esp_init_data_default.bin 0x7C000 ...bin\boot_v1.6.bin 0x00000 ...bin\at\512+512\ 0x01000 Note: Prev article link: Ben_QC used SDL 2.1.0. But I think that boot_v1.7.bin has some issues. So this comment is more for use of SDK 2.0.0
      Like. Reply
      • Charles R. Hampton June 26, 2017
        Thanks for your input. It's always good to hear from readers with recent experience.
        Like. Reply
      • Vishal Verma June 26, 2017
        One minor correction to the four addresses. ...bin\blank.bin 0x7E000 ...bin\esp_init_data_default.bin 0xFC000 ( 1 MB module will require this address) ...bin\boot_v1.6.bin 0x00000 ...bin\at\512+512\ 0x01000 Reference:
        Like. Reply
  • gert3d July 01, 2017

    Finally an excellent guide that shows what to do in this jungle. Thanks a lot!
    Reflashed a ESP8266 “shie1d” type, see
    I used an FTDI that could be switched to 3.3V and powered from there.

    Like. Reply
  • DevaRishi July 13, 2017

    Uploading seems to have worked, but AT+CWLAP gives error, i am sure i had it working before, wondering what i am doing now. This guide is great !! i made the same mistake as Casanovg but i knew the schematic was ok and went back to another flasher, that worked ! and then found my mistake.

    Like. Reply
  • Alf V August 22, 2017

    I have had my first ESP8266 for less than 24 hrs and had somehow managed to loose communications with it.  Your instructions are spot on and brought the device back to life!
    Thank you.

    Like. Reply
  • gngalih August 23, 2017

    I exactly follow all your steps, but it failed after 99% downloading progress (“Invalid Head of Packet”). Then my esp8266 can’t be used. Any suggestion?

    Like. Reply
    • Charles R. Hampton December 27, 2017
      Thanks for reading the article and trying the procedure. I am sorry that you couldn’t make it work. Unfortunately, I have moved on to other projects and cannot revisit this one.
      Like. Reply
  • Alessandro Mattiuzzi August 31, 2017

    I have an “invalid packet” exception when running firmware update. Anyone can help me please? Thanks

    Like. Reply
    • Charles R. Hampton December 27, 2017
      Thanks for reading the article and trying the procedure. I am sorry that you couldn’t make it work. Unfortunately, I have moved on to other projects and cannot revisit this one.
      Like. Reply
  • BMorse September 13, 2017

    Thanks, I bricked a couple of these and needed to reflash the firmware, and this out of all the the other “tutorials”, got mine working again.. now I can continue with my project.. thanks again.

    Like. Reply
  • BMorse September 13, 2017

    and just to add… I used an Arduino uno (removed the atmega) as the flasher, and a separate 3.3 volt power circuit that I powered from the Arduino 5 volt.

    Like. Reply
  • luizalmeida October 16, 2017


    I followed this tutorial (some modifications because I have a ESP-12) but AT commands doesn’t work.
    The strange thing is that I have the Strings “WIFI CONNECTED” and “WIFI GOT IP” in the serial port after boot.
    Is it ok?
    Thank you in advance,

    Luiz Almeida

    Like. Reply
    • atexit8 February 13, 2018
      I see those in response to AT+CWJAP command so, it is odd that you are seeing that.
      Like. Reply
  • Łukasz Reszetow October 19, 2017

    Hi, I’ve got a question. Everyone is saying that sometimes after typing AT command they got trash. For me I always get.. nothing.. (Its either “-1” or “4”). Could this also be the reason of lack of the firmware? And second question can I give to ESP-01 current of 1A ? Or is it to high?

    Like. Reply
    • Charles R. Hampton December 27, 2017
      Thanks for reading the article and trying the procedure. I am sorry that you couldn’t make it work. Unfortunately, I have moved on to other projects and cannot revisit this one.
      Like. Reply
  • Artma October 24, 2017

    I followed the guide, but when I was writing the firmware on the CMD windows appeared the next leyend “chip sync error failed to connect to esp8266 timed out waiting for package header”.

    Like. Reply
    • lumenosity December 20, 2017
      Possibly because the particular ESP8266 device you were using had previously had a sketch uploaded to it....or maybe it was defective?
      Like. Reply
  • magicdan November 11, 2017

    very good tuto. Thanks a lot

    Like. Reply
  • 7b_w November 22, 2017

    RX/TX pins swapped.
    I have a programmer like you show here using a USB to TTL converter but I have RX pins (USB-TTL and ESP) go together and same with TX pins. There are many comments on web on this ESP-01 where others have had communication problems only to realize that the RX TX pins were not connected right, they need to be RX-RX and TX-TX and that’s how my programmer is made and has worked flashing micro-python to ESP-01 module no problem.

    Like. Reply
    • 7b_w November 22, 2017
      One thing I haven't considered is that the silk screened labels may already be swapped with the FTDI (USB to TTL) on board chip so what they are saying is to connect TX to TX of your project as example. I need to verify this by tracing the FTDI chip pin to the header pin on the side of the FTDI PCB.
      Like. Reply
    • 7b_w November 22, 2017
      I hope the new firmware works because I have several ESP-01's that when sent AT+GMR return with +GMR (didn't write down the exact numbers) and they appear to be an IP address loaded in the firmware. Many AT commands return ERROR so not sure what has been loaded on to these ESP-01's.
      Like. Reply
  • Jaeyoung Jung December 09, 2017

    What a great explanation. You are saving a lot of people who are struggling for proper setup of these unkind chips.Thank you very much. By the way, ESP-01 setup worked well with this guide, but when I tried to setup ESP-12E with the same flashing curcuit above, I could not connect to the ESP-12E chip. I just add GPIO15 -> GND. Could you please explain more detailed about the Flashing circuit for ESP-12E, the kind of download files, the hexadecimal addresses, 32Mbit Flash size, and so on. I think there should not be different between ESP-01 and ESP-12E in setup except GPIO15 grounding. Thank you very much again.

    Like. Reply
    • Charles R. Hampton December 27, 2017
      Thanks for your input and your report of success with the ESP-01. I, too, have had trouble with the ESP-12 and didn't ever discover the solution. Unfortunately, I have moved on to other projects and cannot revisit this one.
      Like. Reply
  • lumenosity December 20, 2017

    I tried this tutorial and could never get a response from the ESP8266 even tough it is confirmed to work as I can still upload sketches to it and the ESP8266 still works fine as a WiFi server etc.

    The MAIN problem (as I see it with this tutorial) is that it is only useful if your ESP8266 HAS NOT previously been changed from the factory condition….ie…you have never uploaded any sketches to it.

    This tutorial is predicated on connecting to Termite or another serial port program and verifying that the serila port can commuicate with the ESP8266.  HOWEVER…..if your ESP8266 already does not respond to AT commands (which is why I came here in the first place, to try to flash it back to the original firmware that would respond to AT commands) then this tutorial wil probably not work for you.

    This tutorial seems to be all about upgrading the older firmware to newer firmware on ESP8266 devices which have never had sketches uploaded and are in their Original Factory State (if that makes sense).

    What I am still looking for (and many others I can tell from searching the Internet) is a way to flash ESP8266’s that have had sketches uploaded that wiped out the ability to respond to AT commands…..back to a state where they will.

    For me at least, this tutorial did not seem capable of doing so.  Still, it was a learning experience.

    Like. Reply
  • JStru December 27, 2017

    At last - After reading up on so many different articles and watching tons of YouTube videos - I succeeded to Flash ESP-01 Firmware to my module.
    (The only difference from the explanation,  is that I had to keep GPIO0 “LOW” during the firmware flush cycle.)
    Many thanks for a brilliant article.

    Like. Reply
  • dekip January 17, 2018

    I tried everything but i still get “Invalid head of packet ” Anyone gone through this?

    Like. Reply
    • mljac1 February 17, 2018
      I was having the same issue. I used a different serial converter and that worked. They were both FTDI.
      Like. Reply
  • Cliff Anderson February 05, 2018

    I managed to screw up my uart_def settings in my ESP01 (it was bricked), so to recover the situation I re-flashed it to the same versions (SDK v2.0.0; AT v1.3.0.0). The flashing s/w works fine at 115200 post re-flash.

    Everything seemed fine until I tried to communicate with it via putty at 115200 baud (the default rate). Just got garbage back. This implied the baud rate was close, but not correct. After playing around a bit, I found I can communicate with the ESP01 at 128000 baud.

    Does this make sense to anyone? Am I missing something?

    Like. Reply
    • atexit8 February 13, 2018
      I followed this procedure on my two ESP-01. I normally use the Arduino IDE's serial monitor to communicate to the ESP-01. It communicates to the modules at 115200. I am on Windows 10. I find Putty to be a bit of a pain sometimes.
      Like. Reply
    • mharmon12 April 14, 2018
      I'm on windows 10 with ESP8366 DOWNLOAD TOOL and USB to FTDI serial converter. I have found that the voltage supply to ESP-01S (darkish color boards) was very critical. I used a variable one that took 5VDC from USB to FTDI serial converter and adjusted the output to 3.6VDC. This solved two "bricked" ESPs. After flashing, if you press reset and see garbage then change to the baud rate to 74880. This is not a common baud rate, so If your serial comm tool doesn't have that in the drop down list then you may be able to enter it in that place. Termite allows me to enter it manually. After that then clear your serial comm monitor window and reset. You should see the flash summary. I do not know what that all means. At the bottom will be a short little bit of indistinguishable "garbage" but it says "ready". So change your serial comm tool baud rate to 115200 and then you will see all the memory dump "garbage" and at the very bottom it will say "ready". Type in "AT " (no quotes) and press enter key. Then it should reply "OK" maybe a few lines down in your serial comm monitor window. Good luck!
      Like. Reply
  • KirkB February 14, 2018

    On the schematic, is it intentional that you connected the GND of the USB to TTL Converter to the +3.3v rail??  I assume you meant GND to go to the ESP GND or is there something funny going on with virtual gnds??

    Like. Reply
  • hukmur March 10, 2018

    You are the hero, ESP_SAVER 😊 There are a lot of idle resource in youtube, they don’t work. I was finally desperated but you saved my ESP-01. 😊
    In additionally, It can be easier if you you a esp programmer usb, it has 6 pin(yellow) just gpio and gnd must be combined. It’s price is $2. It provide a lot of ease. 😊

    Like. Reply
    • Charles R. Hampton March 11, 2018
      Thanks for the good words. I looked at the device you mentioned and plan to order one. It looks like it would reduce some of the variability in the programming process.
      Like. Reply
  • InfoCatcher March 11, 2018

    Just want to put my grain of sand, recently I bought the ESP-01 Black version 1 Mbyte, tried to flash it this way but as many other users end up with no AT respond. after flashing every firmware out there I was ready to give up but did my last attempt. Maybe it was luck therefore I am not putting this as instructions, only my experience.
    The way I brought the chip to life again was doing this:
    With ESP Download Tool 3.4:
    Flash v2.0 AT Firmware(ESP).bin File at address 0x0
    Crystal 26M / SPI SPEED 40Mhz / SPI MODE “DIO” / FLASH SIZE 8Mbit / SpiAutoSet Checked
    COM x / 115200
    Pins for flashing:
    VCC - 0V
    CH_PD - 3.3V
    TX/RX to corresponding flasher pins
    GPIO0 - 0V
    VCC - 3.3V
    Start Flashing… Flashing Complete
    CH_PD - 0V
    GPIO0 - 3.3V
    CH_PD - 3.3V => this resets the chip (RST Pin was useless in my model)
    Try communicating by AT with chip, if everything successful you can power VCC down
    and try again.
    Hope someone find this useful !!

    Like. Reply
    • Charles R. Hampton March 11, 2018
      Thanks for your input. Sometimes I think that flashing the ESP8266 devices requires some good luck as well as good techniques. Whatever works!
      Like. Reply
  • NilsGulang March 28, 2018

    Tnx for a fantastic article. I am a beginner in this Game, read a lot of guides re the ESP8266-1, this is by far the best.

    Just missing one thing, How to wire if I do not have the USB to TTL converter, meaning using a Arduino UNO instead.
    My idea is to use your circuit with these 4 changes:
    1.Just swapping the USB to TTL converter to a Arduino UNO
    2 Connect Arduino UNO RX to ESP8266-1 RX with a 2/3 voltage divider (chabnging from 5V to 3,3V)
    3 Connect Arduino UNO TX to ESP8266-1 TX
    4 Connect Arduino UNO GND to the same GND as all other GND

    What about my thinking, am I wrong ?
    Happy for comments on my Idea.

    Like. Reply
    • Charles R. Hampton March 28, 2018
      I have not tried what you describe, but it seems likely to succeed, and shouldn't cause any damage. Thanks for the high praise and good luck.
      Like. Reply
  • Works Perfectely!
    I communocateed with ESPlorer v0.2.0-rc5

    Like. Reply
  • Rodsterman July 25, 2018

    Your article is spot on. The web is full of useless and faulty info on these chips. I have given up in frustration several times. I am impressed with the detail and accuracy of your tutorial. I have proceeded further using your guide than any other on the web.
    I have managed to get to the Flashing tool (3,44) and Termite however it comes up Comm Fail although I was able to communicate using the At commands earlier.
    Now I am at a loss. Perhaps you could point me in the right direction as I know you must be tired of this by now.
    Or perhaps anyone else??

    Like. Reply
  • kklimmy September 07, 2018

    I have experienced the same problem as Rodsterman . Managed to communicate with the ESP8266 before starting up Flashing tool 3.4.4. However the next stage requires pressing the reset switch button followed by the flashing switch button and the releasing them one after the other. On clicking the start button of the 3,4,4 I get COM Fail!
    can anyone help with this problem?

    Like. Reply
  • Hafed Bendib September 16, 2018

    Very good article , so detailed and corred, well organized, thanks a lot sir

    Like. Reply
  • Valentin Juvet November 15, 2018

    I have been using a bunch of ESP8266 ESP-01, using a USB to TTL converter (model ftd1232) as power supply during flashing, without any issue. Recently I bought a bunch more (version ESP-01s). And I was not able to flash any of them. I always obtained a reset after a few seconds (rst cause:4). I struggled for weeks to find out what was going on. Then I found this article, and I decided to try to supply the 3.3V externally, without much hope. I used Adafruit’s adjustable breadboard power supply kit. And it totally worked!

    I still don’t understand why it was working with ESP-01 and not with ESP-01s.

    Thank you so much for your help!

    Like. Reply
  • Achille Tsakas November 19, 2018

    Can we use the same circuit but with a Arduino Nano instead of this particular USB-TTL converter?

    Like. Reply
  • paatchu December 17, 2018

    Excellent Article Charlie..!!
    THs is what i was looking for some time.
    I built the Flashing circuit and successfully flashed the new AT version into it.
    Thanks a lot for your time.. 😊

    Like. Reply
  • Andrey Fedorov December 25, 2018

    Perfect the article. Thank you.

    Unfortunately, I found it a bit late and bricked ESP-8266. :-( I suppose, that one of .bin file (user1) was the wrong size (not from the folder 512+512). Now I cannot detect the ESP-8266 neither by the Serial Terminal (when GPIO0 is not GND) nor when GPI0 is on the GND ESP8266 Flash Downloader. :-( I try to change the speed from 115200 to 9600, and no success. :-(

    Like. Reply
  • Sławomir Drewniak January 08, 2019

    Hello,I’ve also followed this qui de and ended up with two boards not responding at all to AT commands. The bor was supplied by external source during flashing.
    Now, Im still getting the below message after the board is powered up:

    ets Jan 8 2013,rst cause:1, boot mode:(3,3)
    load 0x40100000, len 2408, room 16
    tail 8
    chksum 0xef
    load 0x00000000, len 0, room 0
    tail 0
    chksum 0xef
    load 0x00000000, len 0, room 8
    tail 0
    chksum 0xef
    csum 0xef
    csum err

    Interesting fact is the serial speed has change to the 74880 bauds so I can read the above.

    Now I can only flash the borads but whichever version Im uploading it gives me the same result.
    -ESP8266 NONOS SDK V3.0.0
    -ESP8266 NONOS SDK V2.2.1
    -ESP8266 NONOS SDK V2.0.0 20160810

    Any help on that? Did I miss something?

    Like. Reply
    • ayat47 January 26, 2019
      you can take a look at : it explain the headache of working with esp8266. i found it useful, and hope so for you.
      Like. Reply
  • ayat47 January 26, 2019

    Thank you very much for your useful article.
    this works with a few minor change in circuit. by Ardoino UNO and ESP8266-01.
    GPIO-2 leave free(not High neither Low)
    GPIO-0 directly to GND.

    Like. Reply
  • quim cubel micolau January 29, 2019

    Fantastic, very well explained. I had been looking for days to update my ESP01 and this post was great for me. Thank you

    Like. Reply
  • tannenba August 31, 2019

    Trying this. The detect show exactly as you show, however when loading the modules to the tools, the addresses are different and the last two are red.  Tried several times, same result. my first one, blank.bin starts at 0xfc000 instead of the 0xFB000 yours shows.  This is really frustrating.  Suggestions?  Thanks

    Like. Reply
    • tannenba August 31, 2019
      Oops missed the part about setting the address. Where did you get that from?
      Like. Reply
  • dpcons September 08, 2019

    Followed your guide, except I’m using a Tekpower regulated bench power supply.
    I get this error during programming:

    Wrote 421888 bytes at 0x00001000 in 36.4 seconds (92.7 kbit/s)...
    Writing 4096 @ 0x7e000… 0 (0 %)
    1024 (25 %)
    2048 (50 %)
    Invalid head of packet (’‘)
    pic path: ./RESOURCE/ERROR_S.bmp
    com closed
    It doesn’t always happen at the same spot, seems random.
    Anyone else experience this.
    Dan Powell

    Like. Reply