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.
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?
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.
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.
Marc Vesely schrieb: > Dass EEP 1KB und Flash 32KB hat, macht keinen Unterschied ? Ich denke da hast du den Fragenden noch nicht richtig verstanden.
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.
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 ....)
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.
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 ;-)
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...
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 ?
Man kann Sd-Karten natürlich auch Raw beschreiben. Quasi als Boot-Tape. Dann braucht der Bootloader auch keine FAT-Lib.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.