Forum: Mikrocontroller und Digitale Elektronik STM32L EEPROM Linker Probleme


von Uwe R. (grobbles)


Lesenswert?

Hallo

Ich bin gerade dabei mich in den STM32L152 einzuarbeiten. EEPROM 
schreiben und lesen klappt auch schon mal. Nun wollte ich, wie bei AVR, 
mein EEPROM in der Art formatieren, dass ich eine große Struct, bzw. 
Array definiere über den ganzen EEPROM und diese dann mit flash.
Dazu habe ich nach langem suchen heraus gefunden, dass das Linker Script 
File wie flogt angepasst werden muss:

1.Teil
/* Specify the memory areas */
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 128K
  EEPROM (rx)     : ORIGIN = 0x08080000, LENGTH = 4K 
!!!!!!!!!!!!
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 16K
  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
}

2.Teil
SECTIONS
{
…
   .eeprom :
  {
    . = ALIGN(4);
    *(.eeprom)
    . = ALIGN(4);
  } >EEPROM
…
}

3.Teil
Und im Main-File :
#define    EEMEM   _attribute_ ((section(".eeprom")))
EEMEM const uint8_t eepromArray[4095] ;


1. Definieren eines neuen Speicherbreiches mit der Addresse und der 
Größe.
2. Festlegen des Attributes.
3. Array definieren und sagen das es im EEPROM liegen soll.

Soweit so gut. Das compilieren und linken klappt auch aber wenn ich das 
Programm flashen will stürzt der ST-Link/V2 einfach ab. 
"ST-Kink_gdbserver.exe hat ein Problem festgestellt und muss beendet 
werden."

Was könnt die Ursache sein oder habe ich etwas vergessen, falsch gemacht 
oder nicht richtig verstanden.

Danke schon mal für die Hilfe.

von Uwe R. (grobbles)


Lesenswert?

Also wenn man die Adresse so anpasst das sie in dem Flash bereich liegt 
scheint es zu gehen.
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 64K
  EEPROM (rx)     : ORIGIN = 0x08002000, LENGTH = 4K
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 16K
  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
}

Aber wie kann man das alles in denn EEPROM des Controller verschieben?
Oder kann man dies nicht wie bei den AVR Typen, da bekommt man ja eine 
extra Datei für den EEPROM.

von Uwe R. (grobbles)


Lesenswert?

Geht dies überhaupt mit dem ST-Link/V2 vom STM32L Discovery, hat man 
darüber zugrief auf den EEPROM?
Oder wie kann man eine Variable für den EEPROM erzeugen?

von Uwe Bonnes (Gast)


Lesenswert?

Uwe Ro. schrieb:
> EEPROM (rx)     : ORIGIN = 0x08002000, LENGTH = 4K

Da liegt Flash. EEprom ist woanders:
            0x0808 0000 - 0x0808 17FF 6 Kbytes DATA Bank 1 Data EEprom 
Bank 1
Data memory
            0x0808 1800 - 0x0808 2FFF 6 Kbytes DATA Bank 2 Data EEprom 
Bank 2

von Uwe R. (grobbles)


Lesenswert?

Ja, das ist klar das mit dieser Addresse (0x08002000) die Daten im 
Flash-Bereich landen. Ich wollte damit nur schauen, ob die Formatierung 
und die Syntay richtig ist. Aber wie macht man es wenn die Daten im 
EEPROM landen sollen.
EEPROM (rx)     : ORIGIN = 0x08080000, LENGTH = 4K !!!!

Muss noch was anders in das Linker Skript oder in die Header vom EEPROM.

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.