Forum: Mikrocontroller und Digitale Elektronik Bootloader vor überschreiben schützen


von Philipp L. (Firma: Valeo Klimasysteme GmbH) (kleelauer)


Angehängte Dateien:

Lesenswert?

Hey Leute,

mein Problem ist es, dass ich einen ATMega328p mit AtmelStudio 6.2 mit 
einem ISP-Programmer bespielen, dabei aber nicht den Bootloader 
überschreiben möchte. Das Ziel ist es, den µC sowohl mit einem 
ArduinoUNO mit der ArduinoIDE einen Sketch hochladen zu können, als auch 
mit einem ISP-Programmer in einer Vorrichtung ein Programm zu laden.

Der Bootloader von optiboot für den ATMega328 (Anhang) wird von der 
ArduinoIDE auf den Mikrocontroller geladen, deshalb brenne ich auch 
DIESEN über AtmelStudio auf den Mikrocontroller.

Nehme ich nun die ArduinoIDE mit einem ArduinoUNO und lade einen Sketch 
hoch, so ist der Bootloader weiterhin auf dem µC vorhanden.
Nehme ich AtmelStudio und einen ISP-Programmer und Programmiere den 
Flash-Speicher, so wird der Bootloader überschrieben.
Setzte ich zuerst das Lockbit (BLB1: LPM_SPM_DISABLE, anderen NO_LOCK) 
und lade den Bootloader hoch und lade danach erst das Programm werden 
die Lockbits wieder zurückgesetzt.

Vielleicht eine Frage vorne weg:
Werden die Programme in AtmelStudio genau wie der Bootloader über das 
Tool DeviceProgramming geladen, oder gibt es da noch eine andere 
Möglichkeit, die ich noch in keinem Forum oder sonstigen gefunden habe?

Hauptfrage:
Wie muss ich die Lockbits beim programmieren des Bootloaders setzen, 
damit dieser bei einem zweiten Programmupload nicht überschrieben 
werden, oder müssen die FuseBits bei Bootloader und Programm 
unterschiedlich gesetzt werden?

Vll gibt es auch noch eine andere Möglichkeit.

PS.: Es sollte kein allzu kompliziertes Verfahren sein, da es in Zukunft 
auch ältere Kollegen ausführen sollen.
Ich verwende WIN7 64bit und einen DIAMEX ALL-AVR-Programmer in der 6 PIN 
ISP Einstellung

Gruß
Philipp

von Georg G. (df2au)


Lesenswert?

Findest du im ISP Programmierdialog oder in den Fuses irgendwo die 
Möglichkeit, nur Teile des Flash zu löschen? Es gibt nur die Fuse, das 
EEPROM beim Chip Erase zu schützen. Also hast du schlechte Karten. Die 
Lockbits verhindern nur die Ausführung von lpm und spm Befehlen.

Den Schnack über die dummen älteren Kollegen hättest du dir übrigens 
schenken können.

von Wolfgang (Gast)


Lesenswert?

Philipp L. schrieb:
> mein Problem ist es, dass ich einen ATMega328p mit AtmelStudio 6.2 mit
> einem ISP-Programmer bespielen, dabei aber nicht den Bootloader
> überschreiben möchte.

Wo ist das Problem?
Wenn du den ISP-Programmer benutzt, brauchst du den Bootloader nicht und 
wenn du den Bootloader wieder brauchst, kannst du ihn mit dem 
ISP-Programmer wieder drauf spielen - mal ganz abgesehen von den 
Lock-Bits für die Schreibfunktion.

Wie wäre es mit einem Blick ins Datenblatt? Da finden sich so Sätze wie 
z.B. "Program Flash memory space is divided in two sections, the Boot 
Program section and the Application Program section. Both sections have 
dedicated Lock bits for write and read/write protection."

Das könnte doch ein Ansatzpunkt sein ;-)

von Axel S. (a-za-z0-9)


Lesenswert?

Philipp L. schrieb:
> mein Problem ist es, dass ich einen ATMega328p mit AtmelStudio 6.2 mit
> einem ISP-Programmer bespielen, dabei aber nicht den Bootloader
> überschreiben möchte.

Das geht nicht.

Beim Programmieren über ISP kann man nur den gesamten Flash löschen
(system erase). Andererseits kann man den Teil des Flash der die
Applikation hält, nicht beschreiben ohne ihn vorher zu löschen.
Ergo muß man den Bootloader beim Programmieren über ISP jedesmal
neu mit aufspielen.

Das ist vergleichsweise trivial. Entweder programmiert man in zwei 
Durchläufen:

1. system erase + Bootloader schreiben
2. Applikation schreiben (ohne vorheriges system erase)

Oder man kombiniert die HEX files für Applikation und Bootloader und 
schreibt sie auf einen Rutsch (natürlich nach einem system erase).

Andererseits gibt es keinen Grund, über ISP zu programmieren, sobald der 
Bootloader erstmal drauf ist. Insofern ist das ein Luxusproblem.

von Peter D. (peda)


Lesenswert?

Über ISP kann man nur den gesamten Flash löschen.
Entweder man öffnet mit nem Editor das eine Hex, löscht die letzte Zeile 
und fügt das 2. Hex an.
Oder man schreibt sich ne Batch mit findstr, die das automatisch macht.

von Philipp L. (Firma: Valeo Klimasysteme GmbH) (kleelauer)


Lesenswert?

Georg G. schrieb:
> Den Schnack über die dummen älteren Kollegen hättest du dir übrigens
> schenken können.

Ich wollte nie jemanden als dumm darstellen! Das sollte nur ein Hinweis 
sein, dass nicht irgendwelche extrem komplizierten Schritte vorgenommen 
werden wie irgendwelche Application Files zu manipulieren, da das 
Programm AtmelStudio so schon kompliziert genug ist und für die älteren 
Kollegen schon schwer zu bedienen! Und das sind Erfahrungswerte!


Wolfgang schrieb:
> Wo ist das Problem?
> Wenn du den ISP-Programmer benutzt, brauchst du den Bootloader nicht und
> wenn du den Bootloader wieder brauchst, kannst du ihn mit dem
> ISP-Programmer wieder drauf spielen

Nachdem eine Reihe neuer Mikrocontroller gekauft worden sind sollen sie 
universell verwendbar sein. Entweder werden sie mit Hilfe des ArduinoUNO 
eingesetzt und bespielt, oder sie werden in Versuchsplatinen eingesetzt 
und über ISP programmiert. Nachdem die Tests mit dieser Platine 
durchgeführt worden sind werden die µC einfach wieder zu den anderen 
gelegt und man weis nicht mehr welche mit Bootloader sind und welche 
nicht. Nimmt jetzt jemand der mit der Materie Mikrocontroller keine 
Erfahrungen gesammelt hat und sie einfach nur verwenden will, der kommt 
schnell auf die Idee das der µC kaputt ist. Deshalb sollen sie eben 
universell verwendbar sein.


Wolfgang schrieb:
> Wie wäre es mit einem Blick ins Datenblatt? Da finden sich so Sätze wie
> z.B. "Program Flash memory space is divided in two sections, the Boot
> Program section and the Application Program section. Both sections have
> dedicated Lock bits for write and read/write protection."

Das habe ich schon gewusst, weswegen ich überhaupt erst den Eintrag 
verfasst habe. Die Frage ist, wie man diese Sektionen im AtmelStudio 
ansprechen kann.


Axel S. schrieb:
> 1. system erase + Bootloader schreiben
> 2. Applikation schreiben (ohne vorheriges system erase)

Das ist sehr Hilfreich! Danke (y)

von Pandur S. (jetztnicht)


Lesenswert?

Ich bin ein aelterer Kollege und habe auch schon Bootloader 
geschrieben...

Also. Wenn man einen Bootloader drauf hat, sollte man den auch 
verwenden. Falls man trotzdem vom Atmel Studio her programmieren 
moechte.. muesste man
a) den Bootloader jeweils mitprogrammieren,
b) selektiv programmieren, was der Controller wahrscheinlich koennte, 
das Atmel Studio aber nicht.

Was spricht denn gegen den Bootloader zu benutzen ?

von Philipp L. (Firma: Valeo Klimasysteme GmbH) (kleelauer)


Lesenswert?

Oh D. schrieb:
> Was spricht denn gegen den Bootloader zu benutzen ?

Wie schon geschrieben, gibt es verschiedene Anwendungsmöglichkeiten. 
Wenn der µC in einem Versuchsaufbau steckt ist ein 6-poliger ISP 
Anschluss mit verbaut. Daher kann ich mit dem DIAMEX ALL-AVR nur über 
AtmelStudio den Mikrocontroller bespielen.

von Axel S. (a-za-z0-9)


Lesenswert?

Philipp L. schrieb:
> Nachdem die Tests mit dieser Platine
> durchgeführt worden sind werden die µC einfach wieder zu den anderen
> gelegt und man weis nicht mehr welche mit Bootloader sind und welche
> nicht.

Also ist das ein organisatorisches Problem. Entweder ihr macht zwei 
Boxen für zurückgebene µC:

1. mit Bootloader
2. ohne Bootloader bzw. "weiß nicht"

Oder ihr verpflichtet alle diejenigen Kollegen, die einen µC ohne 
Bootloader verwendet haben, euren Standard-Bootloader vor dem 
zurücklegen des µC wieder aufzuspielen.

Das ist allemal besser, als sie dazu zu zwingen, den Bootloader immer 
an Bord zu haben und damit 2KB Flash zu vergeuden.

von Peter R. (pnu)


Lesenswert?

Indem man das Löschen vor dem Beschreiben sperrt. Anschließend das 
EEPROM "selektiv löschen", indem man es mit einem file aus lauter FFs 
(Einsen) beschreibt.

von Volker S. (vloki)


Lesenswert?

Peter R. schrieb:
> Anschließend das
> EEPROM "selektiv löschen", indem man es mit einem file aus lauter FFs
> (Einsen) beschreibt.

Und das funktioniert? Ich dachte meistens kommen die 1en durchs löschen 
und schreiben kann man eigentlich nur 0en. (oder umgekehrt)

von Karl M. (Gast)


Lesenswert?

Volker S. schrieb:
> Peter R. schrieb:
>> Anschließend das
>> EEPROM "selektiv löschen", indem man es mit einem file aus lauter FFs
>> (Einsen) beschreibt.
>
> Und das funktioniert? Ich dachte meistens kommen die 1en durchs löschen
> und schreiben kann man eigentlich nur 0en. (oder umgekehrt)

Korrekt, man kann in ein Atmel AVR µC EEprom nur eine "0" schreiben.
Das "Andere" nennt man einen Löschvorgang.

von Volker S. (vloki)


Lesenswert?

Karl M. schrieb:
> Das "Andere" nennt man einen Löschvorgang.

Also zurück zum Thema. Einen Controller der einen Bootloader verwenden 
kann, den kann man auch selektiv löschen.
Nur Schreib-Lese-Schutz Konfigurationen können nicht selektiv gelöscht 
werden. Macht ja auch Sinn.
In der IDE muss man auch irgendwo einstellen können welche Bereiche 
überschrieben werden dürfen.

Warum man allerdings überhaupt während der Entwicklung einen Bootloader 
verwenden will, wenn man auch einen Programmer/Debugger hat, erschließt 
sich mir nicht ;-)

von Mein grosses V. (vorbild)


Lesenswert?

Volker S. schrieb:
> Also zurück zum Thema. Einen Controller der einen Bootloader verwenden
> kann, den kann man auch selektiv löschen.
> Nur Schreib-Lese-Schutz Konfigurationen können nicht selektiv gelöscht
> werden. Macht ja auch Sinn.
> In der IDE muss man auch irgendwo einstellen können welche Bereiche
> überschrieben werden dürfen.

Du kannst uns sicherlich auch sagen, wo man das in der IDE einstellt und 
das im Datenblatt dokumentiert ist.

von Georg G. (df2au)


Lesenswert?

Volker S. schrieb:
> In der IDE muss man auch irgendwo einstellen können welche Bereiche
> überschrieben werden dürfen.

Du hast dir das ISP Protokoll angesehen und kannst uns die Befehle 
verraten? Oder worauf gründet sich deine Erkenntnis?

von Axel S. (a-za-z0-9)


Lesenswert?

Volker S. schrieb:
> zurück zum Thema. Einen Controller der einen Bootloader verwenden
> kann, den kann man auch selektiv löschen.

Magst du diese merkwürdige Behauptung auch irgendwie begründen?
Am besten zeigst du mal die Stelle aus dem Datenblatt des ATmega328
(um genau den geht es, siehe Eröffnungspost) wo gezeigt wird wie
man den Flash über das ISP-Protokoll selektiv löscht.

Ach, das geht nicht? Na sowas. Aber Hauptsache du hast was gesagt.

von Volker S. (vloki)


Angehängte Dateien:

Lesenswert?

Mein grosses V. schrieb:
> Volker S. schrieb:
>> In der IDE muss man auch irgendwo einstellen können welche Bereiche
>> überschrieben werden dürfen.
>
> Du kannst uns sicherlich auch sagen, wo man das in der IDE einstellt und
> das im Datenblatt dokumentiert ist.
...

Sorry Leute, hätte ich doch nur das "sollte" gelassen ;-)
(sinnvoll wäre es ja schon und bei PICs und MPLABX ist es ganz einfach
siehe Bild)

Aber ihr habt völlig recht mit Atmel Controllern kenne ich mich gar 
nicht aus. Wollte ich vor kurzem zwar testen, bin aber gescheitert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.