Forum: Mikrocontroller und Digitale Elektronik Bootloader i2c ATmega328p


von Marc G. (marc2805)


Lesenswert?

Hallo,

Ich suche für ATmega328p einen Bootloader der nach einem Reset via I2C 
ein EEProm nach einer .Hex file absucht, und diese (falls vorhanden) 
uploadet.

Kennt jemand eine Anleitung oder eine Quelle für einen fertigen 
Bootloader ?
Bin bisher Leider nur auf death links gestoßen unter anderem auch hier 
in diesem Forum.

von Daniel A. (daniel-a)


Lesenswert?

Ich glaube ich verstehe nicht ganz, was su suchst.
Marc Godel schrieb:
> einen Bootloader der nach einem Reset via I2C ein EEProm nach einer .Hex
Ein Hex-file auf dem EEProm, ist auf dem EEProm ein file system, z.B 
EEFS, oder wie soll das gehen?

> file absucht, und diese (falls vorhanden) uploadet.
Und wenn es nicht da ist, passiert nichts, oder falls es da ist, muss es 
überschrieben werden? Und woher kommen die neuen daten, mit welchen 
upgedated wird?

von Marc G. (marc2805)


Lesenswert?

Das mit der Hex File war schwachsinn, aber vielleicht kann man es sich 
so besser vorstellen.
Das soll eine reine Update funktion sein.
Bootloader und Programm werden auf den Atmega aufgespielt.
Im Programm selbst wird neben dem Hauptprogramm via Netzwerk auf einem 
Server nach Updates gesucht.
Falls Update vorhanden wird das Update in das EEProm gespeichert, und 
ein Reset durchgeführt.
Der Bootloader merkt das im EEProm ein Update vorhanden ist und läd es 
dann in den Flash Speicher.
Dann Startet er das neue Programm.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Marc Godel schrieb:
> Der Bootloader merkt das im EEProm ein Update vorhanden ist und läd es
> dann in den Flash Speicher.
> Dann Startet er das neue Programm.

 Dass EEP 1KB und Flash 32KB hat, macht keinen Unterschied ?
 Dass, wenn du eine Linie Code an z.B. Flashadresse 0x0100 änderst bzw.
 neu dazuschreibst, alles was dahinter liegt, geändert werden muss ?

 So etwas könnte man evtl. mit Assembler machen, in Blöcken a 512 Byt,
 aber nicht in einer höheren Sprache.
 Oder du schreibst deinen Programm als reinen Interpreter, aber bei
 solchen Fragen bezweifle ich, dass du dazu imstande bist.

von Loocee L. (loocee)


Lesenswert?

Marc Vesely schrieb:
> Dass EEP 1KB und Flash 32KB hat, macht keinen Unterschied ?

Ich denke da hast du den Fragenden noch nicht richtig verstanden.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Eberhard F. schrieb:
> Ich denke da hast du den Fragenden noch nicht richtig verstanden.

 Ich glaube, ich habe ihn schon richtig verstanden, aber ich denke
 er hat noch nicht richtig darüber nachgedacht.

von Ulrich F. (Gast)


Lesenswert?

Marc Vesely schrieb:
> aber ich denke
>  er hat noch nicht richtig darüber nachgedacht.
Evtl. hat er sogar einen >= 32kb i2c EEPROM Baustein da drin stecken 
....
(obwohl, ich würde da eher einen 23LCV1024 einsetzen ....)

von MWS (Gast)


Lesenswert?

Marc Vesely schrieb:
>  Dass EEP 1KB und Flash 32KB hat, macht keinen Unterschied ?

Marc Vesely schrieb:
>  Ich glaube, ich habe ihn schon richtig verstanden, aber ich denke
>  er hat noch nicht richtig darüber nachgedacht.

Das ist nicht das erste Mal, dass Du auf der Leitung stehst:

Marc Godel schrieb:
> via I2C ein EEProm nach ...

>  aber bei solchen Fragen bezweifle ich, dass du dazu imstande bist.

Pack mal Deine eigene Nase.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

MWS schrieb:
> Das ist nicht das erste Mal, dass Du auf der Leitung stehst:

 Troll dich.

von MWS (Gast)


Lesenswert?

Marc Vesely schrieb:
> MWS schrieb:
>> Das ist nicht das erste Mal, dass Du auf der Leitung stehst:
>
>  Troll dich.

Merkwürdige Antwort von einem Nixblicker LOL

Du verstanden haben? TE wollen neues Programm von I2C-EEProm holen.
Also nix dumm daher reden, lieber Hirn benutzen.
Kein Hirn da?
Dann musst Du wachsen lassen ;-)

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Ulrich F. schrieb:
> Evtl. hat er sogar einen >= 32kb i2c EEPROM Baustein da drin stecken
> ....
> (obwohl, ich würde da eher einen 23LCV1024 einsetzen ....)

 Möglich, aber flashen ist schneller als EEPROM schreiben, wozu erst
 ins Eeprom laden, Reset und dann Update aus dem Eeprom...

von Marc G. (marc2805)


Lesenswert?

natürlich meine ich eine externes EEProm. Habe sowas ähnliches schon mit 
mmc/sd Karten gesehen, allerdings muss da die SD Karte mit Fat 8 bzw Fat 
16 Formatiert sein.
Dies wollte ich umgehen indem ich ein EEProm nehme.
Oder gibt es da einen ganz anderen Lösungsansatz ?

von Bastler (Gast)


Lesenswert?

Man kann Sd-Karten natürlich auch Raw beschreiben. Quasi als Boot-Tape. 
Dann braucht der Bootloader auch keine FAT-Lib.

von der alte Hanns (Gast)


Lesenswert?

Wenn man es schaffte, das Update zu beschränken, könnte man den 
Programmspeicher selbst als Zwischenspeicher verwenden; es muss ja nicht 
zwingend das gesamte Programm ersetzt werden.
Ein ATmega648 ist wohl nicht in Sicht.

von Ro V. (robyn)


Lesenswert?

Marc Godel schrieb:
> Dies wollte ich umgehen indem ich ein EEProm nehme.
> Oder gibt es da einen ganz anderen Lösungsansatz ?

Natürlich kannst du das machen. Du könntest auch ein extern Fashspeicher 
nehmen, denn du dann ansteckst. die gibt es günstig z.B. mit 64Mbit im 
8SOIC.

 Der Bootloader schaut am Anfang ob der Flash/Eeprom da ist.
Am Anfang setze einen HeaderBlock mit Informationen. Wichtig sind 
Versionsnummer (des Fileformates), Länge der Datenblocks, 
Hardwareversion (z.B. Temeratursensor HW Version 2.7), Softwareversion, 
Anfang der Daten (relativ zum Header) Länge der Daten, Checksumme der 
Daten,... ChecksumHeader.
LOOP:
 Bevor der Bootloader loslegt zu flashen, testet er erst die 
Versionsnummer des Fileformates, z.B. steht da "MaGoDa01" für dein 
Fileformat, Version 0.1.
 Dann kontrolliert er die Prüfsumme ChecksumHeader über den Block. Erst 
wenn das stimmt geht es von gültigen Daten aus. Dann überprüft er ob die 
Software passt indem er die Hardwareversion überprüft. Dann testet er ob 
die Softwareversion neuer ist. Wenn alles passt liest er die Daten durch 
und überprüft sie mit der Datenchecksumme im Header.
 Stimmt etwas nicht, könnte er  nach den Daten schauen, ob da noch ein 
weiterer Header steht also dort nochmal mit Offset bei LOOP anfangen. 
(so könnte man mehrere Firmware Versionen in einem Flash halten.)
 Wenn die Daten im Header stimmen, den Headeranfang merken und man 
könnte  trotzdem noch weitersuchen, ob dahinter noch eine aktuellere 
Version steht und die dann nehmen. So kann man mehrere Versionen in ein 
Flash packen immer hinten anfügen so das das Flash gleichmäßig benutzt 
wird.
 Die Daten stehen dann bei Anfang der Daten.

von Marc G. (marc2805)


Lesenswert?

Genau sowas suche ich.

Wo findet man so einen Bootloader bzw. gibts da eine Anleitung wie sowas 
erstellt wird.

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.