Forum: Mikrocontroller und Digitale Elektronik ATMEL Sam7 EFC Schreibprobleme


von Wolfgang U. (wolle68)


Lesenswert?

Ich nutze einen SAM7X256 Controller für meine Anwendung. Zum Abspeichern 
einiger Parameter würde ich gerne diese auf das interne Flash auf die 
letzten Pages schreiben. Das ganze funktioniert im DEBUB Modus auch 
wunderbar. Gehe ich aber her und lade die Applikation ins Flash und 
speichere wieder ab, so bekomme ich einen PrefetchAbort....Lock Bits 
usw. waren natürlich passend, es werden 32 bit Alligned geschrieben usw. 
....

Da ich mich mit dem ganzen Mapping usw. noch nicht ganz so firm bin, 
habe ich mir nun aus der Softwarebibliothel von Atmel mal das passende 
Beispiel geladen und siehe da - es passiert genau das gleiche...Im SRAM 
geht alles und sobald ich auf FLASH gehe ist ende. Im Header der Datei 
steht aber, das die Software aus dem SRAM und dem FLASH ausführbar ist. 
Was könnte da nun noch falsch sein? Das ganze passiert übrigens auch auf 
zwei verhschiedenen Boards. Dem Olimex Board und meinem selbst gebauten.

So langsam habe ich keine Idee mehr, was ich noch systematisch probieren 
kann und mit try and error wirds noch Wochen dauern;).

Wer hat hier denn schon mal einen Bootloader oder sowas geschrieben - 
für den dürfte dies ja ein bekanntes Problem sein. Leider findet man 
vieles unter dem Stichwort Bootloader, aber mein Problem hat da wohl 
noch niemand gehabt.

Danke für Eure Hilfe !!

von gerhard (Gast)


Lesenswert?

hallo wolfgang,
liegen die funktionen zum schreiben des flash im ram?

gruss
gerhard

von Wolfgang (Gast)


Lesenswert?

Das hab ich eben gerade in einem recht guten Atmel Dokument gelesen 
Gerhard (doc6253). Die Funktionen zum schreiben ins Flash müssen dort 
wohl liegen um das Flash beschreiben zu können. Ich frag mich nur, warum 
die das dann auch im eigenen Beispiel nicht machen. Jedenfalls würde das 
mein Verhalten des Controllers erklären, das es beim Test im SRAM geht.

Bin da diese Woche schon mal drüber gestolpert, aber unter dem Keil gibt 
es wohl kein __ramfunc und dadurch hab ich das wieder aus dem Gedächnis 
gelöscht.

Hast du eine Idee, wie die __ramfunc im Keil heist oder muss ich die 
Funktion zu Fuß ins SRAM kopieren?

von gerhard (Gast)


Lesenswert?

hallo wolfgang,
in den aktuellen beispielen (softpacks heissen die dinger jetzt) findest 
du im projekt "basic-internalflash-project-at91sam7s-ek-keil.zip" ein 
modul namens "efc.c". in diesem suchst du z.b. nach der funktion 
"EFC_PerformCommand()" und dort wird dir dann geholfen.
ich würde dir überhaupt empfehlen die at91lib zu verwenden, dadurch 
erparst du dir speziell am anfang einiges an aufwand und frustration.

gruss
gerhard

von Wolfgang (Gast)


Lesenswert?

Hallo Gerhard,

genau das Projekt was du hier aufgeführt hast habe ich im 
Eingangsbeitrag beschrieben.

Die Datei efc.c hat ja die Funktionen drin zum beschreiben des internen 
Flashs. Diese funktionierte aber bei mir leider nicht, wenn das Programm 
aus dem Flash geladen wird. Aus welchem Grund auch immer habe ich bisher 
aber auch immer schon bei der Datei Flashd_efc.c und der Funktion 
EFC_PerformCommand(pEfc, AT91C_MC_FCMD_START_PROG, page); halt gemacht. 
Vermutlich weil die so aussieht wie meine Funktion auf unterster Ebene. 
Hier geht es aber in der efc.c  noch tiefer (manchmal sieht man den Wald 
vor lauter Bäumen eben nicht.

Auf "__attribute__ ((section (".ramfunc")))" wäre ich aber sicher auch 
nicht so schnell gekommen...

Dennoch muss ich mal schauen, warum die Funktion aus dem Flash nicht 
funktioniert...

von Wolfgang (Gast)


Lesenswert?

So, nun bin ich einen Schritt weiter am Abgrund ;) - das schreiben geht 
nun ohne Absturz und das Lesen auch. Aber aus welchem Grund auch immer 
scheint noch etwas nicht richtig zu sein. Nach Spannungsausfall und 
erneutem Anlauf funktioniert das Programm nicht mehr. So als würde ich 
mir einen Programmteil mit dem Speichern ins Flash überschreiben, aber 
ich nutze die Seiten am Anfang des letzten Sektors und ein Verändern 
führt auch zu keinem anderen Verhalten. Muss man noch irgendetwas mit 
den GPNVM Bits machen??

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.