Posts mit dem Label AVR werden angezeigt. Alle Posts anzeigen
Posts mit dem Label AVR werden angezeigt. Alle Posts anzeigen

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!


Montag, 30. Dezember 2013

Chinesischer AVR-ISP

Im Rahmen des chinesischen Advents-Kalenders habe ich u.a. eine Tüte voll USB-AVRISP Adapter gekauft. Im Gegensatz zu den meisten Programmern, die man in der Bucht findet steckt dieser in einem soliden und sehr schlanken Metallgehäuse und preiswert war er obendrein. Da er extrem klein ist, fand ich ihn perfekt als Begleiter, wenn man mal zum Basteln "on the road" ist. Hier ein Familienfoto und eine Nahaufnahme mit Flachbandkabel:

 
Also gleich mal anstecken:

[283553.080099] usb 5-2: new low-speed USB device number 2 using uhci_hcd
[283553.253147] usb 5-2: New USB device found, idVendor=03eb, idProduct=c8b4
[283553.253151] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[283553.253154] usb 5-2: Product: USBHID
[283553.253156] usb 5-2: Manufacturer: zhifengsoft
[283554.564881] generic-usb 0003:03EB:C8B4.0001: hiddev0,hidraw0: USB HID v1.01 Device [zhifengsoft USBHID] on usb-0000:00:1d.0-2/input0
[283554.564939] usbcore: registered new interface driver usbhid
[283554.564944] usbhid: USB HID core driver


Hm - ein HID device? Ich hatte jetzt eher mit ttyUSB oder sowas gerechnet - merkwürdig. Laut eBay Verkäufer wird das Ding von Progisp 1.72 unterstützt. Davon hab ich noch nie gehört und eine Google-Suche führt mich auf diverse, in elaboriertem Chinglish verfasste Seiten mit wenig vielversprechenden Screenshots voller fernöstlicher Schriftzeichen. Sowas will ich nicht haben, sondern meinen geliebten avrdude! Also weitersuchen. Die Beschreibung sagt etwas von USBasp - den kennt avrdude. Also testen wir das mal:

$ avrdude -p m328p -c usbasp -U flash:r:foo.dat:i
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

avrdude done.  Thank you.


Das war wohl nix - offenbar sollte der USBasp die ID 16c0:05dc haben und nicht 03eb:c8b4 wie mein chinesisches Kleinod (Typ: MX-USBISP-V3.00, 2013-03-15 laut silkscreen). Also mal nach der ID googeln. Aha - ich bin nicht allein mit meinem Problem: Das Ding ist zwar hardwaremäßig fast ein USBasp, aber das weiß seine Firmware nicht. Zu allem Überfluss kommt die originale USBasp Firmware nicht mit dieser Hardware klar - grumpf!

Also erst mal aufmachen - nur wie? So:

Einfach die Metallhülse in Richtung USB-Stecker schieben. Von innen bietet sich dann folgendes Bild:

Nach einiger Suche hab ich dann eine Lösung gefunden: im GreenPhotons-Blog von [uwezi] fand sich ein Eintrag zu genau dem Ding. Offenbar braucht die USBasp Firmware einen kleinen Tweak, um auf diesem Progammer zu laufen. Auf obiger Seite kann man auch eine bereits gepatchte Firmware herunterladen, falls man zu feige zum compilieren ist. Das folgende ist nicht auf meinem Mist gewachsen, ich gebe es aber hier wieder, damit zukünftige Leidensgenossen einen weiteren Anlaufpunkt bekommen:
  1. Zunächst besorge man sich die USBasp Firmware
  2. Dann muß diese leicht modifiziert werden:
    in main.c finden sich die Zeilen

    int main(void) {
      uchar i, j;

      /* no pullups on USB and ISP pins */
      PORTD = 0;
      PORTB = 0;
      /* all outputs except PD2 = INT0 */
      DDRD = ~(1 << 2);


    die letzte Zeile muss so verändert werden:
      DDRD = 0x00;
  3. Compilieren
  4. Metallgehäuse abziehen
  5. Auf der Unterseite der Platine finden sich zwei Kontakte, die mit "-> up <-" gekennzeichnet sind. Diese mit einem Stück Schaltdraht überbrücken. Nun ist das Ding im self-programming mode
  6. Mit einem anderen ISP-Programmer die neue Firmware flashen z.B.:
    avrdude -p m8 -c stk500v2 -P /dev/ttyACM0 \\
      -U flash:w:20130212_mega8_usbisp.hex:i
  7. Schaltdraht-Brücke raus, Gehäuse drauf
  8. Fertig
 Nun meldet sich das gute Stück korrekt als USBasp:

[285378.660075] usb 5-2: new low-speed USB device number 3 using uhci_hcd
[285378.832112] usb 5-2: New USB device found, idVendor=16c0, idProduct=05dc
[285378.832122] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[285378.832129] usb 5-2: Product: USBasp
[285378.832135] usb 5-2: Manufacturer: www.fischl.de


Und auch avrdude ist nun zufrieden:

avrdude -p m328p -c usbasp -U flash:r:foo.dat:i
avrdude: AVR device initialized and ready to accept instructions

Reading |###################################| 100% 0.01s

avrdude: Device signature = 0x1e950f
avrdude: reading flash memory:

Reading |###################################| 100% 5.26s

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


Sehr gut! Und zuguterletzt sei noch erwähnt, dass man angeblich auch mit unmodifizierter USBasp Firmware arbeiten kann, wenn man ein paar Lötbrücken vom Board entfernt - ich fand die Firmware-Modifikation aber eleganter.

Einsatz mit AtmelStudio

Im Gegensatz zu avrdude unterstützt AtmelStudio den USBasp nicht. Das heißt aber nicht, das der Programmer nicht dennoch zum Einsatz kommen kann! Zwei Lösungsmöglichkeiten habe ich gefunden:
  1. Eine stk500 kompatible Firmware auf den Programmer flashen (z.B. die von Christian Ulrich).
  2. avrdude unter AtmelStudio als externen Programmer einbinden. Auf microcontroller.net hat user [eduardo] hat eine Anleitung dazu verfasst.

Fazit

Ein netter kleiner Programmieradapter, der nach obiger Firmware-Transplantation durchaus empfehlenswert ist.

Montag, 30. April 2012

JTAGICE-MKII clone

Ich habe ein neues Spielzeug: einen chinesischen Clone des AVR JTAGICE-MKII. War im Vergleich zum Atmel Original ziemlich günstig (ich hab noch weniger bezahlt, als die Sure-Homepage angibt...). Der Versand aus China dauerte ca. einen Monat und vor ein paar Tagen habe ich das Päckchen dann beim Zollamt gegen einen kleinen Obulus (Einfuhrumsatzsteuer) in Empfang genommen – Freude!

Viel habe ich noch nicht damit gemacht, aber ich wollte Euch das Ding trotzdem schon mal kurz vorstellen. Sieht von außen exakt aus, wie das Original:

I

Im Innern findet sich dann eine ganz ordentlich aussehende Platine: 

Ein wenig herumtracen ergab, daß die beiden Header oben rechts wohl JTAG Header für die beiden ATmega128A Chips sind, die auf dem Bord stecken (auch wenn ich noch nicht alle Pins zugeordnet habe). Ich hab die gleich mal bestückt. Leider habe ich kein zweites JTAG Gerät, sonst hätte ich auf diesem Weg vermutlich ein Firmware-Backup machen können (Hey Chris, Du brauchst doch bestimmt auch eins - oder? ;-)  ). Und mein Versuch, das Ding dazu zu bringen, die eigene Firmware auszulesen ist erwartungemäß gescheitert ;-)

First Light

Immerhin habe ich schon mal einen ersten Funktionstest gemacht: Arduino Flash auslesen im ISP-mode mit avrdude:

  avrdude -p m328p -c jtag2isp -P usb -U flash:r:flash.bin:r

...das ging wie eine Eins :-))
Was ich bisher nicht hingekriegt habe, ist das JTAGICE unter Avrstudio4 in Betrieb zu nehmen. Allerdings weist einiges darauf hin, daß das ein Problem mit der Virtualbox ist und nicht mit dem Gerät selbst. Muß das bei Gelegenheit mal mit einem nativen Windows probieren. OK – gelöst: war ein temporärer Schluckauf bei der Treiberinstallation. Nu gehts und ich habe bereits die Firmware mit AVR-Studio auf den neusten Stand gebracht. Im Gegensatz zu vielen anderen China-Clones läuft dieser nämlich mit der original Atmel Firmware.

Für einen richtigen Test muß ich mir aber erstmal irgendwas aufbauen – vielleicht mit meinem STK500. Der Arduino ist so out of the box weniger geeignet, denn da muß man erst einen Kondensator amputieren oder mindestens einen Trace kappen (je nach Modell) bevor der bei DebugWire mitspielt und dazu hatte ich heute keine Lust. Also muß ich nun wirklich was zum debuggen finden – zu dumm, daß meine Programme nie Bugs haben ;-)

Update

Inzwischen hab ich einen ATmega16 aus der µC Schachtel geholt und in das STK500 gesteckt. Noch den JTAG-Adapter drauf und ein bisschen herumprobiert und schon konnte ich ein kleines C-Programm via JTAG flashen und auch mit der Kombination avarice/gdb eine Debugging-Session starten. Funktioniert tatsächlich recht gut!  :-)

Jetzt muß ich nur noch meine rudimentären gdb Kenntnisse auf Vordermann bringen, dann ist kein Bug mehr vor mir sicher ;-)

Sonntag, 13. November 2011

Pollin AVR Evaluationsboard: Inbetriebnahme

Nachdem wir bei unserer letzten Bastelsession schon fast fertig mit dem Aufbau geworden sind, hab ich es nun fertig gebaut und nach einigen kleineren Problemen in Betrieb genommen. Bzgl. Teile: es waren zu viele LEDs dabei, dafür fehlten die Taster, ein LED war zudem kaputt (natürlich das Netzt-LED, das du Phil schon eingebaut hattest). Taster hatte ich noch genug im Fundus :-). Dann leuchtete zumindest shon mal die Netz-LED beim Anschließen an die Stromversorgung.

Hab gleich auch noch die beiden anderen LEDs auf dem Board gecheckt. Die waren in Ordnung, aber irgendwer hat sie falsch herum eingelötet ;-). Es war halt schon kurz vor dem Abendessen, als wir das gemacht hatten und wahrscheinlich waren wir schon unterzuckert... Aber es hatte auch ein Gutes: ich konnte gleich ausgiebig das Auslöten mittels Entlötlitze und (reichlich) Fluxstift üben.

Dann ging es daran das Board mittel USB2Serial-Konverter an Rechner anzuschließen und das Beispielprogramm (schnell umgeschrieben auf den AtMega8, den ich grade zur Hand hatte) mittels PonyProg zu flashen (über Bit-Banging). Tja, das hat nicht funktioniert. Verbindung zum Board instabil, flashen dauert ewig (im Minutenbereich) und schließlich immer mit Fehlermeldung abgebrochen. Hatte auch Angst, dass ich den AVR "verfused". Bitbanging ist echt Mist und ist nicht mal im Notfall brauchbar - bloß keine Zeit damit vertun.

Da musste ein gscheiter Programmer her: mein AVRUsbLab ;-). Das funktionierte mit AVR-Studio raz-faz und ohne Probleme. Konnte das mit Bascom compilierte HEX-file dort mittels MKII-Protokoll super flashen.

Tataa: das Testprogramm funktioniert! Die viel beschriebenen Probleme mit Spannungseinbruch und einfrieren/resetten wegen der Hardwareentprellung der Taster treten bei mir nicht auf. Habs daher erst mal so gelassen, da es funktioniert hat. Auch die Rückkommunikation zum PC über die zweite serielle Schnittstelle funktionierte tadellos (man muss nur die Baudrate der Schnittstelle am PC von 9600 auf 19200 erhöhen).

Zum Schluss noch ein schönes Foto ;-):