Moin moin, ich habe mal eine Frage zu meinem MSP430F248 auf die ich bis jetzt noch keine Antwort finden konnte. Ich möchte Daten im Flash ablegen und diese nach dem nächsten Neustart benutzen. Nun habe ich mir das Beispiel von TI besorg und adaptiert. In dem hier vorliegendem Beispiel werden aber immer gleich 64 Bytes geschrieben(Ein Paket?). Ist es für die Lebensdauer des Speichers Sinnvoll immer 64Byts auf einen rutsch wie hier zu beschreiben? 'Beschreit' es diese sowieso immer auch wenn ich nur 1Byte beschreibe? LG Bergie void write_SegC(USIGN8* value) { char *Flash_ptr; // Flash pointer unsigned int i; Flash_ptr = (char *)0x1040; // Initialize Flash pointer FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY + ERASE; // Set Erase bit *Flash_ptr = 0; // Dummy write to erase Flash seg FCTL1 = FWKEY + WRT; // Set WRT bit for write operation for (i = 0; i < 64; i++) { *Flash_ptr++ = value[i]; // Write value to flash } FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCK; // Set LOCK bit }
Hallo Bergie, In dem Beispiel werden nicht 64 Bytes auf einmal geschrieben sondern 64x1Byte.
Über die Forschleife werden 64 Byte geschrieben, hintereinander weg Wenn ich nun die einenfolge in dem ich den Falsh beschreibe nicht über n++ sondern über (64+(n--)) abarbeiten lasse oder die 64 Addressen in zufälliger sich nicht wiederholender Reihenfolge anspreche, gibt es dann ein Nachteiliges Verhalten im bezug auf die Lebenserwartung meines Flashspeichers? LG
>(Ein Paket?) Ein Block >Ist es für die Lebensdauer des Speichers Sinnvoll immer 64Byts auf einen >rutsch wie hier zu beschreiben? Eigentlich nicht, Nein >'Beschreit' es diese sowieso immer auch wenn ich nur 1Byte beschreibe? Nein. Grundsätzliches zum Flash: Du kannst die Bits im Flash immer von "1" auf "0" problemlos ändern. Willst du aber eine "0" in eine "1" ändern, so kannst du nur den gesamten Block (64 Byte) in einem rutsch auf "1" setzen. Daher der Name "Flash" (Bitzartig alles auf "1" setzen).
> Grundsätzliches zum Flash: > Du kannst die Bits im Flash immer von "1" auf "0" problemlos ändern. > Willst du aber eine "0" in eine "1" ändern, so kannst du nur den > gesamten Block (64 Byte) in einem rutsch auf "1" setzen. Daher der Name > "Flash" (Bitzartig alles auf "1" setzen). Achso, das Grundsätzliche war mir nicht bewust. Deswegen ist mien Flash wohl nach dem löschen auch mit 1en geflutet und nicht mit 0en ;) Gut das Hilft mir erst mal weiter! danke
Lies mal die AppNote, da ist das beschrieben: http://focus.ti.com/lit/an/slaa334a/slaa334a.pdf (Besonders cumulative programming time!) Was mich jetzt gerade sehr stutzig macht, ist folgendes: Das DB zum F248 sagt: cumulative programming time: max. 4ms Laut der obigen AppNote kann man diese (also 4ms) nur einhalten, wenn man den Flash Memory Controller mit der maximalen Frequenz von 476kHz taktet! Ist die Frequenz kleiner, darf man (rein theoretisch) nicht alle 64 Bytes nacheinander byteweise flashen! Wordweise würde allerdings gehen... ?!
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.