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