Xmega128A4U EEprom Problem

IRON
Benutzer
Avatar
Gender:
Location: Steisslingen / Germany
Age: 65
Posts: 35
Registered: 07 / 2004
Subject:

Xmega128A4U EEprom Problem

 · 
Posted: 14.06.2014 - 15:03  ·  #1
Hallo liebe E-Lab Gemeinde,
ich verzeifel an folgendem Problem:

Nachdem ich in nun nach sechs Monaten meine Hard-&Softwareentwicklung abschlossen habe, wird mir kundenseitig ein Bootloader für den Xmega128A4U aufgedrückt. Den und nur den darf ich verwenden !!!
In meiner Delphi Geräte App habe ich den Flip von Atmel eingebunden und das läuft in Verbindung mit dem USBsmart wie geschmiert. Flip in der App und der zugehörige Flip Bloader in der Source müssen nun ersetzt werden.

So nun zum Problem:
Mit dem kundenseitigen BLoader kann ich das Hex File in den 128er laden und diesen starten.
Die Geräte-Firmware läuft bis auf die EEProm Zugriffe. Es kann weder gelesen noch geschrieben werden. Dies hat nichts mit den Fuses (EESave) zu tun.

Ein in C++ (bääh) erstelltes Testprogramm arbeitet mit dem Kunden BLoader. Es können EEprom W/R Zugriffe ausgeführt werden. Das identische Testprogramm in AvrCo versagt.

Soweit ich das verstehe, arbeitet AvrCo bei EEprom Zugriffen mit dem NVM Controller.
Die C++ Lib eeprom.h anscheinend nicht.

Der C++ Befehl zum schreiben von Data= $8F auf EEprom_Adr= $07FF lautet:
eeprom_write_byte((uint8_t*)0x7ff,0x8f);

In AvrCo lautet der identische Befehl:
EEprom[EEPROMend]:= $8F;

Das Assembly von eeprom_write_byte((uint8_t*)0x7ff,0x8f) sieht so aus:

28c: 6f e8 ldi r22, 0x8F ; EE Data 143
28e: 8f ef ldi r24, 0xFF ; EE Adr Lsb 255
290: 97 e0 ldi r25, 0x07 ; EE Msb 7
292: 21 d0 rcall .+66 ; 0x2d6 <__eewr_byte_x128a4u>
...
...
...
000002d6 <__eewr_byte_x128a4u>:
2d6: 26 2f mov r18, r22

000002d8 <__eewr_r18_x128a4u>:
2d8: e0 ec ldi r30, 0xC0 ; 192
2da: f1 e0 ldi r31, 0x01 ; 1
2dc: 37 85 ldd r19, Z+15 ; 0x0f
2de: 37 fd sbrc r19, 7
2e0: fd cf rjmp .-6 ; 0x2dc <__eewr_r18_x128a4u+0x4>
2e2: 34 85 ldd r19, Z+12 ; 0x0c
2e4: 37 7f andi r19, 0xF7 ; 247
2e6: 34 87 std Z+12, r19 ; 0x0c
2e8: 37 85 ldd r19, Z+15 ; 0x0f
2ea: 31 ff sbrs r19, 1
2ec: 09 c0 rjmp .+18 ; 0x300 <__eewr_r18_x128a4u+0x28>
2ee: 36 e3 ldi r19, 0x36 ; 54
2f0: 32 87 std Z+10, r19 ; 0x0a
2f2: 38 ed ldi r19, 0xD8 ; 216
2f4: 34 bf out 0x34, r19 ; 52
2f6: 31 e0 ldi r19, 0x01 ; 1
2f8: 33 87 std Z+11, r19 ; 0x0b
2fa: 37 85 ldd r19, Z+15 ; 0x0f
2fc: 37 fd sbrc r19, 7
2fe: fd cf rjmp .-6 ; 0x2fa <__eewr_r18_x128a4u+0x22>
300: 33 e3 ldi r19, 0x33 ; 51
302: 32 87 std Z+10, r19 ; 0x0a
304: 80 83 st Z, r24
306: 91 83 std Z+1, r25 ; 0x01
308: 12 82 std Z+2, r1 ; 0x02
30a: 24 83 std Z+4, r18 ; 0x04
30c: 25 e3 ldi r18, 0x35 ; 53
30e: 22 87 std Z+10, r18 ; 0x0a
310: 28 ed ldi r18, 0xD8 ; 216
312: 31 e0 ldi r19, 0x01 ; 1
314: 24 bf out 0x34, r18 ; 52
316: 33 87 std Z+11, r19 ; 0x0b
318: 01 96 adiw r24, 0x01 ; 1
31a: 08 95 ret

Dies betrifft jetzt nur den Schreibbefehl auf EEpromEnd zum Start des BootLoaders.
Es versagen alle Schreib-Lesezugriffe und dadurch auch meine CRC Routinen für das EEprom.

Vielen Dank vorab,
Roland
IRON
Benutzer
Avatar
Gender:
Location: Steisslingen / Germany
Age: 65
Posts: 35
Registered: 07 / 2004
Subject:

Re: Xmega128A4U EEprom Problem

 · 
Posted: 14.06.2014 - 17:15  ·  #2
Ich habe den ASM Code aus dem C++ Gewurschtel verwendet und in AvrCo per Asm Statement eingebunden und ich kann nun ein Datum dd auf die Adresse adr schreiben.
Allerdings verstehe ich den ASM Code bislang nicht im geringsten.

Asm;
ldi r22, 08Fh // EE Data 143
ldi r24, 0FFh // EE Adr Lsb 255
ldi r25, 07h // EE Msb 7

mov r18, r22
ldi r30, 0C0h //192
ldi r31, 001h //1

sepp_1:
ldd r19, Z+15 //0x0f
sbrc r19, 7
rjmp sepp_1 // 0x2dc <__eewr_r18_x128a4u+0x4>

ldd r19, Z+12 // 0x0c
andi r19, 0F7h // 247
std Z+12, r19 // 0x0c
ldd r19, Z+15 // 0x0f
sbrs r19, 1
rjmp Sepp_2 // 0x300 <__eewr_r18_x128a4u+0x28>

ldi r19, 036h // 54
std Z+10, r19 // 0x0a
ldi r19, 0D8h // 216
out 034h, r19 // 52
ldi r19, 001h // 1
std Z+11, r19 //0x0b

sepp_3:
ldd r19, Z+15 //0x0f
sbrc r19, 7
rjmp Sepp_3 //0x2fa <__eewr_r18_x128a4u+0x22>

Sepp_2:
ldi r19, 033h //51
std Z+10, r19 //0x0a
st Z, r24
std Z+1, r25 //0x01
std Z+2, r1 // 0x02
std Z+4, r18 //0x04
ldi r18, 035h //53
std Z+10, r18 //0x0a
ldi r18, 0D8h //216
ldi r19, 001h //1
out 034h, r18 //52
std Z+11, r19 //0x0b
adiw r24, 001h //1
EndAsm;

Bleibt mir wohl nix anders übrig als mich da durch zu wuschteln und schauen, ob sich das in Pascal umsetzen lässt. Ansonsten selber ASM Routinen für EEprom R/W schreiben.

Na ja, man hat ja Zeit :angry4:
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Xmega128A4U EEprom Problem

 · 
Posted: 14.06.2014 - 23:23  ·  #3
Hallo Iron,

wenn ich das richtig verstehe muss im Boot nur eine Stelle im EEprom geschrieben werden ???

rolf
IRON
Benutzer
Avatar
Gender:
Location: Steisslingen / Germany
Age: 65
Posts: 35
Registered: 07 / 2004
Subject:

Re: Xmega128A4U EEprom Problem

 · 
Posted: 15.06.2014 - 08:30  ·  #4
Hi Rolf,
Du hast recht, die App erhält von der PC Oberfläche das Kommando auf die Adr. 07FFh eine 8Fh zu schreiben, um den Loader zu aktivieren. Meine Geräte App muss aber zur Laufzeit auf das EEprom zugreifen können. Genau dies wird vom Loader blockiert. Ich werde mir die C++ Source besorgen müssen, um zu sehen was dort initialisiert wird, sodass anscheinend der NVM Controller nicht mehr funktioniert, bzw, meine EEprom R/W Adressen ins Nirvana gehen.

Schönen Sonntag wünscht,
Roland
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Xmega128A4U EEprom Problem

 · 
Posted: 15.06.2014 - 12:40  ·  #5
Hallo Roland,
das verstehe ich nicht. Die App schreibt ins EEprom und das soll nichtmehr funktionieren??

rolf
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   96   110 · Page-Gen-Time: 0.047301s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI