From lechacal
Jump to navigation Jump to search


link to the shop

The NanoFlashProg is an Flash programmer using Arduino Nano.

Currently tested chips are:

  • Winbond 25Q128FV
  • Spansion S25FL032P
  • Macronix MX25L8006E

Anticipated to be well supported:

  • Any Winbond 25Qxxx series.
  • Any Spansion S25FLxx series.
  • Any Macronix MX25Lxx series.

This has been particularly designed to flash uboot bootloader on SPI Flash chips.


The NanoFlashProg shield fit on an Arduino Nano. The full kit sold is:

  • Arduino Nano
  • NanoFlashProg Shield
  • SOIC8 Clamp with cable.

Additional hardware required (not provided):

  • Mini USB port for serial comm.
  • SPI flash chip

The chip must be desoldered. It is not possible to clamp on a chip already soldered on a board. You can remove the soldered chip with a air gun. Flash it and resolder it back again.

Connecting the chip

The chip to program should be de-soldered from the PCB. Do not connect the clamp on a soldered chip as supply voltage might conflict.

Connect the ribbon cable ensuring the red wire is on the same side of the white indicator on the NanoFlashProg.

Clamp on the chip ensuring the red wire is on the same side of the dotted pin on the chip.


Sketch v1.0.0
Library v1.0.0


A terminal emulator is required to communicate with the programmer. We recommend Cutecom. HyperTerminal or similar will also work as long as the emulator is able to send a file.


Connect to the programmer using settings 115200 8N1.

On connection the programmer will introduce itself and offer a prompt.

NanoFlashProg v1.0.0
Type h for help

Pressing h and enter will show the help.

> h
R - Read page
D - Dump page
W - Write File
I - Chip Info
E - Chip Erase
H - Help

Flashing Uboot

We recommend downloading uboot from pepe2k repository. Github link.

You must erase the chip before flashing uboot. At the prompt type e and enter. Then answer y to confirm (or anything else to cancel). This will take around 6 seconds to complete.

> e
Erase Entire Chip? (y/n): y
Erasing chip.

Then issue the w command to write a file. The prompt will be waiting for a file. In Cutecom click on Send File. Then select the uboot file downloaded previously.

> w
> Waiting for a file.
Writing page 0
Writing page 1
Writing page 2
Writing page 491

Once the file has been entirely written to the chip it will timeout and return to the prompt.

You can now check the data in the chip by dumping the first page (a page is 256 bytes). Type d and 1 as for one page.

> d
How many pages? 1

If you are on a Linux computer you can use the xxd command to make sure this is the same as the uboot file. Issue the following command on your computer.

xxd -ps u-boot_mod__tp-link_tl-wr703n_v1__20180223__git_master-7a540a78.bin | head

Replace the filename as appropriate. This should output the same data as above.

Backup entire chip

This will create a image file of the chip. We will assume you are using a Linux computer for this. If you have installed Putty you should also have the Plink command available.

Connect to the device with the plink command like so:

plink -raw -serial /dev/ttyUSB0 -sercfg 115200 | tee winbond.txt

At the prompt enter d and 0. 0 means entire chip. The data will then be dumped to the screen (time to take your pet for a walk as this will be really long).

Once complete press Ctrl^C. Using a text editor remove the heading and trailing spurious lines from the prompt so that only the dumped data remains. Then using this command below you can create a binary image of the chip:

xxd -ps -r winbond.txt > winbond.img

Make sure the image is the right size by counting the number of bytes as follow:

wc -c winbond.img

Dump only uboot

If you wish to verify the uboot flash has been entirely successfull use the same as above but enter 492 instead of 0. 492 is the number of pages the uboot file contains (number of pages = number of bytes / 256).

Then you can double check the two files are identical using the md5sum command:

md5sum winbond.img uboot_file.img

This should return 2 identical long numbers.


If the prompt starts with the following message:

Failed requesting device information.

Check connection between the NanoFlashProg and the chip. Then close the serial connection and re-open it to re-initialise the communication.