du ließt die page aus dem flash in den NVM buffer, manipulierst das eine byte dort im buffer und lässt den buffer zurückschreiben, du musst nichts in den RAM packen meine ich ... soweit ich mich entsinnen kann ist das sogar das vorgehen wenn man das mit dem ASF im Atmel Studio machtDas ganze benötigt 256 Byte SRAM
ein CAN bootloader ... haha zu köstlich, das gleiche habe ich auch gemacht
Ich habe allerdings einen mini CANOpen stack samt eigener protokoll logik komplett in die boot sektion gepackt, man sendet einen bestimmten befehl an die alte applikatuion, der im eeprom eine CRC32 löscht ... diese CRC32 wird mit der standard application ROM CRC funktion berechnet die atmels compiler auch nutzt (steht u.a. in der AVR Doku mit drin)
ich compile also das programm, speichere die CRC als textdatei für die firmware mit ab und lade den bootloader in das gerät ....
der bootloader startet und prüft 2 sachen, zum einen ob der forced boot pin high ist (eine art notfallsignal) und er berechnet die CRC über den application ROM und prüft ob die errechnete CRC mit der CRC im EEPROM übereinstimmt
stimmt die CRC nicht oder ist das signal gesetzt, bleibt er im bootloader, bis ich einen befehl schicke in die applikation zu springen
in der applikation habe ich dann einen bestimten befehl, mit dem ich die CRC wieder setzen kann(entweder aus der datei bei der endkontrolle oder die applikation rechnet die CRC selber aus oder ich nehme sie aus dem binary file, je nachdem was besser ist). so ist sichergestellt dass die applikation wenigstens ordentlich startet eh ich den controller in eine bootlschleife hänge![]()
Lesezeichen