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


von Christian K. (cateye030)


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

von Wolfgang Mües (Gast)


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!

von Christian K. (cateye030)


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!
...

von Gast (Gast)


Lesenswert?

Siehe Seite 24

von Oops (Gast)


Lesenswert?

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

Gruss
Oops

von Christian K. (cateye030)


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...

von Wolfgang Mües (Gast)


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.

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
Noch kein Account? Hier anmelden.