Ich muss im STM32 nicht flüchtige Daten ablegen. Jetzt habe ich mir die AppNote EEPROM Emulation angeschaut, die für den Anfang ok ist, aber für mein Vorhaben oversized ist. Flash hat 10K Schreibzyklen. Eine Page besitzt 1024 Byte. Verstehe ich das richtig, wenn ich ein Byte schreiben möchte eine Page komplett geschrieben werden muss? Da ergibt sich ja bei 10k Schreibzyklen 10000/1024 dass ich ca. 10 Mal die Page Byteweise (mit allen 1024 Bytes) beschreiben kann, verstehe ich das richtig? Dass man die Zahl der Schreibzyklen vergrößern kann, in dem man mehrere Pages verwendet ist mir klar.
Artata schrieb: > Verstehe ich das richtig, wenn ich ein Byte schreiben > möchte eine Page komplett geschrieben werden muss? Ja! Wenn du byteweise schreiben willst und das häufig kommst Du um ein EEPROM (oder ähnliches) nicht rundum. Kostet <1EUR und ist einfach an I2C anzsuchließen. rgds
Loeschen kannst Du nur seitenweise. Schreiben kannst Du byteweise. Du kannst sogar mehrmals schreiben, vorrausgesetzt, das neue Wort muss keine vorhandene 0 durch eine 1 ersetzten. Als ginge z.B. in mehreren Schritten 0xff 0xfe 0xfc 0xf8 0x80 usw... zu schreiben. Beim STM32L ist m.e.a. der Loeschwert 0, da muss man andersherum denken.
Ich möchte nicht häufig schreiben, darum gehts mir ja, aber 10 Mal einzelne Bytes überschreiben zu können ist ja schon argh wenig. Ich wollte nur wissen, ob ich das richtig überlegt habe. Mir ist auch klar, wenn ich nciht alle 1024 Bytes schreiben, dass sich die Zahl der Schreibzyklen erhöht.
mal was prinzipielles dazu: EEPROM oder FLASH, also alles was mittels Floating Gate Information speichert, altert nur, wenn sich die Ladung im Floating Gate ändert. Das passiert praktisch nur wenn du die Speicherzelle mit einem anderen Wert überschreibst, oder beim Flash wenn du Zellen, in welcher logisch Nullen sind löscht. Nur dann tunneln Elektronen und beschädigen die Oxidschicht (=Isoloation) Wenn du jetzt immer nur ein Byte schreiben willst, hast du zwei Möglichkeiten: 1) immer auf die gleiche Stellen schreiben, damit erzeugt jeder Vorgang einen Schreibzyklus und du hast eine Obergrenze von 10k Schreibzyklen. Wenn du mehrer Bytes, nicht immer gleichzeitig, schreibst entsprechend weniger. 2) immer an eine andere Stelle schreiben und dazwischen das FALSH nicht löschen. Damit musst man sich aber immer auch merken wo gerade der aktuelle Wert steht. Das kann man jetzt beliebig trickreich machen. Wenn die Werte immer ungleich 0xFF sind, geht das recht einfach, indem man immer das erste 0xFF überschreibt und analog das Byte vor dem letzten 0xFF liest. So kann man den ganzen Sektor schreiben und erst wenn er voll ist Löschen und hat damit einen Zyklus. Wenn man Nutzdaten nicht von 0xFF unterscheiden kann, brauch man dirty Bits, welche volle Stellen anzeigen, damit kann man mit einem Byte 8 weiter Bytes (oder Blöcke) markieren. Dieses Spielchen kann man beliebig komplex machen bis man zu einem Flashfilesystem kommt.
Artata schrieb: > Ich möchte nicht häufig schreiben, darum gehts mir ja, aber 10 Mal > einzelne Bytes überschreiben zu können ist ja schon argh wenig. Die 10k Angabe bezieht sich auf Zyklen. Ein Zyklus besteht aus Löschen + Schreiben. Oder Löschen + Schreiben. Oder Löschen + Schreiben + Schreiben. Oder Löschen + Schreiben + Schreiben + Schreiben. Oder Löschen + Schreiben + Schreiben + Schreiben + Schreiben. Oder Löschen + Schreiben + Schreiben + Schreiben + Schreiben + Schreiben. Wobei das Schreiben natürlich nur in eine Richtung geht.
Uwe Bonnes schrieb: > Loeschen kannst Du nur seitenweise. Schreiben kannst Du byteweise. Du > kannst sogar mehrmals schreiben, vorrausgesetzt, das neue Wort muss > keine vorhandene 0 durch eine 1 ersetzten. Hallo Uwe, Danke für den Hinweis! Löschen geht nur Seitenweise - korrekt! Schreiben geht nur 16bit weise! Und: das Schreiben MUSS aus dem RAM erfolgen da sonst der Bus stallt! rgds
6A66 schrieb: > Schreiben geht nur 16bit wei Haengt von der STM Familie ab. 6A66 schrieb: > Und: das Schreiben MUSS aus dem RAM erfolgen da sonst der Bus stallt! Das geht aus aus dem Flash. Hauefig pollt man sowieso, bis das Schreiben fertig ist, und wenn beim Pollen der Bus "stallt" solange geschrieben wird, macht das nichts.
Uwe Bonnes schrieb: > Das geht aus aus dem Flash. Hauefig pollt man sowieso, bis das Schreiben > fertig ist, und wenn beim Pollen der Bus "stallt" solange geschrieben > wird, macht das nichts. Hi Uwe, hmmm, hast Dud as schon in der Praxis erprobt? Das wäre ja dann eine durchaus erwägenswerte Alternative. > Schreiben geht nur 16bit wei > Haengt von der STM Familie ab. Hab die Doku jetzt nicht mehr offen. Zumindest bei der F10x dachte ich dies als einheitlich gesehen zu haben rgds
benutze doch die Eeprom Emulation aus den Beispielen von STM, geht problemlos damit.
@ ttl: ich habe doch im ersten Beitrag geschrieben, dass die Appnote zu oversized ist, weshalb ich die Routinen angespaßt an meine Anwendung selbst schreiben möchte. Ich habe es schon verstanden und meine Routinen sind soweit vertig. Für die Nachwelt zusammengefaßt: - Löschen geht nur Pageweise - Schreiben geht 16-Bitweise - um einzelne Werte zu überschreiben muss man den Pageinhalt sichern, Page löschen, Wert im Buffer ändern und gebufferte Daten auf die Pageadresse schreiben. - Beim hantieren mit Bytes, kann man die Lebensdauer des Flash's erhöhen, in dem man pro HalfWord nur ein Byte schreibt, damit verringert sich die Kapazität des Speichers, da man jedes zweite Byte wegschmeißt. So ergibt sich bei Medium Size Device eine Kapazität von 512 Bytes / Page.
6A66 schrieb: > Hi Uwe, > > hmmm, hast Dud as schon in der Praxis erprobt? Das wäre ja dann eine > durchaus erwägenswerte Alternative. Im der Blackmagic Debug Probe im USB Bootloader wird es fuer die F103 Bausteine so gemacht.
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.