XMEGA Bootloader: richtige Anzahl an Pages, falsche Daten

Gast #4489273
Lesenswert?
• ▲
▼
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!
#4489559
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren