Forum: Mikrocontroller und Digitale Elektronik XMEGA Bootloader: richtige Anzahl an Pages, falsche Daten


von Jörg (Gast)


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!

von Rainer U. (r-u)


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?

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.