Go Down

Topic: Arduino Bootloader (Read 6564 times) previous topic - next topic

Megaionstorm

1) Wurden die Arduino Bootloader mit der Arduino IDE oder dem AVR Studio erzeugt ?
Kann man mit der Arduino IDE auch selbstgestrickte Bootloader erzeugen oder geht das nur mit dem AVR Studio ?

2) Sind die Arduino Sketche Arduino Bootloader abhängig ?
Sind die Sketche auch auf einem IC lauffähig der keinen Bottloader hat ?
Wenn ich eine Hex-Datei eines Sketches mit der AVRISP per ISP übertrage dann wird doch ein eventuell vorhandener Arduino Bootloader überschrieben oder ?
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

MaFu

Quote
1) Wurden die Arduino Bootloader mit der Arduino IDE oder dem AVR Studio erzeugt ?
Kann man mit der Arduino IDE auch selbstgestrickte Bootloader erzeugen oder geht das nur mit dem AVR Studio ?

AVR Studio

Quote
2) Sind die Arduino Sketche Arduino Bootloader abhängig ?
Sind die Sketche auch auf einem IC lauffähig der keinen Bottloader hat ?
Wenn ich eine Hex-Datei eines Sketches mit der AVRISP per ISP übertrage dann wird doch ein eventuell vorhandener Arduino Bootloader überschrieben oder ?

Der Bootloader ist ausschließlich für das Übertragen der Sketche zuständig, diese sind somit auch ohne Bootloader lauffähig.
Wenn die Sketche per ISP übertragen werden wird der Bootloader überschrieben.
_______
Manfred

volvodani

Zu 2) Beim übertragen der Sketche mit ISP sparst du sogar 2kB also du hast 2kB mehr platz für dein Programm (Basis 2k9-Bootloader) mit dem Uno sind es nur 0,5kB mehr Platz für dich.
"Komm wir essen Opa!" - Satzzeichen retten Leben!

Zuse

Hallo zusammen,

genau um diese 2K geht es mir auch...

Ich habe mir einen "mySmartUSB light" (AVR-ISP-Programmer) zugelegt und möchte ein Programm auf den Mini schaffen.
Das Programm hat mit rund 14600 Byte eigentlich gerade noch im 168er Mini Platz, aber wegen Bootloader eben nicht.

Einen Adapter muß ich löten, das ist mir klar, weil der Mini ziemlich "nackt" ist, aber mehr beschäftigt mich die Frage, ob und wenn ja wie ich das Programmieren aus der Arduino-IDE erledigt bekomme.

Irgendwelche Tips?

Gruß
Manfred


Megaionstorm

Quote
atmega328.name=Arduino Duemilanove or Nano w/ ATmega328

atmega328.upload.protocol=stk500
atmega328.upload.maximum_size=30720
atmega328.upload.speed=57600

atmega328.bootloader.low_fuses=0xFF
atmega328.bootloader.high_fuses=0xDA
atmega328.bootloader.extended_fuses=0x05
atmega328.bootloader.path=atmega
atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex
atmega328.bootloader.unlock_bits=0x3F
atmega328.bootloader.lock_bits=0x0F

atmega328.build.mcu=atmega328p
atmega328.build.f_cpu=16000000L
atmega328.build.core=arduino


Dies ist ein Auszug aus der Datei Boards.

Was würde den passieren wenn ich den Eintrag
'atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex'
durch
'atmega328.bootloader.file=blinkwithoutdelay.hex'
ersetzen und danach die Funktion 'Bürn Bootloader/with Arduino as ISP' benutzen würde ?
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

voithian

#5
Feb 26, 2011, 06:45 pm Last Edit: Feb 26, 2011, 07:05 pm by voithian Reason: 1


Quote
2) Sind die Arduino Sketche Arduino Bootloader abhängig ?
Sind die Sketche auch auf einem IC lauffähig der keinen Bottloader hat ?
Wenn ich eine Hex-Datei eines Sketches mit der AVRISP per ISP übertrage dann wird doch ein eventuell vorhandener Arduino Bootloader überschrieben oder ?

Der Bootloader ist ausschließlich für das Übertragen der Sketche zuständig, diese sind somit auch ohne Bootloader lauffähig.
Wenn die Sketche per ISP übertragen werden wird der Bootloader überschrieben.


Hallo zusammen,

das Thema hat mich auch interessiert und ich habe den Flash-Speicher meines Arduino Mega 2560 mit dem avrisp mal ausgelesen. Die Adressen liegen bei anderen Arduinos höchstwahrscheinlich anders.

Folgende Erkenntnisse bei mir:

1. eigentliches Programm liegt ab Adresse  0 bis ungefähr 3000 dez.
2. Bootloader-Code beginnt bei mir ab (Wort)Adresse 1F000 hex (also 4096 Worte vor Ende)
3. In den Fuses des ATMega ist Fuse BOOTRST gesetzt (also 0) und die BOOTSZ Fuses für Größe und Adresse des Bootloaders sind auch entsprechend gesetzt. Das ist die Standardeinstellung bei meinem Arduino Mega 2560 Board.
Durch diese Fuses springt der Controller bei einem Reset zuerst nicht nach Adresse 0 sondern nach 1F000 auf den Beginn des Bootloader-Codes.

Daher schließe ich mal folgendes:
Wenn ich mit dem ISP nur das Programm in den Controller lade, wird der Bootloader erst einmal nicht überschrieben, außer wenn das eigentliche Programm aufgrund seiner Größe auch die letzten 2K/4K des Flashs benötigt. Der ISP beschreibt ja nur die Speicheradressen entsprechen dem Intel-HEX-File.
Beim Flashen eines Bootloaders nimmt der ISP aus dem Intel-HEX-File die Adresse 1F000 (bei Mega 2560) und schreibt den Bootloader dorthin (vereinfacht ausgedrückt, weil Intel-Hex eigentlich nur bis 64K adressieren kann und daher die 'Extended Segment Address Records' als Offset ins Spiel kommen).

Außerdem sollte man die Fuse BOOTRST zurücksetzen, wenn man ohne Bootloader arbeiten will (oder muss, weil man ihn aufgrund des Speicherbedarfs überschrieben hat). Sonst geht es bei einem Reset nicht bei Adresse 0 los, sondern da wo der Controller einen Bootloader vermutet (der aber möglicherweise nicht mehr da ist).

Wenn irgendetwas von meinen Meinungen nicht stimmen sollte, bitte gerne korrigieren.

Edit: Wenn man den Sketch über die IDE übertragen will, muss man möglicherweise noch 'atmega328.upload.maximum_size=30720' in der 'Boards'-Datei anpassen/vergrößern, weil die IDE das als obere Grenze für den Sketch ansehen könnte (um den Bootloader vor dem Überschreiben zu schützen).

Genaueres hierzu kann ich leider nicht sagen, da ich fast nur mit dem AVR Studio arbeite.

Gruß
Wolfgang





Megaionstorm

Das der Bootloader sich am Ende des Speichers befindet ist allerdings sehr interessant !
Vorallendingen auch eine sehr wichtige Information, was sich auch auf den Sprung des Arduinos zu Bootloader Anfang bezieht.
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

voithian

#7
Feb 26, 2011, 07:13 pm Last Edit: Feb 26, 2011, 07:31 pm by voithian Reason: 1

Das der Bootloader sich am Ende des Speichers befindet ist allerdings sehr interessant !
Vorallendingen auch eine sehr wichtige Information, was sich auch auf den Sprung des Arduinos zu Bootloader Anfang bezieht.


Ich denke, ich habe die Informationen richtig im Datenbuch des Controllers verstanden, aber das stimmt ja auch mit meiner Inspektion des Flash-Inhaltes überein. Ist übrigens ganz interessant, mal das Intel-Hex-File zu analysieren. Für manche Leute jedenfalls.

Wenn ich vorher gegoogelt hätte, hätte ich die Grundlagen auch hier gefunden:
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung
Aber so habe ich selbst was gelernt...

Wolfgang



udoklein

Was die Abhängigkeit von Sketches vom Bootloader angeht: 99.9% der Sketches sind nicht abhängig. Abhängigkeiten zu erzeugen ist aber möglich. Sinnvolle Abhängigkeiten könnte ich mir auch vorstellen, aber davon habe ich bisher noch überhaupt keinen Fall gesehen. Außer ein Hinweis in einem der Datenblätter ;)

Was die Erstellung angeht: einige wurden sicher mit AVR Studio erstellt, andere sicher nicht. AVR Studio ist nur eine IDE. Genauso wie die Arduino IDE. Bootloader werden in der Regel per C Compiler oder Assembler erstellt. Man könnte mit etwas Mühe auch mit der Arduino IDE Bootloader erstellen. Das wäre aber ein Haufen unnötige Arbeit weil die Arduino IDE zuviel "aussenrum" macht.

Gruß, Udo
Check out my experiments http://blog.blinkenlight.net

Go Up