XMEGA Bootloader: richtige Anzahl an Pages, falsche Daten

Gast #4489273
Hallo,

ich nutze den ATXmega128a4u. Dieser hat laut Datenblatt eine Pagegröße 
von 128 Wörtern, also 256 Bytes.

Ich empfange im Bootloader über UART nach und nach die Zeilen aus dem 
Hexfile ohne dem ":".

Zum Schreiben des Flahes nutze ich den Code der Appnote AVR1316.

Folgende Funktionen setzen ein Byte in meine im RAM liegende Page und 
aktualisiert ggf. den Flash:
1
#define BYTE unsigned char
2
#define WORD unsigned int
3
#define FLASH_PAGE_SIZE 256
4

5
union {
6
  WORD wData[FLASH_PAGE_SIZE/2];
7
  BYTE cData[FLASH_PAGE_SIZE];  
8
}pagedata;
9

10
void c_dispatcher::setPage(unsigned long tadress, BYTE data){
11
  int page;
12
  
13
  page = tadress / FLASH_PAGE_SIZE;
14
  
15
  if(currentPage == -1){ //zu begin -1
16
    currentPage = page;
17
    clearPage();
18
  }
19
  
20
  if(page != currentPage){
21
    writePage();
22
    clearPage();
23
    currentPage = page;
24
    uart_SoM->flushRX();
25
  }
26
  
27
  pagedata.cData[tadress % FLASH_PAGE_SIZE] = data;
28
}
29

30
void c_dispatcher::writePage(){
31
  
32
  SP_LoadFlashPage(&pagedata.cData[0]);
33
  SP_EraseWriteApplicationPage(currentPage * FLASH_PAGE_SIZE/2);
34
  SP_WaitForSPM();
35
}
36

37
void c_dispatcher::clearPage(){
38
  for(int i = 0; i < FLASH_PAGE_SIZE; i++)
39
    pagedata.cData[i] = 0xFF;
40
}

Wenn ich nach einem Testlauf den Flash auslese, stimmen die Anzahl der 
beschriebenen Pages, diese sind aber nur zur Hälfte mit (teils) 
unkorrektem Inhalt gefüllt.

Kann mich jemand auf die richtige Fährte führen?

Danke!
Nur die Hälfte der Pages sind gefüllt? oder jede Page ist nur zur Hälfte 
korrekt gefüllt?

Im ersten Fall würde ich Wartezeiten nach jeder Page einbauen. im 
zweiten Fall mal eine Page vollschreiben - vielleicht doch mit dem Bytes 
und Worten um eine zweierpotenz vertan? Schreib doch mal doppelt so viel 
und guck, was im Speicher ankommt.

Oder anders gefragt - kannst Du EINE Page vollkommen korrekt 
beschreiben?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.