DE60019903T2 - Speichersystem - Google Patents

Speichersystem Download PDF

Info

Publication number
DE60019903T2
DE60019903T2 DE60019903T DE60019903T DE60019903T2 DE 60019903 T2 DE60019903 T2 DE 60019903T2 DE 60019903 T DE60019903 T DE 60019903T DE 60019903 T DE60019903 T DE 60019903T DE 60019903 T2 DE60019903 T2 DE 60019903T2
Authority
DE
Germany
Prior art keywords
sector
block
memory
control unit
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60019903T
Other languages
English (en)
Other versions
DE60019903D1 (de
Inventor
Welsh Alan SINCLAIR
Natalia Victorovna Ouspenskaia
Michael Richard Dalkeith TAYLOR
Anatolievich Sergey GOROBETS
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Micron Technology Inc
Original Assignee
Lexar Media Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Lexar Media Inc filed Critical Lexar Media Inc
Application granted granted Critical
Publication of DE60019903D1 publication Critical patent/DE60019903D1/de
Publication of DE60019903T2 publication Critical patent/DE60019903T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System (AREA)
  • Read Only Memory (AREA)

Description

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

Claims (50)

  1. Speichersystem (5, 8) zur Verbindung mit einem Host-Prozessor, wobei das System aufweist: einen Festkörperspeicher (5) mit nicht-flüchtigen Speichersektoren (1, 2, 3), die einzeln adressierbar und in löschbaren Sektorenblöcken (4) angeordnet sind, wobei jeder Sektor eine physikalische Adresse aufweist, die seine physikalische Position in dem Speicher definiert; und eine Steuereinheit (8) zum Schreiben und Lesen von Datenstrukturen in den bzw. aus dem Speicher, und zum Speichern der Sektorenblö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 (11) zum Übersetzen von von dem Host-Prozessor empfangenen logischen Adressen in 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, daß er sich in einer vorbestimmten Reihenfolge durch die physikalischen Adressen der Speichersektoren eines Blocks bewegt, der als gelöscht behandelt wird, und sich, wenn der Block gefüllt ist, zu einem anderen gelöschten Block bewegt; wobei die Steuereinheit dazu ausgelegt ist, wenn ein Sektor-Schreibebefehl 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, und wobei die Steuereinheit die Sektorzuordnungstabelle weniger häufig aktualisiert als Speichersektoren mit Daten von dem Host-Prozessor beschrieben werden, dadurch gekennzeichnet, daß wenigstens ein zusätzlicher Sektorenblock vorgesehen ist, der modifizierte Versionen einzelner 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.
  2. Speichersystem nach Anspruch 1, wobei der Schreibezeiger durch die Steuereinheit dazu gesteuert wird, sich in einer vorbestimmten Reihenfolge durch die Blöcke zu bewegen, die als gelöscht behandelt werden.
  3. Speichersystem nach Anspruch 1 oder 2, wobei die physikalischen Sektoradressen in der Sektorzuordnungstabelle durch logische Sektoradressen geordnet sind, wodurch der N-te Sektorzuordnungstabelleneintrag die physikalische Adresse eines Sektors enthält, in den die Daten mit der logischen Adresse N geschrieben wurden.
  4. Speichersystem nach Anspruch 3, wobei die Steuereinheit so ausgelegt ist, daß bei Empfang eines Sektorlesebefehls von dem Host-Prozessor die Steuereinheit eine von dem Host-Prozessor empfangene logische Sektoradresse in der Sektorzuordnungstabelle nachschlägt, um die physikalische Sektoradresse zu erhalten, die die Steuereinheit der logischen Sektoradresse zuvor zugeordnet hat.
  5. Speichersystem nach einem der vorstehenden Ansprüche, wobei die Sektorzuordnungstabelle in wenigstens einem der Speichersektorenblöcke in dem Festkörperspeicher gespeichert ist.
  6. Speichersystem nach Anspruch 5, wobei die Steuereinheit dazu ausgelegt ist, die Sektorzuordnungstabelle durch Überschreiben der Sektorzuordnungstabelle in ganzen Blöcken zu aktualisieren.
  7. Speichersystem nach Anspruch 1, wobei jeder Sektor in dem Zusatzblock die physikalische Adresse des Sektors in dem Sektorzuordnungs-Tabellenblock, den er aktualisiert, und die modifizierte Version des Sektors in dem Sektorzuordnungs-Tabellenblock enthält.
  8. Speichersystem nach einem der vorstehenden Ansprüche, wobei die Steuereinheit dazu ausgelegt ist, den Schreibezeiger so zu steuern, daß er sich sequentiell in aufsteigender numerischer Reihenfolge der physikalischen Adressen durch die gelöschten Blöcke bewegt, wenn jeder Block mit darin geschriebenen Daten gefüllt wird.
  9. Speichersystem nach Anspruch 8, wobei die Steuerung des Schreibezeigers zyklisch erfolgt, in dem Sinne, daß sobald die Sektoren in dem gemäß der physikalischen Adressenreihenfolge höchsten Block mit Daten gefüllt wurden, der Schreibezeiger durch die Steuereinheit dazu gesteuert wird, zum Sektorenblock mit der numerisch niedrigsten physikalischen Blockadresse von allen gegenwärtig durch die Steuereinheit als gelöscht behandelten Blöcken umzuspringen.
  10. Speichersystem nach einem der Ansprüche 1 bis 7, wobei die Steuereinheit dazu ausgelegt ist, eine nicht sequentielle Bewegung des Schreibezeigers gemäß der physikalischen Adressreihenfolge durch die gelöschten Blöcke zu steuern.
  11. Speichersystem nach einem der Ansprüche 1 bis 10, wobei jeder Speichersektor physikalisch in einen Datenbereich (300) und einen Reservebereich (302) unterteilt ist, und die Steuereinheit dazu ausgelegt ist, Organisationsdaten, die Kopfdaten und Fehlerkorrekturcode-Daten enthalten, an einer Position in den Sektor zu schreiben, die vom Beginn des Datenbereichs des Sektors versetzt ist, und von dem Host-Prozessor empfangene Benutzerdaten in den im Sektor verbleibenden Bereich auf einer der beiden Seiten der Organisationsdaten zu schreiben.
  12. Speichersystem nach Anspruch 11, wobei die Organisationsdaten um einen Betrag versetzt sind, der durch wenigstens ein Bit der in den Sektor zu schreibenden Benutzerdaten bestimmt ist.
  13. Speichersystem nach einem der vorstehenden Ansprüche, wobei die Speichersektoren in jedem Sektorenblock zusammen als Einheit löschbar sind.
  14. Speichersystem nach Anspruch 13, wobei die Speichersektoren in jedem Sektorenblock auch einzeln löschbar sind.
  15. Speichersystem nach einem der vorstehenden Ansprüche, wobei die Steuereinheit dazu ausgelegt ist, Löschoperationen in dem Speicher so zu steuern, daß nur ganze Blöcke von Speichersektoren gelöscht werden, und wobei ein Sektorenblock durch die Steuereinheit als gelöscht behandelt wird, wenn alle Speichersektoren darin gelöschte Sektoren sind.
  16. Speichersystem nach Anspruch 15, wobei, falls ein Block einen oder mehrere fehlerhafte Sektoren enthält, die Steuereinheit den gesamten Block als fehlerhaft definiert und diesen Block als einen nicht gelöschten Block behandelt, wodurch keine Daten darin geschrieben werden.
  17. Speichersystem nach Anspruch 14, wobei, falls ein Block einen oder mehrere fehlerhafte Sektoren enthält, die Steuereinheit diesen Block als einen gelöschten Block behandelt, wodurch die Steuereinheit immer noch fehlerfreie Sektoren in dem Block zum Speichern von Daten verwenden kann, und wobei das Speichersystem eine Tabelle zur Identifikation fehlerhafter Sektoren enthält, und die Steuereinheit dazu ausgelegt ist, zu prüfen, ob die nächste Sektorenadresse, zu der der Schreibezeiger zu bewegen ist, die Adresse eines fehlerhaften Sektors ist, und, falls es die Adresse eines fehlerhaften Sektors ist, den Schreibezeiger so zu steuern, daß er diesen fehlerhaften Sektor überspringt und sich zur nächsten Sektoradresse gemäß der vorbestimmten Reihenfolge, in der die Sektoren zu beschreiben sind, bewegt.
  18. Speichersystem nach einem der vorstehenden Ansprüche, wobei jeder Sektorenblock eine physikalische Blockadresse aufweist, die seine physikalische Position in dem Speicher definiert, und die physikalische Adresse jedes Speichersektors die physikalische Blockadresse des Blocks aufweist, in dem er angeordnet ist, und wobei die Steuereinheit dazu ausgelegt ist, eine Liste der physikalischen Blockadressen wenigstens einiger der als gelöscht behandelten Sektorenblöcke zusammenzustellen, die in einer Reihenfolge, in der sich der Schreibezeiger durch die Blöcke bewegen soll, aufgelistet sind, wobei die Liste durch die Steuereinheit genutzt wird, um schnell den nächsten Sektorenblock zu identifizieren, in den geschrieben wird, und das Speichersystem ferner eine temporäre Speichereinrichtung aufweist, in die die Liste durch die Steuereinheit zu speichern ist.
  19. Speichersystem nach einem der vorstehenden Ansprüche, wobei die Steuereinheit dazu ausgelegt ist, daß, wenn ein Sektorschreibebefehl durch die Steuereinheit von dem Host-Prozessor empfangen wird, der veraltete Daten ergibt, die zuvor in einen anderen Sektor geschrieben wurden, die Steuereinheit die Adresse des Sektors mit den nun veralteten Daten in einem temporären Speicher des Speichersystems speichert.
  20. Speichersystem nach Anspruch 19, wobei die Steuereinheit ferner dazu ausgelegt ist, falls ein von einem Benutzer erzeugter Sektorlöschbefehl von dem Host-Prozessor durch die Steuereinheit empfangen wird, die Steuereinheit den zu löschenden Sektor als veraltet markiert und die Adresse des Sektors in dem temporären Speicher speichert.
  21. Speichersystem nach Anspruch 19 oder 20, wobei die Steuereinheit dazu ausgelegt ist, nur einer fest vorgegebenen Anzahl von Blöcken zur gleichen Zeit, im folgenden als gegenwärtig veraltete Blöcke bezeichnet, erlaubt, einen oder mehrere Sektoren mit veralteten Daten zu enthalten, die durch den Schreibezeiger geschrieben wurden, und wenn alle Sektoren in dem gegenwärtig veralteten Block veraltete Daten enthalten, der gegenwärtig veraltete Block unverzüglich gelöscht wird.
  22. Speichersystem nach Anspruch 21, wobei die Steuereinheit dazu ausgelegt ist, wenn ein Sektor in einem anderem als dem gegenwärtig veralteten Block veraltete Daten enthalten soll: jegliche Daten in gültigen (nicht veralteten) Sektoren in einem solchen gegenwärtig veralteten Block einem anderen Block neu zuzuordnen und dann den gegenwärtig veralteten Block zu löschen; den Sektor in dem anderem als dem gegenwärtig veralteten Block als veraltet zu markieren; und den Block als neuen, gegenwärtig veralteten Block zu bezeichnen.
  23. Speichersystem nach Anspruch 21 oder 22, wobei die feste vorbestimmte Anzahl von gegenwärtig veralteten Blöcken eins ist.
  24. Speichersystem nach Anspruch 22, wobei der Block, in den die Steuereinheit die gültigen Daten neu zuordnet, der Block ist, in dem der Schreibezeiger gegenwärtig angeordnet ist.
  25. Speichersystem nach Anspruch 22, wobei das Speichersystem ferner einen weiteren Schreibezeiger aufweist, im folgenden als Neuzuordnungszeiger bezeichnet, um zu der physikalischen Adresse des Sektors zu zeigen, dem die gültigen Daten neu zugeordnet werden sollen, wobei der Neuzuordnungszeiger immer in einem anderen Sektorenblock als der Schreibezeiger ist.
  26. Speichersystem nach Anspruch 25, wobei das Speichersystem ferner einen weiteren Schreibezeiger, im folgenden als Systemschreibezeiger bezeichnet, aufweist, der zu der physikalischen Adresse des Sektors zeigt, in den Systemschreibedaten von dem Host geschrieben werden sollen, wobei der Systemschreibezeiger immer in einem anderen Block als der Schreibezeiger ist.
  27. Speichersystem nach Anspruch 26, wobei die Steuereinheit dazu ausgelegt ist, die Existenz wenigstens zweier Blöcke mit einem oder mehreren veralteten Sektoren gleichzeitig zu erlauben, wobei einer den gegenwärtig veraltete Block und der andere einen gegenwärtig veralteten Systemblock mit einem oder mehreren veralteten Systemdatensektoren darstellt, und falls einer der Systemdatensektoren neu zuzuordnen ist, um das Löschen des gegenwärtigen veralteten Systemblocks zu ermöglichen, die neu zugeordneten Systemdaten zu der Adresse gesendet werden, auf die der Systemschreibezeiger gegenwärtig zeigt.
  28. Speichersystem nach Anspruch 26, wobei das Speichersystem einen weiteren Schreibezeiger aufweist, im folgenden Systemneuzuordnungszeiger bezeichnet, um zu der physikalischen Adresse des Sektors zu zeigen, zu der gültige Systemdaten neu zugeordnet werden sollen, wobei der Systemneuzuordnungszeiger immer in einem anderen Sektorenblock als der Schreibezeiger und der Systemschreibezeiger ist.
  29. Speichersystem nach einem der Ansprüche 26 bis 28, wobei die Steuereinheit dazu ausgelegt ist, falls der gegenwärtig veraltete Block zu der Zeit, in der die Steuereinheit einen solchen gegenwärtig veralteten Block löschen muß, weil veraltete Daten gerade in einem anderen Block erzeugt wurden, einen der Schreibezeiger enthält, mit der Erzeugung eines neuen gegenwärtig veralteten Blocks fortzufahren, aber das Löschen des alten gegenwärtig veralteten Blocks, im folgenden als bestehender veralteter Block bezeichnet, aufzuschieben bis alle gelöschten Sektoren in dem bestehenden veralteten Block gefüllt sind und der Zeiger sich, wie durch die Steuereinheit definiert, zu dem nächsten gelöschten, zu verwendenden Block bewegt, und gleichzeitig alle gültigen (nicht veralteten) Daten in den bestehenden veralteten Block durch die Steuereinheit neu zugeordnet werden und der bestehende veraltete Block gelöscht wird.
  30. Speichersystem nach Anspruch 27, wobei die Steuereinheit dazu ausgelegt ist, in einem temporären Speicher des Speichersystems zugehörige Listen von logischen Sektoradressen zu speichern, die Sektoren in dem Speicher entsprechen, in die neu zugeordnete Daten durch den Neuzuordnungszeiger, im folgenden als Neuzuordnungssektorenliste bezeichnet, den Systemschreibezeiger, im folgenden als Schreibsystemsektorenliste bezeichnet, und den Systemneuzuordnungszeiger, im folgenden als Systemneuzuordnungssektorenliste nach letzter Aktualisierung der Sektorenzuordnungstabelle bezeichnet, geschrieben wurden, und die Steuereinheit dazu ausgelegt ist, in dem temporären Speicher entsprechende Listen der Reihenfolge von Blöcken, die durch den Neuzuordnungszeiger, den Systemschreibezeiger und den Systemneuzuordnungszeiger verwendet wurden, zu speichern, im folgenden als Neuzuordnungsblockliste, Schreibsystemblockliste und Systemneuzuordnungsblockliste (SRBL) bezeichnet.
  31. Speichersystem nach einem der vorstehenden Ansprüche, wobei zusätzlich zum Schreiben von Datenstrukturen von dem Host-Prozessor in den Speicher die Steuereinheit auch als Steuerinformationen gekennzeichnete Daten erzeugt und in den Speicher schreibt, und die Steuereinheit dazu ausgelegt ist, solche Steuerinformationen in einem oder mehreren unterschiedlichen Steuerblöcken der Blöcke von Speichersektoren in jene Blöcke zu schreiben, in die von dem Host-Prozessor empfangene Datenstrukturen geschrieben sind.
  32. Speichersystem nach Anspruch 31, wobei die Steuereinheit dazu ausgelegt ist, in wenigstens einem der Steuerblöcke eine Liste der Blockadressen aller Sektorzuordnungs-Tabellenblöcke zu speichern.
  33. Speichersystem nach Anspruch 31 oder 32, wobei die Steuereinheit dazu ausgelegt ist, die Blockadressen des mindestens einen Steuerblocks in einem zugewiesenen Boot-Block des Speichers zu speichern, wobei dieser zugewiesene Boot-Block der erste Block des Sektors in dem Speicher ist, der keinen fehlerhaften Sektor enthält.
  34. Speichersystem nach Anspruch 32, wenn abhängig von Anspruch 1 oder 7, wobei die Liste aller Sektorzuordnungs-Tabellenblockadressen in Form mehrerer Listenabschnitte vorliegt und jeder Abschnitt die Blockadressen einer Gruppe logisch fortlaufender Sektorzuordnungs-Tabellenblöcke und jeglicher zugehöriger Zusatzsektorzuordnungs-Tabellenblöcke enthält.
  35. Speichersystem nach einem der Ansprüche 1 und 8, wobei die Steuereinheit dazu ausgelegt ist, in einen temporären Speicher des Speichersystems eine Schreibsektorliste von logischen Sektoradressen für Datenstrukturen zu speichern, die durch den Schreibezeiger seit der letzten Aktualisierung des SAT geschrieben wurden.
  36. Speichersystem nach Anspruch 35, wobei die Steuereinheit dazu ausgelegt ist, in dem temporären Speicher auch die Reihenfolge zu speichern, in der die Blöcke durch den Schreibezeiger zum Schreiben der Daten seit der letzten Aktualisierung der Sektorzuordnungstabelle verwendet wurden, wobei die Reihenfolge in Form einer Schreibblockliste der Blockadressen der Blöcke gespeichert ist, in der die aktualisierten Sektoren angeordnet sind, deren Adressen in der Schreibsektorliste abgelegt sind.
  37. Speicher nach Anspruch 36, wobei die Schreibsektorliste eine vorbestimmte Größe aufweist, und sobald die Schreibsektorliste voll ist, wenigstens ein Sektorzuordnungs-Tabellenblock oder ein Zusatzsektorzuordnungs-Tabellenblock aktualisiert wird und die Schreibsektorliste und die Schreibblockliste geleert werden.
  38. Speichersystem nach Anspruch 36, wobei die Steuereinheit eine physikalische Startsektoradresse und die Verbindungen zwischen Blöcken, die Sektoren enthalten, in die Daten durch die Steuereinheit seit der letzten Aktualisierung einer Sektorzuordnungstabelle oder eines Zusatzsektorzuordnungs-Tabellenblocks geschrieben wurden, in einen solchen Steuerblock des Festkörperspeichers speichert.
  39. Speichersystem nach einem der vorstehenden Ansprüche, wobei jeder Sektor aus einer einzelnen Speicher-"Seite" besteht, nämlich einer Reihe von Speicherzellen in einem solchen Block von Speichersektoren.
  40. Speichersystem nach einem der vorstehenden Ansprüche, wobei die Steuereinheit dazu ausgelegt ist, Daten in die Speichersektoren in gleichmäßig bemessenen Datensegmenten zu schreiben und aus diesen zu lesen.
  41. Speichersystem nach Anspruch 40, wobei alle Speichersektoren die gleiche Größe aufweisen und jedes Datensegment genauso groß ist wie ein solcher Speichersektor.
  42. Speichersystem nach einem der vorstehenden Ansprüche, ferner mit einem temporären Cache-Speicher, in dem die Steuereinheit dazu ausgelegt ist, eine Gruppe von fortlaufenden Sektorzuordnungs-Tabelleneinträgen einschließlich der Sektorzuordnungs-Tabelleneinträge zu speichern, auf die von der Sektor-Zuordnungstabelle durch die Steuereinheit als letztes zugegriffen wurde.
  43. Speichersystem nach Anspruch 41, wenn abhängig von Anspruch 7, wobei die Steuereinheit dazu ausgelegt ist, in dem temporären Cache-Speicher eine Liste von physikalischen Adressen aller Zusatzsektorzuordnungs-Tabellenblöcke und der Sektorzuordnungs-Tabellenblöcke, die mit diesen verbunden sind, zu erzeugen, die jedesmal aktualisiert wird, wenn eine Sektorzuordnungs-Tabellensektorschreibeoperation durchgeführt wird.
  44. Speichersystem nach einem der vorstehenden Ansprüche, wobei der Festkörperspeicher einen einzelnen Speicherarray in Form eines einzelnen Speicherchips aufweist.
  45. Speichersystem nach einem der Ansprüche 1 bis 43, wobei der Festkörperspeicher einen durch mehrere Speicherchips gebildeten Speicherarray aufweist.
  46. Speichersystem nach einem der Ansprüche 1 bis 43, wobei der Festkörperspeicher mehrere Speicherarrays in Form mehrerer Speicherchips aufweist, und die Steuereinheit dazu ausgelegt ist, die Speichersektoren in den mehreren Speicherchips in einer Mehrzahl von virtuellen Blöcken zu bilden, wobei jeder virtuelle Block einen löschbaren Block von Speichersektoren von jedem Speicherchip aufweist, und die virtuellen Blöcke in solche zu sortieren, die als gelöscht behandelt werden, und solche, die als nicht gelöscht behandelt werden.
  47. Speichersystem nach Anspruch 46, wobei die Steuereinheit dazu ausgelegt ist, eine Liste von virtuellen Blöcken zusammenzustellen, die als gelöscht behandelt werden, und diese in dem temporären Speicher in dem Speichersystem zu speichern, und den Schreibezeiger zu steuern, so daß er sich von einem Chip zum anderen für jede aufeinanderfolgende Sektorschreibeoperation bewegt, beginnend an einem Sektor in einem löschbaren Block des virtuellen Blocks und sich darauffolgend zu einem Sektor in jedem der anderen löschbaren Blöcke in dem virtuellen Block bewegend, bis ein Sektor in jedem löschbaren Block des virtuellen Blocks beschrieben ist, und sich dann zurück zu dem Chip bewegend, in dem der erste Sektor beschrieben wurde und in ähnlicher Weise fortfahrend, um einen anderen Sektor in jedem löschbaren Block des virtuellen Blocks zu füllen, usw. bis der virtuelle Block voll mit Daten ist, und sich dann der Schreibezeiger zu dem nächsten virtuellen Block in der Liste von virtuellen Blöcken, die als gelöscht behandelt werden, bewegt, und diesen nächsten virtuellen Block auf ähnliche Weise füllt.
  48. Speichersystem nach Anspruch 47, wobei die Steuereinheit dazu ausgelegt ist, daß sie für alle n aufeinanderfolgenden Sektorschreibeoperationen einen Mehrfach-Sektorschreibebefehl ausführt, der vom Host-Prozessor empfangen wurde, wobei n kleiner oder gleich der Anzahl von Festkörper-Speicherchips in dem Speichersystem ist, wobei die Steuereinheit im wesentlichen gleichzeitig in einen Sektor in jedem der n Chips schreibt.
  49. Speichersystem nach Anspruch 47 oder 48, wobei die Steuereinheit dazu ausgelegt ist, die Löschung irgendeines der virtuellen Blöcke durch gleichzeitiges Löschen aller löschbaren Blöcke in dem virtuellen Block auszuführen.
  50. Verfahren zum Steuern des Lesens und Schreibens von Datenstrukturen aus einem bzw. in einen Festkörperspeicher (5) mit nicht-flüchtigen Speichersektoren (1, 2, 3), die einzeln adressierbar und in löschbaren Sektorenblöcken (4) angeordnet sind, wobei jeder Sektor eine physikalische Adresse aufweist, die seine physikalische Position in dem Speicher definiert, und in dem Verfahren: die Sektorenblöcke in Blöcke, die als gelöscht behandelt werden, und Blöcke, die als nicht gelöscht behandelt werden, sortiert werden; ein Schreibezeiger vorgesehen wird, der auf die physikalische Adresse eines Sektors zeigt, in den die Daten von einem Host-Prozessor zu schreiben sind, wobei der Schreibezeiger so gesteuert wird, daß er sich in einer vorbestimmten Reihenfolge durch die physikalischen Adressen der Speichersektoren eines Blocks bewegt, der als gelöscht behandelt wird, und sich, wenn der Block gefüllt wurde, zu einem anderen gelöschten Block bewegt, und wenn ein Sektor-Schreibebefehl von dem Host-Prozessor empfangen wird, eine von dem Host-Prozessor empfangene logische Adresse in eine physikalische Adresse übersetzt wird, in die Daten geschrieben werden, indem der logischen Adresse die physikalische Adresse zugeordnet wird, auf die der Schreibezeiger gegenwärtig zeigt; eine Sektorzuordnungstabelle von logischen Adressen der Sektoren mit den zugehörigen physikalischen Adressen der Sektoren, die ihnen durch eine Steuereinheit (8) zugeordnet wurden, in dem nicht-flüchtigen Festkörperspeicher gespeichert werden; und die Sektorzuordnungstabelle weniger häufig aktualisiert wird als Speichersektoren mit Daten von dem Host-Prozessor beschrieben werden; dadurch gekennzeichnet, daß wenigstens ein zusätzlicher Sektorenblock vorgesehen ist, der modifizierte Versionen einzelner 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.
DE60019903T 1999-02-17 2000-02-17 Speichersystem Expired - Lifetime DE60019903T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB9903490 1999-02-17
GBGB9903490.2A GB9903490D0 (en) 1999-02-17 1999-02-17 Memory system
PCT/GB2000/000550 WO2000049488A1 (en) 1999-02-17 2000-02-17 Memory system

Publications (2)

Publication Number Publication Date
DE60019903D1 DE60019903D1 (de) 2005-06-09
DE60019903T2 true DE60019903T2 (de) 2006-03-30

Family

ID=10847858

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60019903T Expired - Lifetime DE60019903T2 (de) 1999-02-17 2000-02-17 Speichersystem

Country Status (8)

Country Link
US (1) US6725321B1 (de)
EP (1) EP1157328B1 (de)
JP (1) JP5011498B2 (de)
KR (1) KR100644805B1 (de)
DE (1) DE60019903T2 (de)
GB (1) GB9903490D0 (de)
TW (1) TWI244092B (de)
WO (1) WO2000049488A1 (de)

Families Citing this family (251)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6978342B1 (en) 1995-07-31 2005-12-20 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
US8171203B2 (en) 1995-07-31 2012-05-01 Micron Technology, Inc. Faster write operations to nonvolatile memory using FSInfo sector manipulation
US5845313A (en) 1995-07-31 1998-12-01 Lexar Direct logical block addressing flash memory mass storage architecture
US6728851B1 (en) * 1995-07-31 2004-04-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US6148354A (en) 1999-04-05 2000-11-14 M-Systems Flash Disk Pioneers Ltd. Architecture for a universal serial bus-based PC flash disk
JP3524428B2 (ja) * 1999-04-20 2004-05-10 東京エレクトロンデバイス株式会社 記憶装置、記憶システム、メモリ管理方法及び記録媒体
KR100544175B1 (ko) * 1999-05-08 2006-01-23 삼성전자주식회사 링킹 타입 정보를 저장하는 기록 매체와 결함 영역 처리 방법
US7966462B2 (en) * 1999-08-04 2011-06-21 Super Talent Electronics, Inc. Multi-channel flash module with plane-interleaved sequential ECC writes and background recycling to restricted-write flash chips
US7934074B2 (en) * 1999-08-04 2011-04-26 Super Talent Electronics Flash module with plane-interleaved sequential writes to restricted-write flash chips
US7702831B2 (en) * 2000-01-06 2010-04-20 Super Talent Electronics, Inc. Flash memory controller for electronic data flash card
MXPA02004748A (es) * 1999-11-10 2004-01-19 Thomson Licensing Sa Un metodo para la recuperacion de desastre para un medio de disco de re-escritrua.
US20060161725A1 (en) * 2005-01-20 2006-07-20 Lee Charles C Multiple function flash memory system
US6426893B1 (en) 2000-02-17 2002-07-30 Sandisk Corporation Flash eeprom system with simultaneous multiple data sector programming and storage of physical block characteristics in other designated blocks
US6654847B1 (en) * 2000-06-30 2003-11-25 Micron Technology, Inc. Top/bottom symmetrical protection scheme for flash
US7167944B1 (en) 2000-07-21 2007-01-23 Lexar Media, Inc. Block management for mass storage
US6684289B1 (en) * 2000-11-22 2004-01-27 Sandisk Corporation Techniques for operating non-volatile memory systems with data sectors having different sizes than the sizes of the pages and/or blocks of the memory
US7072981B1 (en) * 2000-12-21 2006-07-04 Cisco Technology, Inc. Preallocation of client network address translation addresses for client-server networks
US7089328B1 (en) * 2000-12-29 2006-08-08 Cisco Technology, Inc. Method allocation scheme for maintaining server load balancers services in a high throughput environment
US6763424B2 (en) 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
GB0123416D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
US6678785B2 (en) * 2001-09-28 2004-01-13 M-Systems Flash Disk Pioneers Ltd. Flash management system using only sequential write
GB0123421D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Power management system
GB0123417D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Improved data processing
GB0123410D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Memory system for data storage and retrieval
GB0123415D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
JP3981268B2 (ja) * 2001-12-28 2007-09-26 日本電産サンキョー株式会社 不揮発性メモリ及びそのデータ更新方法
US7231643B1 (en) 2002-02-22 2007-06-12 Lexar Media, Inc. Image rescue system including direct communication between an application program and a device driver
US7533214B2 (en) 2002-02-27 2009-05-12 Microsoft Corporation Open architecture flash driver
US6901499B2 (en) 2002-02-27 2005-05-31 Microsoft Corp. System and method for tracking data stored in a flash memory device
US7065531B2 (en) * 2002-03-12 2006-06-20 Hewlett-Packard Development Company, L.P. Combining computer programs
WO2004001605A1 (en) * 2002-06-19 2003-12-31 Tokyo Electron Device Limited Memory device, memory managing method and program
DE10227255B4 (de) * 2002-06-19 2008-06-26 Hyperstone Gmbh Verfahren zur Wiederherstellung von Verwaltungsdatensätzen eines blockweise löschbaren Speichers
DE10256509B4 (de) * 2002-06-19 2008-06-12 Hyperstone Gmbh Verfahren zum Adressieren von blockweise löschbaren Speichern
WO2004001606A1 (en) * 2002-06-20 2003-12-31 Tokyo Electron Device Limited Memory device, memory managing method and program
US6970969B2 (en) * 2002-08-29 2005-11-29 Micron Technology, Inc. Multiple segment data object management
US7130979B2 (en) * 2002-08-29 2006-10-31 Micron Technology, Inc. Dynamic volume management
US6968439B2 (en) * 2002-08-29 2005-11-22 Micron Technology, Inc. Single segment data object management
US20040049628A1 (en) * 2002-09-10 2004-03-11 Fong-Long Lin Multi-tasking non-volatile memory subsystem
US20040128464A1 (en) * 2002-12-30 2004-07-01 Lee Micheil J. Memory reclamation
US20040128414A1 (en) * 2002-12-30 2004-07-01 Rudelic John C. Using system memory as a write buffer for a non-volatile memory
FI117489B (fi) 2003-02-07 2006-10-31 Nokia Corp Menetelmä muistikortin osoittamiseksi, muistikorttia käyttävä järjestelmä, ja muistikortti
JP2004265162A (ja) * 2003-03-03 2004-09-24 Renesas Technology Corp 記憶装置およびアドレス管理方法
TWI220474B (en) * 2003-03-12 2004-08-21 Glovic Electronics Corp Physical page allocation method of flash memory
DE10319271A1 (de) * 2003-04-29 2004-11-25 Infineon Technologies Ag Speicher-Schaltungsanordnung und Verfahren zur Herstellung
US7664987B2 (en) 2003-05-25 2010-02-16 Sandisk Il Ltd. Flash memory device with fast reading rate
KR100546348B1 (ko) * 2003-07-23 2006-01-26 삼성전자주식회사 플래시 메모리 시스템 및 그 데이터 저장 방법
US7752380B2 (en) * 2003-07-31 2010-07-06 Sandisk Il Ltd SDRAM memory device with an embedded NAND flash controller
JP2005085011A (ja) * 2003-09-09 2005-03-31 Renesas Technology Corp 不揮発性メモリ制御装置
JP2005108304A (ja) * 2003-09-29 2005-04-21 Toshiba Corp 半導体記憶装置及びその制御方法
US7173852B2 (en) * 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
US7073016B2 (en) * 2003-10-09 2006-07-04 Micron Technology, Inc. Random access interface in a serial memory device
DE10349595B3 (de) 2003-10-24 2004-12-09 Hyperstone Ag Verfahren zum Schreiben von Speichersektoren in einem blockweise löschbaren Speicher
JP4567966B2 (ja) 2003-12-22 2010-10-27 株式会社東芝 エミュレーションシステムおよびエミュレーション方法
EP1758027B1 (de) 2003-12-30 2010-07-14 SanDisk Corporation Nichtflüchtiger Speicher und Verfahren mit Steuerdatenverwaltung
US7433993B2 (en) * 2003-12-30 2008-10-07 San Disk Corportion Adaptive metablocks
US20050144363A1 (en) * 2003-12-30 2005-06-30 Sinclair Alan W. Data boundary management
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US20050144516A1 (en) 2003-12-30 2005-06-30 Gonzalez Carlos J. Adaptive deterministic grouping of blocks into multi-block units
US7383375B2 (en) 2003-12-30 2008-06-03 Sandisk Corporation Data run programming
US7173863B2 (en) * 2004-03-08 2007-02-06 Sandisk Corporation Flash controller cache architecture
US7484070B1 (en) 2004-01-09 2009-01-27 Conexant Systems, Inc. Selective memory block remapping
EP2506486A1 (de) * 2004-02-23 2012-10-03 Lexar Media, Inc. Sicherer kompakter Flash
US20080147964A1 (en) * 2004-02-26 2008-06-19 Chow David Q Using various flash memory cells to build usb data flash cards with multiple partitions and autorun function
US7725628B1 (en) 2004-04-20 2010-05-25 Lexar Media, Inc. Direct secondary device interface by a host
US7370166B1 (en) 2004-04-30 2008-05-06 Lexar Media, Inc. Secure portable storage device
US7490283B2 (en) 2004-05-13 2009-02-10 Sandisk Corporation Pipelined data relocation and improved chip architectures
US7194596B2 (en) * 2004-06-09 2007-03-20 Simpletech Global Limited Method of efficient data management with flash storage system
US7395384B2 (en) * 2004-07-21 2008-07-01 Sandisk Corproation Method and apparatus for maintaining data on non-volatile memory systems
US8607016B2 (en) 2004-07-21 2013-12-10 Sandisk Technologies Inc. FAT analysis for optimized sequential cluster management
US7594063B1 (en) 2004-08-27 2009-09-22 Lexar Media, Inc. Storage capacity status
US7464306B1 (en) * 2004-08-27 2008-12-09 Lexar Media, Inc. Status of overall health of nonvolatile memory
WO2006024328A1 (de) * 2004-09-02 2006-03-09 Hyperstone Ag Verfahren zur verwaltung von speicherinformationen
US7509526B2 (en) * 2004-09-24 2009-03-24 Seiko Epson Corporation Method of correcting NAND memory blocks and to a printing device employing the method
US7490197B2 (en) 2004-10-21 2009-02-10 Microsoft Corporation Using external memory devices to improve system performance
JP2008033379A (ja) * 2004-11-10 2008-02-14 Matsushita Electric Ind Co Ltd 不揮発性記憶装置
JP2006146460A (ja) * 2004-11-18 2006-06-08 Sony Corp 通信システム、記憶装置、並びに制御装置
US7120051B2 (en) 2004-12-14 2006-10-10 Sandisk Corporation Pipelined programming of non-volatile memories using early data
US7386655B2 (en) * 2004-12-16 2008-06-10 Sandisk Corporation Non-volatile memory and method with improved indexing for scratch pad and update blocks
US7412560B2 (en) * 2004-12-16 2008-08-12 Sandisk Corporation Non-volatile memory and method with multi-stream updating
US7315916B2 (en) * 2004-12-16 2008-01-01 Sandisk Corporation Scratch pad block
US7366826B2 (en) * 2004-12-16 2008-04-29 Sandisk Corporation Non-volatile memory and method with multi-stream update tracking
US7882299B2 (en) * 2004-12-21 2011-02-01 Sandisk Corporation System and method for use of on-chip non-volatile memory write cache
KR100876084B1 (ko) * 2007-02-13 2008-12-26 삼성전자주식회사 플래시 저장 장치로 삭제 정보를 전달할 수 있는 컴퓨팅시스템
US7409473B2 (en) 2004-12-21 2008-08-05 Sandisk Corporation Off-chip data relocation
US7849381B2 (en) 2004-12-21 2010-12-07 Sandisk Corporation Method for copying data in reprogrammable non-volatile memory
US8667249B2 (en) * 2004-12-22 2014-03-04 Intel Corporation Systems and methods exchanging data between processors through concurrent shared memory
CN101091223B (zh) * 2004-12-24 2011-06-08 斯班逊有限公司 施加偏压至储存器件的方法与装置
US7212440B2 (en) 2004-12-30 2007-05-01 Sandisk Corporation On-chip data grouping and alignment
US7315917B2 (en) 2005-01-20 2008-01-01 Sandisk Corporation Scheduling of housekeeping operations in flash memory systems
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
EP1851771A2 (de) * 2005-02-11 2007-11-07 M-Systems Flash Disk Pioneers Ltd. Nand-flash-speichersystemarchitektur
US7627712B2 (en) * 2005-03-22 2009-12-01 Sigmatel, Inc. Method and system for managing multi-plane memory devices
KR100666174B1 (ko) * 2005-04-27 2007-01-09 삼성전자주식회사 3-레벨 불휘발성 반도체 메모리 장치 및 이에 대한구동방법
US7788555B2 (en) * 2005-07-22 2010-08-31 Broadcom Corporation Using fractional sectors for mapping defects in disk drives
US7669003B2 (en) 2005-08-03 2010-02-23 Sandisk Corporation Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7949845B2 (en) 2005-08-03 2011-05-24 Sandisk Corporation Indexing of file data in reprogrammable non-volatile memories that directly store data files
US7409489B2 (en) 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
TWI295771B (en) * 2005-08-08 2008-04-11 Rdc Semiconductor Co Ltd Faulty storage area self markup access control method and system
KR100739722B1 (ko) * 2005-08-20 2007-07-13 삼성전자주식회사 플래시 메모리 관리 방법 및 플래시 메모리 시스템
US7512864B2 (en) * 2005-09-30 2009-03-31 Josef Zeevi System and method of accessing non-volatile computer memory
US20070083697A1 (en) * 2005-10-07 2007-04-12 Microsoft Corporation Flash memory management
US7509471B2 (en) * 2005-10-27 2009-03-24 Sandisk Corporation Methods for adaptively handling data writes in non-volatile memories
US7631162B2 (en) 2005-10-27 2009-12-08 Sandisck Corporation Non-volatile memory with adaptive handling of data writes
US7877540B2 (en) 2005-12-13 2011-01-25 Sandisk Corporation Logically-addressed file storage methods
JP2007164929A (ja) * 2005-12-16 2007-06-28 Fujitsu Ltd 記憶媒体管理装置、記憶媒体管理プログラム、記憶媒体管理方法
US20070143560A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with memory allocation for a directly mapped file storage system
US20070143566A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with data alignment in a directly mapped file storage system
US20070143567A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Methods for data alignment in non-volatile memories with a directly mapped file storage system
WO2007073536A2 (en) * 2005-12-21 2007-06-28 Sandisk Corporation Non-volatile memories and methods with memory allocation for a directly mapped file storage system
US20070156998A1 (en) * 2005-12-21 2007-07-05 Gorobets Sergey A Methods for memory allocation in non-volatile memories with a directly mapped file storage system
WO2007072317A2 (en) * 2005-12-21 2007-06-28 Nxp B.V. Non-volatile memory with block erasable locations
EP1966699A2 (de) * 2005-12-22 2008-09-10 Nxp B.V. Speicher mit blocklöschbaren speicherstellen und verknüpfte kette von zeigern zum finden von blöcken mit zeigerinformationen
US7543116B2 (en) * 2006-01-30 2009-06-02 International Business Machines Corporation Data processing system, cache system and method for handling a flush operation in a data processing system having multiple coherency domains
KR100776112B1 (ko) * 2006-02-15 2007-11-15 삼성전자주식회사 휴대단말기의 부팅 시간 단축방법
JP2007241539A (ja) * 2006-03-07 2007-09-20 Hitachi Systems & Services Ltd 半導体フラッシュメモリにおけるデータ管理及び制御システムと半導体フラッシュメモリ収容装置
US7562180B2 (en) * 2006-03-28 2009-07-14 Nokia Corporation Method and device for reduced read latency of non-volatile memory
TWM304711U (en) * 2006-04-26 2007-01-11 Genesys Logic Inc Flash memory data access reliability enhancing device
US8060718B2 (en) * 2006-06-20 2011-11-15 International Business Machines Updating a memory to maintain even wear
JP2008004196A (ja) * 2006-06-23 2008-01-10 Toppan Printing Co Ltd 半導体メモリ装置
KR100758301B1 (ko) * 2006-08-04 2007-09-12 삼성전자주식회사 메모리 카드 및 그것의 데이터 저장 방법
KR20080017982A (ko) * 2006-08-23 2008-02-27 삼성전자주식회사 플래시 메모리 시스템 및 그 프로그램 방법
US7779056B2 (en) 2006-09-15 2010-08-17 Sandisk Corporation Managing a pool of update memory blocks based on each block's activity and data order
US7774392B2 (en) 2006-09-15 2010-08-10 Sandisk Corporation Non-volatile memory with management of a pool of update memory blocks based on each block's activity and data order
US7949846B2 (en) * 2006-11-30 2011-05-24 Teradata Us, Inc. Map shuffle-allocation map protection without extra I/O'S using minimal extra disk space
US8074011B2 (en) * 2006-12-06 2011-12-06 Fusion-Io, Inc. Apparatus, system, and method for storage space recovery after reaching a read count limit
US9116823B2 (en) 2006-12-06 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for adaptive error-correction coding
US9495241B2 (en) 2006-12-06 2016-11-15 Longitude Enterprise Flash S.A.R.L. Systems and methods for adaptive data storage
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
KR101490327B1 (ko) 2006-12-06 2015-02-05 퓨전-아이오, 인크. 뱅크 인터리브를 이용한 솔리드-스테이트 스토리지의 명령 관리 장치, 시스템 및 방법
US7515500B2 (en) * 2006-12-20 2009-04-07 Nokia Corporation Memory device performance enhancement through pre-erase mechanism
KR100877609B1 (ko) * 2007-01-29 2009-01-09 삼성전자주식회사 버퍼 메모리의 플래그 셀 어레이를 이용하여 데이터 오류 정정을 수행하는 반도체 메모리 시스템 및 그 구동 방법
KR100869675B1 (ko) * 2007-02-05 2008-11-21 지인정보기술 주식회사 디스크립터 배열을 이용한 플래시 메모리 제어 시스템 및방법
US7716230B2 (en) * 2007-02-07 2010-05-11 International Business Machines Corporation Multi-dimensional serial containment process
US8370715B2 (en) * 2007-04-12 2013-02-05 International Business Machines Corporation Error checking addressable blocks in storage
US7689762B2 (en) * 2007-05-03 2010-03-30 Atmel Corporation Storage device wear leveling
EP2000913A1 (de) * 2007-06-08 2008-12-10 Axalto SA Verfahren zur Verwaltung der Flashspeicher-Zuweisung in einem elektronischen Token
US9396103B2 (en) * 2007-06-08 2016-07-19 Sandisk Technologies Llc Method and system for storage address re-mapping for a memory device
US7630246B2 (en) * 2007-06-18 2009-12-08 Micron Technology, Inc. Programming rate identification and control in a solid state memory
TWI578330B (zh) * 2007-10-09 2017-04-11 A-Data Technology Co Ltd Solid state semiconductor storage device with temperature control function and control method thereof
KR101391881B1 (ko) * 2007-10-23 2014-05-07 삼성전자주식회사 멀티-비트 플래시 메모리 장치 및 그것의 프로그램 및 읽기방법
US7836226B2 (en) 2007-12-06 2010-11-16 Fusion-Io, Inc. Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
US8195912B2 (en) * 2007-12-06 2012-06-05 Fusion-io, Inc Apparatus, system, and method for efficient mapping of virtual and physical addresses
US8417893B2 (en) * 2008-02-04 2013-04-09 Apple Inc. Memory mapping techniques
JP4729062B2 (ja) * 2008-03-07 2011-07-20 株式会社東芝 メモリシステム
US20090271562A1 (en) * 2008-04-25 2009-10-29 Sinclair Alan W Method and system for storage address re-mapping for a multi-bank memory device
US8140739B2 (en) 2008-08-08 2012-03-20 Imation Corp. Flash memory based storage devices utilizing magnetoresistive random access memory (MRAM) to store files having logical block addresses stored in a write frequency file buffer table
KR101038167B1 (ko) * 2008-09-09 2011-05-31 가부시끼가이샤 도시바 프로세서로부터 메모리로의 액세스를 관리하는 메모리 관리 장치를 포함하는 정보 처리 장치 및 메모리 관리 방법
US9032151B2 (en) 2008-09-15 2015-05-12 Microsoft Technology Licensing, Llc Method and system for ensuring reliability of cache data and metadata subsequent to a reboot
TWI380310B (en) * 2008-09-17 2012-12-21 Incomm Technologies Co Ltd Operating method of memory card
US7953774B2 (en) 2008-09-19 2011-05-31 Microsoft Corporation Aggregation of write traffic to a data store
WO2010043245A1 (de) * 2008-10-13 2010-04-22 Hyperstone Gmbh Verfahren zur sicherung eines ankerblocks in flashspeichern
TWI413984B (zh) * 2008-10-16 2013-11-01 Silicon Motion Inc 快閃記憶體裝置以及資料更新方法
US9063874B2 (en) 2008-11-10 2015-06-23 SanDisk Technologies, Inc. Apparatus, system, and method for wear management
US9170897B2 (en) 2012-05-29 2015-10-27 SanDisk Technologies, Inc. Apparatus, system, and method for managing solid-state storage reliability
WO2010054410A2 (en) * 2008-11-10 2010-05-14 Fusion Multisystems, Inc. (Dba Fusion-Io) Apparatus, system, and method for predicting failures in solid-state storage
US8244960B2 (en) 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US8040744B2 (en) 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US8700840B2 (en) 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
WO2010078222A1 (en) 2009-01-05 2010-07-08 Sandisk Corporation Non-volatile memory and method with write cache partitioning
US8094500B2 (en) 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
US8412880B2 (en) * 2009-01-08 2013-04-02 Micron Technology, Inc. Memory system controller to manage wear leveling across a plurality of storage nodes
US8924661B1 (en) * 2009-01-18 2014-12-30 Apple Inc. Memory system including a controller and processors associated with memory devices
JP5384965B2 (ja) * 2009-02-23 2014-01-08 サトーホールディングス株式会社 プリンタ装置
TWI419169B (zh) * 2009-04-10 2013-12-11 Phison Electronics Corp 用於快閃記憶體的資料存取方法及其儲存系統與控制器
US8341501B2 (en) 2009-04-30 2012-12-25 International Business Machines Corporation Adaptive endurance coding of non-volatile memories
US20110002169A1 (en) 2009-07-06 2011-01-06 Yan Li Bad Column Management with Bit Information in Non-Volatile Memory Systems
CN102498475A (zh) * 2009-07-10 2012-06-13 柰米闪芯积体电路有限公司 高速高密度以nand为基础的双晶体管-nor闪存的新构成
TWI421871B (zh) * 2009-11-27 2014-01-01 Macronix Int Co Ltd 定址一記憶積體電路之方法與裝置
US8176234B2 (en) * 2009-12-04 2012-05-08 International Business Machines Corporation Multi-write coding of non-volatile memories
US8176235B2 (en) * 2009-12-04 2012-05-08 International Business Machines Corporation Non-volatile memories with enhanced write performance and endurance
US8473669B2 (en) * 2009-12-07 2013-06-25 Sandisk Technologies Inc. Method and system for concurrent background and foreground operations in a non-volatile memory array
US8468294B2 (en) 2009-12-18 2013-06-18 Sandisk Technologies Inc. Non-volatile memory with multi-gear control using on-chip folding of data
US20110153912A1 (en) 2009-12-18 2011-06-23 Sergey Anatolievich Gorobets Maintaining Updates of Multi-Level Non-Volatile Memory in Binary Non-Volatile Memory
US8144512B2 (en) 2009-12-18 2012-03-27 Sandisk Technologies Inc. Data transfer flows for on-chip folding
FR2954572B1 (fr) * 2009-12-23 2020-04-17 Thales Procede de gestion de donnees tournantes.
FR2954538B1 (fr) * 2009-12-23 2020-04-17 Thales Securisation de l'effacement d'une memoire de type flashprom.
US8429391B2 (en) * 2010-04-16 2013-04-23 Micron Technology, Inc. Boot partitions in memory devices and systems
US8543757B2 (en) 2010-06-23 2013-09-24 Sandisk Technologies Inc. Techniques of maintaining logical to physical mapping information in non-volatile memory systems
US8417876B2 (en) 2010-06-23 2013-04-09 Sandisk Technologies Inc. Use of guard bands and phased maintenance operations to avoid exceeding maximum latency requirements in non-volatile memory systems
US8467249B2 (en) * 2010-07-06 2013-06-18 Densbits Technologies Ltd. Systems and methods for storing, retrieving, and adjusting read thresholds in flash memory storage system
US8832507B2 (en) * 2010-08-23 2014-09-09 Apple Inc. Systems and methods for generating dynamic super blocks
US8452911B2 (en) 2010-09-30 2013-05-28 Sandisk Technologies Inc. Synchronized maintenance operations in a multi-bank storage system
US8769374B2 (en) 2010-10-13 2014-07-01 International Business Machines Corporation Multi-write endurance and error control coding of non-volatile memories
WO2012083308A2 (en) 2010-12-17 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
JP5221699B2 (ja) * 2011-03-23 2013-06-26 株式会社東芝 半導体記憶装置
US9342446B2 (en) 2011-03-29 2016-05-17 SanDisk Technologies, Inc. Non-volatile memory system allowing reverse eviction of data updates to non-volatile binary cache
US9177609B2 (en) * 2011-06-30 2015-11-03 Sandisk Technologies Inc. Smart bridge for memory core
JP5677336B2 (ja) * 2011-08-01 2015-02-25 株式会社東芝 メモリ・デバイス
US9009436B2 (en) 2011-08-09 2015-04-14 SanDisk Technologies, Inc. Flushed data alignment with physical structures
CN102298555B (zh) * 2011-08-22 2016-04-27 宜兴市华星特种陶瓷科技有限公司 基于nand技术的模块化闪存管理系统
US8874935B2 (en) 2011-08-30 2014-10-28 Microsoft Corporation Sector map-based rapid data encryption policy compliance
US9208070B2 (en) 2011-12-20 2015-12-08 Sandisk Technologies Inc. Wear leveling of multiple memory devices
US8762627B2 (en) 2011-12-21 2014-06-24 Sandisk Technologies Inc. Memory logical defragmentation during garbage collection
US10019353B2 (en) 2012-03-02 2018-07-10 Longitude Enterprise Flash S.A.R.L. Systems and methods for referencing data on a storage medium
US8842473B2 (en) 2012-03-15 2014-09-23 Sandisk Technologies Inc. Techniques for accessing column selecting shift register with skipped entries in non-volatile memories
US8719320B1 (en) 2012-03-29 2014-05-06 Amazon Technologies, Inc. Server-side, variable drive health determination
US9792192B1 (en) 2012-03-29 2017-10-17 Amazon Technologies, Inc. Client-side, variable drive health determination
US8972799B1 (en) 2012-03-29 2015-03-03 Amazon Technologies, Inc. Variable drive diagnostics
US9037921B1 (en) * 2012-03-29 2015-05-19 Amazon Technologies, Inc. Variable drive health determination and data placement
US9076506B2 (en) 2012-09-28 2015-07-07 Sandisk Technologies Inc. Variable rate parallel to serial shift register
US8897080B2 (en) 2012-09-28 2014-11-25 Sandisk Technologies Inc. Variable rate serial to parallel shift register
US9490035B2 (en) 2012-09-28 2016-11-08 SanDisk Technologies, Inc. Centralized variable rate serializer and deserializer for bad column management
US9348746B2 (en) 2012-12-31 2016-05-24 Sandisk Technologies Method and system for managing block reclaim operations in a multi-layer memory
US9336133B2 (en) 2012-12-31 2016-05-10 Sandisk Technologies Inc. Method and system for managing program cycles including maintenance programming operations in a multi-layer memory
US9465731B2 (en) 2012-12-31 2016-10-11 Sandisk Technologies Llc Multi-layer non-volatile memory system having multiple partitions in a layer
US8873284B2 (en) 2012-12-31 2014-10-28 Sandisk Technologies Inc. Method and system for program scheduling in a multi-layer memory
US9734911B2 (en) 2012-12-31 2017-08-15 Sandisk Technologies Llc Method and system for asynchronous die operations in a non-volatile memory
US9223693B2 (en) 2012-12-31 2015-12-29 Sandisk Technologies Inc. Memory system having an unequal number of memory die on different control channels
US9734050B2 (en) 2012-12-31 2017-08-15 Sandisk Technologies Llc Method and system for managing background operations in a multi-layer memory
US9652376B2 (en) * 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US10445229B1 (en) * 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
US9478271B2 (en) * 2013-03-14 2016-10-25 Seagate Technology Llc Nonvolatile memory data recovery after power failure
US8812744B1 (en) 2013-03-14 2014-08-19 Microsoft Corporation Assigning priorities to data for hybrid drives
CN103197943A (zh) * 2013-04-11 2013-07-10 航天科工深圳(集团)有限公司 一种单片机在线升级方法和系统
US9626126B2 (en) 2013-04-24 2017-04-18 Microsoft Technology Licensing, Llc Power saving mode hybrid drive access management
US9946495B2 (en) 2013-04-25 2018-04-17 Microsoft Technology Licensing, Llc Dirty data management for hybrid drives
US20140344570A1 (en) 2013-05-20 2014-11-20 Microsoft Corporation Data Protection For Organizations On Computing Devices
US9235470B2 (en) 2013-10-03 2016-01-12 SanDisk Technologies, Inc. Adaptive EPWR (enhanced post write read) scheduling
US9436823B1 (en) * 2013-12-17 2016-09-06 Google Inc. System and method for detecting malicious code
US10615967B2 (en) 2014-03-20 2020-04-07 Microsoft Technology Licensing, Llc Rapid data protection for storage devices
US9804922B2 (en) 2014-07-21 2017-10-31 Sandisk Technologies Llc Partial bad block detection and re-use using EPWR for block based architectures
US9825945B2 (en) 2014-09-09 2017-11-21 Microsoft Technology Licensing, Llc Preserving data protection with policy
US10114562B2 (en) 2014-09-16 2018-10-30 Sandisk Technologies Llc Adaptive block allocation in nonvolatile memory
US9853812B2 (en) 2014-09-17 2017-12-26 Microsoft Technology Licensing, Llc Secure key management for roaming protected content
US9934872B2 (en) 2014-10-30 2018-04-03 Sandisk Technologies Llc Erase stress and delta erase loop count methods for various fail modes in non-volatile memory
US9900295B2 (en) 2014-11-05 2018-02-20 Microsoft Technology Licensing, Llc Roaming content wipe actions across devices
US9224502B1 (en) 2015-01-14 2015-12-29 Sandisk Technologies Inc. Techniques for detection and treating memory hole to local interconnect marginality defects
US10032524B2 (en) 2015-02-09 2018-07-24 Sandisk Technologies Llc Techniques for determining local interconnect defects
US9564219B2 (en) 2015-04-08 2017-02-07 Sandisk Technologies Llc Current based detection and recording of memory hole-interconnect spacing defects
US9269446B1 (en) 2015-04-08 2016-02-23 Sandisk Technologies Inc. Methods to improve programming of slow cells
US9853820B2 (en) 2015-06-30 2017-12-26 Microsoft Technology Licensing, Llc Intelligent deletion of revoked data
US10884945B2 (en) 2015-06-30 2021-01-05 International Business Machines Corporation Memory state indicator check operations
US10248418B2 (en) 2015-06-30 2019-04-02 International Business Machines Corporation Cleared memory indicator
US10635307B2 (en) 2015-06-30 2020-04-28 International Business Machines Corporation Memory state indicator
US9900325B2 (en) 2015-10-09 2018-02-20 Microsoft Technology Licensing, Llc Passive encryption of organization data
US10133490B2 (en) 2015-10-30 2018-11-20 Sandisk Technologies Llc System and method for managing extended maintenance scheduling in a non-volatile memory
US10120613B2 (en) 2015-10-30 2018-11-06 Sandisk Technologies Llc System and method for rescheduling host and maintenance operations in a non-volatile memory
US10042553B2 (en) 2015-10-30 2018-08-07 Sandisk Technologies Llc Method and system for programming a multi-layer non-volatile memory having a single fold data path
US9778855B2 (en) 2015-10-30 2017-10-03 Sandisk Technologies Llc System and method for precision interleaving of data writes in a non-volatile memory
US20170344262A1 (en) * 2016-05-25 2017-11-30 SK Hynix Inc. Data processing system and method for operating the same
US10120583B2 (en) * 2016-06-07 2018-11-06 Facebook, Inc. Performance penalty avoidance for solid state drive
US9817593B1 (en) 2016-07-11 2017-11-14 Sandisk Technologies Llc Block management in non-volatile memory system with non-blocking control sync system
KR102270103B1 (ko) * 2017-07-11 2021-06-28 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US10416899B2 (en) * 2018-02-13 2019-09-17 Tesla, Inc. Systems and methods for low latency hardware memory management
US11372812B2 (en) * 2018-10-08 2022-06-28 Silicon Motion, Inc. Mobile device and method capable of earlier determining that a number of files in a directory of an external connected storage device is about to full
CN111414248B (zh) * 2019-01-04 2023-03-21 阿里巴巴集团控股有限公司 内存管理方法、装置及计算设备
US11847333B2 (en) * 2019-07-31 2023-12-19 EMC IP Holding Company, LLC System and method for sub-block deduplication with search for identical sectors inside a candidate block
FR3101974B1 (fr) * 2019-10-15 2021-09-10 Continental Automotive Procédé d’aide à l’identification de secteurs vierges d’une mémoire non-volatile d’un microcontrôleur
CN111061649B (zh) * 2019-10-28 2023-09-29 宁波三星智能电气有限公司 一种存储器的存储空间自适应分配方法
US11403020B2 (en) * 2019-10-31 2022-08-02 Hewlett Packard Enterprise Development Lp Increasing sizes of buckets of a fingerprint index
US11922011B2 (en) * 2021-09-01 2024-03-05 Micron Technology, Inc. Virtual management unit scheme for two-pass programming in a memory sub-system

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0618535B1 (de) * 1989-04-13 1999-08-25 SanDisk Corporation EEPROM-Karte mit Austauch von fehlerhaften Speicherzellen und Zwischenspeicher
GB2251323B (en) * 1990-12-31 1994-10-12 Intel Corp Disk emulation for a non-volatile semiconductor memory
JP2582487B2 (ja) * 1991-07-12 1997-02-19 インターナショナル・ビジネス・マシーンズ・コーポレイション 半導体メモリを用いた外部記憶システム及びその制御方法
JP3407317B2 (ja) * 1991-11-28 2003-05-19 株式会社日立製作所 フラッシュメモリを使用した記憶装置
US5404485A (en) * 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
JPH08137634A (ja) * 1994-11-09 1996-05-31 Mitsubishi Electric Corp フラッシュディスクカード
JP3706167B2 (ja) * 1995-02-16 2005-10-12 株式会社ルネサステクノロジ 半導体ディスク装置
US6081878A (en) 1997-03-31 2000-06-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US5838614A (en) * 1995-07-31 1998-11-17 Lexar Microsystems, Inc. Identification and verification of a sector within a block of mass storage flash memory
US5907856A (en) 1995-07-31 1999-05-25 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
GB2291990A (en) * 1995-09-27 1996-02-07 Memory Corp Plc Flash-memory management system
GB2291991A (en) * 1995-09-27 1996-02-07 Memory Corp Plc Disk drive emulation with a block-erasable memory
JPH09212411A (ja) * 1996-02-06 1997-08-15 Tokyo Electron Ltd メモリシステム
GB9606928D0 (en) * 1996-04-02 1996-06-05 Memory Corp Plc Memory devices
US5896393A (en) * 1996-05-23 1999-04-20 Advanced Micro Devices, Inc. Simplified file management scheme for flash memory
US5745418A (en) * 1996-11-25 1998-04-28 Macronix International Co., Ltd. Flash memory mass storage system
JP3072722B2 (ja) * 1997-06-20 2000-08-07 ソニー株式会社 フラッシュメモリを用いるデータ管理装置及びデータ管理方法並びにフラッシュメモリを用いる記憶媒体
JPH11212873A (ja) * 1998-01-27 1999-08-06 Seiko Epson Corp コンピューターシステムの操作方法

Also Published As

Publication number Publication date
US6725321B1 (en) 2004-04-20
EP1157328B1 (de) 2005-05-04
EP1157328A1 (de) 2001-11-28
JP2002537596A (ja) 2002-11-05
TWI244092B (en) 2005-11-21
DE60019903D1 (de) 2005-06-09
KR100644805B1 (ko) 2006-11-13
GB9903490D0 (en) 1999-04-07
JP5011498B2 (ja) 2012-08-29
WO2000049488A1 (en) 2000-08-24
KR20020009564A (ko) 2002-02-01

Similar Documents

Publication Publication Date Title
DE60019903T2 (de) Speichersystem
DE60217883T2 (de) Verfahren zum schreiben von daten in einen nicht-flüchtigen speicher
DE69839126T2 (de) Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher
DE69936246T2 (de) Nichtflüchtiger Speicher, Aufzeichnungsgerät und -verfahren
DE69024169T2 (de) Gerät und Verfahren zur Fehlerbehandlung in einem Halbleiterspeicher
DE69333906T2 (de) Verfahren und System für die Dateienverwaltung mit einem schnell löschbaren, programmierbaren ROM
DE60211653T2 (de) Teildatenprogrammier- und leseoperationen in einem nichtflüchtigen speicher
DE69034191T2 (de) EEPROM-System mit aus mehreren Chips bestehender Blocklöschung
DE60319563T2 (de) Verwaltung der anzahl von löschungen in einem nicht-fluchtigem speicher
DE60030876T2 (de) Bereichsverwaltung eines nichtflüchtigen Speichers mit hoher Kapazität
DE69534363T2 (de) Verfahren um Festplatten zu einer Festplattenanordnung hinzuzufügen und gleichzeitig die Datenerreichbarkeit zu gewährleisten
DE60025749T2 (de) Dateisystemabbildübertragung zwischen ungleichen dateisystemen
DE69630624T2 (de) EEPROM-Matrix mit einem, dem &#34;Flash&#34;-Speicher ähnlichen Kern
DE69635962T2 (de) Flash-Speicher-Massenspeichersystem und Verfahren dafür
DE60032531T2 (de) Aufzeichnungsverfahren, Verwaltungsverfahren und Aufzeichnungsgerät
DE112010003887B4 (de) Datenverwaltung in Halbleiter-Speichereinheiten
DE102005019842B4 (de) System und Verfahren zum sequentiellen Schreiben von Daten in einen Flash-Speicher
DE60316171T2 (de) Automatischer abnutzungsausgleich in einem nicht-flüchtigen speichersystem
DE60319407T2 (de) Verfolgen der am häufigsten gelöschten blöcke eines nichtflüchtigen speichersystems
DE60035780T2 (de) Schaltung für plattenantriebskontroller und verfahren zur überschlagung von defekten oder ungewünschten sektoren
DE60129025T2 (de) Speicherbereichszuordnung in einem dateisystem zum beschreiben beliebiger bereiche
DE60030872T2 (de) Verfahren und anordnung um atomische aktualisierungen durchzuführen durch verwendung eines logischen flaschspeichergerätes
DE112015004536T5 (de) Hardware-Automatisierung für Speicherverwaltung
DE112018004256T5 (de) Redundanzcodierstreifen basierend auf internen adressen von speichervorrichtungen
DE102009034651A1 (de) Prozess und Verfahren zur Abbildung von logischen Adressen auf physische Adressen in Festkörperplatten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition