Ich soll eine Möglichkeit finden, wie man während des Betriebes einen Teil des Flash eines ATmega128 bzw. 2560 neu schreiben kann. Der Grund dafür ist, dass das Gerät mehrere Sprachen braucht. Jede Sprache ist etwa 16 kB gross, daher zu gross für EEPROM. Man soll über eine SD-Karte eine neue Sprache einlesen können und diese dann im Flash speichern. Mein Versuch baut auf der AVR106 Application Note auf, für den IAR Compiler. Wenn ich nun den Teil des Flashes betrachte steht nachher überall wo ich hineingeschrieben habe 0xFF. Muss ich den Flash zuerst löschen, bevor ich Ihn neu beschreibe und wenn ja, kann man Byteweise löschen oder muss ich ganze Pages? Beim löschen mit dem Programmer steht nachher auch 0xFF drin, hatte daher gedacht, dass es vieleicht beim zweiten mal Beschreiben klappt, aber die Speicherzellen bleiben auf 0xFF; Hier noch mein Code zum Testen: Adr = (UINT32 __flash)&Deutsch_Text; // Start Deutsch_Text Tabelle Adr += Deutsch_TextIndices[45]; // Offset für Text "Einstellungen MB" Adr = 0x204; for (i=0; i<17; i++) { WriteFlashByte(Adr, Text[i]); Adr++; } _ENABLE_RWW_SECTION();
Ich habe in Erinnerung, dass AVRs mit Bootloader-Support nur aus dem Bootloader-Bereich ins Flash schreiben können. Der betreffende Code muss also dorthin gelinkt werden, oder du verwendest einen Bootloader mit einer Art API.
Hab ich ganz vergessen, die Funktionen WriteFlashByte etc. Hab ich in einem Segment das in den obersten 8K des Prozessors ist, also der Bootbereich. Reicht das, wenn ich die Funktionen einfach dorthin lege, oder muss ich wirklich einen selstständigen Bootloader starten, der unabhängig vom Rest der Software ist?
Können irgendwelche Interrupts reinfunken? Bringt ausserdem wenig, nur den Code zu posten, der nicht selbst ins Flash schreibt und den wegzulassen der es tut.
Die Interrupt hab ich vorher ausgeschaltet. Der Code ist unverändert aus der AVR106 Application Note übernommen "self_programming.c" http://atmel.com/dyn/resources/prod_documents/AVR106.zip
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.