Author Topic: Programmer zum Brennen eines Bootloaders  (Read 42374 times)

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Programmer zum Brennen eines Bootloaders
« on: February 27, 2013, 09:44:23 AM »
Salut,
welchen Programmer würdet Ihr empfehlen, um einen Bootloader auf einen Arduino zu brennen und gibt es dazu eine gute Anleitung?

Ciao, Mathias

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Programmer zum Brennen eines Bootloaders
« Reply #1 on: February 27, 2013, 10:01:32 AM »
Die einfachste Lösung ist die "ArduinoISP"-Lösung. Hier wird ein Arduino-Board als Programmer genutzt.
Siehe Anleitung von Arduino:
http://arduino.cc/en/Tutorial/ArduinoISP

Für die Programmierung meiner Attiny nutze ich einen USBtiny Arduino AVR-ISP Programmer USB von Boxtec
http://shop.boxtec.ch/usbtiny-arduino-programmer-p-40910.html

Anleitungen zu diesem Thema gibt es viele im Netz. Diese hier ist noch schön bebildert:
http://elektrotechnik-allerlei.de/bootloader-mit-arduino-uno-und-mysmartusb-brennen/

microtherion

  • freakyfriday
  • Full Member
  • *
  • Posts: 163
  • Karma: +13/-0
Re: Programmer zum Brennen eines Bootloaders
« Reply #2 on: February 27, 2013, 02:22:36 PM »
ArduinoISP ist zuverlässig, wird von der Software gut unterstützt, aber “monopolisiert” halt einen bestehenden Arduino.

Im Augenblick verwende ich gerne einen “Bus Pirate”: http://shop.boxtec.ch/pirate-p-40748.html. Unter vielen anderen Protokollen spricht der auch SPI, man kann sowohl 3.3V als auch 5V Projekte problemlos damit programmieren. Leider unterstützt die Version von avrdude, die im Gegenwärtigen Arduino IDE drin steckt, Bus Pirate nur mit einem langsamen Protokoll; wenn man avrdude selbst baut wird ein viel schnelleres Protokoll unterstützt. Man kann auch den Bus Pirate für das stk500 Protokoll modifizieren. Ein paar Details zu Bus Pirate auf meinem Blog: http://samelimmat.blogspot.ch/2013/02/overqualified-flashlight.html.

Letztes Jahr habe ich auch ein Foca Board als Programmer verwendet, aber diese Methode ist eher abenteuerlich: http://samelimmat.blogspot.ch/2012/08/foca-21-as-avr-isp.html

Alle diese Methoden setzen voraus, dass der RESET Pin auf Deinem Arduino noch funktioniert (man kann ihn ja mit gewissen Fuse-settings disablen, und gerade bei ATtinys ist gelegentlich ein zusätzlicher Pin notwendig). Wenn der RESET Pin disabled ist, braucht man einen 12V Programmierer, z.B.: http://mightyohm.com/blog/products/hv-rescue-shield-2-x/

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Programmer zum Brennen eines Bootloaders
« Reply #3 on: February 27, 2013, 03:48:53 PM »
Merci für die schnelle Antwort!

anscheinend habe ich mir einen Mega2560 mit dem "!!!" bug zerschossen.. Ich gehe davon aus, dass die beschriebenen Methoden auch für den Mega2560 gelten sofern man die richtigen ISP pins verwendet (50-53). Ich werde mal einen Versuch mit einem Arduino als Programmer machen.

Ciao, Mathias

boxtec-support

  • Moderator
  • Hero Member
  • *****
  • Posts: 787
  • Karma: +15/-0
    • Boxtec Web
Re: Programmer zum Brennen eines Bootloaders
« Reply #4 on: February 27, 2013, 07:39:25 PM »
Zum programmieren von Boards nehme ich den von Thomas erwähnten usbtiny (verwendet übrigens einen ATtiny2313), wenns nur um (DIP) ICs geht ist man am besten mit einem selbstgefrickelten Shield mit ZIF Sockel beraten finde ich. Dazu brauchts nur den Quarz und seine 2 Kondensatoren und die Verbindung der 4 erwähnten Leitungen MOSI, MISO, SCK und RESET, schon ist das eigene ISP Shield brennbereit.

Grüsse - Christoph

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Programmer zum Brennen eines Bootloaders
« Reply #5 on: February 27, 2013, 07:47:31 PM »
Salut,
beim Mega2560 hilft mir der ZIF Sockel leider nur wenig, da SMD. Ich muss den Bootloader meines iBoard Pro neu schreiben. Leider liefert der Schreibversuch folgenden Fehler:
Code: [Select]
avrdude: Device signature = 0xffffff
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.
Kennt jemand das Problem? Ich zögere, mit -F weiter zu machen

Ciao, Mathias

microtherion

  • freakyfriday
  • Full Member
  • *
  • Posts: 163
  • Karma: +13/-0
Re: Programmer zum Brennen eines Bootloaders
« Reply #6 on: February 28, 2013, 05:41:57 AM »
Was ist denn ein “!!!” Bug?

Die Device Signature deutet darauf hin, dass in der Schaltung grundsätzlich was falsch läuft (Falsch verdrahtet, ungenügende Stromversorgung, falsche Taktfrequenz). In der Situation ist -F sicher keine gute Idee.

Leider ist auch bei richtiger Verdrahtung vermutlich ein Mega2560 problematisch, weil viele Programmiermethoden (u.a. ArduinoISP) angeblich nur bis 64K Flash funktionieren. Google hat dazu einiges an Diskussionen.

mko

  • Newbie
  • *
  • Posts: 27
  • Karma: +0/-0
Re: Programmer zum Brennen eines Bootloaders
« Reply #7 on: March 01, 2013, 10:52:49 AM »
Ich hänge mich auch mal hier an. Bin gerade am selben Problem. Habe ein IBoard. Theoretisch ein Duemilanove? m328p?

Ich wollte per Arduino ISP gerne den Ariadne Bootloader installieren, da dieser ein TFTP Server enthält um mein IBoard per codebender.cc online übers Web zu programmieren. Laut dem Projekt ist das IBoard unterstützt. 

Ich benutze den Arduino Uno R3 als ISP. Habe laut der Anleitung ein Kondensator auf dem Uno zwischen Ground und Reset angelegt. Leider hatte ich keinen 10uF, habe ein 22uF genommen. Ist das ein Problem? Minus des Kondensators auf Ground...



Wenn ich jetzt den Bootloader brennen will, kommt immer Invalid device signature 0x000000. Habe die Pins vom Arduino wie beschrieben mit dem IBoard verbunden. Auf dem IBoard sind es folgende Pins:


 

Liegt es am Kondensator? Oder wo könnte noch was falsch sein?

Habe natürlich den 3.3V vom Uno mit dem 3.3V vom IBoard verbunden, da das IBoard 3.3 V will. Will eigentlich nicht nur für dieses eine mal Bootloader schreiben extra einen Programmer kaufen  :-[ Vor allem weil ich dann nicht weiss ob es überhaupt funktioniert...

Hab aus lauter Verzweiflung noch ein Parallelport ISP nachgebaut, leider hatte ich ebenfalls keinen Erfolg, immer wieder 0x000000 :-[

Wenn noch jemand eine Idee hat...

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Programmer zum Brennen eines Bootloaders
« Reply #8 on: March 01, 2013, 12:16:28 PM »
Salut,

der "!!!" bug bezieht sich auf einen Bootloader, der keine Strings mit drei Ausrufezeichen verträgt. http://forums.adafruit.com/viewtopic.php?f=25&t=28633. Mein Mega2560 scheint diesen bug zu haben, so dass ich nun den neuen Bootloader brennen will. Bislang ohne Erfolg. Die Verdrahtung habe ich mehrfach geprüft (auch durch meine Frau) und kann beim besten Willen keinen Fehler erkennen. Ich werde mal den 10 uF Kondensator einbauen.
Ich bin auch mit iTead Support in Kontakt und sie haben mir empfohlen einen dedizierten Programmer zu nehmen
Der Mega2560 zeigt übrigens das Verhalten, dass er sich in keiner Weise über den Foca programmieren lässt (timeout)
Ciao, Mathias

microtherion

  • freakyfriday
  • Full Member
  • *
  • Posts: 163
  • Karma: +13/-0
Re: Programmer zum Brennen eines Bootloaders
« Reply #9 on: March 01, 2013, 02:28:39 PM »
mko, der Kondensatorwert sollte kein Problem sein, ich bin ziemlich sicher, dass 10µF nur das Minimum darstellt. Bist Du sicher, dass der Pinout stimmt, d.h.:

• Der “eckig” markierte Pin in der oberen Reihe rechts sollte MISO sein.
• Im Gegensatz zu gewissen anderen Protokollen werden die Datenkabel NICHT gekreuzt, d.h. MISO sollte mit MISO und MOSI mit MOSI verbunden sein, nicht umgekehrt!

Ein Punkt, bei dem ich nicht so sicher bin, ist ob man 3.3V Power mit 5V Logik kombinieren darf. Bei mir hat das auch schon funktioniert, aber ich bin nicht sicher, ob das Probleme geben kann.

mko

  • Newbie
  • *
  • Posts: 27
  • Karma: +0/-0
Re: Programmer zum Brennen eines Bootloaders
« Reply #10 on: March 01, 2013, 04:04:07 PM »
Wie kommst du darauf das der eckige MI ist? Hätte jetzt aus dem Bauch auf GND getippt... wenn du recht hast, wäre bei mir natürlich alles 180 Grad verkehrt ...  :P

Habe ein Elko 22uF genommen, könnte das noch ein Problem sein? Bin gerade daran, einen "richtigen" Kondensator zu suchen...hab dafür mal einen alten LaserDrucker zerlegt...bis jetzt siehts gut aus...



Die grosse Frage bleibt: Muss folgendes Bild 90 Grad nach Links oder nach Rechts gedreht werden, damit es mit dem ISP Platinen Layout passt?


boxtec-support

  • Moderator
  • Hero Member
  • *****
  • Posts: 787
  • Karma: +15/-0
    • Boxtec Web
Re: Programmer zum Brennen eines Bootloaders
« Reply #11 on: March 01, 2013, 04:16:15 PM »
Der markierte Pin ist Pin 1 und das wär MISO. Im Zweifelsfall gibts einen einfachen Trick: Mit einem Durchgangsprüfer schauen wo GND anliegt, damit ist die Orientierung des ICSP def. festgelegt.
Apropos: Am Kondensator liegts nicht da geh ich mit Microtherion absolut einig, Elkos sind auch ganz richtige Kondensatoren, einfach durch Ihre Bauweise mit einer Polarisierung, der Laserdrucker hätte also nicht zur Bauteilernte über die Klinge springen müssen  ;D

mko

  • Newbie
  • *
  • Posts: 27
  • Karma: +0/-0
Re: Programmer zum Brennen eines Bootloaders
« Reply #12 on: March 01, 2013, 04:59:20 PM »
Jiiiihaaaa !!!!! Es klappt! Es war wirklich genau umgekehrt...  ;D

Jetzt bekomme ich Device Signature 0x010101 .... kann es einfach sein, dass das IBoard eine eigene Signatur sendet? Und ich das mit Force übergehen muss? Wenn ja, wie kann ich innerhalb der Arduino IDE den Signatur Check übergehen?

Edit: Hab noch etwas am Kondensator gewackelt... jetzt erhalte ich beim Aufruf von

Code: [Select]
./avrdude -p m328p -P /dev/cu.usbmodemfd1421  -c avrisp -b 19200 -t -C ../etc/avrdude.conf

unter OSX jedes mal eine andere Signatur....

Edit2: Ok, egal ob mit oder ohne Kondensator, die Signatur wackelt einfach hin und her... hab noch den Kondensator gegen einen Elko 220uF getauscht. Selbe Symptome.

Der Elko kommt auf das Board das den ISP spielt, NICHT das Ziel-Board, oder?

Könnte es helfen das IBoard an die Spannung anzuschliessen anstatt vom Arduino zu speisen?
« Last Edit: March 01, 2013, 05:31:40 PM by mko »

boxtec-support

  • Moderator
  • Hero Member
  • *****
  • Posts: 787
  • Karma: +15/-0
    • Boxtec Web
Re: Programmer zum Brennen eines Bootloaders
« Reply #13 on: March 01, 2013, 05:57:46 PM »
Ich würde ev. mal versuchen direkt aus der Arduino IDE den Bootloader zu schreiben, dann stimmen die Paramter für avrdude sicher, z.B. müsste es IMHO -c stk500v1 heissen, wenn ein Arduino ISP verwendet wird. Die Angabe der Baudrate müsste auch nicht nötig sein.

Der Elko ist da richtig, wobei ich den selber noch nie gebraucht habe. Ich bin aber auch nach wie vor nicht sicher, ob ein 3.3V Board mit einem 5V Board immer programmiert werden kann - ich hätte das jetzt intuitiv mit einem anderen 3.3V Board probiert, aber wenn die I/Os 5V tolerant sind (was sie offenbar sind) sollte das trotzdem gehen.
Nur als Hinweis bzgl. Deiner Bemerkung:
Quote
Habe natürlich den 3.3V vom Uno mit dem 3.3V vom IBoard verbunden
Das Ziel Board sollte ausschliesslich über den ICSP versorgt/angeschlossen werden, ich bezweifle dass eine separate Verbindung von 3.3V auf 3.3V des Iboards hilfreich ist (wenn das der Fall ist).

« Last Edit: March 02, 2013, 01:57:18 PM by boxtec-support »

microtherion

  • freakyfriday
  • Full Member
  • *
  • Posts: 163
  • Karma: +13/-0
Re: Programmer zum Brennen eines Bootloaders
« Reply #14 on: March 03, 2013, 08:38:38 AM »
Jiiiihaaaa !!!!! Es klappt! Es war wirklich genau umgekehrt...  ;D

Sehr gut, dann hatte Google recht wegen des Layouts.

Jetzt bekomme ich Device Signature 0x010101 .... kann es einfach sein, dass das IBoard eine eigene Signatur sendet?

Ich bin ziemlich sicher dass die device sig NICHT ein reprogrammierbarer Teil des Chips ist. Wenn die falsch ist, ist was schiefgelaufen.

Code: [Select]
./avrdude -p m328p -P /dev/cu.usbmodemfd1421  -c avrisp -b 19200 -t -C ../etc/avrdude.conf

Aha! Wie der boxtec-mod gesagt hat, ist das Protokoll falsch, muss stk500v1 sein. In der Arduino app hat’s einen Spickzettel:

Code: [Select]
Arduino.app/Contents/Resources/Java/hardware/arduino/programmers.txt

Im gleichen Directory ist noch “boards.txt”, und laut dem lautet der Chip Name eigentlich “atmega328p”, aber es kann gut sein, dass “m328p” ein korrekter Alternativname ist.

 

anything