mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik NAND Flash - Page mittels OR byteweise beschreiben


Autor: Christian Kito (cateye030)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
NAND Flashs haben ja die unangenehme Eigenschaft nur Page-weise 
beschreibbar zu sein. Ein neu Schreiben der Page erfordert, dass vorher 
der ganze Block zu dem die Page gehört gelöscht wird.
Hintergrund:
Im unbeschriebenen Zustand haben alle Bits den Zustand "logisch Eins".
Beim Schreiben einer Page werden Informationen durch logische Nullen 
gespeichert. Nur mit dem Löschen eines Blocks können alle Bits wieder 
auf "logisch Eins" gesetzt werden.

Frage 1:
Ich hab nun gelesen, dass es möglich ist eine Page aber auch in 3 
Schritten zu beschreiben. Hat das was damit zu tun, dass mit Hilfe von 
einem Pointer in der NAND-Logik drei Bereiche innerhalb einer Page 
adressiert werden können (Halfpage 1, Halfpage 2, Spare-Bereich)?

Frage 2:
Wozu ich nirgends eine Aussage finden konnte ist, warum ich nicht eine 
Page mittels "OR" Byteweise aktualisieren kann? Das würde es überflüssig 
machen Daten solange im RAM zu halten bis die Größe einer Page erreicht 
ist (512 Byte).

Es geht speziell um ein 128MBit NAND Flash von STMicroelectronics
siehe http://www.st.com/stonline/products/literature/ds/10058.pdf.

Mich interessiert besonders eine Antwort zu Frage 2.

Gruß
Kito

Autor: Wolfgang Mües (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du das von Dir zitierte Datenblatt auch gelesen?
Für mich haben 2 Minuten genügt, um dort drin die Antworten auf Deine 
Fragen zu finden!

Autor: Christian Kito (cateye030)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang Mües wrote:
> Hast Du das von Dir zitierte Datenblatt auch gelesen?
Ja hab ich. Auf welcher Seite hast Du die Antwort zu Frage 2 gefunden?

> Für mich haben 2 Minuten genügt, um dort drin die Antworten auf Deine
> Fragen zu finden!
...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Seite 24

Autor: Oops (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darf ich kurz fragen was mit:
>..."OR" Byteweise aktualisieren...
gemeint ist?
Stehe gerade auf dem Schlauch.

Gruss
Oops

Autor: Christian Kito (cateye030)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oops wrote:
> Darf ich kurz fragen was mit:
>>..."OR" Byteweise aktualisieren...
> gemeint ist?

Ich meine damit "Bit twiddling".
Siehe Link (hab ich erst gestern gefunden):
http://www.linux-mtd.infradead.org/archive/tech/nand.html

Schlußfolgerung:
Frage 1:
max. 3 mal aktualisieren einer Page wegen "partial page program 
restriction"

Frage 2:
" ..."OR" Byteweise aktualisieren..." = "Bit twiddling" ist nur bei 
NOR-Flash möglich.

Gruß
Christian

PS: Manchmal ist man sich eben unsicher, ob man etwas richtig verstanden 
oder übersehen hat...

Autor: Wolfgang Mües (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man sich mal näher mit der Architektur von NAND-Flashes beschäftigt 
hat, dann ist klar, dass ein NAND immer nur eine GANZE Page beschreiben 
kann. Es gibt keine Logik zum Beschreiben einzelner Bits.

Daraus folgt auch, das das Verunden (um weitere Bits in einem Byte 
gezielt auf "0" zu setzen) genauso möglich oder unmöglich ist wie das 
Schreiben ganzer Bytes, denn im NAND-Flash sind alle Bits hintereinander 
angeordnet wie in einem Schieberegister.

Wenn man den gleichen Bereich nun mehrmals hintereinander beschreibt, 
brennen sich die "0"-Bits immer stärker ein. Irgendwann ist es nicht 
mehr möglich, sie durch Löschen wieder sicher auf "1" zu bringen. 
Deshalb gibt es die maximale Anzahl von Schreibvorgängen. Bei den 
"alten" SLC-Flashes sind das 3 Stück. Bei den neusten MLC-Flashes darf 
man nur 1 mal schreiben.

Aus diesem Grund arbeiten praktisch alle neueren NAND-Flash-Treiber so, 
dass eine einzelne Page NUR EINMAL beschrieben wird. Jede Page enthält 
einen Teil Verwaltungsinformationen, der sagt, welche Daten dort 
drinstehen und einen Revisionszähler. Beim Start der Software werden 
alle Blöcke ausgelesen. Wenn ein Block die gleichen Daten enthält wie 
ein schon vorher gefundener, aber mit höherem Revisionsstand, dann 
ersetzt er den alten Block.

Das bedeutet, das NAND-Flash-Filesysteme in der Regel folgende 
Randbedingungen haben:
a) eine große Verwaltungsstruktur über alle Blöcke im RAM.
b) ein Parser, der beim Start das ganze Flash liest (gähn).
c) ein Hintergrundprozess, der Blöcke mit veralteten Pages aufräumt.

Ganz schön heavy. Wenn Du selbst sowas machen willst, und in endlicher 
Zeit zum Ziel kommen willst, würde ich Dir empfehlen, eine Tabelle mit 
der Zuordnung von logischer zu physikalischer Pageadresse in einem extra 
EEPROM zu speichern.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.