-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Flash-Speicher Schreibzyklen

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672

    Flash-Speicher Schreibzyklen

    Anzeige

    Hallo,

    ich habe eine Frage zu den Lösch-/Schreibzyklen von Flash-Speichern. Speziell geht es mir aktuell um den A25L080. Im Datenblatt (http://www.amictechnology.com/pdf/A25L080.pdf) steht, dass er 100000 Lösch-/Schreibzyklen abkann.

    Beim löschen werden alle Bits im Speicher auf 1 gesetzt und man kann sie nur auf 0 "schreiben". Wenn ein Bit mal 0 ist kann man es nur durch löschen wieder auf 1 setzen. (Ich habe probiert eine 1 reinzuschreiben, es bleibt aber 0)

    Die kleinste Einheit, die gelöscht werden kann ist ein Sektor, der aus 4096 Bytes besteht. Ich möchte nun im ersten Sektor eine Art Inhaltsverzeichnis anlegen. Ich benötige dafür unter anderem 256 Status-Bits. (32 Bytes) Die Bits werden nach und nach auf 0 gesetzt, jedes mal nach einer halben Minute und eines neuen Schreib-Vorgangs.

    Wenn ich jetzt z.B. das erste Byte betrachte ist der Ausgangszustand nach dem löschen:

    0b11111111

    Ich setze nun ein Bit auf 0, dann sieht es z.B. so aus:

    0b11111110

    Wenn ich nun noch ein Bit auf 0 setze mit folgendem Ergebnis:

    0b11110110

    zählt das dann bereits als zwei Schreib-Zyklen? Ich bin der Meinung, dass ein Zyklus erst wieder durch löschen des ganzen Sektors gezählt wird, kann mich aber auch irren. Das ganze wäre aber wichtig, denn wenn es pro Nullen eines Bits einen Zyklus "kostet" muss ich mir eine andere Vorgehensweise überlegen, denn sonst hält mein Speicher nur knapp ein halbes Jahr und dann sind die Zyklen verbraucht.

    Die Frage, die mich also quält: Wenn ich jetzt nach und nach alle 8 Bits des ersten Bytes gelöscht habe zählt das dann als 8 Schreib-Zyklen, oder nur als einer?

    Ich habe bereits Google zu diesem Thema befragt, aber keine vernünftige Aussage erhalten, vor allem nicht auf mein IC. Auch eine Mail an den Hersteller blieb leider unbeantwortet. (seit über einer Woche, ich habe keine Hoffnung, dass da noch was kommt) Wer klärt mich bei den Flash-Speichern auf?

    Vielen Dank und viele Grüße
    Andreas

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Zitat Zitat von Bumbum Beitrag anzeigen
    ... Flash ... 100000 Lösch-/Schreibzyklen ... hält mein Speicher nur knapp ein halbes Jahr ...
    Ein knappes halbes Jahr: 180 Tage zu je 86400 Sekunden. Du flasht Deinen Speicher über sechs Monate einmal alle zweieinhalb Minuten? 24/7! Boah. Du meinst schon FLASH nicht SRAM ?
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Nein, die Status-Bits werden sogar alle 30 Sekunden geflasht. Gerechnet habe ich dabei eine Betriebsdauer von 10 Stunden pro Tag. Im nachhinein wäre ein SRAM mit Goldcap besser gewesen, aber ich wollte die Ausfallsicherheit beim Akku wechsel idiotensicher gestalten.

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Hey,

    ein Flash-Speicher überschreibt ein komplettes Byte und die Schreibzyklen beziehen sich auf 10000 Zyklen pro Zelle.
    Ein Sektor sind ja mehrere Zellen zusammen gefasst. Wenn du nun also ein einzelnes Bit löscht und wieder setzt, hast du die Zelle 2x beschrieben (Löschen zählt übrigens auch als Schreiben).
    Ein Flash-Speicher ist für sowas eine denkbar schlechte Wahl.
    Was spricht den gegen ein SRAM mit Goldcap? Das hält doch lange genug für einen Akkuwechsel.
    Ansonsten pufferst du den µC und er soll dann einen Spannungsabfall detektieren, was in sein EEPROM schreiben und sobald die Spannung wieder da ist nutzt er das SRAM.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo Kampi,

    Zitat Zitat von Kampi Beitrag anzeigen
    Wenn du nun also ein einzelnes Bit löscht und wieder setzt, hast du die Zelle 2x beschrieben (Löschen zählt übrigens auch als Schreiben).
    Und wenn ich das löschen zwischen drin weglasse? Nehmen wir mal an ich setzte alle 30 Sekunden ein Bit des gleichen Bytes auf 0. Sind das dann deiner Meinung nach 8 Schreibzyklen für das Byte verbraucht, oder erst einer?

    Viele Grüße
    Andreas

    - - - Aktualisiert - - -

    Nachtrag zum Thema SRAM+Goldcap: Es gibt immer Alternativen, mir geht es aber bei dieser Frage auch um die Grundlagen zum Thema Flash.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.01.2005
    Alter
    45
    Beiträge
    294
    Der Flash ist ja nach 100.000 Schreibzyklen ja nicht sofort defekt.
    Du hast 4096 Bytes in einem Sektor. Benutze doch nicht nur 32 Byte für den Status, sondern nimm alle 4096.

    Somit kannst Du die Sache schonmal ausdehnen.
    Wie lange soll die Schaltung denn funktionieren? (Ernstgemeinte Frage!)

    Den Status wegen der Ausfallsicherheit beim Akkuwechsel in den Flash legen ist aber nicht so elegant.
    Vor dem Akkuwechsel runterfahren wäre eleganter, macht man bei PCs ja auch.

    Des weiteren kannst Du Dir Überlegen eine SD-Karte zu nehmen, dann brauchst DU Dir keine Gedanken mehr zu machen, die Karte selber verteilt die zu schreibenden Daten so das jede Zelle möglichst gleichmässig benutzt wird.
    Das Gegenteil von "gut" ist "gut gemeint"!

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo,

    ich habe den Flash auch wegen der Größe gewählt. Ich möchte schon locker ein halbes MB an Daten speichern, bis ich zum auslesen komme.

    Wie lange das Ganze halten soll? Da es ein SMD-Teil ist habe ich keine Lust es irgendwann mal tauschen zu müssen. Ich denke 5 Jahre sollten es schon sein.

    Dieser Thread soll mir die Grundlagen der Flash-Speicher näher bringen. Es geht mir deshalb auch um die Vorgehensweise, wie ich das Ganze dann programmiere. Wenn es nicht anders geht muss halt eine Rotation rein, benötigt aber mehr Arbeit und mehr Speicher im Flash des µC.

    Bei den oben genannten Bits im Beispiel handelt es sich nicht um richtige Status-Bits, sondern mehr um ein Art Inhaltsverzeichnis, welcher Bereich vom Flash schon mit gültigen Daten belegt ist. Pro Datensatz im Sektor habe ich mir überlegt ein Bit zu setzen. Da ich keinen einzelnen Zahlenwert schreiben kann (nur löschen vom ganzen Sektor möglich) bin ich überhaupt auf diese Idee gekommen. Aber natürlich nur wenn das löschen der einzelnen Bits nicht jedes mal einen Schreib-Zyklus bedeutet.

    Das Gerät soll unbeaufsichtigt laufen und Daten aufzeichnen. Deshalb ist die Wahrscheinlichkeit eines leeren Akkus sehr hoch. Wenn der Flash nicht so will, wie ich es mir denke ist die Option einen leeren Akku zu erkennen um dann "herunterzufahren" auch eine Möglichkeit, kostet aber auch wieder Bauteile, Programmieraufwand und Platz im Flash des µC.

    Mit SD-Karten habe ich schon mal gearbeitet und war nicht zufrieden damit. Da fängt es beim hohen Stromverbrauch an, geht über die Verfügbarkeit "normaler" größen (halbes MB ) und endet beim zickigen Verhalten, je nach Hersteller und Kartentyp und -größe.

    Auf meine Frage, ob das einzelne setzen von Bits (auf 0) eines Bytes, ohne zwischendurch den Sektor zu löschen auch als Schreibzyklus zählt habe ich leider immer noch keine Antwort.
    Da ich Google bezüglich dieses Themas schon versucht habe eine Antwort zu entlocken, aber nichts gefunden habe bin ich auch für Links dankbar, in denen das vielleicht beschrieben wird.

    Viele Dank fürs mitdenken und viele Grüße
    Andreas

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.400
    Zitat Zitat von Bumbum Beitrag anzeigen
    Auf meine Frage, ob das einzelne setzen von Bits (auf 0) eines Bytes, ohne zwischendurch den Sektor zu löschen auch als Schreibzyklus zählt habe ich leider immer noch keine Antwort.
    Es wird immer ein Byte geschrieben. Daß du dabei nur ein Bit änderst, macht dabei nichts. Ob in deinem Flash ein Byte aus 8 Zellen besteht, ist nicht sicher. Inzwischen werden zum Teil mehr als zwei Werte in einer Zelle gespeichert, du änderst also eine Zelle mehrfach.

    Ich würde einfach mit einem gelöschten Flash anfangen und die Daten nacheinander schreiben. Solange du sicherstellst, daß sich deine gültigen Daten erkennbar vom gelöschten Flash unterscheiden, kannst du immer erkennen, wie viel schon geschrieben wurde. Da braucht man kein Direktory.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo Klebwax,

    jetzt holt mich ein, dass ich mit Information "gegeizt" habe. Ich brauche auf jeden Fall noch ein "verarbeitet" Flag pro Eintrag. Das macht es dann nicht ganz so einfach.

    Ich müsste jetzt quasi feststellen, wie groß eine "Zelle" ist. Im Optimalfall ein Byte, dann brauche ich pro Eintrag zwei Bytes im Directory (belegt und verarbeitet). Das wäre auch vertretbar.
    Nur wie kommt man an die Information, wenn im Datenblatt nichts steht und der Hersteller schweigt?

    Viele Grüße
    Andreas

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.400
    Zitat Zitat von Bumbum Beitrag anzeigen
    Hallo Klebwax,

    jetzt holt mich ein, dass ich mit Information "gegeizt" habe. Ich brauche auf jeden Fall noch ein "verarbeitet" Flag pro Eintrag. Das macht es dann nicht ganz so einfach.

    Ich müsste jetzt quasi feststellen, wie groß eine "Zelle" ist. Im Optimalfall ein Byte, dann brauche ich pro Eintrag zwei Bytes im Directory (belegt und verarbeitet). Das wäre auch vertretbar.
    Nur wie kommt man an die Information, wenn im Datenblatt nichts steht und der Hersteller schweigt?
    Warum sollte er dir das sagen? Wenn seine Techniker einen Trick entwickeln, die Bits noch enger zu packen, kann er den Die kleiner machen und mehr verdienen. Solange sich das Interface nicht ändert, kann er sogar die Typenbezeichnung gleich lassen. Und alle Anwender, die nur die veröffentlichten Informationen verwenden, würden es nicht merken und sich trotzdem on the long run über sinkende Preise freuen.

    Das mit dem Direktory ist eine schlechte Idee, das ist was fürs RAM oder einen magnetischen Speicher. Überleg dir ein anderes Konzept. Denk doch noch mal über SD nach, benutzt wie ein FLASH ohne Filesystem mit SPI. Einfach z.B. ein Record pro Sektor (obwohl ich deine Datenstruktur nicht kenne), da hast du Platz ohne Ende, 4 GB, 16GB oder auch mehr.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Spansion: Schneller Flash-Speicher für Autos
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 26.09.2011, 15:00
  2. Speichern in den Flash-Speicher
    Von Ruppi im Forum Assembler-Programmierung
    Antworten: 6
    Letzter Beitrag: 05.11.2008, 22:35
  3. Daten in Flash-Speicher packen...
    Von farratt im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 17.09.2007, 14:27
  4. Wie äussert sich "verbrauchter" Flash-Speicher?
    Von Jaecko im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 27.03.2007, 16:32
  5. Allgemeine Fragen über Speicher von ATMega (Flash, EEPROM)
    Von axors im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 30.09.2005, 16:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •