Hallo,
ich benutze einen Freescale Mikrocontroller und da wollte ich mal den
internen Flash-Speicher testen.
Wenn ich in den Flash schreibe und gleich danach die Adresse auslese,
bekomme ich den Wert, was in den Falsh geschrieben wurde.
Nun wollte ich sehen, ob der Wert auch nach dem Reset/Neustart erhalten
bleibt.
Ich habe die Spannungversorgung ausgeschlatet und wieder eingeschaltet.
Naja jetzt wollte ich aus dem Flash lesen, und zwar aus der Adresse, was
vor dem Neustart das Datum gespeichert wurde. Das Ergebnis war/ist, dass
ich ganz andere Werte erhalte.
Wie kann das sein?
Wenn ich doch in den Flash schreibe, müsste es doch solange erhalten
bleiben bis entweder der Flash gelöscht oder der Inhalt überschrieben
wird.
Liege ich da vielleicht falsch?
Gruß
Dirk
> Wenn ich in den Flash schreibe und gleich danach die Adresse auslese,
Was heisst "gleich danach"? 1 us?
Wenn deine Schreibprozedur den Herstellervorgaben entspricht, dann steht
der Wert auch da, bin ich 100% sicher.
>Was heisst "gleich danach"? 1 us?
gleich danach heißt Stecker raus und wieder rein..
Die Versorgung wird getrennt, um zu sehen ob danach der INhalt immer
noch erhalten bleibt.
>Wenn deine Schreibprozedur den Herstellervorgaben entspricht, dann steht>der Wert auch da, bin ich 100% sicher.
wie gesagt, wenn in den Flash schreibe und nachdem in den Flash
geschrieben wurde, den Flash auslese, bekomme ich die richtigen Daten.
Aber wenn die Spannungsversorgung getrennt wurde und nachdem ich wieder
die Versorgung einschalte und den Flash auslese, bekomme ich ganz andere
Werte :-(
im Quellcode mache ich einen Zugriff auf den Flash-Speicher..
Nach der Initialisierung kann ich mit "SetByteFlash(Adresse, Wert);" in
den Flash schreiben und mit "GetByteFlash(Adresse, &Wert);" aus dem
Flash lesen.
mein Problem ist, ich kann aus dem Datenblatt nicht erkennen in welchen
Bereich ich Daten schreiben kann.
Ich meine der Flash-Speicher wird ja für alles Mögliche benutz. Das
ganze Programm wird in den Flash geschrieben (denke ich).
Ich habe keine Idee, was so alles mit dem Flash-Speicher gemacht wird.
Naja was auch immer passiert, muss es doch einen extra Bereich geben,
was der User ohne Gefahr und Bedenken benutzen kann. Mit benutzen meine
ich irgendwelche Parameter ablegen und nach dem Neustart abholen.
>Dann frag bitte konkreter
Wie konkreter kann ich meine Fragen noch stellen? Für paar Ideen, wie
man Frage konkret stellen kann, bin ich sehr dankbar
Danke
Du hast es in diesem Thread auf 6 Postings gebracht ohne irgendwo zu
verraten, um welchen Controller es überhaupt geht. Freescale hat wohl
ein Dutzend recht verschiedener Controller-Familien, von den Modellen
ganz zu schweigen.
Forum-Fragenformulierung
Dirk wrote:
> was ist der Unterschied zwischen RAM und Flash> (damit meine ich wann wird RAM und wann der Flash benutzt)
Autsch... ;) Du solltest wirklich mal die Dokumentation lesen, bevor Du
solche Fragen stellst.
Jetzt wird's schon konkreter. Sieht mir schwer danach aus, als ob das
Teil aus der DSP-Sparte stammt. Könnte sein, dass du daher im
entsprechenden Forum besser aufgehoben bist.
Michael G. wrote:
> Autsch... ;) Du solltest wirklich mal die Dokumentation lesen, bevor Du> solche Fragen stellst.
Vielleicht ist die Frage nicht ganz so dusselig wie sie
zugegebenermassen klingt. DSPs haben manchmal eine sehr eigene
Vorstellung davon, welcher Teil welchen Speichers mit welchem Operand
des Befehls erreichbar ist, weil sich das auf mehrere interne Busse
verteilt.
Gut, aber es steht auch fest dass Flash-Speicher auf MCUs eine recht
begrenzte Lebensdauer hat. Ich kann natuerlich darueber jetzt auch
nichts sagen, ich muesste auch im Datenblatt nachsehen, da sollte sowas
dann aber drinnen stehen. Dirk, Flash-Speicher ist nicht fuer sehr
haeufige Schreibzugriffe geeignet, da er recht gewaltsam geloescht wird.
Bei Mikrocontrollern hat man ueberlicherweise nach etwa 10.000
Schreibzyklen so eine Flash-Speicherzelle erledigt, d.h. sie ist danach
defekt.
RAM ist erstens quasi verschleissfrei und vor allem beim Schreiben (aber
auch beim lesen) wesentlich schneller als Flash. Im Gegensatz zu Flash
ist RAM halt volatil, d.h. fluechtig. Bei den AVRs wird der Flash z.B.
dafuer benutzt, um den eigentlichen Programmcode zu speichern. Es gibt
noch einen EEPROM, in dem man z.B. Konfigurationsdaten abspeichern kann.
Der hat mit etwa 100.000 Schreibzyklen schon eine deutlich hoehere, aber
dennoch begrenzte Lebensdauer.
Gruss,
Michael
Dirk wrote:
>>welcher Teil welchen Speichers mit welchem Operand>>des Befehls erreichbar ist>> wie soll denn ein Anfänger wie ich so etwas wissen
Das Teil sieht mir ja auch recht fett aus zum Anfangen. Warum hast Dich
denn genau fuer diesen Controller entschieden? Ich denke damit werden
Dir hier nur wenige helfen koennen, der Hauptteil hier ist AVR und
einige PIC-Vertreter. Und wie gesagt, sowas sollte in der entsprechenden
Dokumentation zu finden sein, um Lesen kommt man nicht herum bei solchen
Themen, glaub's mir ;)
Nochmal zu den Speichern: Such mal nach "Speicherhierarchie". Flash ist
hier Sekundaerspeicher (bzw. Hintergrundspeicher) und RAM ist
Primaerspeicher.
Hierbei ist SRAM (statischer RAM) nochmals schneller als DRAM
(dynamischer RAM). Kleinere Mikrocontroller haben ueblicherweise nur
SRAM, da dieser um einiges einfacher anzusteuern und zu verwalten ist.
Lg,
Michael
>Warum hast Dich denn genau fuer diesen Controller entschieden?
hab ich nicht ausgesucht, habe ich als Geburtstagsgeschenk erhalten.
>Ich denke damit werden Dir hier nur wenige helfen koennen
ja das weiß ich, aber was soll ich sonst macht. Wo anders wird nicht mal
geantwortet. Hier bekommt man zumindest paar Tipps und Ideen
>sowas sollte in der entsprechenden Dokumentation zu finden sein
ja hast recht, vielleicht liegt das Problem bei mir, dass ich es einfach
nicht verstehen kann.
Ich dachte, die Doku müsste vielleicht sagen können "hey, du Benutzer!Du
darft/kannst von der Adresse des Flash's xyz biz zu der Adresse vwy
benutzen."
(Mit "benutzen" meine ich, dass ich da irgendwelche Parameter speichere
um sie dann einige Tage später abzurufen)
Dirk wrote:
> (Mit "benutzen" meine ich, dass ich da irgendwelche Parameter speichere> um sie dann einige Tage später abzurufen)
Hierfuer ist EEPROM deutlich besser geeignet, da langlebiger und fuer
solche Zwecke extra vorhanden.