Skip to content

avrdude benchmark for Flash and EEPROM programming

mcuee edited this page Mar 2, 2024 · 25 revisions

Note

  1. Speed is usually not the most important factor when choosing a programmer or bootloader. Stability may be more important. In terms of programmer, budget may play a key role in selecting the programmer. In terms of bootloaders, code size may be an important factor to consider.
  2. This page will focus on the programmers and bootloader mentioned in the FAQ. They are from either Microchip, or from the community (with hardware design and/or firmware source codes available).
  3. The test results below are only for reference.

Methodolody

tools/test-avrdude -b generates an output for which benchmark tables can be filtered. For example,

./test-avrdude -e ./avrdude.exe -b -d 0 -t .\
 -p "-c urclock -P COM20 -p ATmega328P -b 2000000" \
 -p "-c urclock -P COM20 -p ATmega328P -b 1000000" \
 -p "-c urclock -P COM20 -p ATmega328P -b 500000" \
 -p "-c urclock -P COM20 -p ATmega328P -b 250000" \
 -p "-c urclock -P COM20 -p ATmega328P -b 115200" | grep -v ^'[^T |]'

Results

The benchmark shows the wall clock time of avrdude carrying out the following tasks

  • Fl-ewv: erase flash, then write a sketch with three sections separated by holes to flash and verify
  • Fl-r: read the full flash memory and write to file
  • EE-wv: write data with two data sections separated by a hole to EEPROM and verify
  • EE-r: read the full EEPROM memory and write to file

The sketch and data payload is roughly one sixth of the respective memory size

avrdude 7.3 MSVC64 Windows binary, bootloader

-c pgm -p part Fl-ewv Fl-r EE-wv EE-r Comments
urclock ATmega328P 1.73 s 0.62 s 1.25 s 0.45 s -b 2000000 urboot u7.7 -eu-jPrac, ATmega16U2
urclock ATmega328P 1.79 s 0.80 s 1.25 s 0.46 s -b 1000000 urboot u7.7 -eu-jPrac, ATmega16U2
urclock ATmega328P 1.92 s 1.15 s 1.25 s 0.50 s -b 500000 urboot u7.7 -eu-jPrac, ATmega16U2
urclock ATmega328P 2.17 s 1.86 s 1.28 s 0.58 s -b 250000 urboot u7.7 -eu-jPrac, ATmega16U2
urclock ATmega328P 2.76 s 3.49 s 1.34 s 0.81 s -b 115200 urboot u7.7 -eu-jPrac, ATmega16U2
urclock ATmega328P 2.04 s 0.90 s 1.35 s 0.71 s -b 2000000 urboot u7.7 weu-jPrac, FT232RL
urclock ATmega328P 2.09 s 1.02 s 1.35 s 0.71 s -b 1000000 urboot u7.7 weu-jPrac, FT232RL
urclock ATmega328P 2.23 s 1.47 s 1.35 s 0.73 s -b 500000 urboot u7.7 weu-jPrac, FT232RL
urclock ATmega328P 2.48 s 2.08 s 1.36 s 0.74 s -b 250000 urboot u7.7 weu-jPrac, FT232RL
urclock ATmega328P 3.02 s 3.68 s 1.43 s 0.97 s -b 115200 urboot u7.7 weu-jPrac FT232RL
urclock ATmega2560 7.78 s 4.83 s 4.08 s 1.44 s -b 1000000 urboot u7.7 weu-jPrac, CH340
urclock ATmega2560 8.68 s 7.56 s 4.11 s 1.37 s -b 500000 urboot u7.7 weu-jPrac, CH340
urclock ATmega2560 10.51 s 13.13 s 4.13 s 1.59 s -b 250000 urboot u7.7 weu-jPrac, CH340
urclock ATmega2560 14.73 s 25.41 s 4.25 s 2.05 s -b 115200 urboot u7.7 weu-jPrac, CH340
urclock ATmega2560 8.36 s 6.49 s 4.42 s 2.29 s -b 1000000 urboot u7.7 wes-hprac, CH340, STK500v1
urclock ATmega2560 9.31 s 9.40 s 4.41 s 2.37 s -b 500000 urboot u7.7 wes-hprac, CH340, STK500v1
urclock ATmega2560 11.22 s 14.94 s 4.52 s 2.56 s -b 250000 urboot u7.7 wes-hprac, CH340, STK500v1
urclock ATmega2560 15.49 s 27.65 s 4.79 s 3.15 s -b 115200 urboot u7.7 wes-hprac, CH340, STK500v1
wiring ATmega2560 12.41 s 31.17 s 5.62 s 4.37 s -b 115200 -D, MegaCore wiring bootloader, CH340, STK500v2
urclock ATmega328P 9.38 s 4.60 s -- -- -b 115200 old Optiboot o4.4 --s-h-r--, FT232RL, STK500v1
arduino ATmega328P 2.92 s 5.08 s -- -- -b 115200 old Optiboot o4.4 --s-h-r--, FT232RL, STK500v1
urclock ATmega328P 4.38 s 1.38 s -- -- -b 1000000 -xbootsize=512 MiniCore Optiboot o8.0 -?s-?-r--, FT232RL, STK500v1
arduino ATmega328P 1.98 s 2.07 s -- -- -b 1000000 MiniCore Optiboot o8.0 -?s-?-r--, FT232RL, STK500v1

avrdude 7.3 MSVC64 Windows binary, programmers.

Note: USBasp (ATmega8A based) and USBtinyISP (ATtiny2313A based)

-c pgm -p part Fl-ewv Fl-r EE-wv EE-r Comments
usbasp ATmega328P 2.53 s 5.43 s 3.03 s 0.69 s -B 0.25
usbasp ATmega328P 2.49 s 5.40 s 3.03 s 0.64 s -B 0.5
usbasp ATmega328P 3.10 s 6.72 s 3.03 s 0.68 s -B 1
usbasp ATmega328P 3.81 s 8.77 s 3.10 s 0.78 s -B 2
usbasp ATmega328P 4.80 s 9.82 s 3.12 s 0.85 s -B 4
usbtiny ATmega328P 3.54 s 8.97 s 1.38 s 0.56 s -B 0.25
usbtiny ATmega328P 3.56 s 8.73 s 1.36 s 0.56 s -B 0.5
usbtiny ATmega328P 3.53 s 8.98 s 1.39 s 0.57 s -B 1

avrdude 7.3 under Ubuntu 20.04 Linux, programmers

Note: USBasp (ATmega8A based) USBtinyISP (ATtiny2313A based) STK500v2 clone (ATmega8535 based using original firmware, CH340 USB to Serial chip)

-c pgm -p part Fl-ewv Fl-r EE-wv EE-r Comments
usbasp m328p 2.24 s 5.32 s 3.01 s 0.65 s -B 0.25 Ubuntu_Linux_20.04
usbasp m328p 2.24 s 5.32 s 3.00 s 0.66 s -B 0.5 Ubuntu_Linux_20.04
usbasp m328p 2.65 s 6.70 s 3.01 s 0.66 s -B 1 Ubuntu_Linux_20.04
usbasp m328p 3.44 s 8.67 s 3.08 s 0.75 s -B 2 Ubuntu_Linux_20.04
usbasp m328p 4.25 s 9.72 s 3.09 s 0.78 s -B 4 Ubuntu_Linux_20.04
stk500v2 m328p 2.73 s 5.73 s 1.86 s 2.96 s -B 0.25 Ubuntu_Linux_20.04
stk500v2 m328p 2.74 s 5.65 s 1.85 s 2.95 s -B 0.5 Ubuntu_Linux_20.04
stk500v2 m328p 3.08 s 5.92 s 1.88 s 2.98 s -B 1 Ubuntu_Linux_20.04
stk500v2 m328p 3.08 s 5.95 s 1.88 s 3.00 s -B 2 Ubuntu_Linux_20.04
stk500v2 m328p 5.52 s 12.96 s 2.01 s 3.08 s -B 4 Ubuntu_Linux_20.04