NAND Flash - Page mittels OR byteweise beschreiben

OP #815874
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
OP #816519
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...
Gast #816611
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren