Arduino und Bootloader

Hi,

ich hab mich in diesem Forum bereits dumm und dusselig gesucht, aber nix gefunden. Folgendes Problem:
Ich sitze an einem Projekt für die http://www.openseamap.org und habe eine eigene Platine designt.
Soweit so gut. Nach ein paar Anlaufschwierigkeiten läuft alles auch soweit. Zumindest das Programm selber. Nun brauch ich aber einen bestimmten Bootloader. Ich bin gerade am verzeifeln.
Kann es sein, das beim Programmieren des Sketches über den ISP (mit einem USBasp) der Bootloader überschrieben wird?
Denn wenn ich den Bootloader installiere funktionert der einwandfrei. (2Boot...) Sobald ich aber einmal einen Sketch hochgeladen habe (auch über den ISP) muckt der Bootloader nicht mehr. Ist es überhaupt möglich über ISP zu programmieren, ohne den Bootloader zu überschreiben?

Hallo,

per ISP überschreibst Du den Bootloader. Der ist ja gerade dazu da, dass Du nicht mehr per ISP programmieren musst. Wenn du eh per ISP programmierst, brauchst Du auch keinen Bootloader.

Wenn Du Dein Programm und den Bootloader gleichzeitig im Flash haben willst, musst Du den Bootloader benutzen um das Programm zu flashen.

Gruß,
Ralf

hab's mir schon fast gedacht.
Den Bootloader brauch ich auf alle Fälle. Denn ich muss im Feld per SD Karte updaten können.
Aber jetzt weiß ich es zumindest expliziet...
Danke.

Den Bootloader brauch ich auf alle Fälle. Denn ich muss im Feld per SD Karte updaten können.

Welchen "Bootloader from SD" verwendest du ? Erfolgreich ?

Hi,

ich nehm den 2Boot. Ich hab den etwas modifiziert.

  • anderer CS Pin
  • das Lesen der Firmware-Datei aus dem EEProm hab ich abgeschaltet und statt dessen einen festen Namen verwendet. Ich habe ein eigenes Board dafür und da kann die Firmware auch einen festen Namen haben.
  • Und ich habe die "Ladegründe" auf EXTRF, PORF und BORF erweitert.

Der Bootloader funktioniert gut. Das größte Problem war, daß ich mir dazu eine Ubuntu VMWare Umgebung einrichten mußte. Unter Windows hab ich das Dingen nicht zum Compilieren gebracht. Und so langsam steig ich auch durch, wie der Bootloader funktioniert.
Als nächste Erweiterung ist übrigens auch an das Laden des EEPROMs gedacht. Um z.B. Konfigurationen zu ermöglichen. Ich hätt ja gerne auch eine FAT32 Unterstützung, aber das passt selbst bei 4K nicht in den Bootloader. :frowning:
Bei interesse poste ich gerne mal den Link auf mein Github Repo.

willie1968:
Bei interesse poste ich gerne mal den Link auf mein Github Repo.

Hallo,

klar, mach doch :wink: Falls VMWare Dir Bauchschmerzen bereitet, empfehle ich als Alternative die VirtualBox von Oracle. Damit lasse ich meine virtuellen Maschinen laufen und hatte eigentlich noch keine nennenswerten Probleme.

Gruß,
Ralf

willie1968:
Bei interesse poste ich gerne mal den Link auf mein Github Repo.

Würde mich auch interessieren. Für welche Arduino-Boards ist der geeignet?

Viele Grüße, paulinchen

Das hört sich für mich so an, als wenn das unlock bit bzw das lock bit vor und nach den programmieren des Bootloaders nicht korrekt gesetzt wird. Dieses Bit sorgt dafür, dass der Speicherbereich des Bootloaders nicht vom Programm überschrieben wird.

Schachmann:
Hallo,

klar, mach doch :wink: Falls VMWare Dir Bauchschmerzen bereitet, empfehle ich als Alternative die VirtualBox von Oracle. Damit lasse ich meine virtuellen Maschinen laufen und hatte eigentlich noch keine nennenswerten Probleme.

Gruß,
Ralf

Bitte schön: GitHub - willie68/OpenSeaMapLogger: Hardwarelogger for the OpenSeaMap project
im Ordner bootloader liegt das gute Stück.

VMWare bereitet mir keine Bauchschmerzen, muss ich eh beruflich mit arbeiten, eher Linux. Ich bin nun mal ein WindowsGuy... 8)
Ich hab's bisher nur mit 'nem 328'er getestet. Also mit meiner eigenen Hardware, bzw. mit einem Duemillanove (Weil da der Chip die DIP variante ist, zum austauschen...)
@erni-berni: Wie setz ich denn das Bit? (Ist doch eher eine der FUSES... damit steh ich nämlich auf Kriegsfuss...)

willie1968:
@erni-berni: Wie setz ich denn das Bit? (Ist doch eher eine der FUSES... damit steh ich nämlich auf Kriegsfuss...)

Hallo,

möglicher Weise hat der Kollege da was verwechselt. So wie ich das verstehe, gibt es nicht ein Lockbit, sondern mehrere Lock-Bits (also Mehrzahl). Was da mit rein spielen könnte, wären:
EESAVE - das bezieht sich aber auf den EEPROM-Bereich und sorgt dafür, dass der EEPROM während eines Programmiervorgangs beim Chip-löschen nicht mit gelöscht wird.
BOOTSZ - legt die Größe der Booloader-Section fest.
BOOTRST - sorgt dafür, dass der Controller den Bootloader nach einem Reset anspringt und nicht die Programmausführung bei Adresse 0x0000 beginnt.
Ein Bit, mit dem man den Bootloader gegen Überschreiben während eines Programmiervorgangs schützen könnte, ist mir nicht bekannt.

Eine Seite, mit der man ziemlich komfortabel die Einstellung der Fuses festlegen kann, ist diese hier: http://www.engbedded.com/fusecalc/. Vielleicht hilft Dir das ja weiter.

Danke für den Link. Ich habe mir Dein Programm noch nicht angesehen, aber es steht schon auf meiner ToDo-Liste. :wink:

Gruß,
Ralf