diff --git a/README.md b/README.md
index 89c241c5..b71d098f 100644
--- a/README.md
+++ b/README.md
@@ -238,7 +238,7 @@ See BUILD OPTIONS below, to configure the firmware before building.
- GNU flex, bison, gawk, sed
- python, python-serial, libexpat-dev
- srecord
- - The esp-open-sdk from https://github.com/pfalcon/esp-open-sdk.git
+ - The esp-open-sdk from https://github.com/pfalcon/esp-open-sdk
### Build instructions:
@@ -309,16 +309,40 @@ Identify your firmware builds by editing `app/include/user_version.h`
#endif
```
-#Flash the firmware
-nodemcu_latest.bin: 0x00000
-for most esp8266 modules, just pull GPIO0 down and restart.
+# Flash the firmware
+
+## Flash tools for Windows
+
You can use the [nodemcu-flasher](https://github.com/nodemcu/nodemcu-flasher) to burn the firmware.
-Or, if you build your own bin from source code.
-0x00000.bin: 0x00000
-0x10000.bin: 0x10000
+## Flash tools for Linux
-*Better run file.format() after flash*
+Esptool is a python utility which can read and write the flash in an ESP8266 device. See https://github.com/themadinventor/esptool
+
+## Preparing the hardware for firmware upgrade
+
+To enable ESP8266 firmware flashing, the GPIO0 pin must be pulled low before
+the device is reset. Conversely, for a normal boot, GPIO0 must be pulled high
+or floating.
+
+If you have a [NodeMCU Development Kit](http://www.nodemcu.com/index_en.html) then
+you don't need to do anything, as the USB connection can pull GPIO0
+low by asserting DTR, and reset your board by asserting RTS.
+
+If you have an ESP-01 or other device without inbuilt USB, you will need to
+enable flashing yourself by pulling GPIO0 low or pressing a "flash" switch.
+
+## Files to burn to the flash
+
+If you got your firmware from [NodeMCU custom builds](http://frightanic.com/nodemcu-custom-build) then you can flash that file directly to address 0x00000.
+
+Otherwise, if you built your own firmware from source code:
+ - bin/0x00000.bin to 0x00000
+ - bin/0x10000.bin to 0x10000
+
+Also, in some special circumstances, you may need to flash `blank.bin` or `esp_init_data_default.bin` to various addresses on the flash.
+
+If upgrading from `spiffs` version 0.3.2 to 0.3.3 or later, or after flashing any new firmware, you should run `file.format()` to re-format your flash filesystem.
#Connect the hardware in serial
baudrate:9600