Forum: Mikrocontroller und Digitale Elektronik ATXmega256a3 flashpage Probleme


von Peter R. (Firma: Vispiron) (rocket_peter)


Angehängte Dateien:

Lesenswert?

Hallo,
wir nutzen die Beispiele von AVR und haben Probleme beim beschreiben der 
flashpages (flashpagegröße 256) und zwar ist es uns nur möglich "gerade" 
Adressen zu beschreiben.

In den beiden Screenshots im Anhang sieht man einmal das korrekte 
Beschreiben an der Adresse 0x400 und zum Anderen den erfolglosen Versuch 
an der Adresse 0x300. In dem Fall wird die page seltsamerweise 
automatisch an die Adresse 0x200 geschrieben.

Hat jemand es erfolgreich geschafft bei einem xmega256a3 z.B. an die 
Adresse 0x100 zu schreiben?

Für Codeschnipsel bzw. Hinweise wären wir sehr dankbar.

Peter

Hier noch der Code, der hierzu ausgeführt wird:

flashPosition = 0x300
1
void our_write_function(uint32_t flashPosition)
2
{
3
4
   
5
   SP_WaitForSPM();
6
   SP_EraseApplicationPage(flashPosition);
7
   SP_WaitForSPM();
8
   SP_WriteApplicationPage(flashPosition);
9
   SP_WaitForSPM();
10
   // RWW-Section o.ä. reenable?? Fixme
11
12
}

von Simon K. (simon) Benutzerseite


Lesenswert?

Hm, schon mal die AppNotes dazu durchgeschaut?
http://atmel.com/dyn/resources/prod_documents/doc8070.pdf

Ansonsten hat eine Page nicht 256 Bytes, sondern 256 Words, was 512 
Bytes sind.

von Peter R. (Firma: Vispiron) (rocket_peter)


Lesenswert?

Hi Simon!
Ja, die AppNotes sind bekannt und genauso wie der Beispielcode AVR1316 
für jeden der ähnliche Probleme hat eine echte Bank (inkl. der Treiber 
sp_driver.h mit quellcode in sp_driver.s).

Ich konnte das Problem heute mit einem Kollegen beheben.
Entscheidend war die FLASH_BLOCK_SIZE auf 512 Bytes zu stellen UND in 
unserem existierenden Bootloadercode einen Datentyp zu ändern.
Wir hatten bisher den Bootloader für einen ATMEGA laufen mit einer 
Flashblockgröße von 256 Bytes. Genutzt wurde boot_pagefill aus der 
boot.h.
Wir hatten sorglos zum Funktionsaufruf auf uint8_t gecastet. Das ist uns 
beim Xmega zum Verhängnis geworden, da mit den 8-Bit nur die erste 
Hälfte der Bootpage beschrieben wird. Ansonsten ist die Funktionsweise 
der AVR1316-Funktion SP_LoadFlashWord praktisch gleich gegenüber 
boot_pagefill.

Dank und Gruß, Peter

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.