Mittwoch, 1. Januar 2014

ISP-Adapter Wettrennen

Inzwischen haben sich in meiner Bastelkiste diverse AVR ISP-Adapter angesammelt und so bin ich auf den Gedanken gekommen, mal ein Wettrennen zwischen den Geräten zu veranstalten.

Die Kontrahenden

  1. Atmel STK500
    Der Klassiker unter den AVR Evaluation boards. Auch als ISP zu gebrauchen.
  2. Diamex/Stange ISP-PROG
    stk500v2 kompatibel und bisher mein Standard-Programmer. Mit 2 DIP-Switches kann man die Versorgungsspannung ein bzw. ausschalten und von 5V auf 3.3V umstellen.
  3. Diamex ERFOS-PROG-S
    Ebenfalls stk500v2 kompatibel. Keine Spannungsversogung des Hosts. Signalpegel 3.3V. Er kann neben AVR auch STM32 und NXP/LCP µC programmieren und als USB2UART Adapter verwendet werden.
  4. USBasp Chinaböller (mit modifizierter USBasp Firmware)
    Wie im letzten Post beschrieben: super kleiner und recht solider USBasp-clone mit kleinen Hardware-Differenzen. 5V Versorgungsspannung.
  5. USBasp Chinaböller (mit stk500 firmware)
    gleiche Hardware wie 3. aber mit der stk500 Firmware des usb-avr-lab
  6. Bus Pirate v3.6
    Das Schweizer Taschenmesser der digitalen Kommunikation. Eigentlich kein ISP Adapter, aber avrdude unterstützt ihn trotzdem – vermutlich in einer Art bitbanging mode.

Methode


Wir werden mit avdude den Flash Speicher eines Arduino Duemillanove auslesen, gegen das erhaltene File verifizieren und schließlich das Hexfile wieder in den µC flashen. Praktischerweise gibt avrdude auch gleich an, wie lang eine Operation gedauert hat. Für den ISP-PROG sieht das entsprechenede Kommando (read flash) dann so aus:

$ avrdude -p m328p -c stk500 \\
  -P /dev/ttyACM0 -U flash:r:foo.hex:r
avrdude: AVR device initialized and ready to accept instructions
Reading |###################################| 100% 0.02s

avrdude: Device signature = 0x1e950f
avrdude: reading flash memory:
Reading |###################################| 100% 6.34s

avrdude: writing output file "foo.hex"
avrdude: safemode: Fuses OK
avrdude done.  Thank you.


Ich habe jede Operation (r/v/w) mit jedem Programmer 3x ausgeführt und die Zeiten haben maximal in der letzten signifikanten Stelle um ± 1 differiert.

Die aktuell auf dem ATmege328p des Arduinos befindliche Firmware liefert ein raw-Hex File von 2280 Byte. Beim Lesen des Flash Speichers werden aber offenbar die kompletten 32kB des Controllers gelesen – daher die große Abweichung zwischen den verschiedenen Operationen.

Siegerehrung

Hier die Ergebnisse in absteigender Geschwindigkeit:
  1. Diamex ERFOS-PROG-S
    read      2.9s  (11.3 kB/s)
    verify    0.2s
    write     0.28s  (8.14 kB/s)
  2. Chinaböller (USBasp)
    read      5.25s  (6.24 kB/s)
    verify    0.37s
    write     0.46s  (4.95 kB/s)
  3. Diamex/Stange ISP-PROG
    read      6.3s  (5.2 kB/s)
    verify    0.45s
    write     0.55s  (4.15 kB/s)
  4. Chinaböller (stk500v2)
    read    17.7s  (1.85 kB/s)
    verify    1.24s
    write     3.56s  (0.64 kB/s)
  5. Atmel STK500
    read      41.6s  (0.79 kB/s)
    verify     2.90s
    write      3.17s  (0.72 kB/s)
  6. Bus Pirate
    read     126s  (0.26 kB/s)
    verify    8.5s
    write     9.0s  (0.25 kB/s)

Fazit

Das STK500 ist überraschend lahm in vergleich zu den diversen billig-Programmern. Als USBasp schlägt sich der Chinaböller ganz gut gegen den ISP-PROG, der ERFOS-PROG-S steckt beide in die Tasche. Sehr überraschend fand ich den enormen Geschwindigkeitsabfall den der Chinaböller erlebt, wenn man die stk500 Firmware des USB-AVRlab verwendet. Und über die Geschindigkeit beim Bus Pirate schweige ich lieber ;-)

Für den Hobbybereich ist die Geschwindigkeit natürlich komplett wurscht, aber interessant finde ich es dennoch. Der Chinaböller landet auf alle Fälle in meinem Bastelkit für unterwegs!


Keine Kommentare:

Kommentar veröffentlichen