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.
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.
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.