Hallo,
ich habe ein Atmega2560 Pro Board. Dabei lassen sich die Fuses nicht
über die USB-Schnittstelle bzw. den Bootloader setzen.
Daher hatte ich versucht, die per Source-Code zu setzen. Gefunden habe
ich dazu mehrere Beispiele im Internet, u.a. das hier:
https://www.nongnu.org/avr-libc/user-manual/group__avr__fuse.html
Nachdem das auf dem Board per Software nicht funktioniert hatte, war
meine Vermutung, dass es am Board liegt und daher habe ich das für einen
Atmega2560 auf dem STK600 probiert.
Hier der Source dazu:
Das ich dort den Bodlevel0 eingetragen habe, hat nur den Grund, dass ich
überhaupt eine Änderung an den Fuses gegenüber vorher sehen wollte. Ich
habe auch bei einem weiteren Test High-Fuse & ~FUSE_JTAGEN eingetragen.
Ich habe mit avrdude zunächst die hex-Datei übertragen. Irgendwo im
Internet habe ich gelesen, dass ich die elf-Datei übertragen muss. Der
Aufruf war folgendermaßen:
Aber auch das hat nicht funktioniert.
Auch beim Überspielen der elf-Datei mit Mikrochip-Studio hat das nicht
funktioniert.
Daraufhin habe ich das zum Testen mit der arduino-IDE gemacht.
STATUS_LED_DDR=(1<<STATUS_LED);// PB5 an PORTB als Ausgang setzen
17
}
18
19
voidloop(){
20
// put your main code here, to run repeatedly:
21
STATUS_LED_PORT^=(1<<STATUS_LED);
22
_delay_ms(1500);
23
}
Aber auch das hat nicht funktioniert. In der Arduino-IDE habe ich das
per Programmer auf das STK600 gespielt. Dort wird allerdings immer die
Hex-Datei aufgerufen.
Kann mir jemand sagen, was ich falsch mache?
Vorab vielen Dank.
Andreas
Würde mich nicht überraschen wenn die Fuses nur via ISP/Debug Port
veränderbar sind.
Lies mal das entsprechende Kapitel im Handbuch des µC nach.
Da bei AVR auch der primäre Oszillator in den Fuses drin ist, wird es
mit dem Setzen in Software eher schwierig.
Die Fuse Daten landen via Liker im ELF und können so von ISP Tools wie
avrdude direkt benutzt werden (d.h. von Tools die Fuses schreiben
können).
Kann sein das diese Daten gar nicht erst im Hex landen - da würde ich
mal nach der Zeile im Makefile schauen die das Hex erzeugt.
Andreas schrieb:> Daher hatte ich versucht, die per Source-Code zu setzen. Gefunden habe> ich dazu mehrere Beispiele im Internet, u.a. das hier:> https://www.nongnu.org/avr-libc/user-manual/group__avr__fuse.html
Dann lies nochmal genau nach, was da steht.
Fuses setzen über Software geht nicht. Das geht nur über einen
ISP/Jtag/…Programmer, nicht jedoch über einen bootloader.
Wenn dein Board die dafür erforderlichen Pins nicht rausführt, dann
gehts halt gar nicht. Das ist allerdings ziemlich unwahrscheinlich.
https://forum.arduino.cc/t/fuses-uber-arduino-board-andern/176933/4> In der Arduino-IDE habe ich das> per Programmer auf das STK600 gespielt. Dort wird allerdings immer die> Hex-Datei aufgerufen.
AVRDude von Hand mit dem elf-file aufrufen würde helfen, aber eben nicht
über den bootloader.
Oliver
Andreas schrieb:> Gefunden habe ich dazu mehrere Beispiele im Internet, u.a. das hier:> https://www.nongnu.org/avr-libc/user-manual/group__avr__fuse.html
Da steht doch explizit drin, dass das nur eine ELF-Section mit den Fuses
erzeugt, die dann von geeigneten Programmer-Tools gelesen wird.
Bringt Dir also gar nichts, wenn Dein Bootloader Dich nicht an die Fuses
lässt.
Andreas schrieb:> avrdude.exe -p atmega2560 -P usb -c stk600 -U> flash:w:AVR_Set_Fuses.elf:a
Damit werden ohnehin keine Fuses geschrieben.
Andreas schrieb:> Irgendwo im Internet habe ich gelesen
Tolle Quelle. Wie wär's stattdessen mit der offiziellen
AVRDUDE-Dokumentation?
Jim M. schrieb:> Kann sein das diese Daten gar nicht erst im Hex landen - da würde ich> mal nach der Zeile im Makefile schauen die das Hex erzeugt.
Mit dem Hex-File kann ich nachvollziehen. Aber ich habe das auch mit dem
elf-File versucht.
Jim M. schrieb:> Lies mal das entsprechende Kapitel im Handbuch des µC nach.
Das ich die Fuses nicht direkt in der Software ändern kann, dass hatte
ich verstanden. Aber laut der von mir verlinkten Seite, sollte das auf
die Art gehen. Danke Dir trotzdem für Deine Anmerkung.
Oliver S. schrieb:> Dann lies nochmal genau nach, was da steht.> Fuses setzen über Software geht nicht. Das geht nur über einen> ISP/Jtag/…Programmer, nicht jedoch über einen bootloader.
Vielleicht solltest Du mal genau lesen, was ich im Eingangsbeitrag
geschrieben habe. Dann hättest Du festgestellt, dass ich das beim STK600
gemacht habe. Ohne Bootloader.
Oliver S. schrieb:> AVRDude von Hand mit dem elf-file aufrufen würde helfen, aber eben nicht> über den bootloader.
Auch hier hilft lesen meines Eingangsbeitrages. Darin steht, dass ich
das elf-File auf das STK600 übertragen habe. Sogar ohne avrdude und nur
mit Mikrochip. Wenn von Dir nichts hilfreiches kommt, dann lass es doch
einfach. Ich habe auch den Eindruck, dass Du die von mir verlinkte Seite
gar nicht gelesen hast.
Hmmm schrieb:> Bringt Dir also gar nichts, wenn Dein Bootloader Dich nicht an die Fuses> lässt.
Nochmal, ich habe es auch über Mikrochip-Studio direkt auf einen
Atmega2560 auf dem STK600 versucht. Dabei habe ich auch das elf-File
übertragen. Auch dies ging nicht.
Andreas schrieb:> Ich habe mit avrdude zunächst die hex-Datei übertragen. Irgendwo im> Internet habe ich gelesen, dass ich die elf-Datei übertragen muss.
Nicht "muss", aber ELF macht vieles einfacher.
> Der Aufruf war folgendermaßen:
1
>avrdude.exe-patmega2560-Pusb-cstk600-U
2
>flash:w:AVR_Set_Fuses.elf:a
Da wird der Flash geschrieben. Es fehlt ddas Schreiben der Fuse Section.
Soweit ich weiß kann man die Fuses zwar im Programm angeben, aber
dadirch landen dien nicht per Magie auf dem Device. Schreiben muss man
die Fuses schon, und die liegen eben im normalen Progammspeicher, wie er
mit flash:w übertragen wird.
Müsste sowas sein wie:
Andreas schrieb:> Kann mir jemand sagen, was ich falsch mache
Du hast keinen ATmega2560 board sondern einen ARDUINO 2560(pro).
Bei dem lassen sich fuses nicht setzen aka verändern.
Denn er ist schon programmiert mit einem Programm namens bootloader und
fuses passend zum Quartz auf dem board.
Deine 'Programme' aka Sketche werden nur noch seriell hochgeladen.
Wenn du den ATmega2560 runterlötest und in einen richtigen Programmer
steckst, kannst du alles machen.
u.a. hex oder elf reinprogrammieren.
Michael B. schrieb:> Wenn du den ATmega2560 runterlötest und in einen richtigen Programmer> steckst
ISP: in-system programming
(also called in-circuit serial programming: ICSP)
Andreas schrieb:> Nochmal, ich habe es auch über Mikrochip-Studio direkt auf einen> Atmega2560 auf dem STK600 versucht. Dabei habe ich auch das elf-File> übertragen. Auch dies ging nicht.
Den Grund dafür habe ich Dir genannt:
Hmmm schrieb:> Damit werden ohnehin keine Fuses geschrieben.
Und Johann hat dann noch mehr dazu geschrieben. Man muss AVRDUDE schon
sagen, was es alles tun soll, in Deinem Fall war das nur das Schreiben
des Flashs.
Johann L. schrieb:> Da wird der Flash geschrieben. Es fehlt ddas Schreiben der Fuse Section.> Soweit ich weiß kann man die Fuses zwar im Programm angeben, aber> dadirch landen dien nicht per Magie auf dem Device. Schreiben muss man> die Fuses schon, und die liegen eben im normalen Progammspeicher, wie er> mit flash:w übertragen wird.
Ah, ok. Danke. Dann hatte ich das Ganze falsch interpretiert. Ich hatte
das so verstanden, wenn das im Sourcecode steht, dann wird beim flashen
automatisch auch die Fuses gesetzt.
Ich werde das morgen, so wie Du geschrieben hast, mit dem elf-File und
dem setzen der Fuses auf dem STK600 mal testen. Nur rein aus Interesse,
löst zwar nicht mein Problem. Das es über den Bootloader nicht geht, ist
mir schon klar.
Michael B. schrieb:> Wenn du den ATmega2560 runterlötest und in einen richtigen Programmer> steckst, kannst du alles machen.
Das war auf dem STK600 ein separater 2560. Der wurde dort über ISP
programmiert. Aber wie ich zu Johann geschrieben hatte, habe ich das
Ganze falsch verstanden. Bin davon ausgegangen, steht im elf-File, dann
werden die mitgesetzt. Aber habe es jetzt verstanden. Dann muss ich die
auf dem Board auch über ISP setzen.