www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATXmega256a3 flashpage Probleme


Autor: Peter Rockel (Firma: Vispiron) (rocket_peter)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
void our_write_function(uint32_t flashPosition)
{

   
   SP_WaitForSPM();
   SP_EraseApplicationPage(flashPosition);
   SP_WaitForSPM();
   SP_WriteApplicationPage(flashPosition);
   SP_WaitForSPM();
   // RWW-Section o.ä. reenable?? Fixme

}

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Rockel (Firma: Vispiron) (rocket_peter)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.