Forum: Mikrocontroller und Digitale Elektronik Flash-Problem ATmega256


von Rangi J. (rangi)


Lesenswert?

Hallo Forum,
ich habe ein Problem beim Flashen (aus der BootLoaderFlashSsection). Ich 
verwende einen ATmeag256 und Atmel Studio 6.1 SP2 und einen JTAGICE 
mkII.
Folgendes Verhalten: nach dem Ausführen des Codeabschnitts mit der 
SPM-Anweisung sind zufällige Pages meines Flashs mit 0x00 beschieben. 
Manchmal wenige, manchmal aber auch ganze Abschnitte. Die Page, in die 
ich gerade schreiben wollte (Adresse 0x00020000) enthält auch genau die 
Daten, die ich erwarte.
Als mein Code mal ein einer solchen 0-Page ankam, konnte ich im 
Disassamby auch sehen, das dort NOPs standen, weil keine Aktion 
durchgeführt wurde. Scheinbar hat mich der Debugger auch nicht 
veralbert.
So sieht mein C-Code aus:
1
    ENTER_CRITICAL_SECTION();     /*alle Interrupts aus*/
2
    for(u16Ptr=0;u16Ptr<SPM_PAGESIZE;u16Ptr+=2)
3
    { /* schreibe aus Buffer in den Flash jeweils ein Word */
4
      boot_page_fill(u32PageBase + u16Ptr, unBuffer.u16Buffer[u16Ptr/2]);
5
    }
6
    boot_spm_busy_wait();
7
    boot_page_write(dwPageBase);
8
9
    boot_spm_busy_wait();
10
    LEAVE_CRITICAL_SECTION();

und das Disassamby sieht so aus:
1
0001FF01  MOVW R30,R20    Copy register pair 
2
0001FF02  ANDI R30,0xFE    Logical AND with immediate 
3
0001FF03  LDI R26,0x01    Load immediate 
4
0001FF04  LDI R27,0x00    Load immediate 
5
0001FF05  ADD R26,R28    Add without carry 
6
0001FF06  ADC R27,R29    Add with carry 
7
0001FF07  ADD R30,R26    Add without carry 
8
0001FF08  ADC R31,R27    Add with carry 
9
0001FF09  LDD R26,Z+0    Load indirect with displacement 
10
0001FF0A  LDD R27,Z+1    Load indirect with displacement 
11
0001FF0B  MOVW R0,R26    Copy register pair 
12
0001FF0C  MOVW R30,R4    Copy register pair 
13
0001FF0D  STS 0x005B,R6    Store direct to data space 
14
0001FF0F  STS 0x0057,R13    Store direct to data space 
15
0001FF11  SPM     Store program memory 
16
0001FF12  CLR R1    Clear Register 
17
    for(u16Ptr=0;u16Ptr<SPM_PAGESIZE;u16Ptr+=2)
18
0001FF13  SUBI R20,0xFE    Subtract immediate 
19
0001FF14  SBCI R21,0xFF    Subtract immediate with carry 
20
0001FF15  LDI R27,0x02    Load immediate 
21
0001FF16  ADD R4,R27    Add without carry 
22
0001FF17  ADC R5,R1    Add with carry 
23
0001FF18  ADC R6,R1    Add with carry 
24
0001FF19  ADC R7,R1    Add with carry 
25
0001FF1A  CP R20,R1    Compare 
26
0001FF1B  LDI R30,0x01    Load immediate 
27
0001FF1C  CPC R21,R30    Compare with carry 
28
0001FF1D  BRNE PC-0x1C    Branch if not equal
In der Zeile 0001FF0D wird das RAMPZ mit 0x02 beschrieben. Das sind die 
oberen Bits 16 und 17 der Z-Adresse.

Was kann das sein? Wo liegt das Problem?
Danke

von Rangi J. (rangi)


Lesenswert?

Keiner der ein Idee dazu hat?

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.