-
Die
Erfindung betrifft ein Festkörperspeichersystem
zur Speicherung und zum Abruf von Daten sowie eine Speicher-Steuereinheit
zum Steuern des Zugriffs auf einen nicht-flüchtigen Speicher eines Festkörperspeichersystems.
Insbesondere betrifft die Erfindung ein Flash-Speichersystem sowie
Steuereinheiten für Flash-Speicher.
-
Flash-EEPROM(electrically
erasable programmable read only memory)-Bauteile werden in der Elektronikindustrie
allgemein zur Speicherung nichtflüchtiger Daten verwendet. Es
existieren verschiedene Typen von FLASH-Speichervorrichtungen, einschließlich Vorrichtungen
auf Grundlage von Speicherzellen vom NAND-Typ, vom UND-Typ oder
vom NOR-Typ. Derartige Vorrichtungen können über verschiedene Typen von Schnittstellen
zum mindestens einen Host-Prozessorsystem verfügen, für das sie hinsichtlich der
Schnittstellenbildung konzipiert sind, und z. B. können sie
eine Schnittstelle für
seriellen Zugriff (wie sie allgemein bei vielen Vorrichtungen vom
NAND- und vom UND-Typ verwendet wird) oder eine Schnittstelle für Direktzugriff
(wie bei einigen Vorrichtungen vom NOR-Typ verwendet) verwenden.
Die Erfindung beabsichtigt, in geeigneten Formen, bei zumindest
einigen und vorzugsweise allen dieser verschiedenen Typen von Speichervorrichtungen
anwendbar zu sein.
-
Es
ist bekannt, Festkörperspeichersysteme
zu verwenden, um zu versuchen, Magnetplatten-Speichervorrichtungen
in Computersystemen zu emulieren. Es ist ein Ziel der Industrie,
zu versuchen, die Betriebsgeschwindigkeit von Festkörperspeichersystemen
zu erhöhen,
um Magnetplattenspeicher besser zu emulieren.
-
Aus
GB-A-2291991 ist es bekannt, einen Flash-Speicher mit Adressenübersetzungstabellen
zu versehen, die in einem Sekundärspeicher
gespeichert sind, um die Übersetzung
logischer in physikalische Adressen zu ermöglichen.
-
Aus
EP-A-0712067 ist es auch bekannt, eine Wandlungstabelle im Flash-Speicher
selbst zu speichern. In jedem Speicherblock sind Ersatzsektoren
vorhanden, um ein Aktualisieren der Speicherblöcke zu ermöglichen, ohne dass die Wandlungstabelle
jedesmal zu aktualisieren wäre,
wenn ein Sektorinhalt aktualisiert wird.
-
Ausführungsformen
der Erfindung sind in den abhängigen
Ansprüchen
dargelegt.
-
Gemäß einer
Ausführungsform
der Erfindung ist ein Speichersystem für Verbindung mit einem Host-Prozessor
geschaffen, das Folgendes aufweist:
einen Festkörperspeicher
mit nicht-flüchtigen
Speichersektoren, die einzeln adressierbar und in löschbaren Sektorblöcken angeordnet
sind, wobei jeder Sektor eine physikalische Adresse aufweist, die
seine physikalische Position in dem Speicher definiert; und
eine
Steuereinheit zum Schreiben und Lesen von Datenstrukturen in den
bzw. aus dem Speicher, und zum Speichern der Sektorblöcke in Blöcke, die
als gelöscht
behandelt werden, und Blöcke,
die als nicht gelöscht behandelt
werden, wobei die Steuereinheit aufweist:
eine Einrichtung
zum Übersetzen
von von dem Host-Prozessor empfangenen logischen Adressenin physikalische
Adressen der Speichersektoren in dem Speicher;
einen Schreibezeiger,
der auf die physikalische Adresse eines Sektors zeigt, in den die
Daten von dem Host-Prozessor zu schreiben sind, wobei der Schreibezeiger
durch die Steuereinheit so gesteuert wird, dass er sich in einer
vorbestimmten Reihenfolge durch die physikalischen Adressen der
Seichersektoren eines Blocks bewegt, der als gelöscht behandelt wird, und sich,
wenn der Block gefüllt
ist, zu einem anderen gelöschten
Block bewegt und
wobei die Steuereinheit dazu ausgelegt ist,
wenn ein Sektor-Schreibbefehl von dem Host-Prozessor empfangen wird,
eine von dem Host-Prozessor empfangene logische Adresse in eine
physikalische Adresse zu übersetzen,
in die Daten geschrieben werden, indem der logischen Adresse die
physikalische Adresse zugeordnet wird, auf die der Schreibezeiger
gegenwärtig
zeigt, und wobei die Steuereinheit dazu ausgelegt ist, eine Sektorzuordnungstabelle
von logischen Adressen der Sektoren mit den zugehörigen physikalischen
Adressen der Sektoren, die ihnen durch die Steuereinheit zugeordnet
wurden, zusammenzustellen (diese Tabelle wird nachfolgend als Sektorzuordnungstabelle
oder SAT bezeichnet), und wobei die Steuereinheit die SAT weniger
häufig
aktualisiert als Speichersektoren mit Daten von dem Host-Prozessor
beschrieben werden und wobei
wenigstens ein zusätzlicher
Sektorenblock vorgesehen ist (nachfolgend als zusätzlicher
SAT-Block (ASB) bezeichnet), der modifizierte Versionen ein zelner
Sektoren eines Sektorzuordnungs-Tabellenblocks enthält, und wobei,
wenn
alle Sektoren in einem solchen Zusatzblock mit modifizierten Versionen
von Sektorzuordnungs-Tabellensektor(en) beschrieben sind, der zugehörige Sektorzuordnungs-Tabellenblock
neu beschrieben wird, um alle modifizierten Versionen in dem Zusatzblock
einzuschließen,
und der Zusatzblock gelöscht
wird.
-
Dadurch,
dass die SAT nicht jedesmal dann aktualisiert wird, wenn Daten vom
Host-Prozessor in einen Sektor im Speicher geschrieben werden, sondern
dass statt dessen die SAT auf weniger häufiger Basis aktualisiert wird,
sorgt die Ausführungsform
für einen
Betrieb eines Festkörperspeichers,
z. B. eines Flash-Speichers, mit sehr hoher Geschwindigkeit, um
dadurch eine gute Emulation eines Magnetplattenspeichers zu ermöglichen.
-
Die
physikalischen Sektoradressen in der SAT sind vorzugsweise durch
die logische Sektoradresse geordnet, wobei der N-te SAT-Eintrag
die physikalische Adresse des Sektors enthält, in den Daten mit der logischen
Adresse N eingeschrieben wurden. Wenn vom Host-Prozessor ein Sektorlesebefehl
empfangen wird, kann die physikalische eine von ihm empfangene logische
Sektoradresse in der SAT nachschlagen, um die physikalische Sektoradresse
zu erhalten, die die Steuereinheit zuvor dieser logischen Sektoradresse
zugeordnet hat. Die SAT ist vorzugsweise in einem oder mehreren
der genannten Blöcke
von Speichersektoren im Festkörperspeicher
gespeichert, wobei jeder Block, der irgendeinen Teil der SAT enthält, nachfolgend
als SAT-Block bezeichnet wird. Vorzugsweise wird die SAT durch Umschreiben
eines oder mehrerer Blöcke
in ihr aktualisiert. Durch Aktualisieren eines gesamten Blocks von
SAT-Sektoren auf einmal wird der Betrieb des Speichersystems deutlich
beschleunigt.
-
Jeder
Sektor im genannten ASB-Block enthält vorzugsweise die physikalische
Adresse des Sektors desjenigen SAT-Blocks, der durch ihn aktualisiert
wird, und die modifizierte Version des genannten SAT-Sektors. Der
Zweck eines ASB besteht im individuellen Ausführen eines Cachevorgangs in
modifizierten Sektoren der SAT für
den Festkörperspeicher,
um die Anzahl der SAT-Block-Umschreibvorgänge zu verringern.
-
Es
ist zu beachten, dass im erfindungsgemäßen Speichersystem die physikalische
Adresse, die irgendeiner vom Host-Prozessor empfangenen vorgegebenen
logischen Adresse entspricht, nicht von der logischen Adresse selbst
abhängt.
Die Steuereinheit ordnet lediglich die physikalische Sektoradresse zu,
auf die der Schreibzeiger aktuell zeigt.
-
Wie
oben beschrieben, füllt
die Festkörperspeicher
den einen genannten Block, der als gelöscht behandelt wird, auf, bevor
sie den Schreibzeiger (WP = Write Pointer) zu einem anderen Block
bewegt. Die Steuereinheit kann zweckdienlicherweise so konfiguriert
sein, dass sie den Schreibzeiger (WP) mit einer vorbestimmten Reihenfolge
durch die Blöcke
bewegt, die als gelöscht
behandelt werden.
-
Die
Steuereinheit kann zweckdienlicherweise den Schreibzeiger (WP) so
steuern, dass sie ihn sequenziell, in aufsteigender numerischer
Reihenfolge der physikalischen Adressen, durch die gelöschten Blöcke bewegt,
wenn jeder Block mit in ihn geschriebenen Daten aufgefüllt wird.
Die Steuerung des Schreibzeigers (WP) kann in dem Sinn zyklisch
sein, dass dann, wenn einmal die Sektoren im höchsten Block, entsprechend
der Reihenfolge der physikalischen Adresse, mit Daten aufgefüllt sind,
der WP durch die Festkörperspeicher
so gesteuert wird, dass ein Umlauf zum Block von Sektoren erfolgt,
die von allen Blöcken,
die von der Steuereinheit aktuell als gelöscht behandelt werden, die
numerisch niedrigsten physikalischen Adressen aufweisen.
-
Die
Steuereinheit kann, alternativ, eine andere vorbestimmte Reihenfolge
zum Einschreiben von Daten in die Speichersektoren verwenden. Zum
Beispiel kann die Steuereinheit den Schreibzeiger (WP) so steuern,
dass er sich sequenziell in absteigender numerischer Reihenfolge,
entsprechend der physikalischen Adresse, durch die als gelöscht behandelten
Blöcke
bewegt. Eine andere Möglichkeit
bestünde
darin, sich in nicht-sequenzieller Reihenfolge durch die physikalischen
Sektoradressen zu bewegen. Zum Beispiel könnte sich der WP in absteigender
numerischer Reihenfolge der Adressen durch die physikalischen Sektoradressen in
jedem als gelöscht
behandelten Block bewegen, und er könnte sich mit irgendeiner vorbestimmten
Reihenfolge, z. B. in aufsteigender numerischer Reihenfolge entsprechend
den physikalischen Adressen des ersten Sektors in jedem genannten
Block von einem Block zum nächsten
bewegen.
-
Es
ist zu beachten, dass viele andere vorbestimmte Reihenfolgen möglich sind,
um Daten in die Sektoren der als gelöscht behandelten Blöcke zu schreiben.
Ferner könnte
die Steuereinheit die gelöschten
Blöcke in
irgendeine anderen Reihenfolge, die nicht vorbestimmt sein muss,
oder die nur teilweise vorbestimmt sein kann, verwenden. Obwohl
es im Allgemeinen nicht bevorzugt ist, könnten die gelöschten Blöcke sogar
in zufälliger
Reihenfol ge verwendet werden.
-
Die
Speichersektoren in jedem Sektorenblock werden vorzugsweise gemeinsam
als Einheit gelöscht. Die
Sektoren können
auch einzeln löschbar
sein (wenn z. B. der Festkörperspeicher
ein solche vom UND-Typ ist). Die Steuereinheit ist vorzugsweise
so konfiguriert, dass sie Löschoperationen
am Speicher so steuert, dass nur gesamte Blöcke von Speichersektoren gelöscht werden.
Ein Sektorenblock wird von der Festkörperspeicher als gelöschter Block
behandelt, wenn alle Speichersektoren in ihm gelöschte Sektoren sind. Wenn ein
Block einen oder mehrere schlechte (d.h. fehlerhafte) Sektoren enthält, kann
die Festkörperspeicher
den gesamten Block als schlecht definieren und diesen Block als
nicht gelöschten
Block behandeln, so dass keine Daten in ihn geschrieben werden.
Alternativ kann, wenn ein Block einen oder mehrere schlechte Sektoren
enthält,
die Festkörperspeicher
diesen Block als gelöschten
Block behandeln, wodurch sie immer noch gute Sektoren in ihm zum
Speichern von Daten verwenden kann. Im letzteren Fall enthält das Speichersystem
jedoch vorzugsweise eine Tabelle, die schlechte Sektoren kennzeichnet,
und die Festkörperspeicher
ist so konfiguriert, dass sie prüft,
ob die nächste
Sektoradresse, zu der der Schreibzeiger (WP) bewegt werden soll,
die Adresse eines schlechten Sektors ist, und dass sie, wenn es
sich um die Adresse eines schlechten Sektors handelt, den Schreibzeiger
so steuert, dass er diesen schlechten Sektor überspringt und sich zur nächsten Sektoradresse,
entsprechend der vorbestimmten Reihenfolge, gemäß der in die Sektoren zu schreiben
ist, bewegt.
-
Jeder
Block, der irgendwelche guten (d.h. nicht fehlerhaften) Sektoren
enthält,
in die bereits geschrieben wurde, werden von der Steuereinheit als
nicht gelöschter
Block behandelt. Ferner soll der Begriff "gelöschter" Sektor nicht nur
einen gelöschten
Sektor abdecken, sondern auch einen solchen, in den noch nie geschrieben
wurde und der demgemäß noch nie
gelöscht
wurde. So wird ein Sektorenblock, in den noch nie geschrieben wurde,
von der Steuereinheit als gelöschter
Block behandelt.
-
Jeder
Sektorenblock verfügt
vorzugsweise über
eine physikalische Blockadresse, die seine physikalische Position
im Speicher definiert. Die physikalische Adresse jeder Sektoradresse
enthält
vorzugsweise die physikalische Blockadresse des Blocks, in dem er
liegt. Die Steuereinheit kann vorzugsweise so konfiguriert sein,
dass sie eine Liste der physikalischen Blockadressen mindestens
einiger der als gelöscht
behandelten Sektorblöcke
zusammenstellt, die von der Steuereinheit dazu verwendet werden
kann, schnell den nächsten Sektorenblock
zu erkennen, in den zu schreiben ist. Diese Liste von Adressen gelöschter Blöcke wird
vorzugsweise von der Steuereinheit in einem temporären Speicher
gespeichert, der im Speichersystem vorhanden sein kann und der zweckdienlicherweise
ein SRAM in einem Mikroprozessor der Steuereinheit ist, und sie
kann aus Information erzeugt werden, die bereits von der Steuereinheit
im Festkörperspeicher
gespeichert wurde und den gelöschten
Zustand jedes Sektorenblocks kennzeichnet. (Diese Information wird
vorzugsweise in Form einer Bitkarte im Festkörperspeicher aufbewahrt, in
der jeder Block als gelöschter
Block oder als nicht gelöschter
Block aufgezeichnet ist.)
-
Die
Steuereinheit ist zweckdienlicherweise so konfiguriert, dass sie
dann, wenn von ihr vom Host-Prozessor ein Schreibbefehl empfangen
wird, der zuvor in einen anderen Sektor geschriebene Daten veraltet macht,
in einen temporären
Speicher mit der Adresse des Sektors, der die nun veralteten Daten
enthält,
speichert. Dieser temporäre
Speicher ist zweckdienlicherweise ein SRAM oder DRAM, der in einem
Mikroprozessor der Steuereinheit vorhanden ist. Wenn ein von einem
Benutzer erzeugter Sektorlöschbefehl
durch die Steuereinheit vom Host-Prozessor empfangen wird, markiert
sie den zu löschenden
Sektor vorzugsweise als veraltet (ohne ihn physikalisch zu löschen).
Die Steuereinheit kann dafür
sorgen, dass zu einem jeweiligen Zeitpunkt nur ein Block, nachfolgend
als aktuell veralteter Block (COB = Current Obsolete Block) bezeichnet, einen
oder mehrere Sektoren enthält,
die veraltete Daten enthalten, die durch den Schreibzeiger (WP)
beschrieben wurden, wobei dann, wenn alle Sektoren im COB veraltete
Daten enthalten, derselbe unmittelbar gelöscht wird. Dies ist ein besonders
geeignetes Schema für
den Fall, dass sich der Schreibzeiger (WP) sequenziell durch die
Speichersektoradressen in jedem als gelöscht behandelten Block bewegt,
bevor er sich zum nächsten
Block bewegt. Bei einem derartigen Schema liegt in den meisten Fällen eine
Reihe veralteter, zu löschender
Sektoren (, die z. B. einen Teil einer Benutzerdatei, die umgeschrieben
wurde, enthält)
im selben Block. Wenn eine Reihe von Sektoren mit anderer Reihenfolge
als derjenigen umgeschrieben wird, mit der zuvor in sie geschrieben
wurde, kann dies zu veralteten Sektoren in mehr als einem Block
führen.
Wenn ein Sektor in einem anderen Block als im COB veraltete Daten
enthalten wird, führt
die Steuereinheit vorzugsweise eine Neuzuordnung irgendwelcher Daten
in gültigen
(nicht veralteten) Sektoren im COB für einen anderen Block aus,
der derjenige sein kann, auf den der Schreibzeiger (WP) aktuell
zeigt, und dann löscht
sie den COB. Der genannte Sektor im anderen Block als dem COB wird
dann als veraltet markiert, und dieser andere Block ist nun der
COB. An statt die umgeordneten Daten am aktuellen Ort des Schreibzeigers
zu schreiben, kann das Speichersystem über einen zweiten Schreibzeiger
verfügen,
der nachfolgend als Neuzuordnungszeiger (RP = Relocation Pointer)
bezeichnet wird, der auf die physikalische Adresse des Sektors zeigt,
in den derartige neu zugeordnete Daten zu schreiben sind, wobei
der Neuzuordnungszeiger (RP) immer in einem anderen Sektorenblock
als der Schreibzeiger (WP) liegt. Dies hat den Vorteil, dass verhindert
wird, dass neu zugeordnete Daten mit Datenstrukturen vermischt werden,
für die
durch den Host-Prozessor eine direkte Schreibanweisung vorliegt,
d.h., die durch den Schreibzeiger (WP) zu schreiben sind.
-
Im
Allgemeinen werden vom Host-Prozessor zwei Arten von Daten in den
Festkörperspeicher
geschrieben. Es handelt sich um Dateidaten und Systemdaten. Um die
Anzahl von Neuzuordnungen und Löschvorgängen weiter
zu verringern, kann das Speichersystem ferner über einen dritten Schreibzeiger
verfügen, der
nachfolgend als System-Schreibzeiger (SWP = System Write Pointer)
bezeichnet wird, der auf die physikalische Adresse desjenigen Sektors
zeigt, in den vom Host Systemdaten zu schreiben sind, wobei sich
der SWP immer in einem anderen Block als der Schreibzeiger (WP)
(und in einem anderen Block als der Neuzuordnungszeiger, falls ein
solcher vorhanden ist) existiert. Systemdaten werden vorzugsweise
während
der Initialisierung des Systems erkannt und während des Betriebs nach Bedarf
aktualisiert.
-
Wenn
sowohl ein Schreibzeiger (WP) als auch ein System-Schreibzeiger
(SWP) vorhanden sind, werden Datendaten in diesem Fall immer an
denjenigen Adressen eingeschrieben, auf die der Schreibzeiger (WP) zeigt.
Sowohl der Neuzuordnungszeiger (RP) als auch der System-Schreibzeiger
(SWP) werden vorzugsweise so gesteuert, dass sie sich durch die
physikalischen Adressen der Speichersektoren in den genannten, als
gelöscht
behandelten Blöcken,
in ähnlicher
Weise wie der Schreibzeiger (WP) bewegen. Demgemäß bewegt sich, wenn alle (guten)
Sektoren im genannten Block mit neu zugeordneten Daten oder Systemdaten
gefüllt wurden,
der zutreffende Zeiger hinsichtlich des Neuzuordnungszeigers (RP)
und des System-Schreibzeigers (SWP) zur nächsten, durch die Steuereinheit
definierten Adresse, um von den physikalischen Adressen aller Sektoren
in den als gelöscht
behandelten Blöcken
verwendet zu werden.
-
Wenn
ein System-Schreibzeiger (SWP) vorhanden ist, sorgt die Steuereinheit
vorzugsweise dafür, dass
jederzeit mindestens zwei Blöcke
existieren, die einen oder mehrere veraltete Sektoren enthalten,
wobei der eine der genann te COB und der andere ein aktuell veralteter
Systemblock (COSB = Current Obsolete System Block) ist, der einen
oder mehrere veraltete Systemdatensektoren enthält. Wenn irgendeiner der Systemdatensektoren
neu zugeordnet werden muss, damit der COSB gelöscht werden kann, werden die
neu zugeordneten Systemdaten vorzugsweise an diejenige Adresse geliefert,
auf die der System-Schreibzeiger (SWP) aktuell zeigt.
-
Tatsächlich können vorübergehend
mehr als zwei Blöcke
(COB und COSB) existieren, die zu irgendeinem Zeitpunkt veraltete
Daten enthalten. Es ist möglich,
dass dann, wenn z. B. der COB gelöscht werden muss (es wurden
gerade in einem anderen Block veraltete Daten erzeugt), einer der
Schreibzeiger darauf zeigt, d.h., dass der WP immer noch in den
Block schreibt, der aktuell der COB ist. Wenn dies der Fall ist,
fährt die
Steuereinheit vorzugsweise damit fort, den neuen COB zu erzeugen,
jedoch verschiebt sie die Löschung
des alten COB (der nachfolgend als anstehender veralteter Block
(POB = Pending Obsolete Block) behandelt wird), bis alle gelöschten Sektoren
im POB gefüllt
sind und sich der Schreibzeiger zum nächsten zu verwendenden gelöschten Block,
wie durch die Steuereinheit definiert, bewegt. Dabei werden alle
gültigen
(nicht veralteten) Daten im POB neu zugeordnet, und der POB wird
gelöscht.
-
Zusätzlich zum
Schreiben von Datenstrukturen vom Host-Prozessor in den Speicher
kann die Steuereinheit auch als Steuerungsinformation spezifizierte
Speicherdaten erzeugen und solche schreiben. Die Steuereinheit schreibt
vorzugsweise derartige Steuerungsinformation in Blöcke von
Speichersektoren, die von denen getrennt sind, in die vom Host-Prozessor
empfangene Datenstrukturen geschrieben werden. Blöcke zum Speichern
derartiger Steuerungsinformation werden nachfolgend als Steuerblöcke (CBs
= Control Blocks) bezeichnet, die von der Steuereinheit periodisch
aktualisiert werden, und auf die während der Initialisierung,
und gelegentlich während
des Betriebs, des Speichersystems zugegriffen wird.
-
Die
Steuereinheit speichert vorzugsweise eine Liste logischer Sektoradressen
für Datenstrukturen,
die durch den Schreibzeiger (WP) seit der letzten SAT-Aktualisierung
geschrieben wurden, in einem temporären Speicher (der ein im Speichersystem
vorhandener RAM sein kann, oder der zweckdienlicherweise ein in
einem Mikroprozessor der Steuereinheit eingebetteter SRAM oder DRAM
ist). Diese im SRAM gespeicherte Liste wird nachfolgend als Schreibsektorliste
(WSL = Write Sector List) bezeichnet. Die logischen Adressen in
der WSL werden vorteilhafterweise in der Reihenfolge abgespeichert,
in der sie in die nicht-flüchtigen
Sektoren im Speicher geschrieben wurden. Zweckdienlicherweise kann
daher, für
eine Gruppe fortlaufend geschriebener Sektoren, der WSL-Eintrag
als erste logische Sektoradresse und als Sektorgruppenlänge, d.h.
als Anzahl geschriebener Sektoren, geschrieben werden. Jede genannte
Sektorgruppe ist so definiert, dass sie nicht mehr als einen Sektorenblock überspannt.
-
Die
Steuereinheit speichert vorteilhafterweise im genannten temporären Speicher
auch die Reihenfolge ab, gemäß der vom
Schreibzeiger (WP) Blöcke
dazu verwendet wurden, Daten seit der letzten Aktualisierung der
SAT zu schreiben. Dies wird in Form einer Liste von Blockadressen
der Blöcke
abgespeichert, in denen die aktualisierten Sektoren liegen, deren
Adressen in der WSL enthalten sind. Diese Liste von Blockadressen
wird nachfolgend als Schreib-Blockliste (WBL = Write Block List)
bezeichnet. Es ist zu beachten, dass, da das Speichersystem, wegen
der WSL und der WBL, Kenntnis über
den Ort im physikalischen Speicher hat, der für die erste logische Adresse
in der genannten Gruppe fortlaufend geschriebener Sektoren zugeordnet wurde,
die Steuereinheit demgemäß immer
für jede
logische Sektoradresse in der genannten Gruppe fortlaufend geschriebener
Sektoren, die Seite der letzten SAT-Aktualisierung geschrieben wurden,
unter Verwendung der WSL und der WBL auf dem korrekten physikalischen
Sektor zugreifen kann. Die WSL verfügt vorzugsweise über eine
vorbestimmte Größe, und
wenn sie einmal gefüllt
ist, können
ein oder mehrere SAT-Blöcke (und/oder
ABSs) aktualisiert werden und die WSL und die WBL werden gelehrt.
-
Vorzugsweise
werden die physikalische Start-Sektoradresse und die Verbindungen
zwischen Blöcken,
die Sektoren enthalten, in die Seite der letzten SAT-Aktualisierung
durch die Steuereinheitdaten geschrieben wurden, ebenfalls in einem
Steuerblock des Festkörperspeichers
gespeichert. Durch Speichern der logischen Sektoradresse für die in
jedem Sektor gespeicherten Benutzerdaten im Sektor selbst, z. B.
in einem im Sektor vorhandenen Kopffeld, können die WSL und die WBL folgend
auf jedes Wegnehmen und Wiederherstellen der Spannungszufuhr zum
System durch Durchfahren des Festkörperspeichers und durch Lesen der
logischen Adressen in den Sektoren, in die seit der letzten Aktualisierung
der SAT geschrieben wurde, bis ein nicht gefüllter Block erreicht wird,
leicht neu erzeugt werden. Dies ist der Block, der den Schreibzeiger
(WP) vor dem Wegnehmen oder Verlieren der Spannung enthielt. Dies
sorgt für
hohe Datensicherheit im Fall eines unerwarteten Wegnehmens der Spannung
vom Speichersystem.
-
Wenn
im Speichersystem ein Neuzuordnungszeiger und ein System-Schreibzeiger
enthalten sind, speichert die Steuereinheit vorzugsweise im temporären Speicher
(z. B. SRAM oder DRAM im Mikroprozessor der Steuereinheit) ähnliche
Listen logischer Sektoradressen, entsprechend Sektoren im Speicher,
in die neu zugeordnete Daten oder Systemdaten geschrieben wurden,
wobei solche Listen nachfolgend als Neuzuordnungs-Sektorliste (RSL
= Relocation Sector List) bzw. Schreibsystem-Sektorliste (WSSL)
bezeichnet werden. Die Steuereinheit kann im genannten temporären Speicher
auch entsprechende Listen zur Reihenfolge von Blöcken speichern, die durch den
RP und den SWP verwendet wurden, ähnlich der Schreibblockliste
und diese zwei Listen werden nachfolgend als Neuzuordnungs-Blockliste
(RBL = Relocation Block List) und Schreibsystem-Blockliste (WSBL
= Write System Block List) bezeichnet. Darüber hinaus können auch
die physikalische Start-Sektoradresse und die Verbindungen zwischen
Blöcken,
die Sektoren enthalten, in die Seite der letzten SAT-Aktualisierung
neu zugeordnete Daten oder Systemdaten geschrieben wurden, in mindestens
einem der genannten Steuerblöcke
(CBS) des Festkörperspeichers
gespeichert werden, wodurch die RSL und die WSSL folgend auf jedes
Wegnehmen und Wiederherstellen der Spannung für den Host-Prozessor dadurch
neu geschaffen werden können,
dass einfach der Speicher durchfahren wird und die logischen Adressen
in den Sektoren gelesen werden, in die seit der letzten SAT-Aktualisierung
durch den RP bzw. SWP geschrieben wurde.
-
Jeder
genannte Sektor bei jeder der oben beschriebenen Ausführungsformen
kann aus einer einzelnen "Seite" des Speichers, d.h.
einer Reihe von Speicherzellen in einem genannten Block von Speichersektoren
bestehen. Jedoch ist die Erfindung nicht ausschließlich auf
ein derartiges Sektorformat beschränkt und in einigen Fällen (wenn
z. B. ein NOR-Speicher vom Direktzugriffstyp verwendet wird) kann
jeder dern Sektoren weniger als eine Seite oder mehr als eine Seite
enthalten. Jedoch müssen
im letzteren Fall nicht alle ge-n Sektoren notwendigerweise dieselbe
Größe aufweisen.
Zum Beispiel könnte
durch die Steuereinheit nannte genannte ein Datenorganisationsschema
verwendet werden, wie dasjenige, das in unserer früheren internationalen
Patentanmeldung Nr. PCT/GB00/00188 beschrieben ist, um Sektoren
geeigneter Größen zu bilden,
um individuelle Defekte (von Subsektorgröße) zu vermeiden, wie sie im
Festkörperspeicher
vorhanden sein können.
-
Jeder
Sektor ist, wie oben angegeben, individuell adressierbar. Jeder
Sektor kann über
mehrere Sektorabschnitte verfügen,
die ebenfalls individuell adressierbar sind, und die Steuereinheit
kann individuell in jeden Sektorabschnitt schreiben und aus ihm
lesen. Es ist zu beachten, dass die kleinstmögliche Sektorabschnittgröße die minimal
adressierbare Einheit des Speichers ist. Zum Beispiel beträgt bei einem
Speicher vom NOR-Typ die minimal adressierbare Einheit des Speichers
im Allgemeinen 1 Byte.
-
Die
Steuereinheit schreibt Daten vorzugsweise Daten in gleichmäßig bemessene
Datensegmente der Speichersektoren, und liest Daten daraus. Wenn
alle Speichersektoren dieselbe Größe haben, hat jedes genannte
Datensegment vorzugsweise dieselbe Größe wie ein genannter Speichersektor.
Jedes Datensegment kann Datenstrukturen vom Host-Prozessor (z. B.
Datei- oder Systemdaten) und/oder von der Steuereinheit erzeugte
Daten umfassen.
-
Wenn
der Festkörperspeicher
auf Bauteilen vom NAND-Typ beruht, speichert die Steuereinheit in
einem oder mehreren der genannten Steuerblöcke vorzugsweise eine Liste
der Blockadressen von Blöcken
im nicht-flüchtigen
Speicher, die schlechte Sektoren enthalten (nachfolgend als Liste
schlechter Blöcke
(BBL = Bad Block List) bezeichnet), und die Steuereinheit behandelt
jeden derartigen Block als "nicht
gelöschten" Block, so dass er
in der Liste gelöschter
Blöcke,
die im temporären
Speicher gespeichert sein kann, nicht erscheint, und die Steuereinheit
schreibt keinerlei Daten in diesen Block.
-
Wenn
der Speicher auf Bauteilen vom UND-Typ beruht, speichert die Steuereinheit
im einen oder mehreren der genannten Steuerblöcke (CBS) vorzugsweise eine
Liste von Adressen aller schlechten Sektoren, und sie steuert den
mindestens einen Schreibzeiger so, dass die guten Sektoren in jedem
Block, der mindestens einen schlechten Sektor enthält, verwendet
werden, während
alle schlechten Sektoren übersprungen werden.
Es ist zu beachten, dass im letzteren Fall, bei dem ein einen oder
mehrere schlechte Sektoren enthaltender Block zu löschen ist,
die guten (d.h. fehlerhaften) Sektoren im Block während eines
Blocklöschvorgangs individuell
gelöscht
werden.
-
Die
Steuereinheit speichert im einen oder mehreren der genannten Steuerblöcke auch
vorteilhafterweise eine Liste der Blockadressen aller SAT-Blöcke. Diese
Liste liegt vorzugsweise in Form mehrerer Listenabschnitte vor,
wobei jeder genannte Abschnitt nachfolgend als Tabellen-Blockliste
(TBL) bezeichnet wird, und jeder genannte Abschnitt enthält die Blockadressen
einer Gruppe logisch fortlaufender SAT-Blöcke und irgendwelcher entsprechender
ASBs.
-
Die
Steuereinheit speichert vorzugsweise die Blockadressen des einen
oder der mehreren Steuerblöcke
in einem zugewiesenen Block des Speichers, der nachfolgend als Bootblock
(BB) bezeichnet wird. Andere wichtige, zur Datensicherheit erforderliche
Information kann ebenfalls im Bootblock gespeichert werden, z. B. die
Liste schlechter Blöcke
(oder schlechter Sektoren). Vorzugsweise wird der erste Block von
Sektoren im Speicher, der keinerlei schlechte Sektoren enthält, als
Bootblock (BB) bezeichnet.
-
Vorzugsweise
verwendet die Steuereinheit nur Blöcke, die durchgehend gute Sektoren
enthalten, als SAT-Blöcke,
Steuerblöcke,
ASBs oder BBs.
-
Im
temporären
Speicher (z. B. RAM im Speichersystem), wie ein SRAM oder DRAM im
Mikroprozessor der Steuereinheit) kann ein Cache vorhanden sein,
in dem die Steuereinheit eine Gruppe fortlaufender SAT-Einträge speichert,
zu denen der SAT-Eintrag gehört,
auf den zuletzt ausgehend von der SAT (durch die Steuereinheit)
zugegriffen wurde. Dies verbessert die Adressenübersetzungsgeschwindigkeit
weiter. Eine weitre Erhöhung
der Adressenübersetzungsgeschwindigkeit
kann dadurch erzielt werden, dass im temporären Speicher eine Liste physikalischer
Adressen aller ASBs und der SAT-Blöcke, denen sie zugewiesen sind (nachfolgend
als ASB-Liste oder ASBL bezeichnet) erzeugt, die jedesmal dann aktualisiert
wird, wenn eine Schreiboperation für einen SAT-Sektor ausgeführt wird.
In ähnlicher
Weise können
auch die Positionen der TBLs im mindestens einen Steuerblock im
temporären
Speicher gespeichert werden, um eine noch schnellere Übersetzung
logischer in physikalische Sektoradressen zu ermöglichen.
-
Der
Festkörperspeicher
kann über
ein einzelnes Speicherarray in Form eines einzelnen Speicherchips verfügen, oder
er kann über
mehrere Speicherarrays in Form mehrerer Speicherchips verfügen. Wenn
der Speicher über
mehrere Chips verfügt,
erzeugt die Steuereinheit vorteilhafterweise die Speichersektoren
in den mehreren Speicherchips zu einer Vielzahl virtueller Blöcke aus,
wobei jeder der genannten virtuellen Blöcke mindestens einen löschbaren
Block von Speichersektoren aus jedem genannten Speicherchip enthält, und
die Steuereinheit sortiert die genannten virtuellen Blöcke vorzugsweise
in solche, die als gelöscht
behandelt werden, und solche, die als nicht gelöscht behandelt werden. Die
Steuereinheit stellt vorzugsweise eine Liste der als gelöscht behandelten
virtuellen Blöcke,
und sie speichert diese im temporären Speicher im Speichersystem ab,
das ein SRAM in einem Mikroprozessor der Steuereinheit sein kann.
Die Steuereinheit steuert den Schreibzeiger (WP) (und den RP und
SWP, wenn vorhanden) vorzugsweise so, dass er für jede fortlaufende Sektorschreiboperation
von einem Chip zum anderen bewegt wird, ausgehend in einem Sektor
in einem löschbaren Block
des virtuellen Blocks, und mit fortlaufender Bewegung zu einem Sektor
in jedem der anderen löschbaren Blöcke im virtuellen
Block, bis ein Sektor in jedem löschbaren
Block des virtuellen Blocks geschrieben wurde, mit anschließender Bewegung
zurück
zum Chip, in dem der erste Sektor geschrieben wurde, und mit einem Fortlauf
auf ähnliche
Weise, um einen anderen Sektor in jedem löschbaren Block des virtuellen
Blocks zu füllen,
usw., bis der virtuelle Block mit Daten gefüllt ist. Dann bewegt sich der
Schreibzeiger (WP) zum nächsten virtuellen
Block in der Liste virtueller Blöcke,
die als gelöscht
behandelt werden, und er füllt
diesen nächsten virtuellen
Block auf ähnliche
Weise auf. Die Steuereinheit ist vorzugsweise so konfiguriert, dass
sie für
jeweils n fortlaufende Sektorschreiboperationen, die sie ausführt, wobei
n kleiner als oder gleich groß wie
die Anzahl der Festkörperspeicherchips
im Speichersystem ist, im Wesentlichen gleichzeitig in einen Sektor
in jedem der n Chips schreibt. Die Steuereinheit führt vorzugsweise
ein Löschen
jedes genannten virtuellen Blocks dadurch aus, dass sie gleichzeitig
alle löschbaren
Blöcke
im virtuellen Block löscht.
-
Es
ist zu beachten, dass die Steuereinheit des Speichersystems im Wesentlichen
mit eine Schaltungsanordnung als Steuereinheit-Bauteil implementiert
sein kann, dass sie jedoch vorzugsweise, zumindest teilweise, als
Firmware implementiert ist, die im Speicher eines Steuereinheit-Bauteils
enthalten ist. Die Steuereinheit kann integral auf demselben Chip
(oder einem derselben Chips) wie der Festkörperspeicher ausgebildet sein.
-
Gemäß einer
Ausführungsform
der Erfindung ist ein Speichersystem gemäß dem Anspruch 1 geschaffen,
das ferner Folgendes aufweist:
einen Festkörperspeicher mit mehreren Festkörperspeicherchips
mit jeweils nicht-flüchtigen
Speichersektoren, die individuell adressierbar sind und die in löschbaren
Blöcken
von Sektoren angeordnet sind, wobei jeder dieser Sektoren über eine
physikalische Adresse verfügt,
die seine physikalische Position im Speicher definiert;
und
eine Steuereinheit zum Schreiben von Datenstrukturen in den Speicher
und zum Lesen von Datenstrukturen aus ihm, wobei:
die Steuereinheit
die löschbaren
Blöcke
zu virtuellen Blöcken
ausbildet, von denen jeder einen löschbaren Block aus jedem der
Speicherchips enthält,
und sie die virtuellen Blöcke
in solche, die als gelöscht
behandelt werden, und solche, die nicht als gelöscht behandelt werden, sortiert,
und sie einen virtuellen Block mit Daten füllt, bevor sie sich zum nächsten zu
füllenden
virtuellen Block bewegt, und wobei jeder virtuelle Block dadurch gefüllt wird,
dass mit einer wiederholten Abfolge in seine Speichersektoren geschrieben
wird, wobei die Steuereinheit einzeln nacheinander in einen Speichersektor
in jedem der löschbaren
Blöcke
des virtuellen Blocks schreibt, wodurch sich fortlaufende geschriebene
Sektoren in verschiedenen Chips befinden.
-
Vorzugsweise
ist die Steuereinheit so konfiguriert, dass sie für jeweils
n fortlaufende Sektorschreiboperationen eine Ausführung für einen
vom Host-Prozessor
empfangenen Schreibbefehl für
mehrere Sektoren ausführt,
wobei n kleiner als oder gleich groß wie die Anzahl der Festkörperspeicherchips
im Speichersystem ist, und wobei die Steuereinheit im Wesentlichen
gleichzeitig in einen Sektor in jedem der n Chips schreibt.
-
Gemäß einer
zweiten Erscheinungsform der Erfindung ist eine Steuereinheit zum
Schreiben von Datenstrukturen in einen Festkörperspeicher, und zum Lesen
von Datenstrukturen aus diesem geschaffen, wobei dieser Speicher über nicht-flüchtige Speichersektoren
verfügt,
die individuell adressierbar sind und die in löschbaren Blöcken von Sektoren angeordnet
sind, wobei jeder genannte Sektor über eine physikalische Adresse
verfügt,
die seine physikalische Position im Speicher definiert, wobei die
Steuereinheit Folgendes aufweist:
eine Einrichtung zum Übersetzen
von von einem Host-Prozessor eines Speichersystems, in dem die Steuereinheit
verwendet wird, empfangenen logischen Adressen in physikalische
Adressen der genannten Speichersektoren im Speicher, und zum Sortieren
der Sektorenblöcke
zu Blöcken,
die als gelöscht
behandelt werden, und Blöcke,
die nicht als gelöscht
behandelt werden;
und einen Schreibzeiger (WP) zum Zeigen auf
die physikalische Adresse des Sektors, in den vom Host-Prozessor
zu schreiben ist, wobei dieser Schreibzeiger (WP) durch die Steuereinheit
so gesteuert wird, dass er sich mit einer vorbestimmten Reihenfolge
durch die physikalischen Adressen der Speichersektoren in jedem als
gelöscht
behandelten Block bewegt und er sich, wenn der Block gefüllt ist,
zu einem anderen der gelöschten
Blöcke
bewegt; und wobei die Steuereinheit, wenn von ihr ein Sektorschreibbefehl
vom Host-Prozessor empfangen
wird, eine von diesem empfangene logische Sektoradresse in eine
physikalische Adresse übersetzt,
an der Daten einzuschreiben sind, was dadurch erfolgt, dass der
genannten logischen Adresse diejenige physikalische Adresse zugeordnet
wird, auf die der Schreibzeiger (WP) aktuell zeigt;
und wobei
die Steuereinheit so konfiguriert ist, dass sie eine Tabelle (die
SAT) logischer Adressen mit jeweiligen physikalischen Adressen,
die diesen durch die Steuereinheit zugeordnet wurden, zusammenstellt,
und um die SAT weniger häufig
zu aktualisieren, als Daten vom Host-Prozessor in Speichersektoren
geschrieben werden.
-
Gemäß einer
zweiten Erscheinungsform der Erfindung ist ein Verfahren zum Steuern
von Lese- und Schreibvorgängen
von Datenstrukturen in einen Festkörperspeicher und aus einem
solchen geschaffen, wobei dieser Speicher über nicht-flüchtige Speichersektoren
verfügt,
die individuell adressierbar sind und die in löschbaren Blöcken von Sektoren angeordnet
sind, wobei jeder genannte Sektor über eine physikalische Adresse
verfügt,
die seine physikalische Position im Speicher definiert, wobei das
Verfahren dergestalt ist, wie es im Anspruch 50 definiert ist.
-
Nun
werden bevorzugte Ausführungsformen
der Erfindung nur beispielhaft und unter Bezugnahme auf die beigefügten Zeichnungen
beschrieben.
-
1 ist
eine schematische Darstellung eines Sektorenblocks in einem FLASH-Speicher
vom NAND-Typ, wobei drei Sektoren darin dargestellt sind;
-
2 ist
ein Blockdiagramm eines Speichersystems mit einem Flash-Chip und
einem Steuereinheit-Chip;
-
3 ist
eine schematische Darstellung einer Seite von Daten in einem FLASH-Speicher
vom NAND- oder vom UND-Typ;
-
4 zeigt
die Struktur eines Kopffelds der Seite der 3;
-
5 veranschaulicht
das Format einer physikalischen Adresse (PA) eine Seite;
-
6 veranschaulicht
einen Steuerblock(CB)-Eintrag;
-
7 veranschaulicht
einen Eintrag in einer Tabellen-Blockliste (TBL);
-
8 zeigt
das Format eines MAP-Eintrags;
-
9 zeigt
das Format eines Eintrags in der ASB-Liste (ASBL);
-
10 veranschaulicht
das Format der Struktur eines aktuell veralteten Blocks (COB);
-
11 ist
eine Tabelle zum Veranschaulichen der Reihenfolge, mit der in Sektoren
in einem virtuellen Block eines Mehrfach-Flash-Chipspeichersystems
gemäß einer
Ausführungsform
der Erfindung geschrieben wird;
-
12 zeigt
das Format einer virtuellen Adresse (VA);
-
13 zeigt,
wie die PA aus der VA enthalten wird;
-
14 veranschaulicht
die zeitliche Lage von Operationen während eines Schreibvorgangs
für mehrere
Sektoren bei einem Mehrfach-Flash-Chipspeichersystem gemäß der Erfindung;
-
15 ist
ein Blockdiagramm eines Steuereinheit-Chips;
-
16 ist
eine Tabelle, die zugeordnete Speicherkapazität für ein Speichersystem der Erfindung
zeigt;
-
17 ist
ein Flussdiagramm, das einen Adressenübersetzungsprozess veranschaulicht;
-
18 ist
ein Flussdiagramm der im Kasten 58 der 17 ausgeführten Schritte;
-
19 ist
ein Blockdiagramm eines mehrfach-Flash-Chipspeichersystems mit vier
Flash-Chips und einem Steuereinheit-Chip;
-
20 ist
ein Flussdiagramm der im Kasten 56 der 17 ausgeführten Struktur;
-
21 ist
ein Flussdiagramm der im Kasten 44 der 17 ausgeführten Schritte;
-
22 ist
ein Flussdiagramm einer Sektorleseoperation;
-
23 ist
ein Flussdiagramm einer Sektorschreiboperation;
-
24 ist
ein Flussdiagramm der im Kasten 161 der 23 ausgeführten Schritte;
-
25 ist
ein Flussdiagramm der im Kasten 207 der 24 ausgeführten Schritte;
-
26 ist
ein Flussdiagramm der im Kasten 160 227 der 23 ausgeführten Schritte;
-
27 ist
ein Flussdiagramm einer Sektorlöschoperation;
-
28 veranschaulicht
die physikalische Unterteilung einer Seite in einem FLASCH-Speicher
vom NAND- und vom UND-Typ;
-
29 ist
eine Darstellung einer alternativen Art zum Anordnen der Daten in
der Flash-Seite der 28;
-
30 ist
eine Darstellung noch einer weiteren Art zum Anordnen der Daten
in der Flash-Seite der 28;
-
31(a) veranschaulicht Daten in einem Pufferspeicher
der Steuereinheit vor einer Sektorschreiboperation;
-
31(b) veranschaulicht Daten in einer Flash-Seite
nach Abschluss einer Schreiboperation, wobei die Daten gemäß der Ausführungsform
der 30 angeordnet sind;
-
32 ist
eine Tabelle von Steuereinheit-Befehlen, die zur Übertragung
von Daten vom Steuereinheit-Puffer zum Flash-Speicher während der
Schreiboperation der 31(a) und
(b) verwendet werden;
-
33 veranschaulicht
Daten in einem Pufferspeicher der Steuereinheit nach einer Leseoperation;
-
34 ist
eine Tabelle von Steuereinheit-Befehlen, die zum übertragen
von Daten aus dem Flash-Speicher zum Steuereinheit-Puffer während der
Leseoperation der 33 verwendet werden; und
-
35 ist
ein schematisches Blockdiagramm eines löschbaren Sektorenblocks in
einem FLASH-Speicher vom NOR-Typ, wobei drei Sektoren darin dargestellt
sind.
-
Die 1 veranschaulicht
schematisch die Struktur physikalischer Seiten in einem Block 4 eines Flash-Speicherarrays
auf Grundlage von Speicherzellen vom NAND-Typ. Die 1 zeigt
drei Seiten 1, 2, 3 im Block 4.
Die Seite 1 verfügt
physikalisch gesehen über
eine Reihe von Speicherzellen in einem Speicherblock, wobei der
Speicher in viele derartige Blöcke
unterteilt ist, von denen jeder über
mehrere Reihen von Speicherzellen (d.h. mehrere Seiten) verfügt. Jede
Seite 1, 2, 3 wird als ein Sektor des
physikalischen Speicherraums im Flash-Speichersystem, das beschrieben
wird, behandelt, und sie verfügt über eine
Breite von 528 Bytes. Jede Seite 1 im Speicher ist individuell
adressierbar (für
Lese-/Schreiboperationen und Löschoperationen), und
die Seiten sind in Blöcken
löschbar.
Nun wird ein Speichersystem, das ein derartiges Speicherarray enthält, beschrieben.
Später
werden zusätzlich
Speichersysteme auf Grundlage von FLASH-Speichern vom UND- oder
NOR-Typ beschrieben.
-
Die 2 zeigt
ein Speichersystem 10, das einen Flash-Speicherchip 5 und
einen Steuereinheit-Chip 8 enthält. Der Flash-Speicherchip 5 verfügt über ein
Flash-Speicherarray 6 und einen Schreib/Lese-Puffer 7 mit
einer Schnittstelle zu einem Steuereinheit-Puffer 9 im
Steuereinheit-Chip 8. Der Steuereinheit-Chip 8 verfügt ferner über einen
Steuereinheit-Mikroprozessor 11 und einen Fehlerkorrekturcode(ECC)-Generator
mit Prüfeinheit 12.
Der Steuereinheit-Puffer 9 ist über eine Schnittstelle mit
einem Host-Computerprozessor (nicht dargestellt) verbunden, der über eine
Ausgangs-O/P-Einheit des Steuereinheit-Chips 8 mit dem
Speichersystem 10 verbunden ist. Der Steuereinheit-Chip 8 (nachfolgend
als "Steuereinheit" bezeichnet) steuert
Lese- und Schreibvorgänge
für Datenstrukturen
in das und aus dem Speicherarray 6. Der mit dem Speichersystem 10 verbundene
Host-Prozessor 2 sendet Lese- und Schreibbefehle an die
Steuereinheit 8. Durch den Host kann mit Abschnitten von
512 Bytes oder "Hostdatensektoren", von denen jeder über eine
logische Sektoradresse (LA) verfügt,
auf Daten zugegriffen werden. Die Steuereinheit 8 empfängt vom
Host-Prozessor eine LA, und sie übersetzt
diese in eine physikalische Adresse, wie dies nachfolgend beschrieben
wird. Im vorliegenden Fall (Speicher vom NAND-Typ) definiert jede
physikalische Adresse (PA) die physikalische Position einer Seite 1 des
FLASCH-Speichers im Array 6. Jede LA liegt in Form eines
24-Bit-Felds vor. Das Zugreifen auf eine PA unter Verwendung einer
LA wird als Adressenübersetzung
bezeichnet, und es ist im Allgemeinen die häufigste Operation, wie sie
bei jedem Lese/Schreib-Zugriff erforderlich ist. Die Steuereinheit 8 schreibt
Daten mit Datensegmenten, von denen jedes 528 Bytes breit ist, in
das Speicherarray 6. Für
jeweils 512 Bytes an vom Host empfangene Daten (z. B. Benutzerdatei
oder Systemdaten) erzeugt die Steuereinheit 16 Bytes von
Daten, mit einem durch den Mikroprozessor 11 erzeugten
Kopf von 4 Bytes un einem durch die ECC-Generator- und Prüfeinheit 12 erzeugten
ECC von 12 Bytes. Die Steuereinheit organisiert dies zu einem Datensegment
von 528 Bytes, das über
den Flash-Puffer 7 in eine Seite des Speicherarrays 6 geschrieben
wird. Die logische Adresse (LA) eines Host-Datensektors wird im
4-Byte-Kopf im Flash-Sektor
1, in den dieser Host-Datensektor geschrieben wird, gespeichert.
Bei einer Leseoperation werden die im relevanten Sektor des Flash-Speicherarrays
gespeicherten Daten über
den Flash-Lese/Schreib-Puffer 7 in den Steuereinheit-Puffer 9 (und
gleichzeitig in die ECC-Generator- und Prüfeinheit, um auf Fehler in
den Daten zu prüfen)
aus dem Array 6 gelesen, und die Steuereinheit liest den
4-Byte-Kopf, um zu prüfen,
ob die gespeicherte LA mit der durch den Host-Prozessor angeforderten
LA übereinstimmt,
bevor der Host-Prozessor die Daten aus dem Steuereinheit-Puffer 9 lesen darf.
Die Steuereinheit 8 verwaltet den physikalischen Ort von
in den Speicher 6 geschriebenen Daten auf Basis individuelle
Sektoren. Wie es später
mit weiteren Details beschrieben wird, speichert die Steuereinheit
im Speicher 6 eine Bitkarte (MAP) gelöschter Blöcke, und sie stellt im SRAM
im Mikroprozessor 11 eine Liste (die Liste als nächster gelöschter Blöcke (NEB
= Next Erased Block)) für
mindestens einige gelöschte
Blöcke
zusammen, die in absteigender Reihenfolge physikalischer Blockadressen
geordnet sind, wobei die gelöschten Blöcke für einen
Schreibvorgang zu verwenden sind. Der Ort der physikalischen Adresse,
wo ein Hostdatensektor zu schreiben ist, hängt nicht von der vom Host
empfangenen logischen Adresse ab. Für jeden Hostdatensektor erfolgt
ein Schreibvorgang an einer durch einen zyklischen Schreibzeiger
definierten Adresse. Für verschiedene
Typen von Schreiboperationen werden spezielle Schreibzeiger verwendet;
Schreibvorgänge
für Hostdateidaten
werden an einer Adresse ausgeführt,
auf die der Daten-Schreibzeiger (WP) zeigt, Schreibvorgänge für Hostsystemdaten
werden an einer Adresse ausgeführt,
auf die der System-Schreibzeiger (SWP) zeigt. Der Neuzuordnungszeiger
(RP) wird für
Schreibvorgänge
für Sektoren
verwendet, für
die keine direkte Anweisung durch einen Host erfolgte. Alle diese
Schreibzeiger verfügen über dasselbe
Verhalten: jeder Zeiger bewegt sich sequenziell durch die Seiten
eines Blocks, dann bewegt er sich zur ersten Seite des nächsten gelöschten Blocks
in der Liste der nächsten
gelöschten
Blöcke
(NEB). Blöcke,
die nicht gelöschte
Dateien enthalten, werden als "nicht
gelöschte" Blöcke behandelt,
und sie werden übersprungen,
wenn sie ein Zeiger von einem Block zu einem anderen bewegt (und
sie sind nie im NEB enthalten).
-
Sektorneuzuordnungs-Algorithmus
-
Wenn
ein Block 4 von Sektoren zu löschen ist, um Sektorraum wiederzugewinnen,
der veraltete Daten enthält,
müssen
Sektoren von einem Block neu zugeordnet werden, der eine Kombination
gültiger
und veralteter Sektoren enthält,
damit der Block gelöscht
werden kann. Im Prinzip erlaubt die Steuereinheit 8 nur,
dass zu einem jeweiligen Zeitpunkt nur ein Block, der einem speziellen
Schreibzeiger entspricht, veraltete Datensektoren enthält. Wenn
ein Sektor, für
den durch den Host ein Schreibvorgang auszuführen ist, in einem zweiten
Block einen veralteten Sektor erzeugen würde, muss als Erstes der existierende
Block gelöscht
werden, nach Neuzuordnung gültiger
Sektoren, falls erforderlich.
-
Daher
sind zahlreiche Löschvorgänge und
extensive Neuzuordnungen von Sektoren unvermeidlich, wenn eine Großzahl von
Blöcken
sowohl gültige
als auch veraltete Sektoren enthalten würde. Dies tritt nur dann auf,
wenn eine Abfolge von Sektoren, in die als Teil einer Datei durch
einen Host geschrieben wurde, von der Abfolge abweicht, mit der
sie zuvor geschrieben wurde. Dies ist bei den meisten Anwendungen
nicht der Normalfall. Jedoch muss, selbst im Fall einer normalen
Dateischreiboperation, eine Neuzuordnung nicht zugehöriger Daten
von Blöcken
ausgeführt
werden, die den "Kopf" und den "Schwanz" einer Datei enthalten.
Daher besteht große
Wahrscheinlichkeit dafür,
dass eine Neuzuordnung von Systemdaten vermischt mit Daten einer "anderen Datei" zum zusätzlichen
Löschen
eines anderen Blocks führt,
was mehr Zuordnungen von diesem Block erzeugt.
-
Um
die Gesamtanzahl von Neuzuordnungen und Löschvorgängen zu verringern, werden
daher Systemdaten speziell identifiziert, und sie werden immer an
der Adresse des System-Schreibzeigers (SWP) geschrieben oder neu
zugeordnet. Information zu Systemdaten wird während eines Initialisierungsprozesses
erhalten, und sie wird im SRAM 13 des Mikroprozessors abgespeichert.
Es ist im Allgemeinen zu beachten, dass durch ein Dateisystem im
Prozessor des Host-Prozessors eine Datendatei in den Flash-Speicher
geschrieben wird. Dateidaten werden durch das Dateisystem in Cluster
unterteilt, wobei jeder Cluster eine Gruppe zusammenhängende Hostdatensektoren
von (typischerweise) 512 Bytes bildet. Das Dateisystem unterhält Tabellen- und
Datenstrukturen mit Bezug auf die Attribute der im Speicher gespeicherten
Dateien und die Orte der Cluster, die jede Datei bilden. Diese Tabellen
und Strukturen werden im Flash-Speicher (als Systemdaten) abgespeichert,
und sie werden durch das Dateisystem immer dann aktualisiert, wenn
Dateidaten geschrieben wer den. Wenn Dateidaten in den Speicher geschrieben
werden, werden sie von Systemdaten (z. B. Verzeichnis- und Dateizuordnungstabellen),
die Bezug auf die Datei haben, begleitet. In den Speicher geschriebene
Systemdaten enthalten im Allgemeinen Konfigurationsinformation zu
BIOS-Parametern, eine oder zwei Kopien der Dateizuordnungstabellen
(FAT), in der jeder Eintrag Bezug auf einen speziellen Cluster hat,
das Stammverzeichnis sowie Unterverzeichnisinformation. Die Steuereinheit
ist so konfiguriert, dass sie eine Operation zum Schreiben eines
Hostsystem-Datensektors erkennt, um es dadurch zu ermöglichen,
diesen Hostdatensektor verschieden von einem Hostdatensektor von
Dateidaten zu behandeln. Es kann eine Anzahl von Methoden entweder
einzeln oder gemeinsam verwendet werden, um Systemsektor-Schreibvorgänge zu erkennen,
wie die folgenden:
- 1. Systemdaten werden mit
einfach-Sektorschreibebefehlen geschrieben, während Dateidaten mit mehrfach-Sektorschreibbefehlen
geschrieben werden.
- 2. Alle Sektoren mit LAs unter der letzten Sektoradresse im
Stammverzeichnis des Dateisystems sind Systemsektoren. Diese Adresse
kann aus Information ermittelt werden, die in einem BIOS-Parameterblock
enthalten ist, der durch das Hostdateisystem im Speicher abgespeichert
wird.
- 3. Alle Sektoren innerhalb Unterverzeichnissen sind Systemsektoren.
Adressen und Größen von
Unterverzeichnissen können
durch Lesen aller Stammverzeichnis- und Unterverzeichniseinträge identifiziert
werden.
- 4. Systemsektoren werden häufig
unmittelbar vor ihrem Umschreiben durch ein Dateisystem gelesen.
-
Zum
selben Zweck werden neu zuzuordnende Dateidatensektoren an der Adresse
eingeschrieben, die durch einen Zuordnungszeiger (RP) definiert
wird und daher werden sie nicht mit durch den Host geschriebenen
Sektoren vermischt.
-
Bei
einer modifizierten Ausführungsform
der Erfindung kann ein zusätzlicher
Schreibzeiger vorhanden sein, um auf den Ort zu zeigen, an dem neu
zugeordnete Systemdaten zu schreiben sind. Dieser zusätzliche Zeiger
wird als System-Neuzuordnungszeiger (SRP) bezeichnet, und er liegt
immer in einem anderen Block als der WP und der SP.
-
Blocklösch-Algorithmus
-
Bei
der vorliegenden Ausführungsform
wird keine beliebige Auswahl eines zu löschenden Blocks oder eine beliebige
zeitliche Planung eines Löschens
im Hintergrund ausgeführt.
Ein gelistetes Löschen
eines veraltete Sektoren enthaltenden Blocks wird normalerweise
unmittelbar dann ausgeführt,
wenn sich ein veralteter Sektor in einem zweiten Block aus einem
anstehenden Host-Sektorschreibbefehl ergibt. In ähnlicher Weise wird ein Block
unmittelbar dann gelöscht,
wenn er total veraltete Steuerdatenstrukturen als Ergebnis eines
Umschreibens eines Steuerblocks enthält (Steuerblöcke liegen
dort, wo die Steuereinheit 8 bestimmte Steuerdaten schreibt,
und sie werden später
detailliert beschrieben.)
-
Daher
können
normalerweise, da Neuzuordnungen keine veraltete Daten erzeugen
können,
nicht mehr als zwei Blöcke
vorhanden sein, die veraltete Daten enthalten; der aktuelle veraltete
Block (COB), der dem Daten-Schreibzeiger (WP) entspricht und veraltete
Datendaten enthält,
und der aktuelle veraltete Systemblock (COSB), der dem System-Schreibzeiger
(SWP) entspricht und veraltete Systemdaten enthält. Jedoch kann vorübergehend
mehr als ein veralteter Block jedes Typs existieren. Dies tritt
dann auf, wenn ein zu löschender
Block (es wurden eben veraltete Daten in einem anderen Block erzeugt)
zu diesen Zeitpunkt auch einen Schreibzeiger irgendeines Typs enthält. In diesem
Fall muss das Löschen
eines derartigen Blocks (der als anstehender veralteter Block (POB
= Pending Obsolete Block) bezeichnet wird) verschoben werden, bis alle
gelöschte
Seiten in diesem Block verwendet wurden und der relevante Schreibzeiger
auf einen anderen Block verstellt ist. Zu diesem Zeitpunkt wird
der anstehende veraltete Block unmittelbar gelöscht.
-
Wie
oben angegeben, bleibt die Identität eines gelöschten Blocks in einer Bitkarte
(MAP) erhalten, die den gesamten Adressenraum des Flash-Blocks umspannt,
wobei in dieser MAP der Löschzustand
jedes Blocks aufgezeichnet ist. Gelöschte Blöcke werden zum sequenziellen
Schreiben von Sektor- oder Steuerdaten in der Reihenfolge von Blockadressen
verbraucht. Es wird kein Löschen
im Hintergrund ausgeführt.
Jeder Block, der einen oder mehrere schlechte Sektoren enthält, wird
als schlechter Block behandelt, und er wird von der Steuereinheit
als "nicht gelöschter" Block behandelt.
-
Abnutzungsnivellierung
-
Die
Verwendung zyklischer Schreibzeiger und einer Einzelsektor-Schreibverwaltung
erzeugt von Natur aus eine Abnutzungsnivellierung im Flash-Speicher.
Jedoch erzeugt der Algorithmus zum Löschen von Blöcken sobald
sie mit veralteten oder gelöschten
Daten belegt sind, eine Charakteristik der Abnutzungsnivellierung,
die eine Funktion der Abfolgen von Sektorschreiboperationen ist.
Wenn davon ausgegangen wird, dass irgendeine weitere Abnut zungsnivellierung
erforderlich ist, können
gesonderte, zusätzliche
Techniken eingebaut werden, wie eine gelegentliche Neuzuordnung
von Sektoren in Zufallsblöcken,
damit diese Blöcke
gelöscht
werden können.
-
Prinzipien
der Adressenübersetzung
-
Die
prinzipielle Adressenübersetzungseinrichtung
ist die Sektoradressentabelle (SAT), die dem Grunde nach eine Liste
physikalischer Adressen von Sektoren, geordnet durch logische Adressen,
ist. So enthält der
N-te SAT-Eintrag
normalerweise die physikalische Adresse für den Sektor mit der logischen
Adresse N. Die SAT ist als Anzahl unabhängiger Blöcke (SAT-Blöcke) organisiert, und sie wird
durch Umschreiben individueller Seiten der SAT-Blöcke
aktualisiert. Ein SAT-Block kann über einen zugeordneten zusätzlichen SAT-Block
(ASB = Additional SAT-Block) verfügen, der mit ihm verknüpft ist,
um eine Modifizierung einzelner Seiten des SAT-Blocks zu ermöglichen.
SAT-Seiten werden nicht nach jedem Sektorschreibvorgang umgeschrieben,
sondern auf viel weniger häufiger
Basis, um die Auswirkung auf das Funktionsvermögen von Sektorschreibvorgängen zu
minimieren.
-
Daher
enthält
die SAT nicht die korrekte physikalische Adresse für Sektoren,
in die seit ihrer letzten Aktualisierung geschrieben wurde. Die
logischen Adressen derartiger Sektoren werden vom Prozessor in Listen,
die als Schreib-Sektorliste (WSL), Neuzuordnungs-Sektorliste (RSL)
und Schreibsystem-Sektorliste (WSSL) bezeichnet werden, vom Prozessor
in seinem SRAM 13 abgespeichert. Diese Listen passen genau zur
Reihenfolge der Sektoren selbst, in die durch einen Host geschrieben
wurde oder die vor dem Löschen
aus Blöcken
neu zugeordnet wurden. Im Fall fortlaufend geschriebener Sektoren
definiert der WSL- und der RSL-Eintrag die logische Adresse des
ersten Sektors sowie die Länge
der Sektorgruppe. Die Sektorgruppen können nicht von einem Block
zu einem anderen angesprungen werden. Der Mikroprozessor 11 kennt
den Startpunkt der Sektorserie im Flash-Speicher, und er kennt auch
die Reihenfolge, mit der Blöcke
für Sektorschreibvorgänge verwendet
wurden (es werden spezielle Listen, die komplementär zu den
oben beschriebenen sind und im Prozessor-SRAM erzeugt werden, nämlich die
Schreib-Blockliste (GBL), die Schreibsystem-Blockliste (WSBL) und
die Neuzuordnungs-Blockliste (RBL), erzeugt, und sie werden später detailliert
beschrieben), und so kann er den physikalischen Ort des Sektors
berechnen.
-
Die
WSL, die RSL und die WSSL (und zu ihnen komplementäre Listen:
WBL, WSBL und RBL) können nach
dem Wegnehmen und Wiederherstellen von Spannung für den Systemspeicher 10 dadurch
vom Mikroprozessor 10 wieder erzeugt werden, dass die logischen
Adressen in den Köpfen
der Sektoren in der Schreibreihenfolge nach dem letzten SAT-Umschreiben
gelesen werden. Die Startsektoradresse in der Reihe sowie Verbindungen
zwischen Blöcken,
die Sektoren in der Reihe enthalten, werden vom Mikroprozessor aus Anträgen in einer
speziellen Datenstruktur im Flash-Speicher, die als Steuerblock
(CB) bezeichnet wird, enthalten. (Der Steuerblock (CB) wird später detailliert
beschrieben.) Dieses Verfahren führt
im Fall eines unerwarteten Wegnehmens der Spannung von der Karte
zu hoher Datensicherheit.
-
Es
ist zu beachten, dass dann, wenn ein System-Neuzuordnungszeiger
(SRP) vorhanden ist, wie oben angegeben, auch eine Systemneuzuordnungs-Sektorliste
(SRSL) und eine komplementäre
Systemneuzuordnungs-Blockliste (SRBL) erzeugt werden, die auf ähnliche
Weise verwendet werden, wie es oben hinsichtlich der WSL, der RSL
und der WSSL sowie der WBL, der RBL und der WSBL beschrieben wurde.
-
In
der 3 ist die Organisation von Daten in einem Flash-Sektor
(d.h. einer Seite) 1, in den durch die Steuereinheit 8 Daten
geschrieben werden, gemäß der vorliegenden
Ausführungsform
veranschaulicht. Der Sektor 1 enthält einen ersten Informationsabschnitt 1a von
512 Bytes, der z. B. aus einem Hostdatensektor bestehen kann, gefolgt
von einem Kopfabschnitt 1b von 4 Bytes, dem wiederum ein
ECC 1c von 12 Bytes folgt. Wie es in der 4 dargestellt
ist, verfügt
der Kopfabschnitt selbst über
einen Datenstrukturtyp-Abschnitt 20 und einen Kopfparameter 22 (mit
z. B. der logischen Sektoradresse (LA) eines in den Informationsabschnitt 1a geschriebenen
Hostdatensektors. Der Datenstrukturtyp kann über Werte verfügen, die
einen der Folgenden repräsentieren:
Datensektor; gelöschter
Datensektor; Seite mit der Sektoradressentabelle (SAT); Seite mit
einem zusätzlichen
SAT-Block (ASB); Seite mit einem Steuerblock (CB); und Seite mit
dem Bootblock (BB).
-
Gelöschter Datensektor
-
Ein
gelöschter
Datensektor existiert vorübergehend
im Flash-Speicher physikalisch nur in Blöcken, die veraltete oder gelöschte Sektordaten
enthalten können,
d.h. im COB oder im COSB. Er wird durch den Zustand "nur Nullen" des Datenstrukturtyp-Felds
im Kopf, oder eine andere Maßnahme,
falls zweckdienlich, identifiziert.
-
Sektoradressentabelle
(SAT)
-
Die
SAT ist eine Reihe von Einträgen,
die die physikalische Adressen logischer Sektoren enthalten. Der
Eintrag N enthält
die physikalische Adresse für
den logischen Sektor N. Einträge
innerhalb einer Seite belegen die 512 Bytes des Informationsabschnitts 1a der
auf der Seite gespeicherten Daten. Da eine SAT-Seite mit einer einzelnen
Operation geschrieben wird, kann das EEC-Feld dazu verwendet werden,
die vollständige Zeit
zu schützen,
und es sind gesonderten ECC-Felder für jeden Eintrag in der SAT-Seite
erforderlich.
-
Die
SAT wird tatsächlich
als Reihe von Blöcken
gespeichert, wobei jeder Block bis zu 64 SAT-Seiten enthält. Im Steuerblock
(der später
beschrieben wird) ist eine gesonderte Datenstruktur, die Tabellen-Blockliste (TBL),
aufbewahrt, um die Blockadressen aller SAT-Blöcke zu definieren. Jeder SAT-Eintrag definiert
die physikalische Adresse eines Sektors, und er belegt 3 Bytes und
verfügt,
wie es in der
5 dargestellt ist, über Folgendes:
Chipnummer | 5
Bits, wodurch 32 Chips adressiert werden können |
Blocknummer | 13
Bits, wodurch 8192 Blöcke
pro Chip möglich
sind |
Sektornummer | 6
Bits, wodurch bis zu 64 Sektoren pro Block möglich sind |
-
Das
Kopfparameterfeld in einer Datenstruktur einer SAT-Seite enthält den SAT-Block
und die Seitennummer.
-
Eine
Flash-Karte mit einer Kapazität
von 8 MB und 8 VB-Blöcken
kann ungefähr
16K Sektoren speichern, und ihre SAT enthält daher ungefähr 16K Einträge. Eine
512-Byte-Seite innerhalb einer SAT enthält 170 Einträge, und
die SAT belegt daher beinahe 96 Seiten, die sechs Blöcke belegen.
Eine SAT für
eine große Flash-Speicherkarte
(2GB, 8VB Blöcke)
belegt 1543 Blöcke.
-
Zusätzlicher SAT-Block (ASB)
-
Ein
zusätzlicher
SAT-Block (ASB) ist ein zugeordneter Block, der mit einem speziellen
SAT-Block verknüpft
sein kann, damit einzelne Seiten des SAT-Blocks modifiziert (d.h. umgeschrieben)
werden können.
Es können
mehrere ASB existieren, in denen jeder als Erweiterung des SAT-Blocks,
mit dem er verknüpft
ist, wirkt. Wenn ein SAT-Block zu modifizieren ist, enthält er im Allgemeinen
nur auf einer kleinen Anzahl seiner Seiten modifizierte Daten. Der
ASB ermöglicht
es, nur diese modifizierten Seiten umzuschreiben. Dies ist eine
viel schnellere Operation als das Schreiben jeder Seite und das
Löschen
des veralteten Blocks, wie es zum Umschreiben eines SAT-Blocks erforderlich
ist. Der Kopfparameter-Abschnitt einer ASB-Seite enthält den SAT-Block,
mit dem sie verknüpft
ist, und die SAT-Seitennummer innerhalb dieses Blocks, die sie ersetzt.
Das Format des Informationsabschnitts 1a der auf einer
ASB-Seite gespeicherten Daten ist identisch mit dem einer SAT-Seite.
-
Steuerblöcke (CBS)
-
Die
Steuereinheit 8 speichert in einem oder mehreren Steuerblöcken (CBS)
gewisse Steuerungs- und Adresseninformation. Die CBS werden durch
die Steuereinheit 8 periodisch aktualisiert, und während der
Initialisierung des Speichersystems 10 oder gelegentlich
während
des Betriebs muss auf sie zugegriffen werden. Information wird mit
Einträgen
fester Größe, die
unabhängig
geschrieben werden können,
in den CBS gespeichert. In jedem CB existieren neun Einträge pro Seite.
Ein Eintrag steht mit einem der Datentypen der folgenden Liste von
Datentypen in Zusammenhang, die durch ein CB-Kopffeld im Eintrag
selbst gekennzeichnet sind:
- • Tabellen-Blockliste
(TBL)
- • Karte
von Blöcken,
wobei einige Felder im Eintrag einer Dateidaten-Schreiboperation entsprechen (WMAP)
- • Karte
von Blöcken,
die einer Systemdaten-Schreiboperation entsprechen (SMAP)
- • Karte
von Blöcken,
die einer Neuzuordnungssektoroperation entsprechen (RMAP)
-
Wenn
neue Daten zum CB hinzugefügt
werden müssen,
wird ein zusätzlicher
Eintrag des geeigneten Typs unmittelbar folgend auf den letzten
gültigen
Eintrag hinzugefügt.
Für große Karten
kann der CB mehr als einen Block belegen. Die Adressen aller CB-Blöcke werden
in einem Bootblock (BB) im Flash-Speicher 6 abgespeichert.
-
Für Zwecke
der Datensicherheit enthält
die erste Seite (die als Kopfseite bezeichnet wird) jedes Blocks eines
CB (und auch der BB) keine Einträge,
und sie verfügt über ein
volles Seitenformat, ähnlich
dem der 3. Das Kopfparameterfeld des
Kopfs 6 dieser Seite besteht aus einer Signatur, die den
CB kennzeichnet, und der zugehörigen
Blocknummer (wobei es sich um die serielle Nummer des Blocks innerhalb
des Satzes von Steuerblöcken
handelt).
-
Das
Informationsfeld 1a der Kopfseite des ersten CB-Blocks
ist durch Blockverknüpfungs-Informationsdaten
belegt. Die Blockverknüpfungs-Informationsdaten
liefern die gesamte erforderliche Information zum Wiederherstellen
der WBL, der WSBL und der RBL, wenn das System folgend auf eine
CB-Umschreiboperation zu initialisieren ist. Sie verfügen über Verknüpfungsfelder,
die aus allen MAPs (WMAPs, SMAPs und RMAPs) zusammengestellt wurden,
für die
seit der Ausführung
des letzten Schreibvorgangs für
eine SAT-Seite ein Schreibvorgang ausgeführt wurde, und sie müssen während ihrer
Umschreiboperation in die Kopfseite des ersten Blocks eines neuen
CB geschrieben werden. Die Blockverknüpfungsinformation ist eine
zeitlich geordnete Liste von Einträgen von 4 Bytes, von denen
jeder die Blockadresse eines Blocks enthält, der durch einen der Schreibzeiger
besucht wurde, sowie ein Flag, das anzeigt, um welchen Zeiger es
sich handelte. Für
CBs ist eine Maximalanzahl von Blöcken im Speicherraum zulässig, und
wenn diese erreicht ist, werden aktive Einträge aus dem NEB in den als nächsten verfügbaren mindestens
einen gelöschten
Block umgeschrieben (d.h., sie werden verdichtet, und es werden
entsprechende Kopfseiten hinzugefügt), und die alten CBs werden
gelöscht.
(Gleichzeitig muss ein entsprechender Eintrag zum Bootblock hinzugefügt werden.)
Das Informationsfeld einer CB-Seite enthält neun Einträge gleicher
Länge.
Das EEC-Feld einer Seite bleibt unverwendet, oder es kann für andere
Zwecke verwendet werden.
-
Ein
Eintrag in einem CB ist 56 Bytes breit, und er verfügt über das
in der 6 dargestellte Format, und er weist einen Kopf 24,
der den Datentyp des Eintrags identifiziert, ein Informationsfeld 26 und
ein EEC-Feld 28 auf. Der EEC hat dieselbe Form, wie sie
für eine
volle Seite verwendet wird.
-
Tabellen-Blockliste (TBL)
-
Die
CBs enthalten die Tabellen-Blockliste (TBL). Die TBL enthält die Adressen
einer Gruppe zusammenhängender
Blöcke
der SAT sowie alle entsprechenden ASBs. Normalerweise sind mehrere
TBLs erforderlich, um alle erforderlichen SAT-Blockadressen zu definieren.
Die relevante TBL wird unmittelbar nach einer SAT-Blockschreiboperation
oder der Zuordnung eines neuen ASB geschrieben, um die modifizierte
SAT oder ASB-Blockorte aufzuzeichnen. Die TBL enthält auch
Felder, die dazu verwendet werden, Schreibzeigerpositionen zu dem
Zeitpunkt aufzuzeichnen, zu dem eine SAT-Seitenschreiboperation
auszuführen
ist. Daher wird eine TBL auch immer dann geschrieben, wenn eine
SAT-Seitenschreiboperation ausgeführt wird. In der 7 ist
ein Eintrag der TBL dargestellt, der das Informationsfeld 26 eines
CB-Eintrags belegt. Das erste 1 Byte des TBL-Eintrags ist die Nr,
die sequenzielle Nummer des TBL-Eintrags. Jeder TBL-Eintrag enthält die Werte
von 8 SAT-ASB-Blockpaaren, anders gesagt, enthält jeder TBL-Eintrag Werte
für SAT-Blöcke von
N bis N+7, wobei M den Wert Nr·8
hat.
-
WP
ist das Schreibzeiger-Seitenfeld, RP ist das Neuzuordnungszeiger-Feld
und SWP ist das System-Schreibzeigerfeld. Diese Felder bestimmten
die Position des WP, des RP und des SWP innerhalb der Blöcke nach
einer WSL-, RSL-, SSL-Freigabeoperation. WP, RP und SWP sind nur
dann gültig,
wenn die WSL-, RSL- oder SSL-Freigabeoperation abgeschlossen ist,
(d.h. bei der letzten SAT-Schreiboperation). Diese Bedingung wird
durch das Flagbit im Eintragskopf eingestellt. Flag=1 bedeutet,
dass der Eintrag der während
einer WSL- oder
RSL-Freigabe zuletzt geschriebene ist und dass demgemäß das WP-Feld
gültig
ist.
-
Für mögliche zukünftige Hinzufügungen verbleiben
drei reservierte Bytes.
-
SAT-ASB-Paare
folgen auf reservierte Felder, wobei es sich um Array von acht Einträgen handelt,
von denen jedes aus SAT- und ASB-Blockadressen besteht.
-
SATN ist die Nummer des N-ten SAT-Bocks, und
ASBN ist die Nummer des ASB, der mit SATN verknüpft ist.
Wenn SAT oder der ASB nicht existieren, sollte der Wert dieses Felds
null sein.
-
Ein
neuer TBL-Eintrag sollte jedesmal dann zum CB hinzugefügt werden,
wenn der SAT-Block neu zugeordnet wird oder ein neuer ASB mit dem
SAT-Block verknüpft
wird.
-
MAP (WMAP, SMAP und RMAP)
-
Die
CBs enthalten verschiedene MAP-Einträge. Es existieren drei verschiedene
Arten von MAP-Einträgen,
von denen jeder einem anderen Typ einer Schreiboperation entspricht;
WMAP-für
eine Schreib- oder Löschoperation
für Dateidaten,
SMAP -für
eine Schreiboperation für
Systemdaten, und RMAP – für eine Sektor-Neuzuordnungsoperation.
-
Das
Informationsfeld aller MAP-Einträge
verfügt über dasselbe
Format. Es enthält
eine Bitkarte, die den Löschzustand
einer Gruppe aufeinanderfolgender Blöcke definiert. Der Löschzustand
von 256 Blöcken wird
durch die 256 Bits in einem 32-Byte-Feld in der MAP definiert. Das
Informationsfeld enthält
ein Bereichsfeld, das die Gruppe von Blöcken kennzeichnet, zu der es
in Beziehung steht. Ein anderes Feld definiert den Zielblock für einen Übergang
des Schreibzeigers zwischen Blöcken.
Die MAP enthält
auch Felder zum Kennzeichnen des Orts von Blöcken im Flash-Speicher, die
veraltete Daten enthalten; ObsC wird für den COB (oder COSB) verwendet,
und ObsP – für den anstehenden
veralteten Block. Wenn kein veralteter Block vorhanden ist, ist
das entsprechende Feld auf null gesetzt. Das EB-Feld enthält eine
Adresse jedes Blocks, in dem durch die aktuelle Schreiboperation
oder Sektorlöschoperation
eine Löschung
verursacht wird. Wenn kein derartiger Block vorhanden ist, wird
das EB-Feld auf null gesetzt. Dieses MAP-Eintragsformat ist in der 8 dargestellt.
-
Wenn
einer der Schreibzeiger von einem Block zu einem anderen bewegt
wird, muss ein entsprechender MAP-Eintrag hinzugefügt werden,
um die Verwendung eines gelöschten
Blocks anzuzeigen (das Bitkartenfeld wird aktualisiert), und um
die Verknüpfung
zwischen den Blöcken
aufzuzeichnen (das Verknüpfungsfeld wird
aktualisiert). Wenn eine Schreiboperation (oder eine Sektorlöschoperation)
veraltete (oder gelöschte)
Daten in einem neuen Block erzeugt, muss auch eine entsprechende
MAP hinzugefügt
werden, um eine neue Position eines veralteten Blocks aufzuzeichnen
(die Felder ObsC oder/und ObsP werden aktualisiert), um anzuzeigen,
dass ein Block gelöscht
werden muss (das Feld EB wird aktualisiert), und um zu zeigen, dass
ein neu gelöschter
Block auftreten wird (das Bitkartenfeld wird aktualisiert). Daher
werden, normalerweise, mindestens zwei Felder einer MAP gleichzeitig
geschrieben, und dies kann mit einer einzelnen Seitenschreiboperation
bewerkstelligt werden.
-
Bootblock (BB)
-
Die
Funktion des Bootblocks besteht darin, für hohe Datensicherheit im Fall
eines unerwarteten Wegnehmens der Spannung von der Karte zu sorgen
und gleichzeitig übermäßiges Durchscannen
während
der Initialisierungsprozedur zu vermeiden. Für große Karten enthält der BB
mehr als einen Block. Der BB belegt immer den ersten oder die ersten
fehlerfreien Blöcke
in der Karte.
-
Zur
Datensicherheit existiert eine Kopie des BB, die den nächsten mindestens
einen fehlerfreien Block in der Karte belegt. Sowohl der BB als
eine Kopie müssen
nach dem Umschreiben an denselben Ort gebracht werden.
-
Der
BB verfügt über dieselbe
Struktur wie der Steuerblock, und er enthält die folgenden Eintragstypen:
- • Signatur
- • Verschachtelung
ermöglichen
- • Liste
schlechter Blöcke
- • Tabelle
von Steuerblockzeigern (CBPT)
-
Wenn
neue Daten zum WB hinzugefügt
werden müssen,
wird ein zusätzlicher
Eintrag des geeigneten Typs unmittelbar folgend auf den letzten
gültigen
Eintrag hinzugefügt.
Die Einträge
der Signatur und der BBL verfügen
genau über
dasselbe Format, wie es bereits beschrieben wurde (selbstverständlich ist
das Signaturfeld im Signatureintrag verschieden und eindeutig).
Der Eintrag in der Tabelle für
Steuerblockzeiger enthält
Zeiger auf alle Blöcke
des CB, und er muss unmittelbar nach dem Umschreiben des CB aktualisiert
werden.
-
Vorige Verknüpfung (PL)
-
Der
mindestens eine CB enthält
auch die vorige Verknüpfung
(PL = Previous Link). Der Zweck der vorigen Verknüpfung dient
zum Bereitstellen der gesamten erforderlichen Information zum Wiederherstellen
der WBL (wird später
beschrieben), wenn das System folgend auf eine CB-Umschreiboperation
initialisiert werden muss. Sie enthält Verknüpfungsfelder, wie sie von allen
MAPs gesammelt werden, für
die seit der letzten SAT-Seitenschreiboperation ein Schreibvorgang
erfolgte. Die PL muss nur während
einer Umschreiboperation eines neuen CB in diesen geschrieben werden.
-
IM SRAM der
Steuereinheit gespeicherte Datenstrukturen
-
Im
SRAM 13 des Mikroprozessors werden verschiedene Datenstrukturen
einschließlich
der Folgenden gespeichert:
-
Schreibsektorliste (WSL)
(oder "Whistle")
-
In
der Schreibsektorliste sind die logischen Adressen von Sektoren
aufge zeichnet, in die nach dem letzten SAT-Schreibvorgang geschrieben
wurde. Ihr Zweck besteht darin, eine korrekte Übersetzung logischer in physikalische
Adressen für
derartige Sektoren zu ermöglichen.
Die WSL verfügt über eine
Kapazität
von 128 Einträgen
mit einer Länge
von 4 Bytes, wobei jeder Eintrag die logische Adresse des ersten
Sektors in einer Gruppe fortlaufend geschriebener Sektoren sowie
die Gruppenlänge
enthält.
Für Sektorgruppen
kann kein Sprung von einem Block auf einen anderen vorliegen. Die
WSL wird unmittelbar nach einem SAT-Schreibvorgang gelehrt.
-
Die
Ordnung der logischen Sektoradressen in der WSL stimmt genau mit
der Reihenfolge überein,
in der sie geschrieben wurde. Eine nicht-flüchtige Kopie der WSL im Flash-Speicher
wird daher automatisch durch die Köpfe der aktuellen Sektoren
geliefert, für
die an fortlaufenden Stellen ausgehend von derjenigen ein Schreibvorgang
erfolgt, die durch den Schreibzeiger (WP) beim letzten Schreibvorgang
der SAT definiert wurde. Daher ist es nicht erforderlich, explizit
Kopien der WLS im Flash-Speicher 6 zu erzeugen. Falls erforderlich, können diese
Sektoren ausgehend von einer Startadresse durchgescannt werden,
die in einem Steuerblockfeld definiert ist, das die Position des
Schreibzeigers (WP) zum Zeitpunkt des letzten Schreibvorgangs der
SAT enthält,
gemeinsam mit den Verknüpfungsfeldern
aus folgenden MAP-Einträgen.
-
Ein
Durchsuchen der WSL erfolgt in umgekehrter Reihenfolge, da nur der
letzte Eintrag für
irgendeinen logischen Sektor gültig
ist. Duplizierte frühere
Einträge
müssen über keinen
entsprechenden veralteten Sektor im Flash-Speicher verfügen, da
es möglich
ist, dass Sektor-Neuzuordnungen und Blocklöschvorgänge ausgeführt wurden. Falls bevorzugt,
ist die Steuereinheit so konfiguriert, dass sie Doppeleinträge einfach
aus der WSL entfernt.
-
Im
SRAM 13 des Mikroprozessors werden auch zwei ähnliche
Listen zusammengestellt, nämlich
die Neuzuordnungs-Sektorliste (RSL) und die System-Sektorliste (SSL),
in denen die logischen Adressen neu zugeordneter Sektoren sowie
Systemdatensektoren (die an Adressen eingeschrieben wurden, auf
die der RP bzw. der SWP zeigten), in die seit dem letzten SAT-Schreibvorgang
geschrieben wurde, aufgezeichnet sind. Ein ASB und/oder ein SAT-Block
wird jedesmal dann, wenn die WSL, die RSL oder SSL gefüllt ist,
durch WSL-, RSL- bzw.
SSL-Einträge
ergänzt.
Diese Prozedur wird als WSL-, RSL- oder SSL-Freigabe bezeichnet. Diese Freigabe
kann, falls erforderlich, eine ASB-Freigabe verursachen. Eine ASB-Freigabe
erfolgt, wenn ein ASB gefüllt
ist. Wenn ein ASB gefüllt
ist, wird der zugehörige
SAT-Block umgeschrieben und der ASB wird gelöscht. Information zu geschriebenen
Seiten in allen ASBs sollte im RAM gespeichert werden, um ein häufiges ASB-Scannen
zu vermeiden. Im SRAM 13 wird eine ASB-Liste (ASBL) zu
diesem Zweck gespeichert.
-
Die
ASBL ist eine Liste aller ASB-Blöcke,
die aktuell mit SAT-Blöcken
verknüpft
sind, wobei für
jeden ASB ein Eintrag in der ASBL vorliegt. Die 9 veranschaulicht
das Format eines Eintrags in der ASBL, wobei Folgendes gilt:
- LWP
- = Nummer der zuletzt
in diesem ASB-Block geschriebenen Seite.
- NVP
- = Anzahl der gültigen Seiten
im ASB-Block, verringert um 1.
- ASB-Seite 0, ... ASB-Seite
n
- = Array, dessen Index
die ASB-Seitennummer ist, wobei der Wert die entsprechende SAT-Seitennummer
ist.
- N
- = Seiten pro Block.
-
Schreib-Blockliste (WBL)
-
Die
Schreib-Blockliste ist komplementär zur Schreib-Sektorliste,
und sie wird im SRAM 13 des Mikroprozessors erzeugt, um
die Blöcke
zu definieren, in denen die Sektoren in der WSL liegen. Die WBL
ist unmittelbar nach WSL-Freigabe
leer.
-
Die
WSL und die WBL werden durch einen Scanprozess während der Initialisierung des
Speichersystems neu erzeugt. Die Listen im SRAM, die auf diese Weise
erzeugt werden, stimmen genau mit den Listen überein, wie sie existieren,
bevor zuletzt die Spannung weggenommen wurde.
-
Es
werden auch zwei zur WBL ähnliche
Listen im SRAM 13 zusammengestellt und gespeichert, nämlich die
Neuzuordnungs-Blockliste (RBL) und die System-Blockliste (SBL), die komplementär zur RSL
bzw. SSL sind. Die RBL und SBL definieren die Blöcke, in denen die Sektoren
in der RSL bzw. der SSL physikalisch liegen, und sie verfügen über ein ähnliches
Format wie die WBL. Die RSL, die RBL, die SSL und die SBL können ebenfalls
durch einen Scanprozess während
der Initialisierung des Speichersystems neu erzeugt werden.
-
Aktuell veralteter Block
(COB)
-
Es
darf nur ein Block existieren, der veraltete oder gelöschte Sektordaten
enthält,
die durch den Schreibzeiger (WP) geschrieben wurden. Dieser wird
als aktueller veralteter Block (COB) bezeichnet. Wenn veraltete
oder gelöschte
Sektordaten in einem anderen Block erzeugt werden, muss am als COB definierten Block
unmittelbar eine Löschoperation
ausgeführt
werden. Die aktuelle Blockadresse des COB und auch eine Liste von
Sektoren, die in diesem Block veraltet wurden oder gelöscht wurden,
werden im RAM 13 des Mikroprozessors als Datenstruktur
bezeichnet, die. nachfolgend als CPB-Struktur bezeichnet wird. Die
COB-Struktur wird während
der Initialisierung dadurch erstellt, dass ein Feld, das die Adresse
des veralteten Blocks enthält,
aus dem letzten MAP-Eintrag kopiert wird und dann Adressen veralteter
Sektoren hinzugefügt
werden, nachdem die WSL und die WBL, direkt konstruiert wurden,
analysiert wurden und Adressen von aus diesem Block gelöschten Sektoren
analysiert und gelesen wurden. Die COB-Struktur wird jedesmal dann
aktualisiert, wenn eine neue Sektor-Löschoperation ausgeführt wird
oder ein neuer veralteter Sektor erzeugt wird, und die Blockadresse
wird jedesmal dann in einen aktuellen MAP-Eintrag im CB kopiert,
wenn veraltete Daten in einem neuen Block erzeugt werden.
-
Es
darf auch ein Block existieren, der veraltete oder gelöschte Sektordaten
enthält,
die durch den SWP geschrieben wurden, der als aktueller veralteter
Systemblock (COSB) bezeichnet wird. Die COSB-Struktur wird auf ähnliche
Weise wie die COB-Struktur im SRAM 13 gespeichert. Der
COB und der COSB verfügen jeweils über das
in der 10 dargestellte Format, nämlich ein
Blocknummerfeld 28 von vier Bytes (die sich die Blockadresse
des COB oder des COSB) sowie eine 32-Byte-Maske 30 für veraltete
oder gelöschte
Sektoren, bei der es sich um eine Bitkarte handelt, die den Wert
1 an Positionen enthält,
der veralteten oder gelöschten
Sektoren in diesem Block entspricht. Für einen Block von 256 Seiten
nimmt diese Maske 30 insgesamt 32 Bytes ein.
-
Liste der nächsten gelöschten Blöcke (NEB)
-
Die
Liste der nächsten
gelöschten
Blöcke
wird im Mikroprozessor-SRAM 13 erzeugt, um für eine schnelle
Identifizierung des als nächster
verfügbaren
gelöschten
Blocks zu sorgen, wenn der WB, der SWP und der RP zwischen Blöcken inkrementiert
werden. Verfügbare
gelöschte
Blöcke
werden in ansteigender Reihenfolge ihrer physikalischen Adressen
verwendet. NEB enthält
die Adressen M gelöschter
Blöcke
(z. B. M=8). Die NEB-Liste ist eine Liste der als nächste verfügbaren gelöschten Blöcke, ausgehend
vom gelöschten
Block mit derjenigen Blockadresse, die am nächsten bei der Adresse des
zuletzt gelöschten
Blocks und darüber
liegt, um zur Verwendung zugewiesen zu werden. So ist zwar die Anzahl
der Einträge
im NEB begrenzt (z. B. auf 8), jedoch kann der NEB selbst Information
zu mehr als den nächsten
acht ge löschten
Blöcken
enthalten.
-
Die
Liste der nächsten
gelöschten
Blöcke
wird aus dem MAP-Eintrag (im CB gespeichert) hergeleitet, der für den Bereich
des Adressenraums des Flash-Speichers
zutrifft, auf den durch die Schreibzeiger zugegriffen wird. Dieser
verbleibt als aktiver NEB im SRAM, bis alle durch ihn definierten
gelöschten
Blöcke
verwendet sind, zu welchem Zeitpunkt er aus den geeigneten MAP-Einträgen neu
erzeugt werden muss. Der CB enthält ausreichend
viele MAP-Einträge,
um den Löschzustand
jedes Blocks im Flash-Speicher zu definieren. Sowohl der NEB als
auch der entsprechende MAP-Eintrag werden durch Hinzufügen und
Entfernen von Blöcken
während
des Betriebs des Speichersystems aktualisiert. Ein Eintrag wird
aus dem NEB entfernt, wenn ein gelöschter Block dem Sektor- oder
Steuerdatenspeicher zugeordnet wird. Ein Eintrag wird zum NEB hinzugefügt (wenn
er nicht bereits voll ist), wenn ein gelöschter Block an einer Blockadresse
erzeugt wird, die innerhalb des Bereichs liegt, der durch die anderen
Blöcke
im NEB umspannt wird.
-
Ein
einzelner NEB-Eintrag definiert eine Gruppe gelöschter Blöcke an fortlaufenden Adressen,
und er definiert die Blockstartadresse (die erste Blockadresse in
der zusammenhängenden
Gruppe von Blöcken)
sowie die Gruppenlänge
(Anzahl zusammenhängender
Blöcke
in der Gruppe).
-
TBL-Zeiger (TBLP)
-
Die
TBL-Zeiger kennzeichnen Positionen von TBL-Einträgen im CB. Sie sind ebenfalls
im Mikroprozessor-SRAM gespeichert, und sie werden dazu verwendet,
für eine
schnelle Übersetzung
von Sektoradressen zu sorgen. Der TBLP wird während des anfänglichen
Durchscannens des Steuerblocks erzeugt, und dann wird er jedesmal
dann aktualisiert, wenn im CB ein neuer TBL-Eintrag erzeugt wird.
-
ASB-Liste (ASBL)
-
Wie
oben angegeben, wird die ASBL im SRAM 13 erzeugt und sie
unterstützt
eine schnelle Adressenübersetzung.
Sie kennzeichnet die physikalischen Adressen aller ASB-Blöcke und
der SAT-Blöcke,
mit denen sie in Zuordnung stehen. Sie wird während der Initialisierung erzeugt
und muss jedesmal dann aktualisiert werden, wenn eine SAT-Seitenschreiboperation
ausgeführt
wird. Die ASBL-Einträge
werden in der Reihenfolge früherer
Zugriffe aufgelistet, d.h., dass dann, wenn auf einen Eintrag zugegriffen
wird, derselbe an die Oberseite der Liste gebracht wird. Wenn auf
einen SAT-Block zugegriffen wird, der aktuell über keinen zugeordneten ASB
verfügt,
wird ein ASB zugeordnet, und ein Eintrag für diesen wird an der Oberseite
der ASBL hinzugefügt.
Der untere Eintrag der ASBL, der den ASB repräsentiert, auf den am wenigsten
kürzlich
zugegriffen wurde, wird beseitigt.
-
SAT-Cache
-
Im
SRAM 13 wird ein Cache für 32 fortlaufende SAT-Einträge aufrechterhalten,
einschließlich
des Eintrags, auf den als letztem von einer SAT im Flash-Speicher
zugegriffen wurde.
-
Kapazitätskarte
-
Die
Gesamtkapazität
des Flash-Speichers im Speichersystem 10 wird wie folgt
Daten- und Steuerstrukturen zugeordnet:
-
1. Logische Sektoren
-
Kapazität wird zum
Speichern eines gültigen
Datensektors für
jede logische Adresse innerhalb der erklärten logischen Kapazität der Karte
zugeordnet. Diese erklärte
Kapazität
ist die verfügbare
physikalische Kapazität
verringert um die unten folgenden Punkte 2 bis 8,
und sie wird während
der Kartenherstellung durch die Formatiereinrichtung definiert.
-
2. Bootblock
-
Dem
Bootblock wird mindestens ein Block zugeordnet. Vorzugsweise wird
ein zweiter Block zugeordnet, um eine weitere Kopie des Bootblocks
zu speichern.
-
3. Steuerblock
-
Es
wird eine Anzahl von Blöcken
zugeordnet, um Steuerblock-Einträge
(Signatur, BBL, TBL und MAP) zu speichern. Der vollständig verdichtete
Steuerblock belegt in den meisten Fällen weniger als einen Block. Dem
Steuerblock werden zusätzliche
Blöcke
für Einträge zugeordnet,
die zwischen Verdichtungs/Umschreib-Operationen geschrieben werden.
-
4. Sektoradressentabelle
-
Die
ist die Kapazität,
die der Speicherung der Blöcke
der SAT zugeordnet wird. Sie ist proportional zur logischen Kapazität der Karte.
-
5. Zusätzliche SAT-Blöcke
-
Für ASBS,
für die
eine Zuordnung zu definierten SAT-Blöcken erfolgen soll, wird eine
feste Anzahl von Blöcken
zugeordnet.
-
6. Veraltete Sektoren
-
Dem
COB wird ein Block zugeordnet. Dem COSB wird ein anderer Block zugeordnet,
und dem POB wird ein weiterer Block zugeordnet (für Ausführungsformen,
die die Existenzen eines COSB und eines POB zulassen). Die Maximalanzahl
zulässiger
veralteter Datensektoren ist daher durch die Anzahl der Seiten in
einem Block eingestellt.
-
7. Löschpuffer
-
Dies
ist ein Puffer gelöschter
Blöcke,
die für
korrekten Betrieb des Systems zugeordnet werden müssen. Zur
Datensektor-Neuzuordnung muss mindestens ein Löschblock zugeordnet werden,
und einer muss zur Steuerstruktur-Neuzuordnung, die gleichzeitig
erfolgen kann, zugeordnet werden.
-
8. Ersatzblöcke
-
Ersatzblöcke können zur
Verwendung beim Aufrechterhalten der erklärten logischen Kapazität im Fall eines
Ausfalls während
der Betriebslebensdauer zugeordnet werden. Die Anzahl der Ersatzblöcke wird
während
der Kartenherstellung durch die Formatiereinrichtung bestimmt.
-
In
der 16 ist eine Kapazitätszuordnungstabelle dargestellt,
die zu Beispielszwecken die Kapazität veranschaulicht, die den
obigen Punkten 1-8 zugeordnet ist, und zwar für eine Karte mit 8 MB, eine
solche mit 64 MB und eine solche mit 512 MB (Flash-Karten) (dabei
ist nur ein Block dargestellt, der veralteten Sektoren zugeordnet
ist, nämlich
für den
COB, jedoch ist es zu beachten, dass für veraltete Sektoren mehr Blöcke zugeordnet
werden, wenn im Speichersystem ein COSB und/oder ein POB vorgesehen
sind).
-
SAT-SCHREIBOPERATIONEN
-
Die
SAT wird umgeschrieben, wenn die WSL, die WBL, die SSL, die SBL,
die RSL oder die RBL voll ist, und in der Hauptzahl der Fälle erfolgt
dies mit einer Auflösung
einer Seite, d.h., dass nur SAT-Seiten umgeschrieben werden, die
modifizierte Sektoradressen enthalten. Jedoch ist in einer kleinen
Minderzahl von Fällen
ein vollständiges
Umschreiben eines SAT-Blocks erforderlich (was als "SAT-Blockschreibvorgang" bezeichnet wird).
Wenn ein SAT- Umschreibvorgang
erforderlich ist, wird ein zusätzlicher
SAT-Block (ASB) erzeugt, in den nur die benötigen Seiten geschrieben werden
(dies wird als "SAT-Seitenschreibvorgang" bezeichnet). Es
kann nur ein ASB vorhanden sein, der einem speziellen SAT-Block
zugewiesen ist, und insgesamt kann eine eingeschränkte Anzahl
N von ASBs existieren. Der Wert von N wird als geeigneter Kompromiss
zwischen dem Schreib-Funktionsvermögen und dem Kapazitätsoverhead
gewählt
(z. B. N=8).
-
Jeder
ASB existiert, bis für
seinen zugeordneten SAT-Block ein "SAT-Blockschreibvorgang" ausgeführt wird.
Ein SAT-Blockschreibvorgang wird dann ausgeführt, wenn an einem SAT-Block,
dessen ASB voll ist, ein SAT-Seitenschreibvorgang erforderlich ist,
oder wenn die Zuordnung eines ASB aufzuheben ist. Wenn ein SAT-Seitenschreibvorgang
erforderlich ist und der entsprechende SAT-Block über keinen
zugeordneten ASB verfügt
und alle N ASBs bereits zugeordnet sind, muss die Zuordnung eines
der vorhandenen ASBs aufgehoben werden, bevor ein neuer ASB zugeordnet
wird. Der ASB, dessen Zuordnung aufzuheben ist, wird als derjenige
gewählt,
in den die längste
Zeit nicht geschrieben wurde. Es ist zu beachten, dass das Aufheben
der Zuordnung eines ASB eine ziemlich zeitaufwändige Prozedur ist, da sie
das Schreiben eines SAT-Blocks und auch das Löschen sowohl des veralteten
SAT-Blocks als auch
des ASB erfordert.
-
Verschachtelter
Chipzugriff
-
Die
oben beschriebenen Operationen und Datenstrukturen erlauben es von
sich aus, verschachtelte Schreiboperationen an mehreren Flash-Chips 5 auszuführen, was
das Funktionsvermögen
deutlich erhöhen kann.
Der Steuereinheit-Chip
kann so mehrere Flash-Chips 5, z. B. ein Array von vier
Flash-Chips, das im Speichersystem enthalten ist, steuern. Der Speicherraum
der vier Flash-Chips, der durch die Steuereinheit als Satz virtueller
Blöcke
existiert, von denen jeder aus vier Blöcken 4 existiert,
nämlich
einem Block aus jedem der vier Chips 5 (diese Chips sind
dauernd miteinander verknüpft).
Die vier Blöcke
in jedem virtuellen Block sind die Blöcke mit derselben Blockadresse
innerhalb eines Chips. Diese Organisation ermöglicht es, verknüpfte Blöcke, die
einen virtuellen Block bilden, als einen großen Block zu behandeln und
sie daher alle mit denselben beschriebenen Algorithmen und Datenstrukturen
zu verwenden, wie sie bereits für
ein Einzel-Flash-Speichersystem 10 beschrieben
wurden, wobei virtuelle Blöcke
an Stelle der individuell löschbaren Blöcke von
Sektoren verwendet werden. Seitenschreiboperationen werden gleichzeitig über alle
verschachtelten Chips hinweg aus geführt. Der Schreibzeiger (WP)
sowie der RP und der SWP bewegen sich jeweils sequenziell durch
Seitenadressen, und die Reihenfolge von Adressenbits, die an einen
Hardwarechip-Aktivierdecodierer in der Steuereinheit 8 geliefert
werden, gewährleistet,
dass auf Seiten verknüpfter
Blöcke
in der in der 11 veranschaulichten Reihenfolge
sequenziell zugegriffen wird, d.h., dass sich jeder Zeiger WP, SWP, RP
von einem Chip zu einem anderen bewegt, wenn eine Bewegung von einer
PA zu einer anderen PA erfolgt. Dies wird unter Verwendung virtueller
Adressen bewerkstelligt. Jedem physikalischensektor wird eine eindeutige
virtuelle Adresse (VA) in allen Chips zugeordnet (z. B. wird im
oben beschriebenen Speichersystem auf NAND-Basis für jede Seite
eine VA zugeordnet). Die virtuellen Adressen werden so zugeordnet,
dass sich der Schreibzeiger beim Inkrementieren der VA jeweils um
den Wert 1 von einem Chip zum nächsten
Chip bewegt, wobei die virtuellen Adressen, durch verknüpfte Blöcke, jedes
virtuellen Blocks, in einem in der 11 dargestellten
wiederholten Muster von Chip zu Chip inkrementiert werden.
-
Die
Steuereinheit behandelt tatsächlich
das Array von Speicherchips als einzelne Spalte virtueller Blöcke. Die
virtuelle Adresse eines Sektors nimmt das in der 12 dargestellte
Format ein. Dieses besteht aus einem virtueller-Block-Abschnitt
mit einem Chip-High-Abschnitt und der 13-Bit-Blockadresse des Sektors sowie einem
virtuelle-Seite-Abschnitt mit der 6-Bit-Seitenadresse und einem Chip-Low-Abschnitt.
Der Chip-High-Abschnitt entspricht Chigh Bits
der 5-Bit-Chipnummer (der physikalischen Adresse – siehe
die 5), und der Chip-Low-Abschnitt entspricht Clow Bits der 5-Bit-Chipnummer, wobei Folgendes gilt:
- Chigh
- = Spaltennummer eines
Chips in einem Array von Chips; und
- Clow
- = Zeilennummer eines
Chips in einem Array von Chips.
-
Um
die physikalische Adresse (PA) aus der virtuellen Adresse (VA) zu
erhalten, führt
die Steuereinheit einfach eine Neuorganisation der VA so aus, dass
der Chip-Low-Abschnitt zwischen dem Chip-High- und dem Blockadressenabschnitt
zurück
bewegt wird, wie es in der 13 dargestellt
ist. So ist es zu beachten, dass in einem Einzelchip-Speichersystem
für jeden
Sektor die VA der PA entspricht.
-
Der
Einfachheit halber kann nur eine Anzahl von Chips, die ein binäres Vielfaches
ist, verschachtelt werden, z. B. 2 oder 4. Löschoperationen an virtuellen
Blöcken
werden als gleichzeitige Löschvorgänge aller verknüpften Blöcke verschachtelter
Chips ausgeführt.
Wenn ein Block in einem Chip ein schlechter Block ist, behandelt
die Steuereinheit oder alle Blöcke
mit derselben Blockadressen in den anderen Chips als schlechte Blöcke.
-
Eine
Verschachtelung wird entsprechend dem Zustand des Steuerbytes im
Bootblock aktiviert oder deaktiviert, wobei dieses Byte durch den
Hersteller des Speichersystems beim Formatieren des Flash-Speichers
in den aktivierten oder deaktivierten Zustand eingestellt wird.
-
Während Blockadressen
oder PAs bereits bei den oben beschriebenen Ausführungsformen von Einzelchip-FLASH-Speichern
vom NAND-Typ verwendet wurden, werden nun virtuelle Blockadressen
bzw. VAs verwendet. Wenn die Steuereinheit einen Hostdatensektor-Schreibbefehl
empfängt, übersetzt
sie eine eingehende LA dadurch in eine PA, dass sie die PA zuweist,
auf die der relevante Schreibzeiger zeigt. Die Steuereinheit steuert
die Schreibzeiger für
jede Bewegung durch die PAs in solcher Weise, dass sie sich tatsächlich sequenziell
durch die virtuellen Adressen (VAs) der Sektoren derjenigen virtuellen
Blöcke
bewegen, die gelöscht
sind (wobei gelöschte
virtuelle Blöcke
im NEB identifiziert sind).
-
Die 14 veranschaulicht
die zeitliche Lage der verschiedenen Operationen bei einem Mehrfach-Sektor-Schreibvorgang
bei verschachtelten Chips. Die 14 wird
nun unter Bezugnahme auf die 15 und 19 beschrieben.
Die 15 ist ein Blockdiagramm zum detaillierten Veranschaulichen
des Steuereinheit-Chips 8 des Speichersystem. (Der Steuereinheit-Chip 8 der 2 kann
in der in der 15 dargestellten Form vorliegen,
und gleiche Teile in den beiden 2 und 15 sind
mit denselben Bezugszahlen nummeriert.) Die 19 ist
ein schematisches Diagramm eines Speichersystems 10 mit
dem Steuereinheit-Chip 81 sowie vier Flash-Chips 11, 21, 31,
41, von denen jeder über seinen eigenen Lese/Schreib-Puffer 711, 721, 731, 741 verfügt.
-
Die 15 zeigt
den Steuereinheit-Chip 81 mit Folgendem:
einem Eingangs/Ausgangs-Port OP, z. B. einem PC-Karte-ATA-Port,
einem Compact-Flash- oder IDE-Port, für Verbindung mit einem Host-Computer; eine
Hostschnittstelle & Register 80 in
Verbindung mit dem O/P sowie mit einem damit verbundenen Dualport-SRAM-Sektorpuffer 9;
einer Datenpfad-Steuereinheit 82; der ECC-Generator- & Prüfeinheit 12 sowie
einer Flashspeicher-Schnittstelle (NI) 84, die alle mit
dem Sektorpuffer 9 verbunden sind, wobei die FMI auch mit
einem Flashspeicherport 86 verbunden ist. Die Steuereinheit 8 verfügt auch über einen
Mikroprozessor 11 (in Form eines RISC-Prozessors); einen
Prozessor-SRAM 13; einen Prozessor-MaskenROM 88 sowie
einen Port für
einen exter nen Programm-RAM oder ROM 92. Für den RISC-Prozessor 11 kann
optional auch ein Debugport 94 vorhanden sein. Datenbefehle
werden über
einen Mikroprozessor-Bus 91 zwischen den verschiedenen
Komponenten der Steuereinheit 81 (mit Ausnahme des Sektorpuffers 9) übertragen.
-
Wie
es in der 14 dargestellt ist, wird, wenn
ein Mehrfach-Sektor-Schreibbefehl
(in diesem Fall ein 4-Sektoren-Schreibvorgang mit Hostdatensektoren
1, 2, 3 & 4)
am ATA-Port O/P empfangen wird, wird der Sektor 1 in einem Puffer
1 des Doppelport-Sektorpuffers 9 geschrieben. Dadurch bleibt
ein Puffer 2 des Sektorpuffers 9 für Datenverwaltungsoperationen
der Steuereinheit verfügbar.
Wenn der Sektor 2 empfangen wird, wird er direkt in den Puffer 2
geschrieben, während
gleichzeitig der Sektor 1 vom Puffer 1 in den Flashspeicherport 86 bewegt
wird, von wo er in den Lese/Schreib-Puffer 711 eines
der vier Flash-Chips (Chip 11) geschrieben
wird. Dann wird der Sektor 2 vom Puffer 2 an den Flashport 86 und
an den Lese/Schreib-Puffer 721 eines der
anderen vier Flash-Chips (Chip 21) geliefert.
Während
dies erfolgt, wird der Sektor 3 direkt im Puffer 1 des Sektorpuffers
9 empfangen. Der Sektor 3 wird in den Puffer 731 des
Chips 3 geschrieben, und der Sektor 4 wird im Puffer 2 des Sektorpuffers
9 empfangen, und er wird dann in den Puffer 741 des
Chips 4 geschrieben. Dann werden die Sektoren 1, 2, 3 und 4 in die
relevanten, zugeordneten, physikalischen Sektoren in den Speicherarrays
611, 621, 631, 641 der Chips
11, 21, 31 bzw. 41 geschrieben.
Obwohl die 14 jeweils einen derartigen
Sektorschreibvorgang so zeigt, dass er kurz nach dem Vorigen startet,
ist es zu beachten, dass in der Praxis, betreffend alle Absichten
und Zwecke, im Wesentlichen gleichzeitig die vier Sektoren 1, 2,
3, 4 in die Flash-Chips 11 bis 41 geschrieben werden. Darüber hinaus ist es zu beachten,
dass die physikalischen Adressen der Sektoren, in die die Hostdatensektoren
1 bis 4 geschrieben werden, durch die bereits beschriebenen Algorithmen
bestimmt werden, die die Position des relevanten Schreibzeigers
bestimmen (d.h. die sequenzielle Verwendung virtueller Adressen).
-
Es
ist zu beachten, dass dann, wenn ein Mehrfach-Sektor-Schreibbefehl
für mehr
als vier Sektorschreibvorgänge
vom Host-Prozessor an die Steuereinheit geliefert wird, die Steuereinheit
diese Mehrfach-Sektor-Schreibvorgänge in Gruppen von (für die vorliegende
Ausführungsform
unter Verwendung von vier Speicherchips) in vier Sektoren aufteilt,
wobei jede derartige Gruppe mit einer verschachtelten Schreibsequenz,
wie sie oben unter Bezugnahme auf die 14 beschrieben
wurde, in den Flash-Speicher zu schreiben ist.
-
Adressenübersetzung
-
Nun
wird der Prozess der Adressenübersetzung
für eine
LA in eine VA unter Bezugnahme auf Lese- und Schreiboperationen
detaillierter beschrieben.
-
Die
Adressenübersetzung
ist eine Operation, die an der logischen Adresse eines Sektors ausgeführt wird
und einen der folgenden drei Werte zurückliefert:
- • physikalische
Adresse des gültigen
Sektors
- • Information
darüber,
dass der logische Sektor gelöscht
wurde (oder dass nie in ihn geschrieben wurde)
- • Information
darüber,
dass ein Fehlerzustand auftrat.
-
Die 17 ist
ein Flussdiagramm zum Veranschaulichen des Adressenübersetzungsprozesses.
Dieser Prozess wird für
jede Leseoperation ausgeführt.
Wenn eine zu übersetzende
logische Sektoradresse (LA) vom Host-Prozessor durch die Steuereinheit 81 empfangen
wird, wird ein Algorithmus zum Identifizieren der Möglichkeit
implementiert (Kasten 40), dass in einen Sektor, dessen
logische Adresse zu übersetzen
ist, zuvor geschrieben wurde, oder dass er gelöscht wurde, seit sein zugehöriger SAT-Eintrag
das letzte Mal geschrieben wurde. Die Schlussfolgerung, dass in
einen Sektor nicht zuvor geschrieben wurde, oder dass er nicht gelöscht wurde,
muss 100% sicher sein; die Schlussfolgerung, dass in einen Sektor
möglicherweise
geschrieben wurde, oder dass er gelöscht wurde, sollte eine hohe
Wahrscheinlichkeit dafür
haben, dass sie korrekt ist. Dies wird vom Prozessor dadurch ausgeführt, dass
eine beschränkte
Anzahl von Wertepaaren aufrechterhalten wird, die die Start- und
die Endadressen fortlaufender Sektorenfolgen repräsentieren,
und dass identifiziert wird, ob eine zu übersetzende Adresse innerhalb
eines dieser Bereiche liegt. Diese Bereiche können schließlich unzusammenhängend werden,
was zu einer bestimmten Unsicherheit bei der Schlussfolgerung führt, dass in
einen Sektor zuvor geschrieben werden konnte oder dass er gelöscht wurde.
Wenn die LA in einem der Bereiche liegt, ist "Ist Wiederholung möglich?" (Kasten 42 der 17)
mit JA zu beantworten. Wenn die LA nicht innerhalb der Bereiche
liegt, ist mit NEIN zu antworten, und es wird zur SAT oder zum SAT-Cache übergegangen,
um die VA aufzufinden (Kasten 44). Von dort aus wird bestimmt,
ob der physikalische Sektor schlecht (46) oder gelöscht (50)
ist. Wenn die LA einem Sektor entspricht, in den nicht geschrieben
wurde, führt
dies in einem Kasten 50 zu VA = gelöscht (58). Wenn im
Kasten 42 mit JA geantwortet wird, wird in 52 die
WSL oder die SSL durchsucht (abhängig
davon, ob die LA Datei- oder Systemdaten entspricht).
-
Wenn
in einem Kasten 54 die LA aufgefunden wird (JA), wird sie
bei 56 berechnet, und die im Kopf 1b des physikalischen
Sektors gespeicherte logische Adresse wird vom Mikroprozessor der
Steuereinheit (in 58) gelesen. Wenn LA = LA1 gilt (Kasten 60),
ist die berechnete VA korrekt. Wenn die LA in 54 nicht
aufgefunden wird, wird in 62 die RSL nach ihr durchsucht,
und wenn sie in dieser nicht aufgefunden wird, wird zur SAT oder zum
SAT-Cache übergegangen,
und in 44 wird die VA von dort erhalten. Wenn die in der
SAT oder im SAT-Cache gefundene VA nicht schlecht oder gelöscht ist, 46, 50,
wird LA1 in 58 aus der VA enthalten, und es wird, wie zuvor,
geprüft,
ob LA = LA1 gilt.
-
Die
im Kasten 56 (Berechnen von VA) der 17 ausgeführte Prozessschritte
sind im Flussdiagramm der 20 detailliert
veranschaulicht. Die 20 veranschaulicht die Schritte,
wie sie ausgeführt
werden, um die VA für
eine in der WSL oder der RSL gefundene LA für ein Speichersystem unter
Verwendung von nur zwei Schreibzeigern, WP und RP, zu erhalten.
Es ist zu beachten, dass dieses Flussdiagramm auch so erweitert werden
könnte,
dass es eine VA für
eine in der SSL aufgefundene LA ermöglicht, wobei das Speichersystem auch
einen System-Schreibzeiger (SWP) beinhaltet. Der Prozess startet
in einem Kasten 100, in dem NumFromEnd (NFE) eingestellt
wird, wobei NumFromEnd = Anzahl der Sektoren, die ab dem Ende der
WSL (oder der RSL) bis zum angegebenen Sektor (der sich in der WSL
oder der RSL findet) geschrieben wurden, gilt. Wenn die SA in der
WSL gefunden wurde, wird P = WP eingetragen, und wenn die LA in
der RSL gefunden wurde, wird P = RP eingetragen; dann wird PG =
P.Page eingetragen, wobei P.Page die Seite des Schreibzeigers ist,
die durch den Wert von P angegeben wird (siehe den Kasten 102).
Wenn in 104 PG > NFE
gilt (d.h., LA befindet sich im zuletzt geschriebenen Block), gilt
VA = P-NFE-1, d.h. im NFE-1 Sektoren entfernt von der Position des
relevanten Schreibzeigers. Wenn PG < NFE gilt, wird in 106 ermittelt,
ob P==O gilt, d.h., ob ein Block, der dem letzten WBL/RBL-Eintrag
entspricht, vollständig
geschrieben ist. Wenn dies der Fall ist (d.h. P==O), wird NotLast=0
eingetragen, und wenn dies nicht der Fall ist, wird NotLast=1 eingetragen.
Dann wird in 108 die Anzahl der Blöcke, Nblock, zwischen dem letzten
und demjenigen Block berechnet, in dem der angegebene Sektor liegt,
wobei der folgende Algorithmus verwendet wird:
Nsect entspricht
der Anzahl von Sektoren zwischen der zuletzt geschriebenen Blockseite
0 und dem angegebenen Sektor;
Nsect = NumFromEnd – PG;
Nblock
= NSect/BlockSize + NotLast
-
Dann
wird in 110 die Seitenanzahl in einem Block, PageNum, berechnet,
wobei PageNum = BlockSize gilt. Wenn sich LA in der WSL befindet,
wird in 112 die Blockadresse (BLAddr) aus der WBL erhalten,
oder wenn sich die LA in der RSL befindet, wird in 114 die
Blockadresse (BLAddr) aus der RBL erhalten, wobei die Blockadresse
die virtuelle Adresse eines Blocks ist, der den angegebenen Sektor
enthält,
wobei das Folgende verwendet wird:
Wenn die LA in der WSL liegt,
gilt GlAddr = RBL[LBL – NBlock],
wobei LBL ein Index für
den letzten Eintrag in der WBL ist;
Wenn die LA in der RSL
liegt, gilt BlAddr = RBL[LRBL + NBlock], wobei LRBL ein Index für den letzten
Eintrag in der RBL ist.
-
Dann
wird in 116 die VA unter Verwendung von VA = Page0 + PageNum
berechnet, wobei Page0 = virtuelle Adresse der Seite 0 im den angegebenen
Sektor enthaltenden Block gilt.
-
Die 21 ist
ein Blockdiagramm des Prozesses, der dazu verwendet wird, die VA
aus der SAT oder dem SAT-Cache zu erhalten (Kasten 44 in
der 17). Die 21 ist
im Wesentlichen selbsterläuternd,
jedoch werden weitere Kommentare hinsichtlich speziell markierter
Kästen
wie folgt angegeben:
Kasten 120 (die LA befindet sich
im SAT-Cache): die LA befindet sich im SAT-Cache, wenn LA ≥ LA < FirstCacheEntry.LA
+ CacheSize gilt, wobei First-CacheEntry.LA
= die LA, die dem ersten SAT-Eintrag im Cache entspricht, gilt,
und (global gesehen) CacheSize = Anzahl der Einträge im SAT-Cache
gilt;
Kasten 122 (Block und Seite in der SAT berechnen):
es wird SBNum berechnet, wobei es sich um die SAT--Blocknummer für die angegebene
LA handelt, sowie SPage, wobei es sich um die SAT-Seitennummer für die angegebene
LA handelt;
Kasten 124 (Berechnen der Nummer des TBL-Eintrags):
TBLNum ist die Nummer des benötigten
TBL-Eintrags, wobei TBLNum = SBNum/9 gilt; und
Kasten 126 (Speichern
eines Teils der SAT-Seite im Cache): wenn es möglich ist, wird ein Cachevorgang
für 32
Einträge
ausgehend mit demjenigen, auf den zuletzt zugegriffen wurde, ausgeführt. Wenn
nicht ausreichend viele Einträge
zur Verfügung
stehen, wird ein Cachevorgang für
eine Gruppe von 32 Einträgen
ausgeführt,
endend mit dem letzten Eintrag in einer Seite, und einschließlich der
letzten Sektorzugriffe.
-
Die 18 ist
ein Flussdiagramm zum Veranschaulichen der Prozessschritte für den Kasten 58 (die LA1
aus der VA erhalten) der 17. Es
sei darauf hingewiesen, dass der im Seitenkopf gespeicherte Kopfparameter
(HP) dem Wert der um 1 inkrementierten logischen Adresse (LA) entspricht.
Dies, da gelöschte
Sektoren dadurch markiert werden, dass alle Bits in ihren Köpfen auf
9 gesetzt werden. Dabei kann LA = 0 nicht in einem Kopf gespeichert
werden. Daher wird LA1 = HP-1 eingetragen.
-
Leseoperationen
-
Die 22 ist
ein Flussdiagramm zum Veranschaulichen der Abfolge von Schritten,
wie sie ausgeführt werden,
um einen Hostdatensektor aus einem physikalischen Sektor zu lesen.
Die Steuereinheit beginnt mit einer Übersetzung der LA (vom Host
empfangen) in eine VA (Kasten 130). Dies erfolgt durch
Ausführen
des im bereits beschriebenen Flussdiagramm der 17 veranschaulichten
Prozesses. Wenn die LA einmal in eine VA übersetzt ist, wird der Inhalt
des physikalischen Sektors mit der Adresse VA in den Puffer 9 der
Steuereinheit gelesen. Die Steuereinheit prüft dann (Kasten 132),
ob der Sektor (d.h. der Inhalt desselben) gelöscht oder schlecht ist. Wenn
er gelöscht
oder schlecht ist, setzt die Steuereinheit alle Bytes des Datenpuffers
im Host-Prozessor auf 0xFF (Kasten 134). Wenn der Sektor
kein gelöschter
Sektor ist (Kasten 136), liefert die Steuereinheit einen
Fehlerstatus an den Host zurück
(Kasten 138). Wenn der Sektor ein gelöschter Sektor ist, liefert
die Steuereinheit einen Gültigkeitsstatus
an den Host zurück
(Kasten 137). Wenn die Steuereinheit im Kasten 132 ermittelt,
dass der Sektor nicht gelöscht
oder schlecht ist, geht sie direkt zu einem Kasten 137 weiter,
d.h., sie liefert den Gültigkeitszustand
an den Host zurück.
-
Schreiboperationen
-
Die 23 ist
ein Flussdiagramm zum Veranschaulichen der Abfolge von Schritten,
wie sie ausgeführt werden,
um einen Hostdatensektor in einen physikalischen Sektor zu schreiben.
Die 23 beschäftigt
sich nur mit Schreiboperationen für Hostdateidaten, die demgemäß durch
den Schreibzeiger (WP) geschrieben wurden, jedoch ist es zu beachten,
dass die Operationen der 23 geeignet
so erweiterbar sind, dass sie sich mit gesonderten Systemdaten-Schreibvorgängen beschäftigen,
wobei das Speichersystem einen gesonderten Schreibzeiger für Systemdaten
(d.h. den SWP) verwendet. Die Steuereinheit beginnt mit dem Übersetzen
der LA (vom Host empfangen) in eine VA (Kasten 150). Dies
erfolgt durch Ausführen
des im bereits beschrie benen Flussdiagramm der 17 veranschaulichten
Prozesses. Wenn in 152 der Sektor schlecht ist, liefert
die Steuereinheit in 154 einen Fehlerstatus an den Host
zurück.
Wenn der Sektor nicht schlecht ist, prüft sie in 156, ob der Sektor
gelöscht
ist, und wenn er gelöscht
ist, prüft
sie in 158, ob der WP gültig
oder ungültig ist.
Der WP ist ungültig
(WP==0), wenn gerade in einen vollen Block geschrieben wurde und
der WP in einen gelöschten
Block bewegt wurde. Wenn der WP nicht gültig ist, wird er auf eine
neue (gültige)
physikalische Sektoradresse 160 gesetzt. Wenn der WP gültig ist,
wird in 162 die LA zur WSL hinzugefügt, und es wird eine WSL- oder
RSL-Freigabe und/oder
eine CB- und CBPT-Verdichtung ausgeführt, wie sie erforderlich ist.
Dann werden in 164 die Bereiche aus dem Wiederholungsmöglichkeit-Bewertungsalgorithmus
(Kasten 40 der 17) aktualisiert,
und in 166 wird der Sektor aus dem Steuereinheit-Puffer
in die Adresse des WP geschrieben, und in 168 wird ein
Gültigkeitsstatuswert
an den Host zurückgeliefert.
Wenn sich im Kasten 156 ergibt, dass der Sektor nicht gelöscht ist,
wird in 157 geprüft,
ob sich die VA im COB befindet. Die VA befindet sich im COB, wenn
sie mit dem VB übereinstimmt,
wobei VB ein Zahlenfeld des virtuellen Blocks (es handelt sich um die
Adresse des virtuellen Blocks – siehe
die 12) in der im SRAM 13 gespeicherten COB-Struktur
handelt. Wenn sich die VA nicht in der COB befindet, wird in 159 die
VA in der im SRAM 13 der Steuereinheit gespeicherten COB-Struktur
als veraltet aufgezeichnet (dies erfolgt dadurch, dass ein entsprechendes
Bit im Bitmaskenfeld der COB-Struktur im SRAM 13 auf 1
gesetzt wird), und dann wird zu einem Kasten 158 (WP ist
gültig) weitergegangen.
Wenn sich die VA nicht im COB befindet, wird in 161 die
COB gewechselt, und dann wird zu einem Kasten 159 weitergegangen
(VA als veraltet markieren).
-
Die 24 ist
ein Flussdiagramm der in einem Kasten 161 der 23 (wechselndes
COB) implementierten Schritte. Die 24 ist
im Wesentlichen selbsterläuternd,
jedoch sollte sie in Zusammenhang mit den folgenden Hinweisen gelesen
werden:
- – Kasten 200 (VA.V1.
VB): VA.B1 ist das Feld des virtuellen Blocks der VA, und für VB gilt
das oben Beschriebene;
- – Kasten 202 (Ist
der COB ungültig):
der COB ist ungültig,
wenn VB=0 gilt. Wenn der VB den Wert 0 hat, zeigt dies an, dass
zu diesem Zeitpunkt keine veralteten Daten vorliegen;
- – Kästen 203, 204 (Berechnen
von MaxRel): MaxRel ist die Maximalanzahl von Sektoren, die aus
dem COB neu zuzuordnen sind. Es gilt MaxRel=P.Page-1, wobei P-Page
ein Seitenfeld (Adresse) des WP oder des RP ist;
- – Kästen 205, 206 (Hinzufügen von
Blindeinträgen
in der WSL): wenn ein neu zuzuordnender Block noch nicht vollständig beschrieben
ist, müssen
entsprechende "Blind"sektor-LAs zum letzten
Eintrag in WSL (RSL) hinzugefügt
werden;
- – Kasten 207 (Neuzuordnen
von Sektoren): siehe die 25;
- – Kasten 208 (Schreiben
der WMAP): Schreiben der WMAP in den CB, wobei EB+-VB gilt, und das
entsprechende Bit in der Bitkarte wird auf 1 gesetzt. Falls erforderlich,
wird ein CB-Umschreiben ausgeführt;
- – Kasten 209 (Listen
aktualisieren): es wird der Eintrag WRBArray aufgefunden, der VB
entspricht, und er sowie andere Einträge für denselben VB in WBArray werden
als ungültig
markiert. WRBArray entspricht tatsächlich den listen WBL und WSL,
wie sie aktuell im selben Speicherbereich wie die WBL-Einträge beim Start-Hochzählen und
die RBL-Einträge
beim Ende-Herunterzählen
gespeichert sind. WRBArray ist dann voll, wenn sich die zwei Listen
in der Mitte treffen.
- – Kasten 210 (COB
konfigurieren): es wird die COB-Struktur im SRAM aktualisiert; dabei
wird das Feld VB auf VA.B1 gesetzt, das VA.page entsprechende Obs(veraltet)-
und Del(gelöscht)-Maskenbit
wird auf 1 gesetzt, und alle anderen Bits werden auf 0 gesetzt.
-
Die 25 veranschaulicht
die im Kasten 207 (Sektoren neu zuordnen) der 24 implementieren Schritte.
Dies sollte in Zusammenhang mit den folgenden Hinweisen gelesen
werden:
- – Kästen 220, 222 und 230:
Ausführen
einer Schleife, die das Obs- und Del-Maskenfeld der COB-Struktur im SRAM
durchläuft;
- – Kasten 223 (Ist
der Sektor gültig?):
der Sektor ist gültig,
wenn ODMask[-i]=0
gilt; der Wert 1 in der Obs- und Del-Maske des COB zeigt an, dass
diese Seite einen gültigen
Sektor enthält;
- – Kästen 224 und 225:
es gilt RP=0, wenn ein Block, auf den der RP zeigt, bereits vollständig geschrieben ist;
- – Kasten 226 (Speichern
der LA aus dem Seitenkopf): die aus dem Seitenkopf erhaltene LA
wird zwischengespeichert, um im Hinzufügungseintrag zur SRL verwendet
zu werden;
- – Kasten 225 (RP=0):
Hinzufügen
eines Eintrags zur RSL. Ausführen
einer WSL/RSL-Freigabe, falls erforderlich.
-
Die 26 veranschaulicht
die Schritte, die im Kasten 160 in der 23 implementiert
werden, um den Schreibzeiger (WP) einzustellen. Ein ähnlicher
Prozess wird dazu verwendet, den RP im Kasten 227 in der 25 einzustellen.
Die 26 ist in Zusammenhang mit den folgenden Kommentaren
zu lesen:
- – Kasten 240 (ist
WRArray nicht voll): WRArray ist dann nicht voll, wenn LastLastRE-1
gilt, wobei Last (global) ein Index für den letzten WSL-Eintrag ist
und LastRE ein Index für
den letzten RSL-Eintrag ist;
- – Kasten 242 (Ist
WRBArray nicht voll): WRBArray ist nicht voll, wenn LBLLRBL-1 gilt,
wobei für
LBL und LRBL das bereits hinsichtlich der 20 Definierte
gilt;
- – Kasten 244 (Listenfreigabe):
Ausführen
einer SAT-Seitenschreiboperation, eines SAT-Blockschreibvorgangs
und eines CB-Umschreibvorgangs, falls erforderlich;
- – Kasten 246 (Füllen des
NEB): Auswählen
der N (N=NEBSize) nächsten
gelöschten
Blöcke
aus im CB gespeicherten MAPs;
- – Kasten 248 (Schreiben
von WMAP): Beschreiben von WMAP mit dem für ErBlock eingetragenen Verknüpfungsfeld
sowie dem entsprechenden, auf 0 gesetzten Bit im Bitmapfeld. Ausführen eines
CB-Umschreibvorgangs, falls erforderlich.
-
Die 27 ist
ein Flussdiagramm der bei einer Sektorlöschoperation ausgeführten Prozessschritte. Dies
erfolgt mit Anfangsschritten, die denen einer Schreiboperation (siehe
die 23) ähnlich
sind: Die LA wird in 250 in eine VA übersetzt. Wenn in 252 der
Sektor gelöscht
ist, wird der Fehlerstatus an den Host 254 zurückgeliefert.
Wenn der Sektor nicht gelöscht
ist, wird in 256 geprüft,
ob sie die VA im COB befindet und wenn sich in 261 ergibt,
dass sie nicht in der COB liegt, wird in 261 die COB gewechselt
(wie in der 24). Wenn sich die VA im COB
befindet, wird sie in diesem in 269 als gelöscht markiert,
und dann wird einer der Puffer des Doppelport-SRAM 9 (in
der Steuereinheit) in 271 mit Werten 0 aufgefüllt und
dann wird diese Seite mit "nur
Nullen" aus dem
Puffer in den zu löschenden
Sektor geschrieben (um dadurch den Sektor zu löschen). Dann wird in 275 der
Gültigkeitsstatus
(der bestätigt,
dass der Sektor gelöscht
wurde) an den Host zurückgeliefert.
-
Initialisierung
-
Nun
werden Initialisierungsprozeduren und Wiederherstellprozeduren nach
Spannungsverlusten beschrieben. Der Einfachheit halber werden diese
unter Bezugnahme auf ein Einzel-Schreibzeiger-System (d.h. nur mit
WP) beschrieben, jedoch ist es zu beachten, dass diese Prozeduren
leicht so erweitert werden können, dass
sie für
das Mehrfach-Schreibzeiger-System (WP, SWP, RP) geeignet sind.
-
Alle
Daten- und Steuerstrukturen sind speziell so konstruiert, dass ein
allgemeines Durchscannen während
der Initialisierung vermieden wird. Beinahe alle Steuerstrukturen
(mit Ausnahme der WSL und der WBL) werden normalerweise aus entsprechender,
im CB gespeicherter Information hergeleitet. Während der Initialisierung der
Karte ist es erforderlich, die folgenden Operationen auszuführen.
- 1. Lesen des letzten Eintrags der Steuerblockzeigertabelle
aus dem Bootblock, um so die Stellen des mindestens einen CB-Blocks
zu identifizieren.
- 2. Rekonstruieren von TBLP durch Durchscannen des CB.
- 3. Scannen von Kopf/ECC-Feldern von Seiten, die sequenziell
auf die Schreibzeigerposition folgen, wie sie im letzten TBL-Eintrag
im Steuerblock definiert ist, um Sektoren zu identifizieren, in
die seit dem letzten SAT-Umschreibvorgang
geschrieben wurde, und um die WSL und die WBL aufzubauen.
- 4. Aufbauen der NEB aus entsprechenden MAP-Einträgen im CB.
- 5. Aufbauen des COB und der ASBL.
- 6. Prüfen,
ob ein Block, auf den im Feld ErB der letzten MAP Bezug genommen
wird, tatsächlich
gelöscht ist.
Falls nicht, wird der Löschvorgang
abgeschlossen.
-
Aufbauen der
WSL und der WBL
-
Während der
Initialisierung der Karte wird der letzte Wert des zu speichernden
Schreibzeigers (WP) aus dem jüngsten
TBL-Eintrag im CB gelesen, und es wird ein Scanvorgang für Seitenköpfe aufeinanderfolgender
Seiten ausgehend von dieser Stelle ausgeführt, um die WSL und die WBL
im Prozessor-SRAM wiederaufzubauen. Wenn eine gelöschte Stelle
angetroffen wird, wurde das Ende der Abfolge von Sektoren erreicht,
in die seit dem letzten SAT-Umschreibvorgang geschrieben wurde.
-
Dieser
Sektorscanvorgang muss die Tatsache berücksichtigen, dass der Schreibzeiger
(WP) vom Ende eines Blocks zum Anfang eines nicht benachbarten Blocks
springen kann. Alle vom (WP) ausgeführten Blockübergänge sind in den Verknüpfungsfeldern
von MAP-Einträgen
im CB aufgezeichnet.
-
Aufbau des
COB und der ASBL
-
Diese
Strukturen können
dadurch rekonstruiert werden, dass entsprechende Einträge aus dem
CB kopiert werden. Außerdem
ist es zum Aufbauen der COB-Struktur
(zum Erkennen gelöschter
Sektoren in ihr) erforderlich, einen ak tuellen Block, der diese
Sektoren enthält
und dessen Adresse im Feld Obs des letzten MAP-Eintrags im CB definiert
ist, zu durchscannen. Um veraltete Sektoren in diesem Block zu erkennen,
ist es auch erforderlich, die WSL und die WBL durchzuscannen. Um
ASBL-Seiten aufzuzeichnen, sind ASB-Adressen aus der TBL zu identifizieren,
und dann sind ihre Kopf/ECC-Felder durchzuscannen.
-
Wiederherstellung
nach einem Spannungsverlust
-
Es
ist ein Erfordernis für
das Speichersystem, dass es normal arbeiten kann, und dass keine
gespeicherten Daten verlorengehen, wenn die Spannung wiederhergestellt
ist, was auch immer die Umstände
gewesen sein mögen,
unter denen die Spannung weggenommen wurde. Jedoch ist es nicht
erforderlich, den vollen Normalzustand des Speichersystems unmittelbar
nach dem Einschalten der Spannung wiederherzustellen, sondern es
muss nur möglich
sein, dass es normal arbeitet. Ein Normalzustand kann später als
Ausnahme immer dann wiederhergestellt werden, wenn irgendein anormaler
Zustand erkannt wird.
-
Der
Normalzustand des Speichersystems kann dann beeinträchtigt werden,
wenn die Versorgungsspannung weggenommen wird, während gerade eine der folgenden
Operationen ausgeführt
wird:
- 1. Schreiben eines Datensektors durch
einen Host.
- 2. Schreiben eines Datensektors, der gerade neu zugewiesen wird.
- 3. Schreiben eines Eintrags in einen Steuerdatenblock (CB oder
BB).
- 4. Schreiben einer Seite in einen Steuerdatenblock (SAT oder
CB).
- 5. Löschen
irgendeines Blocks mit veralteten Sektor- oder Steuerdaten.
-
Spannungsverlust
während
des Schreibens eines Datensektors durch einen Host
-
In
diesem Fall können
die Daten, die gerade geschrieben werden, verlorengehen, jedoch
wurde der Host nicht darüber
informiert, dass der Schreibbefehl abgeschlossen wurde, und er kann
den Sektor neu schreiben. Ein unvollständig geschriebener Sektor kann
als Ergebnis des teilweisen Schreibvorgangs im Flash-Speicher existieren.
Dies wird während
der Initialisierung erkannt, wenn der Wert des Schreibzeigers dadurch
erstellt wird, dass die Seitenköpfe
im Block gelesen werden, der durch den letzten Verknüpfungsparameter
im CB definiert ist. Der zuletzt erfasste Sektor sollte vollständig gelesen
werden, um seinen ECC zu prüfen,
und es sollte die nächste
Seite gelesen werden, um zu prüfen,
dass sie vollständig
gelöscht
ist. Wenn ein teilweise beschriebener Sektor erkannt wird, sollten
alle anderen Sektoren eine Neuzuordnung auf eine neue Schreibzeigerposition
am Anfang des nächsten
gelöschten
Blocks erfahren, und dann sollte der Block gelöscht werden.
-
Spannungsverlust während des
Schreibens eines Datensektors, der gerade neu zugeordnet wird
-
Dies
wird während
des Prozesses zum Erstellen des Schreibzeigers während seiner Initialisierung, wie
oben, erkannt. Es sollte dieselbe Aktion zum Neuzuordnen von Sektoren
und zum Löschen
des Blocks ergriffen werden. Außerdem
sollte eine unvollständige
Neuzuordnungsoperation durch Vergleichen logischer Sektoradressen
unmittelbar vor dem Schreibzeiger mit solchen veralteten Sektoren
im Block, der durch den Parameter Obs im CB definiert ist, erkannt
werden. Während
der Initialisierung sollten alle anstehenden Sektor-Neuzuordnungen
abgeschlossen werden.
-
Spannungsverlust während des
Schreibens eines Eintrags in einen Steuerdatenblock (CB oder BB)
-
Dieser
Zustand kann während
der normalen Initialisierung erkannt werden, wenn Einträge im CB
und im BB gelesen werden und ihre ECCs geprüft werden. Der Eintrag sollte
ignoriert werden, wenn sein ECC einen Fehler anzeigt. Die frühere Operation,
die die CB- oder BB-Eintragsschreiboperation auslöste, wurde
nicht korrekt abgeschlossen, und der Eintrag wird später korrekt
geschrieben, wenn diese Operation während des Normalbetriebs wiederholt
wird.
-
Spannungsverlust während des
Schreibens einer Seite in einen Steuerdatenblock (ASB)
-
Dieser
Zustand kann während
der normalen Initialisierung erkannt werden, wenn Seiten im ASB
gelesen werden und ihre ECCs geprüft werden. Die Seite sollte
ignoriert werden, wenn ihr ECC einen Fehler zeigt. Die frühere Operation,
die die ASB-Seitenschreiboperation auslöste, wurde nicht korrekt abgeschlossen,
und die Seite wird später
korrekt geschrieben, wenn diese Operation während des Normalbetriebs wiederholt
wird.
-
Spannungsverlust während des
Schreibens eines vollständigen
Steuerdatenblocks (SAT oder CB)
-
Dies
führt zu
einem unvollständigen
Steuerdatenblock im Flash-Speicher ohne Bezugnahmen auf ihn durch
andere Datenstrukturen. Dieser Zustand muss während der Initialisierung nicht
erkannt werden, und der Block kann als "verlorener Block" existieren. Die frühere Operation, die den Blockschreibvorgang
auslöste, wurde
nicht korrekt abgeschlossen, und der Block wird später korrekt
geschrieben, wenn diese Operation im Normalbetrieb wiederholt wird.
In einem späteren
Stadium des Normalbetriebs wird der verlorene Block durch eine Diskrepanz
mit seinem MAP-Zustand oder dadurch erkannt, dass eine Diskrepanz
in der Anzahl gelöschter
Blöcke
im System aufgefunden wird (siehe Kapazitätskarte in der 16).
Dann können
Ausnahmeroutinen den Block, falls erforderlich, durch einen vollständigen Scanvorgang
des Flash-Speichers, identifiziert und gelöscht werden.
-
Spannungsverlust
während
des Löschens
eines Blocks mit veralteten Sektor- oder Steuerdaten
-
Dies
führt zu
einem unvollständig
gelöschten
Block, der im Flash-Speicher existiert. Dieser Zustand wird während der
Initialisierung erkannt, wenn der Zustand des Blocks, auf den durch
das Feld ErB im letzten MAP-Eintrag im CB Bezug genommen wird, geprüft wird.
Falls erforderlich, kann ein erneutes Löschen dieses Blocks ausgeführt werden.
-
Weitere alternative
Ausführungformen
-
Es
sind verschiedene Modifizierungen an den oben beschriebenen Ausführungsformen
möglich,
ohne vom Schutzumfang der Erfindung abzuweichen. Zum Beispiel besteht
eine alternative Art des Handhabens von Löschoperationen darin, dass
immer zwei COBs (und zwei COSBs) existieren können. Der Vorteil bestünde darin,
dass die Speicherkapazität
am besten genutzt werden könnte.
Bei der oben beschriebenen Ausführungsform
ist nur ein COB zugelassen, jedoch kann vorübergehend ein POB existieren,
wenn in einem Block, der zum COB gemacht werden soll, ein Schreibzeiger
existiert. Dies bedeutet, dass immer ausreichende gelöschte Speicherkapazität zur Zuordnung
für einen
POB vorhanden sein muss, sollte es erforderlich sein, über einen
solchen zu verfügen.
Daher ist es attraktiv, diese Speicherkapazität am besten zu nutzen, und
eine Vorgehensweise, um dies zu gewährleisten, besteht darin, dass
immer zwei COBs existieren dürfen,
um dadurch das Erfordernis eines POB zu beseitigen (der zweite COB
kann bei Bedarf als POB wirken). Bei einem derartigen System mit
zwei COBs wird, wenn es erforderlich wird, einen neuen COB zu erzeugen,
der ältere
der zwei COBs gelöscht
(solange er nicht einen Schreibzeiger enthält, in welchem Fall der jüngere gelöscht wird).
-
Unter
Bezugnahme auf die 3 und die Beschreibung der Datenanordnung
in jeder der Flash-Seiten im Speichersystem werden auch einige alternative
Arten zum Speichern der Daten innerhalb einer Seite vorgeschlagen.
Die 28 zeigt die physikalische Unterteilung einer
typischen 528-Byte-FLASHspeicherseite 1 vom NAND- oder
UND-Typ. Die Seite verfügt über einen "Datenbereich" 300 von
512 Bytes sowie einen "Ersatzbereich" 302 von
16 Bytes. Bei der oben unter Bezugnahme auf die 3 beschriebenen
Ausführungsform
speichert die Steuereinheit 8 512 Bytes von Information 1a (z.
B. einen Hostdatensektor) im Datenbereich 300, und sie
speichert den Kopf 1b und den ECC 1c (die nachfolgend
gemeinsam als Overheaddaten (OD) bezeichnet werden) im Ersatzbereich 302.
Jedoch sind andere Datenanordnungen innerhalb der Seite 1 möglich. Zum
Beispiel könnten,
wie es in der 29 dargestellt ist, der Kopf 1b und
der ECC 1c in einem ersten Abschnitt 303 des Datenbereichs 300 in
gleicher Weise gespeichert werden, und die Information 1a könnte im Abschnitt 304 gespeichert
werden, der aus dem Ersatzbereich 302 und dem Rest des
Datenbereichs 300 besteht.
-
Eine
andere, in der 30 dargestellte, Möglichkeit
besteht darin, den Kopf 1b und den ECC 1c an einer
Position einzuschreiben, die gegenüber dem Start der Flash-Seite
versetzt ist, und den Hostdatensektor (der als "Benutzerdaten" bezeichnet werden kann) im restlichen
Raum auf einer der Seiten des Kopfs und des ECC zu schreiben. Der
Wert des Versatzes (Versatz S) der OD kann z. B. durch eine der
folgenden Funktionen bestimmt werden: (a) physikalische Adresse
(PA) der Seite 1; oder (b) ein oder mehrere Bits innerhalb
des ersten Bytes der auf die Seite 1 geschriebenen Benutzerdaten
(d.h. des Hostdatensektors). Die 31(a) veranschaulicht
die Datenanordnung im Steuereinheit-Puffer 320 vor dem
Start einer Sektorschreiboperation, wobei die Daten als erster Abschnitt 322 von
Benutzerdaten und als zweiter Abschnitt 324 von Kopfdaten
angeordnet sind. Die 31(b) zeigt
die Anordnung der Daten auf einer Flashspeicherseite, folgend auf
den Abschluss einer Schreiboperation, bei der der Versatz S durch
ein oder mehrere Bits innerhalb des ersten Bytes der Benutzerdaten
(obige Option) (b)) bestimmt ist. Die Daten werden als erster Abschnitt 326 der
Benutzerdaten gespeichert, gefolgt von einem zweiten Abschnitt 328 der
Benutzerdaten, gefolgt vom Kopf 1b und vom ECC 1c, gefolgt
vom dritten und abschließenden Abschnitt 330 der
Benutzerdaten. Die Länge
des Abschnitts 326 zuzüglich
des Abschnitts 328 hängt
von Daten im Abschnitt 326 ab. Die Länge des Abschnitts 326 ist
so definiert, dass sie dem Minimalversatz entspricht oder kleiner
als dieser ist, und die Länge 328 wird
auf Grundlage der Daten im Abschnitt 326 berechnet, um
den korrekten Versatz S zu liefern. Der erste und de zweite Abschnitt 326, 328 der
Benutzerdaten werden getrennt identifiziert, damit der erste Abschnitt 326 in
einem Vorgang durch die Steuereinheit aus dem Flash-Speicher gelesen
werden kann und durch sie bewertet werden kann, um die Länge des
zweiten Abschnitts 328 zu bestimmen, der bei einer anschließenden Operation
durch die Steuereinheit gelesen werden sollte. Die 32 ist
eine Tabelle, die die Abfolge von Steuereinheit-Befehlen detailliert
angibt, die dazu verwendet werden, die Daten während der Schreiboperation
vom Steuereinheit-Puffer an den Flash-Speicher zu übertragen.
-
Ein
Vorteil des Wählens
des Versatzes S als Funktion eines oder mehrerer Bits der Benutzerdaten
besteht darin, dass dadurch die Overheaddaten nicht in jedem Sektor
an derselben Position im Datensegment von 528 Bytes eingefügt werden
müssen.
Dies schützt
die wertvollen Overheaddaten vor einem gleichzeitigen Verlust einer
großen
Anzahl von Sektoren im Fall eines systematischen Fehlers im Flash-Speicher,
wie einem Speicherarray-Spaltenausfall.
-
Die 33 zeigt
die sich ergebende Datenanordnung im Steuereinheit-Puffer nach Abschluss
einer Leseoperation der Flashspeicherseite der 31(b). Aus der 33 ist
es erkennbar, dass die Daten im Puffer bis zurück zu einem ersten Abschnitt 322 von
Benutzerdaten und einem zweiten Abschnitt 324 von Kopfdaten
angeordnet sind, nun gefolgt von einem dritten und abschließenden Abschnitt 325 mit
dem ECC. Die 34 ist eine Tabelle, die detailliert
die Abfolge von Steuereinheit-Befehlen angibt, die dazu verwendet
werden, während
der Leseoperation die Daten vom Flash-Speicher an den Steuereinheit-Puffer
zu übertragen.
-
Außerdem wird
unter Bezugnahme auf verschachtelte Schreiboperationen für mehrere
Flash-Chips, wie bereits unter Bezugnahme auf Mehrfach-Flashchip-Speichersysteme beschrieben,
vorgeschlagen, dass diese Technik zum im Wesentlichen gleichzeitig
erfolgenden Schreiben für
mehrere Chips auch dazu verwendet werden kann, Daten in einen einzelnen
Speicherchip zu schreiben, in dem die Größe physikalischer Seite ein
Vielfaches der Größe eines
Sektorschreibvorgangs durch die Steuereinheit ist, wobei z. B. jede
Seite des Speichers die vierfache Größe eines Segments von durch
die Steuereinheit geschriebenen Daten (Benutzer + Overhead) aufweist,
wobei die Steuereinheit Daten in gleichmäßig bemessene Segmente schreibt.
-
Es
ist ferner zu beachten, dass die Erfindung nicht nur bei Speichern
vom NAND-Typ anwendbar ist, sondern auch bei anderen Speichertypen,
wie Speichern vom UND- und NOR-Typ. Im Fall eines Flash-Speichers
vom UND-Typ verfügt
jede Seite 1 eines Blocks über dasselbe Format wie das
NAND-Seitenformat der 28, und es kann jede der oben
beschriebenen möglichen
Datenanordnungen innerhalb der Seiten verwendet werden. Die Steuereinheit
wird so konzipiert, dass sie immer noch Speicher in Sektorenblöcken löscht, wobei
jedoch in Blöcken,
die schlechte Sektoren enthalten, die einzelnen guten Sektoren im
zu löschenden Block
individuell gelöscht
werden. So behandelt die Steuereinheit nicht alle schlechte Sektoren
enthaltenden Blöcke
als schlechte Blöcke,
sonden statt dessen behandelt sie sie als gute (löschbare)
Blöcke,
und sie nutzt die guten Sektoren innerhalb dieser Blöcke. Bei
Ausführungsformen
vom UND-Typ wird dafür
gesorgt, dass die Steuereinheit für SAT-Blöcke oder ASBS nur Blöcke verwendet,
die nur gute Sektoren enthalten.
-
Wenn
ein Flash-Speicher vom UND-Typ verwendet wird und das Speichersystem
ein mehrfach-Flashchipsystem unter Verwendung verschachtelter Chipschreiboperationen,
wie oben beschrieben, ist, wobei jeder Block von Sektoren (Seiten)
in einem der virtuellen Blöcke
einen schlechten Sektor enthält,
sorgt die Steuereinheit dafür,
dass die Schreibzeiger diesen Sektor überspringen und zum nächsten guten
Sektor im Block übergehen,
und wenn c=Chip und s=Sektor gelten, ergeben sich, wenn ein Schwung
von vier Sektorschreibvorgängen
c3s5, c4s5, c1s6, c2s6 entspricht und c1s6 ein schlechter Sektor
der Sequenz ist, c3s5, c4s5, c2s6, c3s6. Dies steht im Gegensatz
zu Ausführungsformen
auf Grundlage eines Speichers vom NAND-Typ, bei denen dann, wenn
ein Block in einem virtuellen Block einen oder mehrere schlechte
Sektoren enthält,
die Steuereinheit diesen Block als schlechten Block behandelt und
sie den gesamten virtuellen als schlechten virtuellen Block behandelt.
-
Wenn
ein Flash-Speicher vom NOR-Typ verwendet wird, ist die bevorzugte
Ausführungsform
eine solche, bei der die Steuereinheit des Speichersystems so konzipiert
ist, dass immer noch Datenstrukturen mit gleichmäßig bemessenen Sektoren in
den Flash-Speicher geschrieben und aus ihm gelesen werden, wobei jeder
Sektor 528 Bytes breit ist. Die 35 veranschaulicht
schema tisch drei derartige Sektoren 1, 2, 3 in einem Block 4' eines NOR-Speichers.
Auf Grund der Tatsache, dass eine Zeile des Speichers in einem NOR-Block nur 512 Bytes
breit ist, ist es ersichtlich, dass jeder der vier Sektoren im NOR-Speicher
demgemäß eine Zeile
auffüllt
und herumgeführt
ist, um einen Teil der nächsten
Zeile zu füllen.
Dennoch wäre
es möglich, die
betreffenden Sektoren in einem NOR-Speicher auf andere Weise zu
definieren, und es kann gewählt
werden, Sektoren mit einer Größe unter
oder über
528 Bytes zu verwenden und ein Block könnte sogar Sektoren von mehr
als einer Größe enthalten.
Die Steuereinheit kann die Daten innerhalb jedes Sektors mit einer
beliebigen von verschiedenen unterschiedlichen Arten, wie die bereits
unter Bezugnahme auf Speicherseiten vom NAND- und vom UND-Typ beschrieben
wurde, anordnen, wobei jeder Sektor Benutzer- und Overheaddaten enthält.
-
Aus
dem Vorstehenden ist es ersichtlich, dass die physikalischen Sektoren
des Speichersystems, unabhängig
davon, ob es auf Speicherarrays vom NAND-, UND- oder NOR-Typ beruht,
keine spezielle Beziehung zur physikalischen Architektur des Speicherarrays
selbst haben müssen,
so dass z. B. ein Sektor nicht einer Zeile (Seite) des Arrays entsprechen
muss, und es muss keine physikalische Eigenschaft zum Kennzeichnen
der Grenze zwischen einem Sektor und einem benachbarten Sektor vorhanden
sein. Ein Sektor kann als eine Gruppe von Speicherzellen interpretiert
werden, die von der Steuereinheit immer als Einheit behandelt wird.
Verschiedene Sektoren müssen
nicht dieselbe Größe aufweisen.
Darüber
hinaus hängt
die physikalische Struktur eines Sektors nicht von Daten ab, die
in ihm gespeichert werden können.
Auch sind Ausführungsformen
möglich,
bei denen fehlerhafte Bereiche innerhalb einer Zeile (Seite) von
Speicherzellen toleriert werden und sie von der Steuereinheit einfach übersprungen
werden, wenn in physikalische Sektoren geschrieben wird.
-
Betreffend
die SAT, zu der oben beschrieben ist, dass sie vorzugsweise in einem
oder mehreren Blöcken
des Speicherarrays 6 gespeichert wird, wäre es alternativ
möglich,
im Speichersystem 10 einen gesonderten nicht-flüchtigen
Speicher anzubringen, auf den die Steuereinheit zugreifen kann und
in der sie die SAT speichert.
-
Schließlich verwendet
die Steuereinheit, bei einer modifizierten Version der oben beschriebenen
Ausführungsform,
anstatt dass sie verfügbare
gelöschte
Blöcke
immer in aufsteigender Reihenfolge ihrer physikalischen Adressen,
wie oben beschrieben, verwendet, die gelöschten Blöcke mit anderer Reihenfolge.
Bei dieser modifizierten Ausführungsform
enthält
die NEB- Liste eine
gewählte
Untergruppe aller aktuell verfügbarer gelöschten Blöcke, die
erste Blockadresse in der NEB-Liste entspricht dem zu verwendenden
nächsten
gelöschten
Block, und diese erste Blockadresse wird aus der NEB-Liste entfernt, wenn
eine Zuordnung zur Datenspeichernutzung erfolgte. Jede neue gelöschte Block
der erzeugt wird (z.B. auf Grund einer Erzeugung veralteter Daten,
folgend auf einen Löschbefehl
vom Host), wird zur Unterseite der NEB-Liste hinzugefügt. Dies dauert
für eine
durch die Steuereinheit bestimmte Periode an (die z. B. einer vorbestimmten
Anzahl von Sektorschreibbefehlen vom Host entsprechen kann), wobei
die Steuereinheit am Ende dieser Periode die NEB-Liste dadurch neu
zusammenstellt, dass sie die Einträge im NEB durch eine neue Untergruppe
der aktuell verfügbaren
gelöschten
Blöcke
ersetzt. Zweckdienlicherweise könnten
die Untergruppen der Gesamtgruppe aller gelöschten Blöcke sequenziell in der Reihenfolge
ansteigender physikalischer Blockadressen genutzt werden. Diese
modifizierte Ausführungsform
kann dadurch einen gewissen Vorteil zeigen, dass Speicherraumerfordernisse
in Zusammenhang mit dem überwachen
und Speichern des Löschzustands
aller Blöcke
verringert werden.