DE602004011097T2 - Flash-speicherdatenkorrektur- und scrub-techniken - Google Patents

Flash-speicherdatenkorrektur- und scrub-techniken Download PDF

Info

Publication number
DE602004011097T2
DE602004011097T2 DE602004011097T DE602004011097T DE602004011097T2 DE 602004011097 T2 DE602004011097 T2 DE 602004011097T2 DE 602004011097 T DE602004011097 T DE 602004011097T DE 602004011097 T DE602004011097 T DE 602004011097T DE 602004011097 T2 DE602004011097 T2 DE 602004011097T2
Authority
DE
Germany
Prior art keywords
data
block
memory
scrub
read
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.)
Active
Application number
DE602004011097T
Other languages
English (en)
Other versions
DE602004011097D1 (de
Inventor
Carlos J. Los Gatos Gonzalez
Kevin M. San Jose Conley
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.)
SanDisk Corp
Original Assignee
SanDisk Corp
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=34393904&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=DE602004011097(T2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by SanDisk Corp filed Critical SanDisk Corp
Publication of DE602004011097D1 publication Critical patent/DE602004011097D1/de
Application granted granted Critical
Publication of DE602004011097T2 publication Critical patent/DE602004011097T2/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • G06F11/106Correcting systematically all correctable errors, i.e. scrubbing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/08Word line control circuits, e.g. drivers, boosters, pull-up circuits, pull-down circuits, precharging circuits, for word lines

Description

  • Hintergrund
  • Die vorliegende Erfindung betrifft allgemein den Betrieb nichtflüchtiger Flash-Speichersysteme und betrifft spezieller das Auffrischen und Korrigieren von in diesen gespeicherten Daten, insbesondere bei Speichersystemen, die sehr große Speicherzellenblöcke aufweisen.
  • Es werden heutzutage viele kommerziell erfolgreiche nichtflüchtige Speicherprodukte genutzt, insbesondere in Form von Karten mit kleinem Formfaktor, bei welchen eine auch als Array bezeichnete Anordnung aus Flash-EEPROM-(Electrically Erasable and Programmable Read Only Memory)-Zellen genutzt wird, die auf einem oder mehreren integrierten Schaltungschips ausgebildet sind. Ein Speicher-Controller, der üblicherweise aber nicht notwendigerweise auf einem separaten integrierten Schaltungschip ausgebildet ist, ist mit einem Host gekoppelt, mit welchem die Karte entfernbar verbunden wird, und steuert den Betrieb des Speicher-Arrays in der Karte. Ein solcher Controller umfasst typischerweise einen Mikroprozessor, irgendeinen nichtflüchtigen Nur-Lese-Speicher (ROM), einen flüchtigen Direktzugriffsspeicher (RAM) und eine oder mehrere Spezialschaltungen wie beispielsweise eine Schaltung, die einen Fehlerkorrekturcode (ECC) anhand von Daten berechnet, wenn diese während der Programmierung und des Lesens von Daten durch den Controller laufen. Einige der kommerziell erhältlichen Karten sind CompactFlashTM(CF)-Karten, MultiMedia-Karten (MMC), Secure Digital(SD)-Karten, Smart Media-Karten, persönliche Tags (P-Tag) und Memory Stick-Karten. Hosts umfassen Personalcomputer, Notebook-Computer, Persönliche Digitale Assistenten (PDAs), verschiedene Datenkommunikationsgeräte, digitale Kameras, Mobiltelefone, tragbare Audioabspielgeräte, Kfz-Soundsysteme und ähnliche Arten von Geräten. Neben der Implementierung als Speicherkarte kann diese Art von Speicher alternativ auch in verschiedene Arten von Hostsystemen eingebettet sein.
  • Zwei generelle Speicherzellenarray-Architekturen haben kommerziell Anwendung gefunden, NOR und NAND. Bei einem typischen NOR-Array sind die Speicherzellen zwischen benachbarte Bitleitungs-Source- und Drain-Diffusionsbereiche geschaltet, die sich in Richtung einer Spalte erstrecken, wobei Steuergates mit Wortleitungen verbunden sind, die sich entlang von Zellenzeilen erstrecken. Eine Speicherzelle umfasst zumindest ein Speicherelement, das über zumindest einem Abschnitt des Zellenkanalbereichs zwischen Source und Drain angeordnet ist. Ein programmierter Ladungspegel in den Speicherele menten steuert somit eine Betriebscharakteristik der Zellen, welche dann gelesen werden kann, indem geeignete Spannungen an die adressierten Speicherzellen angelegt werden. Beispiele für solche Zellen, deren Nutzung in Speichersystemen sowie Verfahren zur Herstellung dieser sind in den US-Patenten Nr. 5,070,032 ; 5,095,344 ; 5,313,421 ; 5,315,541 ; 5,343,063 ; 5,661,053 und 6,222,762 angegeben.
  • Bei NAND-Arrays werden serielle Stränge aus mehr als zwei Speicherzellen, beispielsweise 16 oder 32, genutzt, die zusammen mit einem oder mehreren Auswahltransistoren zwischen einzelne Bitleitungen und ein Referenzpotential geschaltet sind, um Zellenspalten zu bilden. Wortleitungen erstrecken sich innerhalb einer großen Anzahl dieser Spalten quer zu den Zellen. Eine einzelne Zelle in einer Spalte wird während der Programmierung gelesen und verifiziert, indem bewirkt wird, dass die verbleibenden Zellen in dem Strang hart angeschaltet werden, sodass der Strom, der durch einen Strang fließt, von dem in der adressierten Zelle gespeicherten Ladungspegel abhängt. Beispiele für Arrays mit NAND-Architektur und deren Betrieb als Teil eines Speichersystems finden sich in den US-Patenten Nr. 5,570,315 ; 5,774,397 ; 6,046,935 und 6,522,580 .
  • Die Ladungsspeicherelemente derzeitiger Flash-EEPROM-Arrays, wie sie in den vorstehend erwähnten Patenten diskutiert werden, sind meist elektrisch leitfähige Floating-Gates, die typischerweise aus leitfähigem dotiertem Polysiliziummaterial ausgebildet sind. Bei einem alternativen Typ von Speicherzellen, die in Flash-EEPROM-Systemen genutzt werden, wird anstelle des leitfähigen Floating-Gate ein nicht leitfähiges, dielektrisches Material genutzt, um Ladung in nichtflüchtiger Weise zu speichern. Ein dreischichtiges Dielektrikum, das aus Siliziumoxid, Siliziumnitrid und Siliziumoxid besteht (ONO), wird in Zwischenlage zwischen einem leitfähigen Steuergate und einer Oberfläche eines Halbleitersubstrats oberhalb des Kanals der Speicherzelle angeordnet. Die Zelle wird programmiert, indem Elektronen aus dem Kanal der Zelle in das Nitrid injiziert werden, wo sie eingefangen werden und in einem begrenzten Bereich gespeichert werden, und wird gelöscht, indem heiße Löcher in das Nitrid injiziert werden. Mehrere spezielle Zellenstrukturen und -arrays nutzen dielektrische Speicherelemente und sind in der veröffentlichen US-Patentanmeldung 2003/0109093 beschrieben.
  • Wie bei fast allen Anwendungen für integrierte Schaltungen besteht auch bei Flash-EEPROM-Speicherzellenarrays der Druck, die Siliziumsubstratfläche, die zum Realisieren einer bestimmten integrierten Schaltungsfunktion erforderlich ist, zu verkleinern. Es besteht kontinuierlich der Wunsch, die Menge an digitalen Daten, die auf einer gegebenen Fläche eines Siliziumsubstrats gespeichert werden kann, zu erhöhen, um die Speicherkapazität einer Speicherkarte und andere Arten von Baugruppen mit gegebener Größe zu erhöhen oder sowohl die Kapazität zu erhöhen als auch die Größe zu verringern. Eine Möglichkeit zum Erhöhen der Speicherdichte für Daten besteht darin, mehr als ein Bit Daten pro Speicherzelle und/oder pro Speichereinheit oder -element zu speichern. Dies wird erreicht, indem ein Fenster eines Ladungspegel-Spannungsbereichs des Speicherelements in mehr als zwei Zustände unterteilt wird. Bei Verwendung von vier solchen Zuständen ist es möglich, dass jede Zelle zwei Datenbits speichert, bei acht Zuständen werden drei Datenbits pro Speicherelement gespeichert und so weiter. Mehrzustands-Flash-EEPROM-Strukturen, bei denen Floating-Gates genutzt werden, und deren Betrieb sind in den US-Patenten 5,043,940 und 5,172,338 beschrieben, und was Strukturen betrifft, bei denen dielektrische Floating-Gates genutzt werden, in der zuvor genannten US-Anmeldung mit dem Aktenzeichen 10/280,352. Ausgewählte Abschnitte eines Mehrzustands-Speicherzellenarrays können aus verschiedenen Gründen auch in zwei Zuständen (binär) betrieben werden, und zwar in einer Weise, die in den US-Patenten 5,930,167 und 6,456,528 beschrieben ist.
  • Die Speicherzellen eines typischen Flash-EEPROM-Array sind in diskrete Zellenblöcke unterteilt, die zusammen gelöscht werden. Das bedeutet, der Block stellt die Löscheinheit dar, eine Minimalzahl von Zellen, die gleichzeitig gelöscht werden können. Jeder Block speichert typischerweise eine oder mehrere Speicherseiten an Daten, wobei die Speicherseite die minimale Einheit zum Programmieren und Lesen darstellt, wenngleich in unterschiedlichen Unterarrays oder Ebenen mehr als eine Speicherseite parallel programmiert oder gelesen werden kann. Jede Speicherseite speichert typischerweise einen oder mehrere Sektoren an Daten, wobei die Größe des Sektors durch das Hostsystem definiert wird. Gemäß einer Norm, die für Magnetplattenlaufwerke etabliert ist, umfasst ein beispielhafter Sektor 512 Bytes Nutzerdaten zuzüglich einer gewissen Anzahl von Bytes mit Verwaltungs-(Overhead-)Informationen zu den Nutzerdaten und/oder dem Block, in welchem diese gespeichert sind. Solche Speicher sind typischerweise mit 16, 32 oder mehr Speicherseiten in jedem Block konfiguriert, und jede Speicherseite speichert einen oder lediglich wenige Hostsektoren Daten.
  • Um den Grad der Parallelität während des Programmierens von Nutzerdaten in das Speicher-Array und des Lesens von Nutzerdaten aus diesem zu erhöhen, wird das Array typischerweise in Unterarrays unterteilt, die üblicherweise als Ebenen bezeichnet werden, welche ihre eigenen Datenregister und weitere Schaltungen zum Ermöglichen eines pa rallelen Betriebs enthalten, sodass Datensektoren in jeweils mehrere oder in sämtliche Ebenen gleichzeitig programmiert werden können oder aus diesen gelesen werden können. Ein Array auf einer einzigen integrierten Schaltung kann physisch in Ebenen unterteilt werden, oder jede Ebene kann aus einem oder mehreren separaten integrierten Schaltungschips gebildet werden. Beispiele für eine solche Speicherrealisierung sind in den US-Patenten Nr. 5,798,968 und 5,890,192 beschrieben.
  • Um den Speicher ferner effizient zu verwalten, können physische Blocks logisch miteinander gekoppelt werden, sodass virtuelle Blöcke oder Metablöcke gebildet werden. Das bedeutet, jeder Metablock wird derart definiert, dass er einen Block aus jeder Ebene umfasst. Die Nutzung des Metablocks ist in der internationalen Patentanmeldung mit der Veröffentlichungsnummer WO 02/058074 beschrieben. Der Metablock wird durch eine logische Blockadresse des Hosts als Destination zum Programmieren und Lesen von Daten identifiziert. Analog werden sämtliche Blöcke eines Metablocks zusammen gelöscht. Der Controller in einem Speichersystem, das mit solchen großen Blöcken und/oder Metablöcken betrieben wird, führt eine Reihe von Funktionen aus, darunter die Übersetzung zwischen logischen Blockadressen (LBAs), die von einem Host empfangen werden, und physischen Blocknummern (PBNs) in dem Speicherzellenarray. Einzelne Speicherseiten in den Blöcken werden typischerweise durch Versatz in der Blockadresse identifiziert. Eine Adress-Übersetzung beinhaltet oft die Nutzung der intermediären Begriffe einer logischen Blocknummer (LBN) und einer logischen Speicherseite.
  • Die Daten, die in einem Metablock gespeichert sind, werden oft aktualisiert; die Wahrscheinlichkeit für Aktualisierungen erhöht sich mit zunehmender Datenkapazität des Metablocks. Aktualisierte Sektoren eines logischen Metablocks werden normalerweise in einen anderen physischen Metablock geschrieben. Die unveränderten Sektoren werden üblicherweise ebenfalls aus dem ursprünglichen in den neuen physischen Metablock kopiert, und zwar als Teil desselben Programmiervorgangs, um die Daten zu konsolidieren. Alternativ können die unveränderten Daten bis zu einer späteren Konsolidierung mit den aktualisierten Daten in einem einzigen Metablock in dem ursprünglichen Metablock verbleiben.
  • Es ist üblich, Systeme mit großen Blöcken oder Metablöcken mit einigen zusätzlichen Blöcken zu betreiben, die in einem Pool gelöschter Blöcke gehalten werden. Wenn eine oder mehrere Speicherseiten Daten, die weniger als die Kapazität eines Blocks ausmachen, aktualisiert werden, werden typischerweise die aktualisierten Speicherseiten in einen gelöschten Block aus dem Pool geschrieben und danach die Daten der ungeänderten Speicherseiten aus dem ursprünglichen Block in den Löschpoolblock kopiert. Varianten dieses Verfahrens sind in der zuvor erwähnten veröffentlichten internationalen Anmeldung WO 02/058074 beschrieben. Im Laufe der Zeit kann es passieren, dass infolge des wiederholten Schreibens und Aktualisierens von Host-Datendateien eine relativ geringe Anzahl der Speicherseiten vieler Blöcke gültige Daten enthalten und die restlichen Speicherseiten Daten enthalten, die nicht mehr aktuell sind. Um die Datenspeicherkapazität des Arrays effizient nutzen zu können, werden logisch in Zusammenhang stehende Datenseiten mit gültigen Daten von Zeit zu Zeit aus Fragmenten von mehreren Blocks zusammengefasst und zusammen in einer geringeren Anzahl von Blöcken konsolidiert. Dieser Prozess wird üblicherweise als "Speicherbereinigung" (engl. Garbage Collection) bezeichnet.
  • Einzelne Zellen eines Flash-EEPROM speichern eine Menge an Ladung in einem Ladungsspeicherelement oder einer Ladungsspeichereinheit, die ein oder mehr Bit Daten repräsentiert. Der Ladungspegel eines Speicherelements steuert die Schwellspannung (üblicherweise als VT bezeichnet) der Speicherzelle, welche als Grundlage zum Lesen des Speicherzustands der Zelle genutzt wird. Ein Schwellspannungsfenster wird üblicherweise in eine Anzahl von Bereichen unterteilt, und zwar einen für jeden der zwei oder mehr Speicherzustände der Speicherzelle. Diese Bereiche sind durch Schutzbänder getrennt, die einen nominellen Lesepegel einschließen, welcher das Bestimmen der Speicherzustände der einzelnen Zellen ermöglicht. Diese Speicherpegel verschieben sich infolge von die Ladung störenden Programmierungs-, Lese- oder Löschvorgängen, die an benachbarten oder anderweitig in Beziehung stehenden Speicherzellen, -seiten oder -blöcken ausgeführt werden. Beispielsweise können durch die Programmierung einer Gruppe von Speicherzellen, die eine Leitung oder Schaltung gemeinsam mit einer zweiten Gruppe von Speicherzellen nutzen, die Ladungspegel der zweiten Gruppe gestört werden. Das Endergebnis dieser parasitären Störung besteht darin, dass, wenn keine korrigierende Maßnahme von Seiten des Speichersystem-Controllers ergriffen wird, die Daten in den ausgesetzten Bereichen, die nicht bearbeitet werden, korrumpiert werden können, und zwar im Extremfall über die Korrekturmöglichkeiten jedes Fehlerkorrekturcodes (ECC), der zusammen mit den Daten gespeichert ist, hinausgehend. Eine solche Datenkorruption würde dann zum Verlust von Daten für den Anwender führen, sodass das Speichersystem unzuverlässig wird. Das Ausmaß und das Wesen solcher Störungen in einem speziellen Speicherzellenarray hängen von dessen spezieller Architektur, Struktur und Funktionsweise ab.
  • Daher ist es vorteilhaft, sich verschiebende Ladungspegel von Zeit zu Zeit in die Mitte ihrer Zustandsbereiche zurück zu führen, bevor störende Operationen bewirken, dass diese vollständig aus den für sie definierten Bereichen geschoben werden, in welchem Fall dann fehlerhafte Daten gelesen werden. Ein solcher Prozess, der als Datenauffrischungs- oder Scrub-Prozess bezeichnet wird, ist in den US-Patenten Nr. 5,532,962 und 5,909,449 beschrieben. Entsprechend einem weiteren Aspekt dazu kann bei Speichersystemen, welche Fehlerkorrekturcodes (ECCs) nutzen, eine gewisse Anzahl von fehlerhaften Datenbits, die aus dem Speicher gelesen werden, unter Verwendung des ECC korrigiert werden, und die korrigierten Daten werden dann neu in einen zuvor gelöschten Teil des Speichers geschrieben. Das neue Schreiben der Daten bewirkt, dass sich jeder der Schwellpegel der beschriebenen Speicherzellen innerhalb seines zugeordneten Zustandsbereichs befindet, da die Datenprogrammierung üblicherweise abwechselnd das Anpassen der gespeicherten Ladung und das Verifizieren des resultierenden Schwellspannungspegels der Speicherzelle durch Lesen umfasst, bis dieser den gewünschten Bereich erreicht, der die Daten repräsentiert, die in der Zelle gespeichert werden sollen.
  • Das Dokument US 5,263,032 lehrt die Behandlung von Speicherdefekten für einen DRAM, wobei ein ECC genutzt wird, um Fehler in gelesenen Daten zu erkennen, in Reaktion darauf, dass ein solcher Fehler erkannt wird, ein Scrub-Vorgang für diese Speicherstelle ausgelöst wird und "Footprintdaten" generiert/gespeichert werden, um anzuzeigen, dass die Speicherstelle einmal einem Scrub-Vorgang unterzogen worden ist, wobei für den Fall, dass ein weiterer Lesefehler für diese Speicherstelle erkannt wird, die korrigierten Dateninhalte des entsprechenden Speicherblocks, aus welchem die Daten gelesen wurden, in einen Ersatzblock kopiert werden.
  • Die US 6,199,139 lehrt ein Auffrischungsverfahren für einen DRAM, wenn sich dieser in einem Ruhemodus befindet, wobei die Häufigkeit der Auffrischung entsprechend einer Anzahl von Datenfehlern, die durch einen Fehlerkorrekturcode korrigiert werden müssen, angepasst wird.
  • Das Dokument US 4,694,454 lehrt einen DRAM-Auffrischungsmechanismus mit einem Scrub-Vorgang während der Auffrischung, bei welchem ein Datenregister vorhanden ist, und zwar zum temporären Speichern der während des Scrub-Zyklus von der ECC-Schaltung ausgegebenen korrigierten Daten, bevor die in dem Datenregister gespeicherten korrigierten Daten während eines nachfolgenden Auffrischungszyklus zurück an die gleiche Speicherstelle geschrieben werden. Das Dokument GB 2289779 lehrt einen Scrub-Mechanismus für einen DRAM, bei dem ein Puffer zum temporären Speichern der bereits korrigierten Daten während des Scrub-Vorgangs bereitgestellt wird und, nachdem weitere Maßnahmen mit höherer Priorität ausgeführt worden sind, die korrigierten Daten zurück an die Speicherstelle geschrieben werden, von welcher sie gelesen wurden.
  • Zusammenfassung der Erfindung
  • Die Erfindung ist detailliert in den anhängenden unabhängigen Ansprüchen 1 und 10 definiert. Ein umfassender Scrub-Vorgang wird in einem Flash-Speichersystem integriert, um Störungen von Speicherpegeln in einer Gruppe aus Speicherzellen zu kompensieren, die durch Programmier-, Lese- oder Löschvorgänge bewirkt werden, welche an einer anderen Gruppe von Speicherzellen auf demselben integrierten Schaltungschip ausgeführt werden. Die Möglichkeit für solche Datenstörungen erhöht sich mit schrumpfender Größe der Speicherzellenarrays. Es besteht die Tendenz, dass, um Platz zu sparen, verschiedene Signalleitungen für Gruppen von Speicherzellen gemeinsam genutzt werden, sodass eine Gruppe während des Programmierens, Lesens oder Löschens der Speicherzellen einer weiteren Gruppe potenziell wiederholt Spannungen und/oder Strömen ausgesetzt wird. Durch einen Scrub-Vorgang für die in sämtlichen Gruppen von Speicherzellen gespeicherten Daten in organisierter und fortlaufender Weise wird eine Korrumpierung gespeicherter Daten im Zeitverlauf deutlich reduziert. Außerdem wird die Speicherung einer erhöhten Anzahl von Bits pro Speicherzelle mit einer erhöhten Anzahl kleinerer Schwellspannungszustandsbereiche praktikabel, wenn die gestörten Ladungspegel korrigiert werden, indem für diese methodisch wieder ihre vorgesehenen Pegel hergestellt werden.
  • Ein Scrub-Vorgang beinhaltet das Lesen von Daten in Bereichen, die potenziell störenden Signalen ausgesetzt waren, und das Ausführen eines bestimmten korrigierenden Vorgangs, wenn erkannt wird, dass diese Daten gestört worden sind. Störungen können beispielsweise erkannt werden, indem die Integrität der Daten geprüft wird, beispielsweise durch Lesen der Daten und Erhalten der Ergebnisse einer ECC-Prüfung der Daten. Ein korrektiver Vorgang kann das neue Schreiben der Daten an dieselbe Speicherstelle oder an eine andere Speicherstelle beinhalten, und er kann einen Defekt- oder Datenverwaltungsvorgang auf höherer Ebene beinhalten.
  • Der Scrub-Vorgang kann an die Integrität der gelesenen Daten angepasst ausgeführt werden. Wenn beispielsweise in einem Bereich des Speicherzellenarrays ein Datenfehler oder ein Schwellwert an Datenfehlern gefunden wird, kann die Scrub-Rate in diesem Bereich erhöht werden. Wenn im Gegensatz dazu in einem gegebenen Bereich keine Fehler oder nur einige wenige Datenfehler, weniger als ein Schwellwert, gefunden werden, ist es möglich, die Scrub-Rate für den gegebenen Bereich zu vermindern. Die Häufigkeit und die Stelle des Scrub-Vorgangs können auch an Nutzungsgrade oder andere Systemparameter angepasst werden. Diese und andere Scrub-Merkmale werden berechnet, um eine Balance zwischen der Notwendigkeit, die Datenintegrität zu erhalten, und der Notwendigkeit, ein hochgradiges Leistungsverhalten des Systems aufrechtzuerhalten, zu schaffen. werden Insbesondere Scrub-Vorgänge vermieden, welche die Datenintegrität wahrscheinlich nicht verbessern.
  • Scrub-Vorgänge werden bevorzugt im Hintergrund ausgeführt, wenn das Speichersystem keine Daten liest oder schreibt. Das Speichersystem kann den Host beobachten, um anzuzeigen, wann der Host nicht von dem Speicher verlangt, Daten zu speichern oder abzurufen, wobei während dieser Zeit ein Scrub-Vorgang ausgeführt werden kann.
  • Selbst wenn bei einem bestimmten Scrub-Lesevorgang ein oder mehrere Datenfehler erkannt werden, könnte entschieden werden, keine korrektive Maßnahme zu ergreifen, wenn der (die) Fehler durch ECCs beim Lesen der Daten korrigiert werden können, um das Leistungsverhalten des Systems aufrechtzuerhalten. Wenn Nutzerdaten und Overhead-Daten der einzelnen Sektoren ihren eigenen ECC haben, ist es für Datenfehler in den Overhead-Daten weniger wahrscheinlich, dass man diese unkorrigiert durchgehen lässt als bei Fehlern in den Nutzerdaten.
  • Wenn so viele Bitfehler vorhanden sind, dass die mit normalen Bedingungen gelesenen Scrub-Daten nicht durch einen ECC korrigiert werden können, können die Daten erneut mit gelockerten Referenzbedingungen gelesen werden, um Zellen zu lesen, deren gespeicherte Ladungspegel aus dem normalen Bereich heraus geschoben worden sind. Wenn die gelesenen Daten durch den ECC korrekt verifiziert worden sind, können sie danach neu in die normalen Ladungspegelbereiche geschrieben werden. Wenn dagegen ein Scrub-Lesevorgang für Daten keine Fehler ergibt, können diese Daten erneut unter restriktiveren Referenzbedingungen gelesen werden, um die Qualität der gespeicherten Daten zu bestimmen. Das bedeutet, Ladungspegel, die aus ihren optimalen Bereichen heraus geschoben worden sind, werden erkannt, sodass sie als Teil der korrektiven Scrub-Maßnahme neu zurück in diese Bereiche geschrieben werden.
  • Bei Speichersystemen, bei denen große Blöcke oder Metablöcke von Speicherzellen genutzt werden, die einzeln eine große Anzahl von Host-Datensektoren speichern, kann/können ein oder mehrere Datensektor(en) aus einem ersten physischen Block, der/die während eines Scrub-Vorgangs korrigiert wird/werden, neu in einen zweiten Block geschrieben werden, in welchen die restlichen Datensektoren des ersten Blocks kopiert werden, in Übereinstimmung mit dem zuvor beschriebenen Löschpoolverfahren zur Speicherverwaltung. Alternativ kann ein Block oder Metablock zur temporären Speicherung von korrigierten Scrub-Datensektoren zweckbestimmt werden, bis andere Datensektoren aus denselben Blöcken oder Metablöcken wie der/die korrigierte(n) Sektor(en) aus irgendeinem anderen Grund verschoben werden müssen, beispielsweise zur Speicherbereinigung, wobei zu diesem Zeitpunkt die korrigierten Scrub-Datensektoren mit anderen Datensektoren desselben Blocks oder Metablocks rekombiniert werden können. Damit verbessert sich das Leistungsverhalten des Systems.
  • Wenn festgestellt wird, dass bei bestimmten speziellen Daten eine korrigierende Maßnahme erfolgen muss, kann diese Maßnahme aufgeschoben werden, wenn das Ausführen der korrektiven Maßnahme zu diesem Zeitpunkt das Leistungsverhalten des System negativ beeinflussen könnte und wenn die Daten gegebenenfalls ohne die korrigierende Maßnahme gelesen werden können, bevor die korrigierende Maßnahme später stattfindet. Sämtliche korrigierten Daten, Adressen und verschiedene Parameter, wie sie zum Zeitpunkt des Aufschubs bestimmt werden, werden vorübergehend gespeichert und später abgerufen, wenn eine aufgeschobene korrigierende Maßnahme ausgeführt wird. Bei Systemen, die in großen Blöcken oder Metablöcken von Speicherzellen organisiert sind, können korrigierende Scrub-Vorgänge aufgeschoben werden, bis eine vorgegebene Menge an Daten aus einem gegebenen Block oder Metablock für eine korrigierende Maßnahme terminiert ist, in welchem Falle sämtliche aufgeschobenen Datensektoren des gegebenen Blocks oder Metablocks gleichzeitig korrigiert werden. Damit kann die Menge an Datenkopier- und Neuschreib-Vorgängen, die erfolgen, wenn die Datensektoren des gegebenen Blocks oder Metablocks wieder zusammen konsolidiert werden, reduziert werden.
  • Schließlich kann, wenn festgestellt wird, dass eine gegebene Speicherzelle, eine Spalte Zellen, ein Block Zellen oder eine andere Einheit von Zellen häufig einen Scrub-Vorgang erfordert, diese Einheit in dem System aus der Speicherabbildung ausgeschlossen werden, bevor sie sich so weit verschlechtert, dass die in ihr gespeicherten Daten nicht mehr lesbar oder korrigierbar sind.
  • Die vorstehenden Merkmale können einzeln oder zusammen in verschiedenen Kombinationen realisiert werden, in Abhängigkeit von der speziellen Anwendung. Weitere Aspekte, Vorteile und Merkmale des vorliegenden Scrub-Systems sind in der folgenden Beschreibung von exemplarischen Beispielen enthalten, wobei diese Beschreibung im Zusammenhang mit den beigefügten Zeichnungen betrachtet werden sollte.
  • Kurze Beschreibung der Zeichnungen
  • Die 1A und 1B stellen Blockdiagramme eines nichtflüchtigen Speichers bzw. eines Hostsystems dar, welche zusammenarbeiten;
  • 2 stellt eine erste beispielhafte Organisation des Speicher-Arrays aus 1A dar;
  • 3 zeigt einen beispielhaften Host-Datensektor mit Overhead-Daten, wie er in dem Speicher-Array aus 1A gespeichert ist;
  • 4 stellt eine zweite beispielhafte Organisation des Speicher-Arrays aus 1A dar;
  • 5 stellt eine dritte beispielhafte Organisation des Speicher-Arrays aus 1A dar;
  • 6 zeigt eine Erweiterung der dritten beispielhaften Organisation des Speicher-Arrays aus 1A;
  • 7 stellt ein Schaltungsdiagramm einer Gruppe von Speicherzellen des Arrays aus 1A bei einer bestimmten Konfiguration dar;
  • 8 ist ein Ablaufdiagramm, welches die Hauptschritte eines Datenscrub-Vorgangs veranschaulicht;
  • 9, die in den Teilen 9A und 9B auf zwei Blättern gezeigt ist, stellt ein Ablaufdiagramm eines spezielleren Beispiels eines Scrub-Vorgangs dar; und
  • 10 zeigt Verteilungen von Schwellspannungspegeln einer programmierten Gruppe von Speicherzellen.
  • Beschreibung beispielhafter Ausführungsformen
  • SPEICHERARCHITEKTUREN UND DEREN FUNKTIONSWEISE
  • Nehmen wir zunächst auf 1A Bezug, so umfasst ein Flash-Speicher ein Speicherzellenarray und einen Controller. Bei dem gezeigten Beispiel umfassen zwei integrierte Schaltungsbauelemente (Chips) 11 und 13 ein Array 15 aus Speicherzellen sowie verschiedene Logikschaltungen 17. Die Logikschaltungen sind mit einem Controller 19 auf einem separaten Chip über Daten-, Befehls- und Statusleitungen gekoppelt und stellen außerdem Adressierung, Datentransfer und Lesen sowie weiteren Support für das Array 13 bereit. Die Anzahl der Speicher-Array-Chips kann von eins bis zu vielen reichen, in Abhängigkeit von der bereitgestellten Speicherkapazität. Der Controller und ein Teil des Array oder das gesamte Array können alternativ auf einem einzigen integrierten Schaltungschip kombiniert werden, dies ist momentan aber keine wirtschaftliche Alternative.
  • Ein typischer Controller 19 umfasst einen Mikroprozessor 21, einen Nur-Lese-Speicher (ROM) 23, hauptsächlich zum Speichern von Firmware, sowie einen Pufferspeicher (RAM) 25, hauptsächlich für die temporäre Speicherung von Anwenderdaten, die entweder in die Speicherchips 11 und 13 geschrieben werden oder aus diesen gelesen werden. Schaltungen 27 stellen eine Kopplung mit den Speicher-Array-Chips bereit, und Schaltungen 29 stellen eine Kopplung mit einem Host über Anschlüsse 31 bereit. Die Integrität der Daten wird bei diesem Beispiel durch Berechnen eines ECC mit Schaltungen 33 bestimmt, die zum Berechnen des Codes zweckbestimmt sind. Wenn Anwenderdaten zur Speicherung von dem Host zu dem Flash-Speicher-Array übertragen werden, berechnet die Schaltung anhand der Daten einen ECC, und der Code wird in dem Speicher gespeichert. Wenn diese Anwenderdaten später aus dem Speicher gelesen werden, werden Sie erneut durch die Schaltung 33 geleitet, welche den ECC über den gleichen Algorithmus berechnet und diesen Code mit dem berechneten und zusammen mit den Daten gespeicherten Code vergleicht. Wenn sich diese entsprechen, ist die Integrität der Daten bestätigt. Wenn sie voneinander abweichen, können in Abhängigkeit von dem speziell genutzten ECC-Algorithmus diejenigen Bits, die fehlerhaft sind, identifiziert und korrigiert werden, bis zu einer von dem Algorithmus unterstützten Anzahl.
  • Die Anschlüsse 31 des Speichers aus 1A werden mit Anschlüssen 31' eines Hostsystems gepaart, wobei ein Beispiel für ein solches in 1B angegeben ist. Datentransfers zwischen dem Host und dem Speicher aus 1A erfolgen über Schnittstellenschaltungen 35. Ein typischer Host umfasst außerdem einen Mikroprozessor 37, einen ROM 39 zum Speichern von Firmware-Code sowie einen RAM 41. Weitere Schaltungen und Teilssysteme 43 umfassen oft ein Laufwerk für magnetische Datenspeicherplatten mit hoher Kapazität, Schnittstellenschaltungen für eine Tastatur, einen Monitor und dergleichen, in Abhängigkeit von dem speziellen Hostsystem. Einige Beispiele für solche Hosts sind Arbeitsplatzrechner, Laptop-Computer, tragbare Computer, Palmtop-Computer, Per sönliche Digitale Assistenten (PDAs), MP3- und andere Audio-Abspielgeräte, digitale Kameras, Videokameras, Geräte für elektronische Spiele, drahtlose und drahtgebundene Telefongeräte, Anrufbeantworter, Sprachaufzeichnungsgeräte, Netzwerk-Router und andere.
  • Der Speicher aus 1A kann als eine kleine gekapselte Karte realisiert sein, welche den Controller und sämtliche Speicher-Array-Schaltungsbauelemente enthält, und zwar in einer Form, in der sie entfernbar mit dem Host aus 1B verbunden werden kann. Das bedeutet, die Paarungsanschlüsse 31 und 31' ermöglichen es, eine Karte zu entkoppeln und zu einem anderen Host zu bewegen oder zu ersetzen, indem eine andere Karte mit dem Host verbunden wird. Alternativ können die Speicher-Array-Bauelemente in einer separaten Karte gekapselt sein, die elektrisch und mechanisch mit einer den Controller und die Anschlüsse 31 enthaltenden Karte verbunden werden kann. Als weitere Alternative kann der Speicher aus 1A in den Host aus 1B eingebettet sein, wobei die Anschlüsse 31 und 31' dauerhaft hergestellt werden. In diesem Fall ist der Speicher üblicherweise in einem Gehäuse des Hosts zusammen mit weiteren Bauelementen enthalten.
  • Für bestimmte Begriffe, die in dieser Beschreibung genutzt werden, kann eine Erklärung vorteilhaft sein. Ein "Sektor" bezeichnet unabhängig adressierbare Dateneinheiten, auf die während Lese- und Schreibvorgängen des Hosts zugegriffen wird. Ein Datensektor weist typischerweise eine Größe von 512 Byte auf.
  • Der Begriff "Speichersystem", wie er vorliegend genutzt wird, bezeichnet ein System, das aus einem oder mehreren nichtflüchtigen Speicherbauelementen sowie der Hardware und/oder Software besteht, die zum Speichern von Daten in dem Speicher und zum Abrufen dieser aus dem Speicher erforderlich ist/sind. Variierende Anteile der Gesamtfunktionalität des Speichersystems können entweder in einem Teilsystem realisiert sein, das vollständig für die Datenspeicherung zweckbestimmt ist, oder in dem Hostsystem selbst. Das Speichersystem kann in ein Hostsystem eingebettet sein oder kann entfernbar sein, etwa in Form einer sehr kleinen Karte. Teile eines entfernbaren Speichersystems können selbst entfernbar sein, beispielsweise wenn das Speichermedium aus dem Controllerteil entfernt werden kann. Jeder Teil eines Hostsystems, der speziell für die Datenspeicherung in einem Speichersystem zweckbestimmt ist, wird ebenfalls als Teil des Speichersystems betrachtet. Eine solche Funktionalität des Hosts kann spezialisierte Softwarebibliotheken, Treiber oder Anwendungen zusätzlich zu etwaiger in dem Hostsystem befindlicher Hardware umfassen.
  • Für die vorliegend genutzten Zwecke stellt ein "Hostsystem" ein System dar, das im Allgemeinen eine andere Funktionalität als die der Datenspeicherung besitzt, welches aber entweder mit dem Speichersystem verbunden wird oder in dem ein Speichersystem eingebettet ist. Es kann Hostsysteme geben, deren einziger Zweck die Datenspeicherung ist.
  • Die verschiedenen Verfahren zum Auffrischen von und für Scrub-Vorgänge an in einem Flash-Speicher gespeicherten Daten, welche hier beschrieben werden, können in Systemen mit verschiedenen speziellen Konfigurationen implementiert werden, wobei Beispiele dafür in den 26 angegeben sind. 2 stellt einen Teil eines Speicher-Array dar, bei dem die Speicherzellen in Blöcken gruppiert sind, wobei die Zellen in jedem Block als Teil eines einzigen Löschvorgangs zusammen gelöscht werden können, üblicherweise gleichzeitig. Der physische Block stellt die minimale Löscheinheit dar.
  • Die Größe der einzelnen Speicherzellenblöcke aus 2 kann variieren, bei einer kommerziell praktizierten Form ist jedoch in einem einzelnen Block ein einziger Datensektor umfasst. Der Inhalt eines solchen Datensektors ist in 3 dargestellt. Die Nutzerdaten 51 machen typischerweise 512 Byte aus. Zusätzlich zu den Nutzerdaten 51 sind Overhead-Daten vorhanden, die einen ECC 53 umfassen, der aus den Nutzerdaten berechnet wird, Parameter 55, die sich auf die Sektordaten und/oder den Block, in welchem der Sektor programmiert ist, beziehen, sowie ein ECC 57, der aus den Parametern 55 berechnet wird, sowie weitere Overhead-Daten, die umfasst sein könnten. Die Parameter 55 können eine Größe beinhalten, die sich auf die Anzahl der Programmier/Lösch-Zyklen bezieht, die der Block erfahren hat ("Aktivzahlen"; engl.: Hot Counts), wobei diese Größe nach jedem Zyklus oder nach einer vorgegebenen Anzahl von Zyklen aktualisiert wird. Eine Anwendung für diese Verlaufsgröße besteht darin, regelmäßig die logischen Blockadressen neu auf andere physikalische Blockadressen abzubilden, um die Nutzung über sämtliche Blöcke hin auszugleichen (Abnutzungsausgleich). Eine weitere Anwendung der Verlaufsgröße besteht darin, Spannungen und andere Parameter für die Programmierung, das Lesen und/oder Löschen in Funktion der Anzahl von Zyklen, die die unterschiedlichen Sektoren erfahren haben, zu ändern. Weitere Anwendungen für Verlaufsgrößen bei dem Prozess der Identifizierung von Blöcken, die einem Scrub-Vorgang unterzogen werden sollen, werden später beschrieben.
  • Die Parameter 55 können auch eine Angabe der Bitwerte umfassen, die jedem der Speicherzustände der Speicherzellen zugeordnet werden, was üblicherweise als deren "Rota tion" bezeichnet wird. Das bedeutet, logische Zustände der Daten werden auf unterschiedliche physikalische Speicherzustände abgebildet. Dies hat ebenfalls die vorteilhafte Wirkung hinsichtlich eines Abnutzungsausgleichs. Außerdem können in den Parametern 55 ein oder mehrere Merker umfasst sein, die einen Status oder Zustände angeben. Angaben für Spannungspegel, die für die Programmierung und/oder das Löschen des Blocks genutzt werden sollen, können ebenfalls in den Parametern 55 gespeichert werden, wobei diese Spannungen aktualisiert werden, wenn sich die Anzahl der Zyklen, die der Block erfahren hat, oder andere Faktoren ändern. Andere Beispiele für die Overhead-Parameter 55 sind eine Angabe zu etwaigen fehlerhaften Zellen in dem Block, die logische Adresse des Datenblocks, der in diesem physikalischen Block abgebildet ist, und die Adresse eines etwaigen physikalischen Ersatzblocks für den Fall, dass der primäre Block defekt ist. Die spezielle Kombination von Parametern 55, die in einem Speichersystem genutzt wird, wird entsprechend dem Design variieren. Außerdem können auch einige oder sämtliche Overhead-Daten in physikalischen Blöcken gespeichert werden, die für eine solche Funktion zweckbestimmt sind, anstatt in dem Block, der die Nutzerdaten enthält oder auf welchen sich die Overhead-Daten beziehen.
  • Ein physikalischer Block mit mehreren Sektoren aus 4 unterscheidet sich von dem Block mit einem einzigen Datensektor aus 2. Ein beispielhafter Block 59, immer noch die minimale Löscheinheit, enthält vier Speicherseiten 0–3, welche jeweils die minimale Einheit zur Programmierung darstellt. Ein oder mehrere Host-Datensektoren werden in jeder Speicherseite gespeichert, üblicherweise zusammen mit Overhead-Daten, die zumindest den aus den Daten des Sektors berechneten ECC umfassen, und diese(r) kann/können die Form des Datensektors aus 3 aufweisen. Wenn Daten von weniger als sämtlichen Speicherseiten aktualisiert werden, werden die aktualisierten Daten typischerweise in einer Speicherseite eines gelöschten Blocks aus einem Pool gelöschter Blöcke gespeichert, und die Daten in den restlichen, unveränderten Seiten werden aus dem ursprünglichen Block in den neuen Block kopiert. Der ursprüngliche Block wird danach gelöscht. Varianten dieser Verwaltungstechnik für große Blöcke beinhalten das Schreiben der aktualisierten Daten in eine Speicherseite eines anderen Blocks ohne das Verschieben von Daten aus dem ursprünglichen Block oder das Löschen dieser. Dies führt dazu, dass mehrere Speicherseiten die gleiche logische Adresse aufweisen. Die aktuellste Datenseite wird durch ein geeignetes Verfahren identifiziert, beispielsweise durch den Zeitpunkt der Programmierung, der als Feld in den Overhead-Daten des Sektors oder der Speicherseite aufgezeichnet wird.
  • Eine weitere Anordnung physikalischer Blöcke mit mehreren Sektoren ist in 5 dargestellt. Hierbei ist das gesamte Speicherzellen-Array physisch in zwei oder mehr Ebenen unterteilt, wobei vier Ebenen 0–3 dargestellt sind. Jede Ebene stellt ein Unterarray mit Speicherzellen dar, das seine eigenen Datenregister, Leseverstärker, Adressdekodierer und dergleichen aufweist, um weitestgehend unabhängig von den anderen Ebenen arbeiten zu können. Sämtliche Ebenen können auf einem einzigen integrierten Schaltungsbauelement oder auf mehreren Bauelementen bereitgestellt werden, wobei ein Beispiel darin besteht, jede Ebene in einem oder mehreren getrennten integrierten Schaltungsbauelementen auszubilden. Jeder Block in dem System aus 5 enthält 16 Speicherseiten P0–P15, wobei jede Speicherseite eine Kapazität von einem, zwei oder mehr Host-Datensektoren sowie einigen Overhead-Daten aufweist.
  • Eine noch weitere Speicherzellenanordnung ist in 6 dargestellt. Jede physikalische Ebene enthält eine große Anzahl von Blöcken aus Zellen. Um den Grad an Parallelität des Betriebs zu erhöhen, werden Blöcke in unterschiedlichen Ebenen logisch gekoppelt, sodass sie Metablöcke bilden. Ein solcher Metablock ist in 6 als aus Block 3 der Ebene 0, Block 1 der Ebene 1, Block 1 der Ebene 2 und Block 2 der Ebene 3 gebildet dargestellt. Jeder Metablock ist logisch adressierbar, und der Speicher-Controller ordnet die Blöcke zu, die die einzelnen Metablöcke bilden, und verfolgt diese. Das Hostsystem ist vorzugsweise mit dem Speichersystem in Dateneinheiten gekoppelt, die gleich der Kapazität der einzelnen Metablöcke sind. Ein solcher logischer Datenblock 61 aus 6 wird beispielsweise durch eine logische Blockadresse (LBA) identifiziert, die von dem Controller auf die physikalischen Blocknummern (PBNs) der Blöcke, aus denen der Metablock besteht, abgebildet wird. Sämtliche Blöcke des Metablocks werden zusammen gelöscht, und die Speicherseiten jedes Blocks werden vorzugsweise gleichzeitig programmiert und gelesen.
  • Es gibt viele unterschiedliche Speicher-Array-Architekturen, -konfigurationen und spezifische Zellenstrukturen, die zur Anwendung kommen können, um die vorstehend mit Bezug auf die 26 beschriebenen Speicher zu implementieren. Ein Block eines Speicher-Arrays vom NAND-Typ ist in 7 gezeigt, um einige der Störungsmechanismen zu veranschaulichen. Eine große Anzahl von in Spalten ausgerichteten Strängen von in Reihe geschalteten Speicherzellen ist zwischen eine gemeinsame Quelle 65 für eine Spannung VSS und eine der Bitleitungen BL0–BLN geschaltet, die wiederum mit Schaltungen 67 verbunden sind, welche Adressdekodierer, Treiber, Leseverstärker und dergleichen enthalten. Speziell enthält ein solcher Strang die Ladungsspeichertransistoren 70, 71...72 und 74, die in Reihe zwischen Auswahltransistoren 77 und 79 an entgegengesetzten Enden des Strangs geschaltet sind. Bei diesem Beispiel enthält jeder Strang 16 Speichertransistoren, eine andere Anzahl ist aber möglich. Die Wortleitungen WL0–WL15 erstrecken sich quer über einen Speichertransistor jedes Strangs hin und sind mit Schaltungen 81 verbunden, welche Adressdekodierer und Spannungsquelletreiber für die Wortleitungen enthalten. Die Spannungen auf den Leitungen 83 und 84 steuern über ihre Auswahltransistoren die Verbindung sämtlicher Stränge in dem Block zusammen mit entweder der Spannungsquelle 65 und/oder den Bitleitungen BL0–BLN. Daten und Adressen kommen von dem Speicher-Controller.
  • Jede Reihe von Ladungsspeichertransistoren (Speicherzellen) des Blocks bildet eine Speicherseite, die zusammen programmiert und gelesen wird. An die Wortleitung (WL) einer solcher Speicherseite wird eine zum Programmieren oder Lesen der Daten geeignete Spannung angelegt, während die Spannungen, die an die restlichen Wortleitungen angelegt werden, derart gewählt werden, dass sie deren jeweilige Speichertransistoren leitfähig machen. Im Verlaufe der Programmierung oder des Lesens einer Zeile (Speicherseite) von Speichertransistoren können die zuvor gespeicherten Ladungspegel in nicht ausgewählten Zeilen aufgrund der über sämtliche Stränge und an deren Wortleitungen angelegten Spannungen gestört werden.
  • VERSCHIEDENE ASPEKTE DES SCRUB-PROZESSES
  • Es gibt zwei Hauptphasen des Scrub-Vorgangs, die Lesephase und die Phase der korrigierenden Maßnahme. Der Scrub-Lesevorgang unterscheidet sich von anderen Lesevorgängen in dem System darin, dass er im Allgemeinen die Auswahl und das Lesen von Daten in Bereichen des Speichersystems beinhaltet, die nicht direkt mit der Beendigung einer bestimmten Operation des Hosts noch mit irgendeiner anderen Operation einer Reihe anderer Systemoperationen wie beispielsweise einem Abnutzungsausgleich in Zusammenhang steht. Ein weiteres Unterscheidungsmerkmal des Scrub-Lesevorgangs besteht darin, dass anhand des Daten-Lesevorgangs durch das System keine nützlichen Informationen gesammelt werden sondern stattdessen das Ergebnis der Datenintegritätsprüfung das Ziel der Operation ist. Eine nachfolgende Maßnahme an dem Teil des Systems wird durch das Ergebnis der Integritätsprüfung und nicht speziell durch die Daten selbst bestimmt. Möglicherweise benötigt das System nachfolgend die Verwendung einiger Informationen aus dem Daten-Lesevorgang, beispielsweise Overhead-Daten, falls die Daten die Integritätsprüfung nicht bestehen und eine korrigierende Maßnahme erforderlich ist. Diese Merkmale, dass keine bestimmte Operation des Hosts beendet wird und keine nützlichen Daten aus dem Speicher erhalten werden, stellen grundsätzliche Unterschiede zwischen Scrub-Lesevorgängen und anderen von dem System ausgeführten Daten-Lesevorgängen dar.
  • Die Auswahl der bestimmten Bereiche für einen Scrub-Lesevorgang wird im Allgemeinen durch die Speicherstelle und die Anzahl von Lese-, Schreib- und Löschvorgängen bestimmt, die im normalen Verlauf des Systembetriebs ausgeführt werden, im Zusammenhang mit den physikalischen Merkmalen des Speicherbauelements. Im Allgemeinen werden Scrub-Lesevorgänge in Bereichen des Speicher-Arrays ausgeführt, welche infolge von Operationen in anderen Bereichen Spannungen, Strömen oder Nebensprechen ausgesetzt waren. Alternativ können die Scrub-Lesestellen von anderen Speicheroperationen entkoppelt sein und können derart ausgeführt werden, dass sie einer deterministischen oder zufälligen Abfolge folgen. Dies kann jedoch zu einer Einbuße im Leistungsverhalten des Systems führen, da mehr Lesevorgänge ausgeführt werden müssten, um den gleichen Abdeckungsgrad für die stärker gestörten Bereiche zu erhalten.
  • Einen weiteren Aspekt der Scrub-Lesevorgänge stellt die Wahl dar, wann der Scrub-Lesevorgang auszuführen ist. Im Allgemeinen kann der Scrub-Vorgang unter Ansprechen auf eine Reihe von Faktoren eingeleitet werden, beispielsweise eine Anzahl von Host-Operationen, eine Anzahl von physikalischen Lese-, Schreib- und/oder Löschvorgängen, eine Zeitspanne, ein Nutzungsmerkmal des Hosts oder irgendeine zufällige oder pseudozufällige Abfolge, deren Generierung und Überprüfung an einen der vorstehenden Faktoren gekoppelt sein kann.
  • Der Scrub-Schreibvorgang unterscheidet sich von anderen System-Schreibvorgängen darin, dass er im Allgemeinen infolge einer nicht bestandenen Integritätsprüfung der während eines Scrub-Lesevorgangs gelesenen Daten ausgeführt wird. Ein Scrub-Schreibvorgang ist nur im Zusammenhang mit dem Scrub-Lesevorgang einzigartig. Es können andere Schreibvorgänge ausgeführt werden, die analoge Mechanismen wie Scrub-Schreibvorgänge aufweisen, die aber nicht für diesen speziellen Zweck ausgeführt werden. Als ein Beispiel können sich Schreibvorgänge durch nicht bestandene Integritätsprüfungen ergeben, nachdem Lese- oder Schreibvorgänge im Verlaufe des normalen Betriebs des Speichersystems ausgeführt worden sind. Als weiteres Beispiel können Daten für Auffrischungszwecke gelesen und erneut geschrieben werden, ohne dass Scrub-Lesevorgänge stattfinden, wobei die Entscheidung zum Schreiben nicht auf Grundlage der Datenintegritätsprüfung erfolgt, sondern stattdessen anhand eines bestimmten ande ren Faktors. Ein solcher Faktor kann die Existenz eines Bereichs des Arrays mit hoher Nutzung oder Exposition sein, in welchem Falle Daten in dem Bereich neu geschrieben oder verschoben werden können. Ein kontinuierliches Verschieben oder Auffrischen von Daten kann auf deterministische oder zufällige Weise erfolgen. Daten können mit dem beabsichtigten Zweck des Abnutzungsausgleichs gelesen und neu geschrieben werden, aber das kann den unbeabsichtigten Vorteil haben, dass die Daten in einer Weise aufgefrischt werden, mit der Störungsprobleme behoben werden.
  • Tatsächlich kann die relative Frische einer Dateneinheit dafür genutzt werden zu bestimmen, ob ein Scrub-Vorgang für diese Dateneinheit eingeleitet werden soll, wenn diese weitere Kriterien dafür erfüllt. Das bedeutet, wenn eine Dateneinheit kürzlich als Teil eines Abnutzungsausgleichs, einer Datenkonsolidierung (Speicherbereinigung) neu programmiert worden ist, und zwar vor dem Scrub- oder anderen Vorgang, kann der aktuelle Scrub-Vorgang übersprungen werden, da diese Daten vor kurzem aufgefrischt worden sind. Die relative Frische verschiedener Dateneinheiten kann verfolgt werden, beispielsweise mit Verlaufszahlen ("Aktivzahlen") oder Zeitstempeln, die mit den Dateneinheiten gespeichert werden, beispielsweise in einem Teil der Overhead-Daten der Blöcke. Alternativ können die physikalischen Blöcke entsprechend der Frische der in diesen gespeicherten Daten gruppiert werden, wobei die Gruppe, zu welcher ein Block gehört, als Overhead-Daten für den Block gespeichert wird. Die relative Frische von Blöcken, welche ansonsten zu Kandidaten für einen Scrub-Vorgang werden, kann dann als Faktor zur Auswahl derjenigen genutzt werden, welche tatsächlich einem Scrub-Vorgang unterzogen werden. Das Leistungsverhalten des Systems wird dabei verbessert, indem Scrub-Operationen auf diejenigen Dateneinheiten beschränkt werden, die lange genug gespeichert waren, sodass ihre gespeicherten Ladungspegel wahrscheinlich hinreichend gestört worden sind, dass ihnen Aufmerksamkeit gebührt.
  • Um die relative Frische der gespeicherten Daten zu überwachen, können entweder logische oder physikalische Blöcke auf Grundlage dessen, vor wie langer Zeit die Blöcke neu programmiert worden sind, effektiv zu Mengen gruppiert werden. Sämtlichen Blöcken in dem gesamten Speicher-Array oder alternativ Blöcken in einer Ebene, Zone oder einem anderen Teil des Arrays kann ein relativer Anfangsaktivzahlwert zugeordnet werden, und jedes Mal, wenn ein Block umprogrammiert wird, kann die relative Aktivzahl auf den Wert des vor kürzester Zeit verschobenen Satzes oder der vor kürzester Zeit verschobenen Gruppe aktualisiert werden. Sobald sich eine bestimmte Anzahl von Blöcken in der vor kürzester Zeit neu programmierten Gruppe befindet, kann der Wert für die vor kürzester Zeit neu programmierten Gruppe inkrementiert werden, und etwaige Blocks, die danach neu programmiert werden, können auf den neuen Wert der Gruppe aktualisiert werden. Infolgedessen können getrennte Gruppen mit einer relativ klaren Unterscheidung zwischen vor kürzester Zeit umprogrammierten und vor längster Zeit umprogrammierten Blöcken erzeugt werden. Im Allgemeinen lässt man den relativen Aktivzahlwert eines Blocks überschlagen, um die Verwendung relativ kleiner Zahlenfelder zu ermöglichen.
  • Wenn relative Aktivzahlen genutzt werden, können im Wesentlichen sämtliche Blöcke bei einem Basiswert von '0' beginnen, wenn es acht mögliche Werte gibt, bei einem spezifischen Beispiel z. B. die Werte '0' bis '7'. Sieben der acht Werte können genutzt werden, während ein Wert reserviert wird, um eine Lücke zwischen dem Wert, welcher die vor kürzester Zeit programmierten Blöcke repräsentiert, und dem Wert, welcher die Blöcke identifiziert, die die ältesten Daten enthalten, bereitzustellen. Bei diesem Beispiel erhalten Blöcke, die beschrieben werden, einen neuen Wert '1', um anzuzeigen, dass sie die vor kürzester Zeit neu programmierten darstellen. Sobald eine bestimmte vorgegebene Anzahl von Blöcken auf den neuen Wert '1' aktualisiert worden ist, können Blöcke, die danach programmiert werden, einen neuen Wert '2' erhalten. Ein Wert '3' kann schließlich neu programmierten Blöcken zugeordnet werden, sobald einer bestimmten Anzahl von Blöcken der Wert '2' zugeordnet worden ist. An einem gewissen Punkt wird der Zähler überschlagen, sodass die vor längster Zeit genutzten Blöcke einen Wert '2' aufweisen, die vor jüngster Zeit programmierten Blöcke einen Wert '0' aufweisen und der Wert '1' eine Lücke zwischen den beiden bereitgestellt, sodass sich die Werte für die Blöcke mit den ältesten und den neusten Daten deutlich identifizieren lassen. Schließlich werden sämtliche Blöcke in der ältesten Menge neu geschrieben sein, entweder durch Schreibvorgänge des Hosts, durch einen Scrub-Vorgang, durch Abnutzungsausgleich oder durch irgendeinen anderen Mechanismus. Bei dem vorstehenden Beispiel wird die Menge '2' dann leer sein, und dieser Wert kann als Lücke dienen, während die Menge '1' genutzt werden kann, um die vor kürzester Zeit geschriebenen Blöcke zu identifizieren. Wenn ein Block zu einem Kandidaten für einen Scrub-Vorgang auf Grundlage anderer Kriterien wird, kann der Scrub-Vorgang für diesen Block übersprungen werden, wenn dieser durch seine relative Aktivzahl in einer Gruppe von vor eher kürzerer Zeit neu programmierten Blöcken platziert ist.
  • Alternativ können absolute Aktivzahlen für logische und/oder physikalische Blöcke unterhalten werden, in welchem Fall das System vorzugsweise diese Aktivzahlen nutzen kann, um Entscheidungen hinsichtlich Scrub-Vorgängen zu treffen. Das bedeutet, wenn ein Block neu programmiert wird, wird dessen absolute Aktivzahl inkrementiert, dekrementiert oder anderweitig verfolgt, um eine Angabe für die Gesamtanzahl der Umprogrammierungen des Blocks bereitzustellen. Blöcke mit absoluten Aktivzahlen, die eine große Anzahl von Umprogrammierungsoperationen anzeigen, sind typischerweise in jüngerer Zeit umprogrammiert worden als Blöcke mit absoluten Aktivzahlen, die eine geringe Anzahl von Umprogrammierungsoperationen anzeigen. Somit kann der Scrub-Vorgang für die Daten, die in Blöcken mit einer relativ hohen Zahl von Umprogrammierungsoperationen gespeichert sind, übersprungen werden, da es unwahrscheinlich ist, dass die Daten wesentlich gestört sind.
  • Es gibt viele spezielle Scrub-Algorithmen und damit in Zusammenhang stehende Speicheroperationen, die alternativ ausgeführt werden können. Der Scrub-Vorgang kann durch den Speichersystem-Controller gesteuert werden, oder alternativ auf jedem der integrierten Schaltungsbauelemente (Chips) mit Speicherzellen, oder kann sogar teilweise oder vollständig durch den Host gesteuert werden. Das Speichersystem kann entfernbar mit dem Host verbunden werden oder kann alternativ in dem Host eingebettet sein.
  • Die Lesephase eines Scrub-Vorgangs kann auf mehrerlei Weise ausgeführt werden. Die Scrub-Raten können derart abgestimmt werden, dass das Leistungsverhalten optimiert wird und gleichzeitig ein spezifischer Grad an Datenintegrität aufrechterhalten wird. Sowohl die Raten, mit welchen die Scrub-Operationen ausgeführt werden, als auch die Anzahl der Datensektoren, die gleichzeitig gelesen werden, können beispielsweise abgestimmt werden. Eine solche Abstimmung kann automatisch als Teil des Scrub-Algorithmus erfolgen. Zum Beispiel können die Raten und die Stellen für den Scrub-Vorgang mit ungleichmäßigen Störungsverlaufsraten in unterschiedlichen Bereichen des Speichers abgestimmt werden. Scrub-Lesevorgänge können auch aufgeschoben werden, um das Leistungsverhalten des Systems zu optimieren oder um spezifischen Echtzeiterfordernissen zu entsprechen.
  • Es gibt außerdem verschiedene Alternativen für die Art und Weise, in welcher der Scrub-Lesevorgang ausgeführt wird. Zum Beispiel kann ein Satz Daten sowohl mit nominellen Referenzpegeln als auch mit Referenzpegeln mit Toleranzgrenzen gelesen werden. Die Größe des Toleranzbereichs kann auf spezielle Störungsmechanismen abzielen, die anzutreffen sind. Wenn gelesene Daten beispielsweise nicht durch den ECC korrigiert werden können, könnte ein Lesevorgang mit breiteren Grenzen es ermöglichen, die Daten wiederzugewinnen. Wenn Daten normal ohne irgendwelche Fehler gelesen werden, könnte ein Lesevorgang mit schmaleren Grenzen Informationen zur Qualität der Daten liefern.
  • Nach einem Scrub-Lesevorgang wird entschieden, ob eine korrigierende Maßnahme in Angriff genommen werden soll. Neben anderen Faktoren kann eine solche Entscheidung basierend auf dem Aktivitätsgrad, basierend auf einer Anzahl und/oder einem Muster von Bitfehlern, die erkannt worden sind, getroffen werden.
  • Die korrigierende Maßnahme umfasst meist das neue Schreiben der gelesenen Daten an die gleiche oder eine andere Speicherstelle in dem Speicher. Solche Scrub-Schreibvorgänge können aufgeschoben werden, um das Leistungsverhalten des Systems zu optimieren oder um speziellen Echtzeiterfordernissen zu entsprechen. Eine korrigierende Maßnahme kann zusätzlich eine Rotation der Daten während eines Scrub-Schreibvorgangs umfassen; das bedeutet, die Speicherzellenzustände, die spezifisch gespeicherte Daten repräsentieren, werden verändert. Eine korrigierende Maßnahme kann auch das Ausschließen von Zellen, Spalten oder anderen Strukturen, die als störungsanfällig erachtet werden, für Speicherabbildungen aus dem System umfassen.
  • Der größte Teil der Host-Protokolle weist eine abstrakte Schnittstelle zu dem Speichersystem auf, sodass der Speicher im Allgemeinen von dem Host mit logischen Blockadressnummern (LBA) adressiert wird. Alternative äquivalente Adressierungsmodi existieren, beispielsweise Zylinder-Kopf-Sektor in dem ATA-Host-Protokoll, aber das fundamentale Konzept besteht darin, dass der Host keine Kenntnisse bezüglich der physischen Speicherstelle besitzt, an welcher das Speichersystem einen gegebenen Host-Datensektor gespeichert hat. Dem Host steht ein linear fortlaufender Satz unabhängiger logischer Blockadressen zur Verfügung, an welchen Datensektoren gespeichert und von welchen diese abgerufen werden. Diese abstrakten Host-Protokolle erfordern im Allgemeinen das Vorhandensein eines Controllers in dem Speichersystem, um die Speicheroperationen zu steuern, die Abbildungsfunktionalität, die Datenverwaltung, Fehlerbehebung auszuführen, und so weiter. Speichersysteme, die mit diesen abstrakten Host-Protokollen arbeiten, verlassen sich vorzugsweise darauf, dass der Controller in dem Speichersystem Scrub-Operationen ausführt, da der Host im Allgemeinen keine Kenntnis zu den physikalischen Aspekten des Speichersystems besitzt.
  • Andererseits gibt es bei einigen Host-Protokollen eine Schnittstelle, in welcher der Host selbst die Speicherverwaltungsfunktionen ausführt. Bei Speichersystemen, die diesen Protokollen entsprechen, ist typischerweise eine minimale Controller-Funktionalität vorhanden, wenn überhaupt. Es können variierende Anteile dieser Funktionalität vorhanden sein, beispielsweise, aber nicht ausschließlich, die ECC-Erzeugung, ECC-Prüfung oder ECC-Korrektur, die von dem Speichersystem anstatt dem Host-System ausgeführt werden kann. Speichersysteme, die mit diesen Host-Speicherverwaltungsprotokollen arbeiten, werden sich üblicherweise darauf verlassen, dass der Host die Scrub-Operationen ausführt, da das Speichersystem typischerweise unzureichende Logik zum Ausführen von Scrub-Operationen aufweist.
  • Einige Speichersysteme weisen einen zweckbestimmten Controller auf, dessen Aufgabe darin besteht, das Speicherbauelement zu betreiben und die Speicherverwaltungsfunktionalität auszuführen. Andere Speichersysteme weisen keinen zweckbestimmten Speicher-Controller auf, sondern verlassen sich stattdessen auf Teile der Host-Infrastruktur, um Speicherverwaltungsvorgänge auszuführen. Beispielsweise ist es möglich, dass ein nichtflüchtiges Speicherbauelement direkt mit einem Allzweck-Mikroprozessor in dem Hostsystem verbunden wird, wobei die Speicherverwaltungsfunktionalität durch Software ausgeführt wird. Bei solchen Speichersystemen ohne Controller führt dasselbe Teilsystem, das für Speicherverwaltungsoperationen verantwortlich ist, vorzugsweise auch die Scrub-Funktionalität aus.
  • Bei den Speichersystemen, die einen Controller aufweisen, ist es möglich, dass die Controllerfunktionalität in ein nichtflüchtiges Speicherbauelement (einen integrierten Schaltungschip) selbst integriert ist. Als extremes Beispiel ist es möglich, dass der gesamte Controller in einem einzigen Speicherbauelement integriert ist.
  • Das Speichersystem kann in das Hostsystem eingebettet sein und kann in variierendem Grade eine Funktionalität aufweisen, die in Teilsysteme des Hosts integriert ist, welches Allzweck-Systeme sind oder die eine andere Funktionalität aufweisen. Bei solchen eingebetteten Speichersystemen werden im Allgemeinen die gleichen Host-Protokolle eingehalten, wenngleich dies nicht notwendigerweise der Fall sein muss. Als allgemeine Regel ist jedoch der gleiche Satz an Funktionalität erforderlich, um das Speichersystem zu betreiben.
  • Wenngleich im Falle eines abstrakten Host-Protokolls typischerweise das Speichersystem Scrub-Operationen ausführt, ist es auch möglich, dass das Hostsystem in solchen Systemen über die Nutzung eines speziellen Befehls oder einer anderen vordefinierten Schnitt stellentransaktion Scrub-Operationen einleiten kann. Ein Grund zum Implementieren dieser Funktionalität kann darin bestehen, dass das Hostsystem am besten Zeitspannen kennt, während derer nicht auf das Speichersystem zugegriffen wird, um Daten zu speichern oder abzurufen, und das Hostsystem kann die Gelegenheit wahrnehmen, um während solcher Zeitspannen eine Scrub-Operation auszulösen. Auf diese Weise kann die Zuverlässigkeit des Systems insgesamt erhöht werden, und zwar mit minimaler Auswirkung auf das Leistungsverhalten. Der Mechanismus, der genutzt wird, um eine Scrub-Operation auszulösen, kann für den Zweck des Scrub-Vorgangs spezifisch sein oder kann einen Allzweckmechanismus zum Melden an das Speichersystem, dass Zeit für Verwaltungsoperationen verfügbar ist, darstellen. In letzterem Fall können die Scrub-Operationen einen Typ von verschiedenen Operationen darstellen, die von dem Speichersystem während solcher Zeitspannen ausgeführt werden.
  • Der Expositionsbereich aufgrund einer gegebenen Speicheroperation ist im Allgemeinen ausgedehnt, sodass es nicht praktisch ist, jedes Mal, wenn eine Operation ausgeführt wird, den gesamten exponierten Bereich einem Scrub-Vorgang zu unterziehen. Im Allgemeinen wird nur ein Teil des exponierten Bereichs für einen Scrub-Vorgang ausgewählt, und die Rate der Scrub-Vorgänge muss derart festgelegt werden, dass der Scrub-Vorgang die am stärksten gestörten Bereiche erkennt, bevor die Anzahl an Bitfehlern und der Anteil der verschobenen Zellen die Möglichkeiten jedes Wiederherstellungssystems, das in dem Speichersystem zur Verfügung steht, übersteigt.
  • Die Rate, mit welcher Scrub-Vorgänge ausgeführt werden, stellt einen wichtigen Parameter dar, da sie sowohl die Datenintegrität als auch das Leistungsverhalten des Speichersystems beeinflusst. Je höher die Scrub-Rate ist, desto höher ist die Wahrscheinlichkeit, gestörte Zellen in einem Datenblock zu erkennen, bevor die Anzahl der Bitfehler und der Grad der verschobenen Zellen jedes Wiederherstellungssystem überfordert, das für das Speichersystem zur Verfügung steht. Je höher jedoch die Scrub-Rate ist, desto stärker ist die Verschlechterung des Leistungsverhaltens des Speichersystems, da höhere Anteile des Speichers und der Controllerzeit diesem Vorgang gewidmet sind. Mit dem Ziel, einen gewünschten Grad an Datenintegrität zu garantieren und gleichzeitig so wenig Leistungsvermögen wie möglich zu opfern, wird die Scrub-Rate auf das bloße Minimum reduziert, das erforderlich ist, egal mit welchem Schutzband, das als geeignet erachtet wird. Die Rate, mit welcher Scrub-Operationen ausgeführt werden, kann auf zweierlei Weise variieren: 1) Auswahl des Zeitpunkts, zu welchem ein Scrub-Vorgang erfolgen soll, und 2) Auswahl einer Anzahl von Sektoren, die gleichzeitig einem Scrub-Lesevorgang unterzogen werden sollen.
  • Es ist möglich, dass die Scrub-Rate, die erforderlich ist, um eine Datenintegrität aufrechtzuerhalten, sich im Verlauf der Nutzungszeit des Produktes ändert. Zum Beispiel kann sich, wenn Zellen mehrere Zyklen durchlaufen haben, die Rate der Störungen erhöhen oder vermindern. Würde man zum Zeitpunkt der Herstellung eine feste Scrub-Rate festlegen, müsste die im Verlaufe der Nutzungszeit des Speichersystems erforderliche höchste Rate genutzt werden, um die Integrität des Speichersystems über die Nutzungszeit des Speichersystems hin beizubehalten. Dies würde zu einer höheren Scrub-Rate führen, wenn eine niedrigere ausreichend wäre, wodurch sich ein höherer Abstrich am Leistungsverhalten des Speichersystems ergäbe, als zu bestimmten Zeiten während der Nutzungszeit des Speichersystems erforderlich wäre. Es gibt verschiedene Ansätze, um die Scrub-Raten im Verlaufe der Nutzungszeit eines Speichersystems abzustimmen.
  • Es ist möglich, zum Zeitpunkt der Herstellung des Speichersystems eine variable Scrub-Rate festzulegen. Ein Verfahren dafür besteht darin, eine Tabelle mit Ratewerten bereitzustellen, welche unterschiedliche Scrub-Raten für irgendeine Metrik, die die Störungsrate beeinflusst, festlegt. Ein Beispiel ist eine Tabelle, die Scrub-Raten für unterschiedliche Programmier/Lösch-Zykluszahlen enthält, welchen die verschiedenen Teile des Speicher-Arrays ausgesetzt waren. Wenn in dem Speichersystem Zykluszahlen verfolgt werden, würde der Scrub-Rate-Parameter anhand der Tabelle auf Basis des schlechtesten Falls oder einer mittleren Zykluszahl für einen gegebenen Bereich des Arrays ausgewählt werden.
  • Ein weiterer Ansatz besteht darin zu ermöglichen, dass das Speichersystem die Scrub-Rate selbst anpasst, und zwar basierend auf den Ergebnissen vorhergehender Scrub-Operationen. Wenn zum Beispiel das Speichersystem ein Protokoll der Scrub-Operationen unterhält und feststellt, dass bei einem sehr geringen prozentualen Anteil von Scrub-Vorgängen eine korrigierende Maßnahme erforderlich ist, könnte es die Rate, mit welcher Scrub-Lesevorgänge ausgeführt werden, nach unten anpassen. Wenn es andererseits feststellt, dass bei einem sehr hohen prozentualen Anteil von Scrub-Vorgängen eine korrigierende Maßnahme erforderlich ist, könnte es die Rate, mit welcher Scrub-Lesevorgänge ausgeführt werden, nach oben anpassen. Eine weitere Messgröße, entsprechend welcher das Speichersystem die Scrub-Rate anpassen kann, ist der Betrag der in einzelnen Speicherelementen während vorhergehender Scrub-Vorgänge erkannten Verschiebung oder die Anzahl an Bitfehlern. Bei jedem der vorstehenden Fälle kann das System die Scrub-Rate-Parameter mit jedem neuen Ergebnis adaptiv anpassen oder kann die Informationen für periodische Anpassungen protokollieren.
  • Es gibt mehrere Techniken, die genutzt werden können, um auszuwählen, wann ein Scrub-Vorgang erfolgen soll, einige Beispiele dafür sind: 1) zufällig oder pseudozufällig; 2) auf Grundlage der Anzahl von Host-Operationen; 3) auf Grundlage der Anzahl von Operationen in dem Speicherbauelement; 4) auf Grundlage eines Zeitintervalls. Es ist möglich, eine der vorstehend beschriebenen Techniken zu nutzen, um die Rate abzustimmen, mit welcher Scrub-Operationen ausgeführt werden. Nachstehend sei angenommen, dass jegliche Parameter, die für die Scrub-Entscheidung erforderlich sind, zum Zeitpunkt der Herstellung bereitgestellt werden. Es kann unterschiedliche Rateparameter für Lese-, Schreib- und Löschvorgänge geben, da diese jeweils den Speicher mit unterschiedlicher Häufigkeit stören können.
  • Es ist möglich, Zufallszahlen (RN) oder Pseudozufallszahlen (PRN) zu nutzen, um die Häufigkeit von Scrub-Operationen festzulegen, wenn diese für das System zur Verfügung stehen oder von dem System generiert werden. Eine Reihe von Verfahren zum Nutzen einer RN- oder PRN-Folge, um zu entscheiden, ob eine Scrub-Operation ausgeführt werden soll oder nicht, wird nachstehend beschrieben. Bei sämtlichen nachstehenden Verfahren wird angenommen, dass die RN in einem gewissen regelmäßigen Intervall überprüft wird, und die Entscheidung zum Ausführen des Scrub-Vorgangs oder zum Nichtausführen desselben wird basierend auf einem gewissen Test des RN-Wertes getroffen.
  • Ein Verfahren zum Nutzen einer Zufallszahl, um eine Scrub-Rate festzulegen, besteht darin, eine logische UND-Verknüpfung einer RN oder PRN mit einem Maskenparameter vorzunehmen, bei dem eine Reihe von Bits auf den Wert Eins gesetzt ist und der Rest auf Null gesetzt ist. Die Entscheidung, ob eine Scrub-Operation ausgeführt wird oder nicht, würde auf Grundlage dessen getroffen, ob die UND-Operation einen Wert Null oder einen Wert ungleich Null ergeben hat. Ein Maskenwert mit mehr Einsen führt weniger häufig zu einem Wert Null als ein Maskenwert mit mehr Nullen. Die nachstehende Tabelle zeigt die ungefähren Scrub-Raten bei unterschiedlichen Maskenwerten mit acht Bit unter der Annahme, dass ein Ergebnis Null der UND-Verknüpfung eine Scrub-Operation bewirkt. Man beachte, dass bei einer echten Zufallssequenz nur die Anzahl der Bits mit dem Wert Eins die Rate beeinflusst und nicht der Wert selbst, die Werte in der Tabelle stellen somit nur exemplarische Werte dar.
    Maskenwert (hex) Maskenwert (bin) Scrub-Rate
    0×00 00000000 1/1
    0×01 00000001 1/2
    0×03 00000011 1/4
    0×07 00000111 1/8
    0×0F 00001111 1/16
    0×1F 00011111 1/32
    0×3F 00111111 1/64
    0×7F 01111111 1/128
    0×FF 11111111 1/256
  • Eine weitere verwandte Methode besteht darin, die Anzahl der Bits in einer RN mit dem Wert 1 zu zählen, um festzulegen, ob eine Scrub-Operation ausgeführt werden soll oder nicht. Wiederum könnte die Anzahl der Bits in der RN mit einer Maske oder einem Wert, der einen Schwellwert angibt, verglichen werden. Ein noch weiteres Verfahren umfasst das Vergleichen des Wertes einer RN mit demjenigen eines Scrub-Rate-Parameters. Die Entscheidung, ob ein Scrub-Vorgang ausgeführt wird oder nicht, würde darauf basieren, ob die RN den Schwellwert numerisch übersteigt. Beispielsweise wäre für einen Schwellwert 5 die RN in 5/256 der Zeit höher.
  • Alternativ kann die Scrub-Rate an die Anzahl von ausgeführten Host-Operationen gekoppelt werden. Beispielsweise ist es möglich, eine Scrub-Operation jeweils nach N Lese-, Schreib- und/oder Löschvorgänge des Hosts auszuführen, wobei N ein Rateparameter ist, der die Scrub-Rate festlegt. Ferner kann die Scrub-Rate an die Anzahl von ausgeführten Speicheroperationen gekoppelt werden. Zum Beispiel ist es möglich, dass ein Scrub-Vorgang jeweils nach NR Lese-, NW Schreib- und/oder NE Löschoperationen ausgeführt wird, wobei NR, NW und NE Rateparameter darstellen, welche die Scrub-Rate festlegen. Als eine weitere Alternative könnten, wenn das Speichersystem ein Verfahren zum Messen von Zeitintervallen umfasst, dann die Scrub-Vorgänge in einem gewissen regelmäßigen Zeitintervall T ausgeführt werden, wobei T ein Parameter ist, der bereitgestellt wird, um die Scrub-Rate festzulegen.
  • Um das Leistungsverhalten des Speichersystems beizubehalten, kann es wünschenswert sein, einen Scrub-Lesevorgang aufzuschieben, selbst nachdem die Entscheidung getroffen worden ist, einen Scrub-Lesevorgang auszuführen. Die Gründe dafür können Echt zeiterwägungen beinhalten. Beispielsweise ist es möglich, dass ein Host einen bestimmten Datentransfer benötigt und dass zweckbestimmte Ressourcen, die zu bestimmten Zeitpunkten einem Scrub-Vorgang unterworfen werden, die Fähigkeit des Speichersystems beinträchtigen könnten, die garantierte Datenrate zu erfüllen. Für einen solchen Zweck könnte das Speichersystem die Parameter der Scrub-Operation in eine Warteschlange stellen, und zwar zur späteren Bearbeitung zu einem Zeitpunkt, wenn das Ausführen des Scrub-Vorgangs das Leistungsverhalten des Hosts nicht beeinträchtigt. Die Scrub-Vorgänge können auf einen späteren Zeitpunkt während der Befehlsbearbeitung des Hosts, auf einen Zeitpunkt nach der Befehlsbearbeitung oder bis zu einem späteren Hostbefehl aufgeschoben werden. In einem solchen Fall werden die Parameter für die Scrub-Operation, die festgelegt worden sind, gespeichert und zu einem späteren Zeitpunkt verarbeitet, wenn dies für den Host am praktischsten ist.
  • Da nur ein Teil eines exponierten Bereichs des Speicher-Arrays zu einem gegebenen Zeitpunkt einem Scrub-Vorgang unterzogen werden kann, liegt ein wichtiger Aspekt zum Erreichen einer guten Abdeckung in der Auswahl, wo der Scrub-Vorgang stattfinden soll, wenn die Entscheidung zum Ausführen eines Scrub-Vorgangs einmal erfolgt ist. Die Auswahl, wo ein Scrub-Vorgang erfolgt, steht im Allgemeinen mit der Speicherstelle von Lese-, Schreib- und/oder Löschvorgängen an dem Speicherbauelement im Zusammenhang. Eingebettet in die Auswahl sind Kenntnisse zu dem Bereich, über welchen hin eine gegebene Speicheroperation die anderen Speicherelemente stören wird. Das In-Zusammenhang-Setzen der einem Scrub-Vorgang zu unterziehenden Bereiche mit dem Bereich, in dem gearbeitet wurde, macht es möglich, dass die Scrub-Operationen höchst effizient sind, da diese Scrub-Operationen nicht in Bereichen des Speichers erfolgen, die wahrscheinlich nicht gestört worden sind.
  • Ein Verfahren zum Auswählen der Speicherstelle für einen Scrub-Vorgang umfasst das Nutzen einer RN oder PRN zur Auswahl einer Speicherstelle aus einem Expositionsbereich einer gegebenen Operation. Im Mittel wird für die Bereiche, welche die höchste Exposition erfahren, die Wahrscheinlichkeit am größten sein, für einen Scrub-Vorgang ausgewählt zu werden. Die Scrub-Rate würde derart angepasst, dass der erwarteten Zufallszahl-Abdeckung für den schlechtesten Fall Rechnung getragen wird, aufgrund der Gegebenheit, dass einige Bereiche öfter als andere ausgewählt werden, und es wird nur im Mittel eine gleichmäßige Abdeckung gegeben sein.
  • Ein weiteres Verfahren zum Auswählen der Stelle für den Scrub-Vorgang umfasst das deterministische Verschieben über einen exponierten Bereich. Dieses Verfahren würde jedoch das Protokollieren von sowohl Speicheroperationen als auch Scrub-Operationen erfordern, um eine vollständige Abdeckung sicherzustellen.
  • Wenn eine Aktivität an dem Speicher protokolliert wird, dann ist es möglich, ein Maß für die Stärke der Exposition, der ein gegebener Bereich durch potenziell störende Operationen unterliegt, zu erhalten. Sind solche Informationen vorhanden, so kann das Speichersystem das Protokoll nach Bereichen durchsuchen, welche die höchste Exposition erfahren haben, und kann die Scrub-Operation auf diese Bereiche beschränken. Diese Methode kann genutzt werden, um ein beliebiges der vorstehenden Verfahren bei der Bestimmung der Rate und der Speicherstellen für einen Scrub-Vorgang zu leiten. Allgemein können die Programmier/Lösch-Zyklen verfolgt werden, über die Unterhaltung von Zykluszahldaten. Es ist jedoch im Allgemeinen unpraktisch, die Leseaktivität zu protokollieren, somit ist es nicht wahrscheinlich, dass dieses Verfahren genutzt wird, um eine Leseexposition zu verfolgen.
  • Alternativ können die Speicherstellen von korrigierenden Maßnahmen protokolliert werden und können als Richtlinie für Bereiche genutzt werden, die anfälliger für Störungen sind als andere oder die eine stärkere Exposition als andere erfahren. Das Speichersystem kann diese Informationen nutzen, um die Wahl von Gebieten für einen Scrub-Vorgang, insbesondere im Hinblick auf Bereiche, die häufiger als andere eine korrigierende Maßnahme erfordert haben, zu Wichten.
  • Bei Systemen, bei denen keine Kenntnisse zu potenziellen Bereichen mit störender Exposition unterhalten werden, können entweder zufällige oder deterministische Verfahren unabhängig von solchen Kenntnissen genutzt werden. In diesem Fall werden die Scrub-Vorgänge in dem gesamten Speichersystem ausgeführt, unabhängig davon, wo durch die Host-Aktivität Operationen in dem Speichersystem bewirkt werden. Die Scrub-Rate wird jedoch ausreichend hoch angepasst, um eine hinreichende Abdeckung sicherzustellen. Im Allgemeinen stellt dies eine große Verschwendung von Ressourcen dar, da einige Bereiche des Speichersystems eine viel höhere Exposition als andere erfahren werden und vorzugsweise die primären Bereiche zur Konzentration von Scrub-Operationen darstellen.
  • Der Zweck einer Scrub-Operation besteht darin, gestörte Speicherelemente zu erkennen, bevor die Anzahl der Bitfehler und der Grad der verschobenen Zellen die Möglichkeiten jedes Wiederherstellungssystems, das in dem Speichersystem verfügbar ist, übersteigen. Zu diesem Zweck ist es im Allgemeinen wünschenswert, eine Störung so früh wie möglich zu erkennen, und zwar bevor ein großer Teil des Schutzbandes für einen gegebenen Schwellspannungspegel aufgrund der Störung verloren ist.
  • Wie zuvor im Hintergrund beschrieben, speichern Flash-Speicher üblicherweise Daten als diskrete Zustände oder Bereiche von Ladungsspeicherpegeln, von denen jeder von anderen Zuständen durch ein gewisses Schutzband getrennt ist. Es gibt generell einen nominellen Lese-Unterscheidungspegel zwischen jeweiligen Zuständen, oberhalb welchem ein Speicherelement als in einem bestimmten Zustand befindlich betrachtet wird und unterhalb welchem es als in einem anderen Zustand befindlich betrachtet wird. Wenn ein gegebenes Speicherelement gestört wird, kann der Pegel, auf welchen dieses programmiert oder gelöscht worden ist, beginnen, sich zu verschieben. Wenn der Pegel des Speicherelements sich dem Lese-Unterscheidungspegel nähert oder diesen durchschreitet, liefert er Daten in einem anderen Zustand als demjenigen, auf welchen programmiert oder gelöscht worden ist. Der Fehler wird sich im Allgemeinen selbst als ein oder mehrere fehlerhafte Bits in den Daten manifestieren und wird im Allgemeinen durch Nutzung einer ECC-Abdeckung des Datenfeldes erkannt.
  • Ein Begrenzen oder Vorausrichten der Lesebedingungen in solcher Weise, dass der Lese-Unterscheidungspegel stärker zu dem einen oder anderen Zustand hin verschoben ist, wird bewirken, dass gestörte Speicherelemente selbst dann in dem falschen Zustand gelesen werden, wenn der Betrag der Verschiebung unter normalen Lesebedingungen keinen Fehler bewirken würde. Damit ist es möglich, dass das System eine Verschiebung erkennt, bevor diese den Punkt erreicht, an welchem sie während des normalen Betriebs des Speichersystems Fehler bewirken würde.
  • Wenn für Störungsmechanismen bekannt ist, dass sie Datenspeicherpegel auf spezielle Weise beeinflussen, ist es möglich, solche spezifischen Störmechanismen zielgerichtet zu erkennen, indem die Lesebedingungen auf die erwarteten Pegelverschiebungen hin eingeschränkt werden. Wenngleich der ideale Fall darin bestehen würde, auf die erwarteten Störmechanismen mit einem einzigen Lesevorgang unter einem einzigen Satz von Grenzbedingungen abzuzielen, wird dies nicht immer möglich sein. Es kann notwendig sein, mehrere Lesevorgänge mit unterschiedlichen Bedingungen auszuführen. Beispielsweise ist es möglich, dass unterschiedliche Störungsmechanismen, die in einem Speicher vorhanden sind, bewirken, dass Speicherelemente entweder stärker programmiert oder stärker gelöscht werden. Speicherelemente sowohl oberhalb als auch unterhalb eines Unterscheidungspegels können sich zu diesem hin verschieben, in welchem Falle es notwendig sein kann, zunächst auf eine Verschiebung der Speicherpegel zu einem Unterscheidungspegel hin aus dem einen Zustand und danach aus dem anderen Zustand zu prüfen.
  • Es gibt zwei einzelne Messgrößen für die Datenqualität, die als Schwellwerte zum Bestimmen, ob eine korrigierende Maßnahme erfolgen sollte, genutzt werden können: 1) die Erkennung von Datenfehlern durch Nutzung eines ECC; und 2) selbst wenn wenige oder keine Datenfehler erkannt werden, kann eine Verschiebung der Ladungsspeicherpegel erkannt werden, bevor diese Datenlesefehler bewirken.
  • Wie zuvor diskutiert, können für die Scrub-Lesebedingungen Grenzen festgelegt werden, um auf bestimmte erwartete Störmechanismen abzuzielen, oder um einfach auf eine ausreichende Toleranzgrenze in den gespeicherten Pegeln hin zu überprüfen. Egal ob die Daten unter nominellen Bedingungen oder Bedingungen mit Toleranzgrenzen gelesen werden, die Entscheidung, ob eine korrigierende Maßnahme erfolgt oder nicht, kann auf Grundlage der Anzahl der fehlerhaften Bits getroffen werden, die während des Scrub-Lesevorgangs erkannt werden. Wenn beispielsweise die Anzahl der fehlerhaften Bits unterhalb der ECC-Korrekturfähigkeiten des Systems liegt, kann das System entscheiden, die korrigierende Maßnahme aufzuschieben, oder kann den Fehler insgesamt ignorieren.
  • Zusätzlich zur Nutzung der Anzahl der fehlerhaften Bits als Schwellwert zum Einleiten einer korrigierenden Maßnahme kann das System die Entscheidung zur Korrektur auf Grundlage anderer Faktoren treffen, beispielsweise dem Muster der fehlerhaften Bits. Zum Beispiel können die ECC-Korrekturfähigkeiten im Hinblick auf das Muster der Bitfehler sensitiv sein, oder die Bitfehlermuster können für einen bestimmten bekannten Störmechanismus in dem nichtflüchtigen Speicher kennzeichnend sein. Es kann andere Gründe geben, um den Schwellwert basierend auf Bitfehlermustern festzulegen. Das Bitfehlermuster ergibt sich im Allgemeinen während des ECC-Korrekturvorgangs.
  • Aus Gründen des Leistungsverhaltens kann es wünschenswert sein, eine korrigierende Scrub-Maßnahme aufzuschieben, selbst wenn festgelegt worden ist, dass die korrigierende Maßnahme erforderlich ist. Die Gründe dafür können Echtzeiterwägungen beinhalten. Beispielsweise ist es möglich, dass ein Host einen bestimmten Datentransfer benötigt und dass zweckbestimmte Ressourcen, die zu bestimmten Zeitpunkten einem Scrub-Vorgang unterworfen werden, die Fähigkeit des Speichersystems beinträchtigen könnten, die garantierte Datenrate zu erfüllen. Für einen solchen Zweck könnte das Speichersystem die Parameter der Scrub-Operation in eine Warteschlange stellen, und zwar zur späteren Bearbeitung zu einem Zeitpunkt, wenn das Ausführen des Scrub-Vorgangs das Leistungsverhalten des Hosts nicht beeinträchtigt. Die korrigierenden Scrub-Vorgänge können auf einen späteren Zeitpunkt während der Befehlsbearbeitung des Hosts, auf einen Zeitpunkt nach der Befehlsbearbeitung oder bis zu einem späteren Hostbefehl aufgeschoben werden. Die Hauptsache ist, dass die Parameter für die Scrub-Operation gespeichert und zu einem späteren Zeitpunkt verarbeitet werden, wenn dies für den Host am praktischsten ist.
  • Es gibt zwei deutlich verschiedene Extreme von Speicherarchitekturen, die jeweils zu unterschiedlichen Verfahren der Abbildung von Hostdaten auf physische Speicherstellen in dem Speicherbauelement und zum Verwalten der einmal programmierten Daten und zum Zugreifen auf diese führen. Der grundlegende Unterschied zwischen den beiden Architekturen betrifft die Größe der minimalen Löscheinheit und deren Beziehung zu der Größe des Host-Protokoll-Datensektors.
  • Wenn die Größe der minimalen Löscheinheit ungefähr derjenigen des Host-Datensektors entspricht, ist es möglich, ein direktes Adressierungsschema zu implementieren, bei welchem ein gegebener Host-Datensektor im Allgemeinen auf dieselbe physische Speicherstelle abgebildet wird, an die er von dem Host geschrieben wird. Bei einem solchen Schema werden die vorherigen Inhalte im Allgemeinen an der physischen Speicherstelle gelöscht, bevor die diese ersetzenden Daten an ihre Stelle geschrieben werden. Dieses Umschreiben kann ein Lesen-Modifizieren-Schreiben umfassen, wenn die Größe der minimalen Löscheinheit größer als diejenige eines Host-Sektors ist. Es ist bei diesem Adressierungsschema möglich, dass die Hostsektoren neu auf alternative Speicherstellen in dem Speichersystem abgebildet werden, dies erfolgt jedoch im Allgemeinen nur während Sektor-Neuzuordnungen als Teil eines Defektmanagementvorgangs oder aus irgendwelchen anderen Gründen bezüglich der Systemzuverlässigkeit. Nach einer solchen Abbildung wird der Host-Sektor allgemein bis zu irgendeinem anderen Neuzuordnungsereignis auf die neue physische Speicherstelle abgebildet bleiben. Bei einem solchen direkten Adressabbildungsschema umfasst die auf einer Störung beruhende korrigierende Maßnahme im Allgemeinen das Löschen der Inhalte von der physischen Speicherstelle, für die eine Störung festgestellt worden ist, und das neue Schreiben dieser an dieselbe Speicherstelle. Etwaige Fehler während des Neuschreibens werden in einer Weise behandelt, die der in dem System zur Anwendung kommenden allgemeinen Ausnahmebehandlung entspricht, darunter, aber nicht ausschließlich, erneutes Löschen und erneutes Schreiben, Neuzuordnen, Änderung der Lösch- oder Schreibparameter, und so weiter.
  • Wenn andererseits die Größe der minimalen Löscheinheit viel größer als diejenige der Host-Sektoren ist, ist es üblich, ein Adressierungsschema mit Löschgruppenbildung, ein so genanntes Erase-Pooling, zu implementieren. Ein solches Adressierungsschema kann ebenso gut auch bei Speichern implementiert werden, die eine kleine minimale Löscheinheit aufweisen. Bei einem Schema mit Löschgruppenbildung sind die Host-Sektoren normalerweise zu logischen Blöcken gruppiert, die dann auf physischen Löscheinheiten abgebildet werden. Ein gegebener Host-Datensektor ist innerhalb einer Löscheinheit von anderen Host-Datensektoren umgeben. Wenn der Host einen gegebenen Datensektor schreibt, wäre es unpraktisch, sämtliche den Zielsektor umgebende Sektoren zu lesen, den Block zu löschen und danach sämtliche Sektoren zurück in die Löscheinheit zu schreiben, wobei der eine Host-Sektor die neuen Daten enthält. Um solche Vorgänge mit übermäßigem Overhead zu vermeiden, werden bei einem Schema mit Löschgruppenbildung im Allgemeinen eine Reihe von Löscheinheiten im gelöschten Zustand gehalten, und zwar zum Zwecke des Haltens neuer Versionen von Daten, wenn diese geschrieben werden. Sektoren werden für Zwecke der Datenverwaltung im Allgemeinen zu logischen Gruppen zusammengefasst, und im Allgemeinen wird das System versuchen, eine physische Nähe von in der gleichen logischen Gruppe befindlichen Sektoren aufrechtzuerhalten. Mehrere Löscheinheiten können kombiniert werden, sodass sie ein als Metablock oder virtueller Block bezeichnetes logisches Konstrukt bilden, normalerweise zum Zwecke der Ermöglichung einer hohen Parallelität beim Schreiben. Im Allgemeinen werden die neuen Daten von dem Host an eine gelöschte Speicherstelle geschrieben. Zu einem gewissen Zeitpunkt werden die anderen Sektoren aus derselben logischen Gruppe, die nicht durch neue Daten ersetzt worden sind, entweder in denselben Metablock kopiert, oder sie werden zusammen mit den neu geschriebenen Daten in einen anderen Metablock kopiert. Später, wenn sämtliche Daten in einem gegebenen Metablock oder in einer Löscheinheit ersetzt worden sind oder an eine andere Stelle kopiert worden sind, wird der Metablock oder die Löscheinheit gelöscht und wird als Teil des Pools gelöschter Löscheinheiten betrachtet. Bei einem solchen Adressierungsschema mit Löschgruppenbildung umfasst die auf einer Störung beruhende korrigierende Maßnahme im Allgemeinen das Kopieren der beeinträchtigten Daten an eine andere Speicherstelle in dem Speichersystem zusammen mit einer etwaigen Datenkonsolidierung, die für das System im Hinblick auf ein normales Verhalten des Speichersystems erforderlich ist.
  • Es ist jedoch möglich, dass Daten, für die eine korrigierende Maßnahme erforderlich ist, während einer Scrub-Operation anders als bei Schreiboperationen, die auf einer Aktivität des Hosts oder einer allgemeinen Datenverwaltung beruhen, behandelt werden. Es ist möglich, die Daten an eine spezielle Speicherstelle zu schreiben, die zum Halten solcher Daten während einer kurzen Zeitspanne reserviert ist, bis es für das System praktisch ist, diese mit logisch kontinuierlichen Daten zu konsolidieren, wobei dieser Bereich entweder in Reserve gehalten wird oder bei Bedarf zugewiesen wird. Unter bestimmten Umständen ist es auch möglich, dass das System einfach die Daten löscht und neu an dieselbe Speicherstelle schreibt. Wenn beispielsweise wenige oder keine weiteren Daten in dem physischen Block angesiedelt sind, könnten die anderen Daten entweder dauerhaft an eine andere Stelle verschoben werden oder könnten während des Löschens zeitweilig anderswo gespeichert werden, möglicherweise in einem flüchtigen Speicher, und zusammen mit den Daten, für welche die korrigierende Maßnahme erforderlich ist, zurückgeschrieben werden. Etwaige Fehler während des Daten-Schreibvorgangs würden in einer Weise behandelt, die der allgemeinen Ausnahmebehandlung entspricht, wie sie in dem System zur Anwendung kommt, darunter, aber nicht ausschließlich, erneutes Schreiben, erneutes Zuweisen, Schreiben an eine neue Speicherstelle, Ändern von Lösch- oder Schreibparametern, erzwungene Rotation der Datenpolarität, und so weiter.
  • Es ist möglich, dass einzelne Speicherelemente, Gruppen von Speicherelementen oder andere Strukturen gegenüber Störungen empfindlicher sind als andere. Als Beispiel für solche möglichen Strukturen oder Gruppierungen können Flash-Speicherelemente von Flash-Speichern derart angeordnet sein, dass sie eine gemeinsame Drain-, Source- oder Gate-Leitung gemeinsam nutzen, und aufgrund von Prozessschwankungen ist es möglich, dass eine solche Gruppe von verbundenen Speicherelementen eine stärkere Exposition gegenüber potenziell störenden Signalen erfährt als im Mittel. Gleichermaßen können einzelne Speicherelemente aufgrund von Abweichungen beim Prozess, der zur Ausbildung des Arrays genutzt wird, anfälliger sein als andere. Das Speichersystem kann derart gestaltet werden, dass diese Bereiche, die als empfindlich gegenüber Störungen erachtet werden, dauerhaft für die Abbildung ausgeschlossen werden oder neu zugeordnet werden. In einem extremen Fall können alle Speicherelemente oder andere Strukturen beim ersten Auftreten einer korrigierenden Scrub-Maßnahme neu zugeordnet werden. Beispielsweise können diejenigen Speicherelemente, die Bits enthalten, welche eine ECC-Korrektur erfordern, für die Abbildung ausgeschlossen werden, wenn redundante Speicherelemente verfügbar sind. Bei anderen Ausführungsformen können die Speicherstellen der korrigierenden Maßnahmen protokolliert werden und später für Zwecke der Neuzuordnung von Speicherelementen oder Gruppierungen zu einem späteren Zeitpunkt analysiert werden. Die Analyse kann einen Schwellwert dafür beinhalten, wie oft eine korrigierende Maßnahme für eine gegebene Gruppierung erforderlich war. Bei einigen Fällen müssen die protokollierten Daten möglicherweise mit Kenntnissen zu den physikalischen Aspekten des Speicherbauelements analysiert werden, um das Vorhandensein erwarteter physikalischer Strukturen, beispielsweise verbundener Speicherelemente zu erkennen. Die Art und Weise, in welcher Speicherelemente oder Gruppierungen von Speicherelementen neu zugeordnet werden, hängt von der Implementierung des Speichersystems ab. Zum Beispiel kann ein physischer Bereich, der einen logischen Sektor enthält, redundante Speicherelemente enthalten, und zwar zum Zwecke des Ersetzens von Speicherelementen, die für die Abbildung ausgeschlossen werden. Bei einem weiteren Beispiel kann ein gesamter Sektor oder eine gesamte Gruppe von Sektoren für die Abbildung ausgeschlossen werden, wenn für diese(n) eine korrigierende Maßnahme erforderlich war.
  • Scrub-Operationen können im Hintergrund von Host-Operationen ausgeführt werden, oder zwischen Host-Operationen. Es kann wünschenswert sein, das Verhalten der Scrub-Operation zu ändern, und zwar in Abhängigkeit von der Art der Operation, die der Host angefordert hat. Beispielsweise ist es möglicherweise nicht praktisch, dass eine korrigierende Scrub-Maßnahme während der Ausführung eines Lesebefehls des Hosts stattfindet, in welchem Fall die korrigierende Maßnahme bis zu einem Zeitpunkt aufgeschoben werden kann, der für das Speichersystem geeigneter ist.
  • Ein alternativer Ansatz zum Vermeiden von Störungen besteht darin, Daten, die eine potenziell störende Exposition erfahren haben, zu verschieben, ohne diese zunächst zu überprüfen, um festzustellen, ob die Daten fehlerhaft sind. Es gibt viele Ansätze, um die Häufigkeit und die Position der zu verschiebenden Daten auszuwählen, von denen die meisten bereits beschrieben worden sind.
  • ALLGEMEINE AUSFÜHRUNGSFORM DES SCRUB-VORGANGS
  • Ein Ablaufdiagramm aus 8 umreißt die Hauptschritte eines exemplarischen Scrub-Algorithmus für einen Flash-Speicher. Ein erster Schritt 91 überwacht die Aktivität des Speichersystems, um festzustellen, wann ein auch als Trigger-Event bezeichnetes Auslöseereignis für einen Scrub-Vorgang aufgetreten ist. Ein solches Trigger-Event kann eines der folgenden sein:
    • 1. Wenn ein Datenlese-, Datenschreib- oder Löschvorgang in einem gegebenen Block oder einer anderen Einheit des Arrays auftritt, der die Ladungspegel anderer Einheiten stören kann. Die Intensität und/oder Dauer des Vorgangs kann für die Bestimmung, ob ein Scrub-Vorgang auszulösen ist oder nicht, wesentlich sein, ebenso wie die Anfälligkeit des Arrays für Störungen (beispielsweise wenn der Speicher mit mehreren Zuständen mit schmalen Ladungspegelbereichen, welche die einzelnen Zustände definieren, arbeitet).
    • 2. Wenn bei einem normalen System-Lesevorgang einer gegebenen Einheit Daten mit zumindest einem oder einer vorgegebenen Anzahl von Bitfehlern gelesen werden.
    • 3. Wenn Lesevorgänge mit Toleranzgrenzen (mit Referenzpegel, die derart festgelegt sind, dass eine schmalere programmierte Verteilung als bei dem normalen Lesevorgang gelesen wird) zeigen, dass die Schwellspannungspegel der programmierten Zellen nicht optimal sind, wenngleich keine Bitfehler existieren.
    • 4. Nachdem eine vorgegebene Zeitspanne seit dem letzten Scrub-Vorgang abgelaufen ist.
    • 5. Wenn der Host eine Scrub-Operation einleitet.
  • Die Zielstellung besteht insgesamt darin, eine Scrub-Operation häufig genug einzuleiten, um gestörte Daten zu erkennen, bevor diese so zahlreich werden, dass sie jegliche Wiederherstellungsmöglichkeiten (ECC und dergleichen), die in dem Speichersystem verfügbar sein können, übersteigen.
  • Wenn ein Scrub-Trigger-Event erkannt wird, werden in einem nächsten Schritt 93 Speicherstellen in dem Speicher-Array zum Ausführen einer Scrub-Operation bestimmt. Beispielhafte Kandidaten können folgendermaßen bestimmt werden:
    • 1. Blöcke oder eine (mehrere) andere Einheit(en) außerhalb der gegebenen Einheit, die mit der gegebenen Einheit Bitleitungen, Wortleitungen oder andere Signalleitungen, an welche während der Lese-, Schreib- oder Löschvorgänge Spannungen oder Ströme angelegt werden, gemeinsam nutzen.
    • 2. Eine (mehrere) andere Einheit(en) außerhalb der gegebenen Einheit, bei denen das Signalleitungsfeld mit denen der gegebenen Einheit gekoppelt ist, sodass zwischen diesen Nebensprechen existiert.
    • 3. Ob eine (mehrere) solcher anderen Einheiten programmiert oder gelöscht sind, kann darüber bestimmen, ob sie durch die Operation an der gegebenen Einheit potentiell beeinträchtigt werden.
    • 4. Die eine (mehrere) potentiell beeinträchtigte(n) Einheit(en) können davon abhängen, ob der Vorgang ein Lese-, Schreib- oder Löschvorgang ist.
    • 5. Falls durch einen normalen System-Lesevorgang der gegebenen Einheit ausgelöst, bei dem ein (mehrere) Fehler in den gelesenen Daten entdeckt werden, wird die gegebene Einheit für eine Scrub-Operation festgelegt.
    • 6. Die relative Frische der Daten in den Kandidaten-Blöcken kann genutzt werden, um diejenigen auszuschließen, die in jüngerer Zeit neu geschrieben worden sind.
  • Auf die Festlegung eines oder mehrerer Speicherblöcke oder einer oder mehrerer anderer Einheiten als Kandidaten für einen Scrub-Vorgang folgt nicht notwendigerweise die Ausführung des Scrub-Vorgangs. Wie durch den nächsten Schritt 95 angegeben wird, kann die Einleitung des Scrub-Vorgangs unter bestimmten Bedingungen aufgeschoben werden, Beispiele dafür sind:
    • 1. Scrub-Lesevorgänge können aufgeschoben werden, um das Leistungsverhalten des Systems zu optimieren oder um speziellen Betriebserfordernisse des Speichersystems in Echtzeit zu entsprechen.
    • 2. Scrub-Vorgang mit selbsttätiger Anpassung: die Rate, mit welcher Scrub-Operationen ausgeführt werden, kann dynamisch angepasst werden, um ein optimales Gleichgewicht zwischen der Aufrechterhaltung des Leistungsverhaltens und der Datenintegrität zu schaffen.
    • 3. Die Dringlichkeit der Ausführung einer Scrub-Operation kann teilweise anhand von Charakteristiken der Einheiten, die als potentiell beeinträchtigt identifiziert werden, bestimmt werden, beispielsweise deren Ereignisgrad (die Anzahl der Programmier/Lösch-Zyklen) und die Art des Ereignisses, das die Auslösung der Scrub-Operation bewirkt hat.
    • 4. Ein Scrub-Trigger-Event kann ferner derart eingeschränkt werden, dass es in deterministischer, zufälliger oder pseudozufälliger Weise eintritt: (a) nach einer spezifizierten Anzahl von Host-Operationen; (b) nach einer spezifizierten Anzahl von physikalischen Lese-, Schreib- und/oder Löschvorgängen; (c) nach einer spezifizierten Zeitspanne; (d) basierend auf Nutzungscharakteristiken des Hosts; oder (e) in zufälliger oder pseudozufälliger Abfolge, deren Erzeugung und Überprüfung an einen der vorstehenden Faktoren gekoppelt werden kann.
  • In einem nächsten Schritt 97 werden sämtliche oder lediglich einige der Blöcke oder anderen Einheiten des Speichers, die in Schritt 93 als Kandidaten für einen Scrub-Vorgang identifiziert worden sind, für den Scrub-Vorgang ausgewählt. Die Auswahlkriterien umfassen:
    • 1. Die Anzahl der bestimmten Einheiten, die für jeden Scrub-Vorgang festgelegt werden, kann derart gewählt werden, dass ein Gleichgewicht zwischen der Auswirkung der für den Scrub-Vorgang erforderlichen Zeit auf das Leistungsverhalten des Systems und der Notwendigkeit, die Datenintegrität aufrechtzuerhalten, geschaffen wird.
    • 2. Die Art und Weise, in welcher dieses Gleichgewicht beibehalten wird, kann darin bestehen, eine Anzahl von Einheiten für den aktuelle Scrub-Vorgang zu bestimmen, die von dem Alter des Speichers, der Anzahl der Programmier/Lösch-Zyklen, die die identifizierten Einheiten erfahren haben, der Art des Ereignisses, das den Scrub-Vorgang ausgelöst hat, und einer Verlaufsgeschichte korrigierender Maßnahmen, die notwendigerweise an Daten in den identifizierten Einheiten erfolgt sind, abhängt.
    • 3. Die Anzahl der in einem Scrub-Vorgang umfassten Einheiten kann von dem Alter des Speichers, der Anzahl der Programmier/Lösch-Zyklen, welche die gegebenen Einheiten erfahren haben, und der Art des Ereignisses, das den Scrub-Vorgang ausgelöst hat, abhängen.
    • 4. Alternativ können weniger als sämtliche identifizierten Einheiten für den Scrub-Vorgang ausgewählt werden, indem eine deterministische, zufällige oder pseudozufällige Abfolge verfolgt wird, in einer Weise, die mit der normalen Nutzung nicht in Zusammenhang steht.
  • Als nächstes werden, wie in Schritt 99 angegeben ist, Daten aus den ausgewählten Einheiten gelesen (Scrub-Lesevorgang), und zwar folgendermaßen:
    • 1. Ein Scrub-Lesevorgang steht nicht direkt mit der Beendigung einer bestimmten Operation des Hosts oder mit anderen Systemoperationen wie etwa einem Abnutzungsausgleich in Zusammenhang, wird üblicherweise aber in der gleichen Weise wie normale Daten-Lesevorgänge ausgeführt.
    • 2. Begrenzte Lesevorgänge (Lesevorgänge mit Referenzpegeln, die sich von denjenigen der normalen Daten-Lesevorgänge unterschieden) können unter speziellen Umständen ausgeführt werden: (a) als ein zweiter Lesevorgang für Daten, die zu viele Fehler aufweisen, als dass sie durch einen ECC korrigiert werden könnten, wobei die Referenzpegel bei dem zweiten Lesevorgang gelockert sind, sodass eine breitere programmierte Verteilung als bei dem normalen Lesevorgang gelesen wird (oder kann alternativ in dem später diskutierten Datenkorrekturschritt 107 ausgeführt werden); oder (b) wenn durch den spezifischen Störmechanismus, von dem erwartet wird, dass er durch das auslösende Ereignis bewirkt wird, die programmierten Pegel wahrscheinlich deutlich verschoben werden, könnte der anfängliche Lesevorgang ein Lesevorgang mit Toleranzgrenzen mit weiteren Referenzpegeln sein; oder (c) als ein zweiter Lesevorgang für Daten, die keine oder einige wenige Bitfehler aufweisen, die durch einen ECC korrigiert werden können, um Daten zu identifizieren, die als Ladungspegel gespeichert sind, die sich von den optimalen Pegeln weg verschoben haben, wobei die Referenzpegel bei diesem zweiten Lesevorgang verengt werden, sodass eine schmalere Verteilung als bei dem normalen Lesevorgang gelesen wird. (Eingegrenzte Scrub-Lesevorgänge werden später mit Bezug auf 10 diskutiert.)
    • 3. Als Teil des Lesens der Daten eines Blocks werden auch die Overhead-Daten gelesen. Wenn die relative Frische der Daten im Header gespeichert ist, kann diese genutzt werden, um die frisch umgeschriebenen Blöcke zu identifizieren, die keinem Scrub-Vorgang unterzogen zu werden brauchen.
  • In einem nächsten Schritt 101 wird die Integrität der gelesenen Daten bewertet. Als Teil des Scrub-Lesevorgangs kann ein ECC anhand der aus der/den Speichereinheit(en) gelesenen Nutzerdaten berechnet werden und mit dem ECC verglichen werden, der zuvor während der Programmierung berechnet und zusammen mit den Nutzerdaten gespeichert worden ist. Solang keine Bitfehler oder eine geringe Anzahl von Fehlern, die durch den ECC korrigiert werden können, vorhanden sind, braucht der zweite, der Lesevorgang mit Toleranzgrenzen mit gelockerten Referenzpegeln, wie zuvor beschrieben, nicht ausgeführt zu werden.
  • Ein zusätzlicher Lesevorgang, der optional erfolgen kann, betrifft die Pegel von Verfolgungszellen, falls solche in dem Speicher-Array vorhanden sind, um zu sehen, ob sich deren gespeicherte Werte geändert haben. Verfolgende Speicherzellen sind oft vorhanden, um die Referenzpegel festzulegen, die genutzt werden, um die Speicherzellen zu lesen.
  • Wenn die Daten gelesen sind und die Anzahl der Fehler (falls vorhanden) der gelesenen Daten bekannt ist, wird in einem nächsten Schritt 103 festgestellt, ob eine korrigierende Maßnahme notwendig ist und ob sie erwünscht ist. Einige Erwägungen sind die folgenden:
    • 1. Ein Ansatz besteht darin, Daten mit einer beliebigen Anzahl von Bitfehlern zu korrigieren, womit bewirkt wird, dass der Scrub-Vorgang den stärksten Einfluss auf das Leistungsverhalten des Speichersystems hat.
    • 2. Ein weiterer Ansatz besteht darin, auf das Korrigieren der Daten zu verzichten, bis die Anzahl der Datenbitfehler einen Schwellwert N pro gelesener Einheit übersteigt, sodass der Einfluss des Scrub-Vorgangs auf das Leistungsverhalten reduziert wird.
    • 3. Das Muster der fehlerhaften Datenbits, so wie es durch Vergleich der ECCs festgestellt wird, kann ebenfalls genutzt werden, um zu bestimmen, ob eine Korrektur der Daten erwünscht ist.
    • 4. Daten, die in jüngerer Zeit neu geschrieben worden sind (relativ hoher Grad an Frische), werden bevorzugt keinem Scrub-Vorgang unterzogen.
  • Generell wird vorzugsweise ein Ausgleich zwischen der Auswirkung des Beendens des Scrub-Vorgangs auf das Leistungsverhalten und der Schwere der Fehler im Hinblick auf die momentane und zukünftige Datenintegrität geschaffen, wenn festgelegt wird, ob die fehlerhaften Daten korrigiert werden sollen.
  • In einem nächsten Schritt 105 wird bestimmt, ob eine korrigierende Scrub-Maßnahme ausgeführt wird oder bis zu einem späteren Zeitpunkt aufgeschoben wird. Eine der Erwägungen beim Treffen dieser Entscheidung ist die gleiche wie in Schritt 95, nämlich das Aufschieben, um speziellen Betriebserfordernissen des Speichersystems in Echtzeit zu diesem Zeitpunkt zu entsprechen. Im Allgemeinen wird die Beendigung des Scrub-Vorgangs vorzugsweise aufgeschoben, wenn dessen spätere Beendigung eine geringere Auswirkung auf das Leistungsverhalten des Systems bewirkt als wenn diese zum momentanen Zeitpunkt erfolgt. Es ist üblicherweise nicht wünschenswert, die normale Verarbeitung durch den Controller zu unterbrechen, um einen Scrub-Vorgang auszuführen, insbesondere wenn wegen einer großen Anzahl von Fehlern, die durch den ECC zu korrigieren sind, der Notwendigkeit der Datenkonsolidierung und dergleichen für den Scrub-Vorgang mehr Zeit als üblich erforderlich sein wird. Bei einem Aufschub werden die durch den Scrub-Lesevorgang gelesenen Daten, deren Adressen, etwaige durch die ECC-Analyse festgestellte Fehler und andere Parameter des Scrub-Vorgangs, die in den vorherigen Schritten erkannt worden sind, temporär gespeichert. Diese Daten und Parameter werden dann später gelesen, und der Scrub-Vorgang wird zu einem Zeitpunkt beendet, zu dem die Auswirkung auf das Leistungsverhalten des Systems geringer ist.
  • Wenn der Scrub-Vorgang beendet werden soll, werden die Daten in einem nächsten Schritt 107 korrigiert. Die Daten werden in diesem Fall unter Nutzung des ECC korrigiert. Falls diese nicht als Teil des zuvor genannten Schritts 99 erfolgt sind, können ein oder mehrere Lesevorgänge mit Toleranzgrenzen erforderlich sein (bei denen die Referenzpegel gelockert sind, um eine breitere programmierte Verteilung zu lesen als bei denjenigen, die während des früheren Lesevorgangs genutzt wurden), um die Daten wiederherzustellen, falls ein normaler oder Scrub-Lesevorgang mehr fehlerhafte Bits ergibt, als durch den genutzten ECC korrigiert werden können. Danach, in einem Schritt 109, wird eine geeignete korrigierende Maßnahme ausgeführt. Diese kann das Neuschreiben der korrigierten Daten an dieselbe Speicherstelle, von welcher sie gelesen worden sind, umfassen. Dies macht es natürlich erforderlich, zunächst den Block zu löschen, in welchen die Daten neu geschrieben werden, was bei der Speicheranordnung aus 2 praktisch sein kann, bei welcher jeder korrigierte Datensektor einen Speicherzellenblock ausfüllt. Dieses Vorgehen ist aber nicht effizient bei den Speicheranordnungen aus den 5 und 6 mit großen Blöcken, es sei denn, es sind genügend korrigierte Datensektoren vorhanden, die korrigiert worden sind und mit logisch aufeinanderfolgenden Adressen neu geschrieben werden müssen, sodass sie einen Block ausfüllen oder nahezu ausfüllen.
  • Alternativ können die korrigierten Daten neu an eine andere Speicherstelle als diejenige, von wo sie zu einem früheren Zeitpunkt des Scrub-Vorgangs gelesen worden sind, geschrieben werden. Wenn die Speicheranordnung große Speicherblöcke nutzt, wie in den 5 und 6 gezeigt ist, können das Löschpool- oder andere Verwaltungsverfahren für große Blöcke, die zuvor beschrieben worden sind, genutzt werden, wenn die neu zu schreibenden Daten weniger als die Kapazität eines Blocks ausmachen. Es ist beispielsweise nicht ungewöhnlich, dass Daten in nur einer oder zwei Speicherzeiten aus einem Block, der 16, 32 oder mehr Speicherseiten enthält, korrigiert werden sollen. Für solche Fälle kann ein Block in einer oder mehreren Ebenen des Arrays für die temporäre Speicherung einer oder wenigerer Speicherseiten mit korrigierten Daten zweckbestimmt sein. Die neu geschriebenen Daten werden danach mit den in den Speicherseiten des ursprünglichen Blocks gespeicherten unkorrigierten Daten kombiniert, und zwar zu einem geeigneten Zeitpunkt, beispielsweise während einer Datenkonsolidierung (Speicherbereinigung), die durch andere Faktoren während des normalem Betriebs des Speichers ausgelöst wird. Alternativ kann eine solche Konsolidierung dadurch eingeleitet werden, dass dieser zweckbestimmte Block voll wird, oder wenn eine vorgegebene Zeitspanne abgelaufen ist, nachdem die betreffenden Speicherseiten mit Daten in den zweckbestimmten Block geschrieben worden sind, oder wie anderweitig für den Systembetrieb geeignet.
  • Es kann praktisch sein, einen gemeinsamen zweckbestimmten physischen Block oder Blöcke zum temporären Speichern von Scrub-Neuschreibdaten von Speicherseiten vieler anderer Blöcke zu nutzen und dann später die Daten der neu geschriebenen Speicherseiten mit den Daten aus den anderen Speicherseiten ihrer ursprünglichen Blöcke zu konsolidieren. Beispielsweise werden neu geschriebene Scrub-Speicherseiten von den Blöcken 1 und 2 vorübergehend in einem temporären Block 3 gespeichert. Später werden die Scrub-Neuschreibseiten des Blocks 1 von dem Block 3 in einen gelöschten Block 4 kopiert, und die restlichen unveränderten Speicherseiten des Blocks 1 werden ebenfalls in den Block 4 kopiert, um die in dem physischen Block 1 abgebildeten Daten zu konsolidieren. Das gleiche erfolgt dann in einem weiteren gelöschten Block 5, in welchem die Scrub-Neuschreibseiten des Blocks 2, die in Block 3 gespeichert sind, sowie die unveränderten Datenseiten aus dem Block 2 konsolidiert werden.
  • Beim dem System aus 6, bei dem Metablöcke genutzt werden, kann entweder ein solcher zweckbestimmter Block in jeder Ebene vorhanden sein, um neu geschriebene Daten von anderen Blöcken in dieser Ebene zu speichern, oder ein einziger zweckbestimmter Block in dem gesamten System, in welchen korrigierte Daten von sämtlichen Speicherseiten in einer beliebigen Ebene geschrieben werden. Die spezielle Vorgehensweise, die gewählt wird, hängt von der Anzahl der Speicherseiten in den einzelnen Blöcken, der Anzahl der Speicherseiten in dem gesamten Speicher-Array und einer Vorhersage zu der erwarteten Anzahl und der Häufigkeit von Speicherseiten, deren Daten durch den Scrub-Prozess korrigiert werden, ab. Ein Speicher-Array mit einer Struktur und/oder Betriebsweise, durch die es für Störungen empfindlich ist, wird mehr zweckbestimmte Blöcke benötigen als ansonsten. Wenn der Scrub-Lesevorgang keine Datenfehler erkennen lässt, der Scrub-Vorgang aber ausgeführt wird, um verschobene gespeicherte Ladungspegel zurück in die Mitte ihres Zustandsbereichs zu bewegen, werden die gelesenen Daten einfach neu geschrieben, da offensichtlich keine Korrekturen erforderlich sind.
  • Die Art und Weise, in welcher einige Speichersysteme genutzt werden, bewirkt wenige Störungen. Der Scrub-Prozess wird dann selten ausgeführt, da wenige auslösende Ereignisse zu erkennen sind. Außerdem ist es praktisch, die relativ kleine Menge an neu geschriebenen Daten dauerhaft zusammen in einem oder mehreren zweckbestimmten physischen Blöcken zu speichern, unabhängig von den physischen Blöcken, in welchen die dem Scrub-Vorgang unterzogenen Daten ursprünglich angesiedelt waren. In diesem Fall werden die Speicherseiten mit einem Scrub-Vorgang unterzogenen Daten als Schritt des Scrub-Prozesses nicht wieder mit den Speicherseiten mit anderen, logisch kontinuier lichen Daten zu physischen Blöcken kombiniert. Ein weiteres Element der korrigierenden Maßnahme besteht darin, die korrigierten Daten mit einer anderen Rotation als beim ursprünglich geschrieben Zustand neu zu schreiben. Zum Beispiel können die vier analogen Speicher-Zustandsbereiche eines Vierzustandssystems ursprünglich derart ausgelegt sein, dass sie 00, 01, 10 bzw. 11 repräsentieren, und können beim Neuschreiben derart ausgelegt werden, dass sie 11, 10, 01 und 00 repräsentieren. Die Umsetzung erfolgt durch den Speichercontroller, wenn die Daten gelesen werden, und zwar unter Nutzung der Daten für die spezifische Rotation, die als Teil der Overhead-Daten oder anderweitig geführt werden. Die Datenrotation kommt in vorteilhafter Weise für neu geschriebene Daten sowohl von korrigierten Daten als auch von Daten, für die keine Korrektur erforderlich war, zur Anwendung.
  • Ein weiteres Element der korrigierenden Maßnahme, das umfasst sein kann, besteht darin, Speicherseiten oder Blöcke des Speichers, die in ihrer Verlaufshistorie viel stärker durch Störungen beeinträchtigt waren als im Mittel, für die Speicherabbildung auszuschließen. Dies wird erkannt, indem die Anzahl der Datenfehler in verschiedenen Speicherseiten, Blöcken, Ebenen und/oder anderen definierten Bereichen des Arrays überwacht wird. Selbstverständlich sollte sorgfältig darauf geachtet werden zu verhindern, dass Speicherseiten oder Blöcke für die Speicherabbildung ausgeschlossen werden, bei denen aus anderen Gründen als einer hohen Anfälligkeit für Störungen Datenfehler auftreten, beispielsweise weil ein Block öfter oder anders als im Mittel genutzt wird.
  • Der Scrub-Algorithmus wird üblicherweise durch den Speichercontroller gesteuert, könnte alternativ aber auch durch den Host gesteuert werden. Wenn die Steuerung durch den Speichercontroller erfolgt, ist der Algorithmus in der Firmware des Speichersystems kodiert, die typischerweise von dem Mikroprozessor 21 (1A) aus dem Controller-RAM 25 während des Betriebs des Speichers ausgeführt wird.
  • Der spezifische Scrub-Algorithmus, der genutzt wird, hängt von bestimmten Charakteristiken des Speichersystems, insbesondere der Speicherbauelemente 11 und 13 (1A), ab. Exemplarische Charakteristiken sind folgende:
    • (a) die Anzahl der Host-Datensektoren, die in der Programmiereinheit (üblicherweise eine Speicherseite) gespeichert sind;
    • (b) die Anzahl der Speicherzustände der Speicherzellen und die Ausdehnung des Schwellspannungsbereichs, die für jeden Speicherzustand bestimmt sind;
    • (c) ob die Programmiereinheit (üblicherweise eine Speicherseite) einen einzigen oder mehrere Host-Datensektoren umfasst;
    • (d) die Anzahl der Programmiereinheiten (üblicherweise eine Speicherseite) in einer Löscheinheit (üblicherweise ein Block); und
    • (e) die Dichte der Speicherzellen und das Ausmaß sowie die spezielle Neigung dafür, dass eine Operation in einer Einheit Datenstörungen in einer anderen Einheit bewirkt.
  • SPEZIFISCHE AUSFÜHRUNGSFORM DES SCRUB-VORGANGS
  • Eine speziellere Ausführungsform eines Scrub-Algorithmus ist in dem Ablaufdiagramm aus 9 dargestellt. Generell kommen die gleichen Prozessschritte wie zuvor beschrieben zur Anwendung, die detaillierter gezeigte Implementierung umfasst jedoch Scrub-Lesevorgänge mit Toleranzgrenzen, die mit Bezug auf 10 für ein Beispiel eines Vierzustandssystems beschrieben werden (in jeder physikalischen Ladungsspeichereinheit werden 2 Bits gespeichert). In 9 sind zwei Eintrittspunkte für den Prozessablauf gezeigt, bei 115, wenn ein Scrub-Trigger-Event erkannt wird, und bei 117, wenn ein Befehl zum Ausführen aufgeschobener Scrub-Vorgänge empfangen wird.
  • In Schritt 115 wird der Speicher auf ein Scrub-Trigger-Event hin beobachtet, wie es zuvor für den Schritt 91 aus 8 diskutiert worden ist. Analog werden in Schritt 119 eine (mehrere) Kandidaten-Speicherzelleneinheit(en) für einen Scrub-Vorgang bestimmt, genauso wie für den Schritt 93 aus 8 beschrieben. Danach, analog dem Schritt 95, wird in einem Schritt 121 aus 9 festgestellt, ob der Scrub-Vorgang an irgendeiner der Kandidateneinheiten aufgeschoben werden sollte, und zwar aufgrund anderer Systemvorgänge, die zu diesem Zeitpunkt ausgeführt werden müssen. Ist dies der Fall, so werden, wie bei 123 angegeben ist, die Adressen und andere notwendige Daten der Kandidaten-Zelleneinheiten temporär gespeichert, und der Prozess wartet mit der Wiederaufnahme bis zum Abschluss von Systemoperationen mit höherer Priorität. Alternativ kann die Beendigung der Scrub-Operation aufgeschoben werden, bis ein späterer spezieller Befehl von dem Host empfangen wird oder von dem Speichercontroller generiert wird, und zwar in Schritt 117, wie es der Fall ist, wenn bis zu einem späteren Zeitpunkt in dem Prozess aufgeschoben wird. Nachdem die Daten für den aufgeschobenen Scrub-Vorgang in Schritt 123 gespeichert worden sind, wird der speziell ausgeführte Scrub-Vorgang beendet, es sei denn, es sollen noch mehr Einheiten einem Scrub-Vorgang unterzogen werden, wie in einem Schritt 124 bestimmt wird. Sollen noch mehr Einheiten einem Scrub-Prozess unterzogen werden, kehrt der Prozess zu Schritt 119 zurück.
  • In einem nächsten Schritt 125 wird die gleiche Funktion wie bei Schritt 97 aus 8 ausgeführt, nämlich die Auswahl der dem Scrub-Prozess zu unterziehenden Kandidaten-Speicherzelleneinheiten. Die nachfolgenden Schritte aus 9 werden an einer der ausgewählten Einheiten nach der anderen ausgeführt. Ein nächster Schritt 126 bewirkt, dass die Lese-Messpunktpegel und andere Lesebedingungen anfangs auf die normalen Lesepegel gesetzt werden. In einem Schritt 127 wird dann ein Scrub-Lesevorgang unter den festgelegten Bedingungen an einer ersten der Speicherzelleneinheiten ausgeführt, entsprechend dem Schritt 99 aus 8. Die nachfolgenden Schritte werden an derselben einen Einheit ausgeführt, wobei eine Schleife 129 zu Schritt 127 zurückführt, für die nächste der ausgewählten Einheiten in der Reihenfolge, bis diese alle dem Scrub-Vorgang unterzogen sind. Natürlich wird, wenn bei einer bestimmten Operation nur eine Einheit für einen Scrub-Vorgang ausgewählt worden ist, keine Schleife 129 zurück vorhanden sein.
  • Nach dem Scrub-Lesevorgang aus Schritt 127 mit den in Schritt 126 festgelegten Lesegrenzen wird in einem Schritt 131 festgestellt, ob irgendwelche Datenfehler vorhanden sind, ähnlich dem Schritt 101 aus 8. Wenn Fehler vorhanden sind, wird in einem nächsten Schritt 133 bestimmt, ob die Fehler korrigierbar sind. Wenn ein ECC genutzt wird, um die Integrität der Daten zu bestimmen, dann wird in diesem Schritt 133 festgestellt, ob die Anzahl der schlechten Bits in der gelesenen Dateneinheit im Rahmen der Korrekturmöglichkeiten des speziellen ECC-Algorithmus, der genutzt wird, liegt. Wenn die Fehler korrigiert werden können, wird in einem nächsten Schritt 135 festgestellt, ob eine Korrektur sowohl notwendig als auch wünschenswert ist, entsprechend dem Schritt 103 aus 8. Der Schritt 135 kann einfach darin bestehen, dass festgestellt wird, ob die Anzahl fehlerhafter, aber korrigierbarer Bits geringer als ein Schwellwert von eins oder einigen wenigen ist, in welchem Fall festgelegt werden kann, keine korrigierende Maßnahme zu ergreifen.
  • Die Entscheidung in Schritt 135 kann auch davon beeinflusst werden, ob die Daten und deren ECC Nutzerdaten oder Overhead-Daten sind. Wie mit Bezug auf 3 beschrieben, können Overhead-Daten ihren eigenen ECC aufweisen. Wenn dies der Fall ist, kann die Integrität der Nutzerdaten und der Overhead-Daten in den Schritten 131 und 133 separat geprüft werden, und diese können gar nacheinander über die vollständige Schleife hin bearbeitet werden, mit der Rückführung 129, indem die Nutzerdaten und ihr ECC als eine Einheit und die Overhead-Daten und deren ECC als andere Dateneinheit be trachtet werden, wenngleich sie in derselben Speicherseite gespeichert sein können. Wenngleich die Nutzung der jeweiligen ECCs der Overhead-Daten und der Nutzerdaten üblicherweise gleich sein wird, kann der Prozess derart arbeiten, dass die Integrität der Overhead-Daten genauer beibehalten wird. Dies stellt ein Beispiel für ein Gleichgewicht zwischen dem Aufrechterhalten des Leistungsverhaltens des Systems, das sich bei zu vielen Scrub-Operationen verschlechtert, und der langfristigen Aufrechterhaltung der Integrität der gespeicherten Daten, welche mit den Scrub-Operationen erzielt werden soll, dar.
  • Wenn in Schritt 135 die Entscheidung getroffen wird, dass eine Korrektur der korrigierbaren Fehler in der interessierenden Dateneinheit erfolgen soll, wird in einem nächsten Schritt 137 gefragt, ob die Korrektur der Daten aufgeschoben werden soll. Ein Scrub-Vorgang wird wünschenswerterweise zum Beispiel dann aufgeschoben, wenn in den gelesenen Daten so viele schlechte Bits vorhanden sind, dass deren Korrektur mehr Zeit brauchen würde, als an dieser Stelle verfügbar ist. Wenn kein Aufschub erfolgt, werden die Fehler in einem Schritt 139 korrigiert, analog dem Schritt 107 aus 8. In einem nächsten Schritt 140 wird dann gefragt, ob die korrigierende Maßnahme aufgeschoben werden soll. Ein Scrub-Vorgang wird typischerweise aufgeschoben, wenn das Neuschreiben der Daten auch die Bewegung anderer Daten aufgrund einer notwendigen Konsolidierung erfordert, welche mehr Zeit beansprucht, als zur Verfügung steht. Wenn kein Aufschub erfolgt, werden die korrigierten Daten in einem Schritt 141 neu geschrieben, entsprechend einem der zuvor beschriebenen Neuschreibvorgänge, als die allgemeine Ausführungsform aus 8 beschrieben wurde. Nach einem erfolgreichen Neuschreiben der korrigierten Dateneinheit wird in einem Schritt 143 festgestellt, ob irgendwelche weiteren Speicherzelleneinheiten vorhanden sind, die in Schritt 125 für einen Scrub-Vorgang ausgewählt wurden. Ist dies der Fall, so wird in Schritt 145 zu der nächsten Einheit in der Reihenfolge weitergeschaltet, und der Prozessablauf kehrt über die Schleife 129 zu Schritt 127 zurück, für eine neue Einheit.
  • Bis hierher wurde ein Hauptpfad des Ablaufdiagramms aus 9 beschrieben. Es gibt jedoch viele verschiedene Zweige, die entlang des Weges eingeschlagen werden können, wenn die Lösung für einige der Fragen sich von der zuvor beschriebenen unterscheidet. Ein erster solcher Zweig, der beschrieben werden soll, geht von Schritt 133 ab, und zwar wenn derart viele Datenbitfehler in der betreffenden Einheit existieren, dass diese nicht durch den ECC korrigiert werden können. Wie durch Schritt 151 angegeben wird, werden die Lese-Schwellspannungspegel anders als die für den Scrub-Lesevorgang in Schritt 127 genutzten Pegel festgelegt, und danach werden die Daten der Einheit in einem Schritt 153 erneut mit diesen anderen Schwellspannungspegeln gelesen. Ein solcher Lesevorgang mit Toleranzgrenzen ist in 10 dargestellt.
  • In 10 wird ein Beispiel zum Betreiben der einzelnen Speicherelemente in einem Flash-Speicher-Array in vier Zuständen genutzt. Es ist eine Verteilung für die Anzahl der Speicherelemente in einer Einheit von Speicherzellen ohne Störungen in jedem der vier Schwellpegelbereiche gezeigt. Zwischen den Schwellpegelbereichen der Speicherzustände werden Schwellspannungs-Schutzbänder 155, 156 und 157 aufrechterhalten, wobei sich in diesen keine Daten irgendwelcher Zellen befinden. Dies stellt den erwünschten programmierten Zustand dar, der unmittelbar nach der Programmierung und Verifizierung der Zustände einer Einheit aus Zellen besteht. Da aber danach weitere Einheiten programmiert, gelesen und/oder gelöscht werden, können diese Daten gestört werden. Störungen zeigen sich dadurch, dass sich die Schwellpegel zu der einen oder anderen Seite hin in die angrenzenden Schutzbänder hinein verschieben. Dies kann für einen geringen Anteil der Zellen in jeder Zustandsverteilung auftreten, oder die gesamte Verteilung kann sich in benachbarte Schutzbänder hinein verschieben oder verbreitern, in Abhängigkeit von der Natur der Störungen.
  • Für einen normalen Lesevorgang werden Messpunktpegel 159, 160 und 161 ungefähr in der Mitte der jeweiligen Schutzbänder 155, 156 und 157 genutzt. Das bedeutet, die Schwellspannungspegel der gelesenen Zellen werden mit diesen Messpunktpegeln verglichen, um deren Speicherzustände zu bestimmen. Fehler treten auf, wenn sich die Schwellspannungspegel von in einem Zustand befindlichen Zellen durch ein Schutzband hindurch über einen Messpunktpegel hinaus verschieben. Wenn sich beispielsweise die Schwellspannungspegel der Zellen in dem Zustand 1 nach unten verschieben, bis sie unterhalb des Messpunktpegels 159 liegen, werden diese Zellen dann als in einem Zustand 0 befindlich gelesen. Analog wird, wenn sich die Schwellspannungspegel der Zellen in dem Zustand 1 nach oben verschieben, über den Messpunktpegel 160 hinaus, ein normaler Lesevorgang aussagen, dass sich diese Zellen im Zustand 2 befinden. Solche Lese-Datenfehler werden dann durch den ECC-Prozess festgestellt. Wenn aber zu viele solcher Fehler vorhanden sind, als dass diese durch den ECC korrigiert werden könnten, erfolgt ein zweiter Lesevorgang mit anderen Messpunktpegeln zwischen den Zuständen durch die Schritte 151 und 153 (9). Die Messpunktpegel 159, 160 und 161 werden in ihren jeweiligen Schutzbändern in einer Richtung der aufgrund der Störungen erwarteten Verschiebung der Speicher-Schwellspannungspegel verschoben, sodass die ver schobenen Pegel sich nun auf der gleichen Seite des Schutzbandes befinden, auf der sie vor der Störung waren.
  • Nach einem solchen erneuten Lesen der Daten wird in einem Schritt 165 unter Verwendung des ECC festgestellt, ob irgendwelche Datenfehler übrig sind. Falls nicht, geht der Prozessablauf dann zu Schritt 135 des Hauptprozesspfades über, welcher das Festlegen beinhaltet, ob eine Datenkorrektur und ein Neuschreiben aufgeschoben werden sollen. Wenn in Schritt 165 entdeckt wird, dass Datenfehler existieren, wird in einem nächsten Schritt 167 festgestellt, ob diese durch den ECC korrigiert werden können. Ist dies der Fall, springt der Prozessablauf dann ebenfalls zu Schritt 135 des Hauptverarbeitungsweges.
  • Wenn aber in Schritt 167 festgestellt wird, dass die Datenfehler nicht korrigierbar sind, kann ein weiterer Lesevorgang mit noch anderen Messpunktpegeln integriert werden. In einem Schritt 169 wird festgestellt, ob es irgendwelche noch nicht ausprobierten gelockerten Lesebedingungen gibt. Ist dies der Fall, so wird in einem Schritt 170 zu den nächsten Wiederholungsbedingungen übergegangen, und der Prozessablauf kehrt zu den Schritten 151 und 153 zurück, um die Daten mit diesen neuen Bedingungen zu lesen. Wenn aber keine weiteren anderen Lesebedingungen möglich sind, müssen die Daten in der betreffenden Einheit des Arrays mit diesen unkorrigierten Fehlern verbleiben. Es wird dann festgestellt, dass der Scrub-Vorgang an dieser Einheit fehlgeschlagen ist. Infolge dessen könnten sämtliche gültigen Daten in ein neues Speichersystem kopiert werden, und der momentane Speicher könnte dann verworfen werden. Als anderes Ergebnis könnte diese Einheit lediglich als schlecht markiert werden, und zwar durch einen in den Overhead-Daten gespeicherten Merker oder anderweitig, und danach könnte zu Schritt 143 übergegangen werden, um den Scrub-Vorgang für andere Einheiten des Arrays fortzusetzen. Die Daten in dieser Einheit sind dann verloren. Da für diese Daten als Teil der ursprünglichen Programmierung verifiziert worden ist, dass sie sich anfangs in ihrem korrekten Schwellspannungspegel-Bereich befanden, zeigt dieses mögliche Ergebnis einer Akkumulation von störenden Operationen im Zeitverlauf angesichts einer solchen nachteiligen Folge die Wünschbarkeit eines ausreichend häufigen Scrub-Vorgangs auf.
  • Kehren wir zu Schritt 135 zurück, so springt der Prozessablauf, wenn hier festgestellt wird, dass die Korrektur der Daten weder notwendig noch erwünscht ist, zu Schritt 143, um den Scrub-Vorgang mit etwaigen weiteren der identifizierten Einheiten fortzusetzen. Kehren wir außerdem zu den Schritten 137 und 140 zurück, so werden, wenn festgestellt wird, dass die Korrektur oder das Neuschreiben der Daten aufgeschoben werden sollte, die gelesenen Daten, ihre Adressen, der ECC und eine etwaige Kennung für die fehlerhaften Bits sowie andere zuvor bestimmte Daten in einem Schritt 171 gespeichert, und der Prozessablauf springt dann zu Schritt 143. Diese Daten werden dann gelesen, wenn der Zeitpunkt zur Beendigung der aufgeschobenen Maßnahmen erreicht ist, wie später beschrieben wird.
  • Kehren wir zu Schritt 131 zurück, so könnte die nächste Maßnahme, nach dem Feststellen, dass keine Datenfehler vorliegen, darin bestehen, nichts weiter mit den Daten der momentanen Einheit zu tun, indem zu Schritt 143 gesprungen wird. Es kann aber wünschenswert sein, die Speicherpegel von Zellen, aus welchen sogar gültige Daten gelesen werden, weitergehend zu prüfen und anzupassen. Dies beinhaltet das erneute Lesen der Daten mit anderen Messpunktpegeln als sie für den anfänglichen Lesevorgang genutzt wurden, um etwaige Zellen zu identifizieren, bei denen sich die gespeicherte Ladung in das Schutzband zwischen den für die verschiedenen Zustände definierten Pegel hinein verschoben hat (man vergleiche 10), selbst wenn diese Pegel nicht einen Messpunktpegel überschritten haben, sodass bei einer normalen Auslesung ein Datenfehler bewirkt würde. In einem Schritt 172 wird festgestellt, ob irgendwelche solcher Lesebedingungen existieren, die noch nicht ausprobiert worden sind. Ist dies der Fall, so wird in Schritt 173 bewirkt, dass neue Messpunktpegel und/oder andere Scrub-Lesebedingungen gewählt werden. Der Prozessablauf kehrt dann zu Schritt 126 zurück, in welchem diese Lesebedingungen eingestellt werden, und die Daten werden danach in Schritt 127 mit diesen Bedingungen gelesen. Die während dieses Lesevorgangs genutzten Messpunktpegel sind beispielsweise zu den Rändern der Schutzbänder 155, 156 und 157 aus 10 hin verschoben. Wenn in Schritt 131 unter Nutzung des ECC festgestellt wird, dass Datenfehler existieren, zeigen die fehlerhaften Datenbits die Verschiebung der Ladungspegel innerhalb der Schutzbänder an. Es ist also wünschenswert, diese Daten zu korrigieren und neu zu schreiben, nachdem zunächst festgestellt wird, ob eine solche Maßnahme aufgeschoben werden sollte, sodass die gespeicherten Ladungspegel aus den Schutzbändern heraus in ihre beabsichtigten Zustandsverteilungen aus 10 hinein verschoben werden.
  • Wenn in Schritt 131 festgestellt wird, dass in den mit den restriktiveren Grenzen gelesenen Daten keine Fehler vorhanden sind, wird die Bearbeitung an der momentanen Dateneinheit beendet. Es wird dann in Schritt 172 festgestellt, ob es weitere definierte Scrub-Lesebedingungen gibt, die bei dieser Dateneinheit noch nicht ausprobiert worden sind. Ist dies der Fall, so können die Daten erneut mit noch engeren Messpunktpegeln gelesen werden. Das bedeutet, die Daten können das zweite Mal mit einem ersten Satz von alternativen Lesebedingungen gemessen werden, die in Schritt 172 verfügbar sind, mit Messpunktpegeln, die nur zum Teil auf der Strecke entlang ihrer jeweiligen Schutzbänder verschoben sind, und können dann bei diesem dritten Mal mit den Messpunktpegeln eines zweiten Satzes von alternativen Lesebedingungen wiederholt werden, die durch den Schritt 172 ausgewählt werden, welche noch weiter zu den Rändern des Schutzbandes hin verschoben sind, zur weiteren Feinabstimmung der Ladungsspeicherpegel, falls erforderlich. Es können so viele zusätzliche Scrub-Lesebedingungen vorgegeben werden, wie praktikabel sind.
  • Kehren wir zu Schritt 135 zurück, in welchem festgelegt werden kann, einen gewissen Grad an Datenfehlern ohne Korrektur zu akzeptieren, so wird zu erkennen sein, dass dies nicht der Präzision der Anpassungen entspricht, die durch den Zweig mit den Schritten 172 und 173 an den gespeicherten Daten, die keine Fehler enthalten, vorgenommen werden, welcher soeben beschrieben worden ist. Daher wird, wenn dieser Bearbeitungszweig genutzt wird, der Schritt 135 höchstwahrscheinlich keine Akzeptanz von fehlerhaften Daten ohne Korrektur gestatten.
  • Nachdem in Schritt 143 festgestellt worden ist, dass sämtliche momentan für einen Scrub-Vorgang identifizierte Dateneinheiten tatsächlich einem Scrub-Vorgang unterzogen worden sind, können etwaige dieser Dateneinheiten, bei denen sich eine außergewöhnliche Neigung dafür zeigt, dass die Daten gestört werden, optional für eine Speicherabbildung aus dem System ausgeschlossen werden. In einem Schritt 185 wird bestimmt, ob es irgendwelche solcher physischen Speichereinheiten gibt, die aus dem System entfernt werden sollten, und wenn dies der Fall ist, werden sie in einem Schritt 187 für eine Speicherabbildung ausgeschlossen. Der Scrub-Vorgang ist dann abgeschlossen.
  • Wenn jedoch Datenkorrekturen und/oder Neuschreibvorgänge aufgeschoben worden sind, wird der Speichersystem-Controller oder das Hostsystem dies vermerkt haben. Zu einem geeigneten Zeitpunkt, wenn keine weiteren Speicheroperationen mit höherer Priorität anhängig sind, kann der Scrub-Vorgang für partiell einem Scrub-Vorgang unterzogene Einheiten abgeschlossen werden, beginnend mit Schritt 117. Die Daten, der ECC und weitere Informationen, die für eine Einheit in Schritt 171 gespeichert worden sind, werden in Schritt 191 ausgelesen. Wenn die Daten aus dieser Einheit einer Korrektur bedürfen, so erfolgt diese in Schritt 193. In einem Schritt 195 werden die korrekten Daten neu ge schrieben. Wenn keine weiteren partiell abgeschlossenen Scrub-Vorgänge vorliegen, die beendet werden müssen, wird dies in einem Schritt 197 festgestellt, und entweder wird der Schritt 185 ausgeführt oder die Bearbeitung wird beendet. Wenn weitere Einheiten vorhanden sind, die beendet werden müssen, geht der Prozessablauf zu der nächsten Einheit über, und zwar in einem Schritt 199, und die Schritte 191, 193 und 195 werden dann an den Daten aus diesen Einheiten wiederholt.
  • Für den Fall, dass Adressen von Kandidaten-Speicherzelleneinheiten in Schritt 123 für einen aufgeschobenen Scrub-Vorgang gespeichert worden sind, kann der Prozessablauf zu einem Zeitpunkt, an dem der Controller keine Maßnahmen mit höherer Priorität zu realisieren hat, automatisch zurückkehren, um den Scrub-Vorgang für eine der aufgeschobenen Einheiten fortzusetzen. Da der Schritt 121 des Aufschiebens derart frühzeitig im Prozessablauf aus 9 erfolgt, führt eine Rückkehr zu einer damals aufgeschobenen Einheit zu einer Wiederaufnahme des Prozessablaufs beginnend mit dem Schritt 125 und zur Fortsetzung entlang dieses Pfades, wie zuvor beschrieben. Es ist möglich, dass eine Korrektur und/oder ein Neuschreiben einer solchen Einheit in einem der Schritte 137 oder 140 erneut aufgeschoben wird.

Claims (18)

  1. Verfahren zum Betreiben einer Speicheranordnung (11, 13), die zu Blöcken (61) einer Mindestzahl von Speicherzellen (7074) organisiert ist, die zusammen löschbar sind, wobei die Blöcke (61) eine Reihe von Dateneinheiten (51) und Fehlerkorrekturcode (53) speichern, der von den Dateneinheiten (51) berechnet wurde, wobei das Verfahren die folgenden Schritte beinhaltet: Identifizieren, wenn ein Scrub-Trigger-Event für in wenigstens einer der Dateneinheiten (51) gespeicherte Daten in einem ersten der Blöcke aufgetreten ist; Lesen der identifizierten wenigstens einen Dateneinheit (51) aus dem ersten Block; Korrigieren eventueller Fehler in den aus dem ersten Block gelesenen Daten (51) anhand des Gebrauchs seines assoziierten Fehlerkorrekturcodes (53), um korrigierte erste Blockdaten bereitzustellen; gekennzeichnet durch: vorübergehendes Speichern der korrigierten ersten Blockdaten in einem zweiten der Blöcke; Identifizieren, wenn ein störendes Event für wenigstens eine der in einem dritten der Blöcke gespeicherten Dateneinheiten (51) aufgetreten ist; Lesen der identifizierten wenigstens einen Dateneinheit (51) aus dem dritten Block; Korrigieren eventueller Fehler in den aus dem dritten Block gelesenen Daten (51) mittels seines assoziierten Fehlerkorrekturcodes (53), um korrigierte dritte Blockdaten bereitzustellen; vorübergehendes Speichern der korrigierten dritten Blockdaten in dem zweiten Block; Konsolidieren der Daten des ersten Blocks in einem vierten der Blöcke durch: Lesen der korrigierten ersten Blockdaten aus dem zweiten Block; danach Schreiben der gelesenen korrigierten ersten Blockdaten als wenigstens eine Dateneinheit (51) auf den vierten Block; und danach Kopieren von unkorrigierten Dateneinheiten (51) des ersten Blocks in den vierten Block; Konsolidieren von Daten des dritten Blocks in einen fünften der Blöcke durch: Lesen der korrigierten dritten Blockdaten aus dem zweiten Block; danach Schreiben der gelesenen korrigierten dritten Blockdaten als wenigstens eine Dateneinheit (51) auf den fünften Block; und danach Kopieren von unkorrigierten Dateneinheiten (51) des dritten Blocks in den fünften Block; und dadurch, dass: die Speicheranordnung (11, 13) eine Flash-Speicherzellenanordnung (11, 13) ist.
  2. Verfahren nach Anspruch 1, wobei das Scrub-Trigger-Event für den ersten Block ein Event beinhaltet, das die genannte wenigstens eine der im ersten Block gespeicherten Dateneinheiten (51) stört.
  3. Verfahren nach Anspruch 1 oder 2, wobei das Scrub-Trigger-Event für den dritten Block ein Event beinhaltet, das die genannte wenigstens eine der im dritten Block gespeicherten Dateneinheiten (51) stört.
  4. Verfahren nach Anspruch 1, 2 oder 3, das zusätzlich das Pauseschalten der Operation nach dem Lesen der Daten (51) des ersten oder dritten Blocks, aber vor dem Korrigieren von Fehlern davon beinhaltet, bis andere Operationen mit höherer Priorität ausgeführt sind.
  5. Verfahren nach einem der vorherigen Ansprüche, das zusätzlich das Pauseschalten des Betriebs nach dem Korrigieren eventueller Fehler der gelesenen Daten (51) aus dem ersten oder dritten Block, aber vor dem Schreiben des korrigierten ersten oder dritten Blocks in den zweiten Block beinhaltet, bis andere Operationen mit höherer Priorität ausgeführt sind.
  6. Verfahren nach einem der vorherigen Ansprüche, wobei das Konsolidieren von Daten (51) des ersten Blocks in den vierten Block während des Betriebs der Speicherzellenanordnung (11, 13) durch einen anderen Faktor eingeleitet wird.
  7. Verfahren nach einem der vorherigen Ansprüche, wobei das Konsolidieren von Daten (51) des dritten Blocks in den fünften Block während des Betriebs der Speicherzellenanordung (11, 13) durch einen anderen Faktor eingeleitet wird.
  8. Verfahren nach einem der vorherigen Ansprüche, wobei das Konsolidieren von Daten (51) des ersten Blocks in den vierten Block und das Konsolidieren von Daten (51) des dritten Blocks in den fünften Block während des Betriebs der Speicherzellenanordnung (11, 13) als Reaktion darauf eingeleitet wird, dass der zweite Block mit korrigierten Daten (51) voll wird.
  9. Verfahren nach einem der vorherigen Ansprüche, wobei die Speicheranordnung (11, 13) zu Unteranordnungen organisiert ist, wobei die Unteranordnungen die Blöcke beinhalten.
  10. Nichtflüchtige Speicheranordnung (11, 13), die eine Steuerung (19) umfasst und zu Blöcken einer Mindestzahl von Speicherzellen (7074) organisiert ist, die zusammen gelöscht werden können, wobei die Blöcke eine Reihe von Dateneinheiten (51) und Fehlerkorrekturcode (53) speichern, der von den Dateneinheiten (51) berechnet wurde, wobei die Steuerung (19) die Aufgabe hat, beim Gebrauch Folgendes zu tun: Identifizieren, wenn ein störendes Event für wenigstens eine der in einem ersten der Blöcke gespeicherten Dateneinheiten (51) aufgetreten ist; Lesen der identifizierten wenigstens einen Dateneinheit (51) aus dem ersten Block; Korrigieren eventueller Fehler in den aus dem ersten Block gelesenen Daten (51) mittels seines assoziierten Fehlerkorrekturcodes (53), um korrigierte erste Blockdaten bereitzustellen; wobei die Speicheranordnung dadurch gekennzeichnet ist, dass: die Steuerung (19) ferner die Aufgabe hat, beim Gebrauch Folgendes zu tun: vorübergehendes Speichern der korrigierten ersten Blockdaten in einem zweiten der Blöcke; Identifizieren, wenn ein störendes Event für wenigstens eine der in einem dritten der Blöcke gespeicherten Dateneinheiten (51) aufgetreten ist; Lesen der identifizierten wenigstens einen Dateneinheit (51) aus dem dritten Block; Korrigieren eventueller Fehler in den aus dem dritten Block gelesenen Daten (51) mittels seines assoziierten Fehlerkorrekturcodes (53), um korrigierte dritte Blockdaten bereitzustellen; vorübergehendes Speichern der korrigierten dritten Blockdaten in dem zweiten Block; Konsolidieren von Daten des ersten Blocks in einem vierten der Blöcke durch: Lesen der korrigierten ersten Blockdaten aus dem zweiten Block; danach Schreiben der gelesenen korrigierten ersten Blockdaten als wenigstens eine Dateneinheit (51) auf den vierten Block; und danach Kopieren von unkorrigierten Dateneinheiten (51) des ersten Blocks in den vierten Block; und Konsolidieren von Daten des dritten Blocks in einen fünften der Blöcke durch: Lesen der korrigierten dritten Blockdaten aus dem zweiten Block; danach Schreiben der gelesenen korrigierten dritten Blockdaten als wenigstens eine Dateneinheit (51) auf den fünften Block; und danach Kopieren von unkorrigierten Dateneinheiten (51) des ersten Blocks in den fünften Block; und dadurch, dass: die Speicheranordnung (11, 13) eine Flash-Speicherzellenanordnung (11, 13) ist.
  11. Speicher (11, 13) nach Anspruch 10, wobei das Scrub-Trigger-Event für den ersten Block ein Event beinhaltet, das wenigstens eine der im ersten Block gespeicherten Dateneinheiten (51) stört.
  12. Speicheranordnung (11, 13) nach Anspruch 10 oder 11, wobei das Scrub-Trigger-Event für den dritten Block ein Event beinhaltet, das die genannte wenigstens eine der im dritten Block gespeicherten Dateneinheiten (51) stört.
  13. Speicheranordnung (11, 13) nach Anspruch 10, 11 oder 12, wobei die Steuerung (19) ferner die Aufgabe hat, beim Gebrauch den Betrieb nach dem Lesen der Daten (51) aus dem ersten oder dritten Block, vor dem Korrigieren eventueller Fehler davon auf Pause zu schalten, bis andere Operationen mit höherer Priorität ausgeführt sind.
  14. Speicheranordnung (11, 13) nach einem der Ansprüche 10 bis 13, wobei die Steuerung (19) ferner die Aufgabe hat, den Betrieb nach dem Korrigieren eventueller Fehler der gelesenen Daten (51) aus dem ersten oder dritten Block, aber vor dem Schreiben der korrigierten ersten oder dritten Blockdaten in den zweiten Block auf Pause zu schalten, bis andere Operationen mit höherer Priorität ausgeführt sind.
  15. Speicher (11, 13) nach einem der Ansprüche 10 bis 14, wobei die Steuerung (19) ferner die Aufgabe hat, beim Gebrauch die Konsolidierung von Daten (51) des ersten Blocks in den vierten Block während des Betriebs der Speicherzellenanordnung (11, 13) durch einen anderen Faktor einzuleiten.
  16. Speicheranordnung (11, 13) nach einem der Ansprüche 10 bis 15, wobei die Steuerung (19) ferner die Aufgabe hat, beim Gebrauch die Konsolidierung von Daten (51) des dritten Blocks in den fünften Block während des Betriebs der Speicherzellenanordnung (11, 13) durch einen anderen Faktor einzuleiten.
  17. Speicheranordnung (11, 13) nach einem der Ansprüche 10 bis 16, wobei die Steuerung (19) ferner die Aufgabe hat, die Konsolidierung von Daten (51) des ersten Blocks in den vierten Block und die Konsolidierung von Daten (51) des dritten Blocks in den fünften Block während des Betriebs der Speicherzellenanordnung (11, 13) als Reaktion darauf einzuleiten, dass der zweite Block mit korrigierten Daten voll wird.
  18. Speicheranordnung (11, 13) nach einem der Ansprüche 10 bis 17, wobei die Speicheranordnung (11, 13) zu Unteranordnungen organisiert ist, wobei die Unteranordnungen die Blöcke beinhalten.
DE602004011097T 2003-10-03 2004-09-28 Flash-speicherdatenkorrektur- und scrub-techniken Active DE602004011097T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/678,345 US7012835B2 (en) 2003-10-03 2003-10-03 Flash memory data correction and scrub techniques
US678345 2003-10-03
PCT/US2004/031788 WO2005036401A2 (en) 2003-10-03 2004-09-28 Flash memory data correction and scrub techniques

Publications (2)

Publication Number Publication Date
DE602004011097D1 DE602004011097D1 (de) 2008-02-14
DE602004011097T2 true DE602004011097T2 (de) 2009-01-15

Family

ID=34393904

Family Applications (2)

Application Number Title Priority Date Filing Date
DE602004021735T Active DE602004021735D1 (de) 2003-10-03 2004-09-28 Flash-Speicherdatenkorrektur und -säuberungsverfahren
DE602004011097T Active DE602004011097T2 (de) 2003-10-03 2004-09-28 Flash-speicherdatenkorrektur- und scrub-techniken

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE602004021735T Active DE602004021735D1 (de) 2003-10-03 2004-09-28 Flash-Speicherdatenkorrektur und -säuberungsverfahren

Country Status (9)

Country Link
US (5) US7012835B2 (de)
EP (2) EP1687720B1 (de)
JP (1) JP4723504B2 (de)
KR (1) KR101127882B1 (de)
CN (2) CN101630279B (de)
AT (2) ATE382892T1 (de)
DE (2) DE602004021735D1 (de)
TW (1) TWI261840B (de)
WO (1) WO2005036401A2 (de)

Families Citing this family (579)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5657332A (en) * 1992-05-20 1997-08-12 Sandisk Corporation Soft errors handling in EEPROM devices
KR100544175B1 (ko) * 1999-05-08 2006-01-23 삼성전자주식회사 링킹 타입 정보를 저장하는 기록 매체와 결함 영역 처리 방법
US6851070B1 (en) * 2001-08-13 2005-02-01 Network Appliance, Inc. System and method for managing time-limited long-running operations in a data storage system
WO2003032159A2 (en) * 2001-10-11 2003-04-17 Altera Corporation Error detection on programmable logic resources
US7233522B2 (en) 2002-12-31 2007-06-19 Sandisk 3D Llc NAND memory array incorporating capacitance boosting of channel regions in unselected memory cells and method for operation of same
US7505321B2 (en) 2002-12-31 2009-03-17 Sandisk 3D Llc Programmable memory array structure incorporating series-connected transistor strings and methods for fabrication and operation of same
US7372731B2 (en) * 2003-06-17 2008-05-13 Sandisk Il Ltd. Flash memories with adaptive reference voltages
US7012835B2 (en) * 2003-10-03 2006-03-14 Sandisk Corporation Flash memory data correction and scrub techniques
US7221588B2 (en) * 2003-12-05 2007-05-22 Sandisk 3D Llc Memory array incorporating memory cells arranged in NAND strings
US20050144516A1 (en) * 2003-12-30 2005-06-30 Gonzalez Carlos J. Adaptive deterministic grouping of blocks into multi-block units
US7594135B2 (en) * 2003-12-31 2009-09-22 Sandisk Corporation Flash memory system startup operation
US7328377B1 (en) 2004-01-27 2008-02-05 Altera Corporation Error correction for programmable logic integrated circuits
US20050172064A1 (en) * 2004-01-29 2005-08-04 Marcelo Krygier Method and apparatus for addressing in mass storage non-volatile memory devices
US20080082736A1 (en) * 2004-03-11 2008-04-03 Chow David Q Managing bad blocks in various flash memory cells for electronic data flash card
US7793192B2 (en) * 2004-05-06 2010-09-07 Panasonic Corporation Semiconductor memory device
US20050268077A1 (en) * 2004-05-11 2005-12-01 Peter Kuan Memory system for an electronic device and the method for controlling the same
US7490283B2 (en) 2004-05-13 2009-02-10 Sandisk Corporation Pipelined data relocation and improved chip architectures
US7975306B2 (en) * 2004-06-04 2011-07-05 Hewlett-Packard Development Company, L.P. Apparatus and method for monitoring secure software
TWI243376B (en) * 2004-07-16 2005-11-11 Univ Nat Chiao Tung Method of combining multi-level memory unit and providing the same with error correction mechanism
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
US7441067B2 (en) * 2004-11-15 2008-10-21 Sandisk Corporation Cyclic flash memory wear leveling
US7502256B2 (en) * 2004-11-30 2009-03-10 Siliconsystems, Inc. Systems and methods for reducing unauthorized data recovery from solid-state storage devices
US7158421B2 (en) * 2005-04-01 2007-01-02 Sandisk Corporation Use of data latches in multi-phase programming of non-volatile memories
US7120051B2 (en) * 2004-12-14 2006-10-10 Sandisk Corporation Pipelined programming of non-volatile memories using early data
US7420847B2 (en) * 2004-12-14 2008-09-02 Sandisk Corporation Multi-state memory having data recovery after program fail
US7849381B2 (en) * 2004-12-21 2010-12-07 Sandisk Corporation Method for copying data in reprogrammable non-volatile memory
US20060161724A1 (en) * 2005-01-20 2006-07-20 Bennett Alan D Scheduling of housekeeping operations in flash memory systems
US7315917B2 (en) * 2005-01-20 2008-01-01 Sandisk Corporation Scheduling of housekeeping operations in flash memory systems
JP4679943B2 (ja) * 2005-03-23 2011-05-11 ヒタチグローバルストレージテクノロジーズネザーランドビーブイ データ記憶装置及びその不揮発性メモリ内データ書き換え処理方法
US7463521B2 (en) * 2005-04-01 2008-12-09 Sandisk Corporation Method for non-volatile memory with managed execution of cached data
US7206230B2 (en) 2005-04-01 2007-04-17 Sandisk Corporation Use of data latches in cache operations of non-volatile memories
US7447078B2 (en) 2005-04-01 2008-11-04 Sandisk Corporation Method for non-volatile memory with background data latch caching during read operations
US7196928B2 (en) * 2005-04-05 2007-03-27 Sandisk Corporation Compensating for coupling during read operations of non-volatile memory
US7187585B2 (en) * 2005-04-05 2007-03-06 Sandisk Corporation Read operation for non-volatile storage that includes compensation for coupling
US7196946B2 (en) * 2005-04-05 2007-03-27 Sandisk Corporation Compensating for coupling in non-volatile storage
EP1712985A1 (de) * 2005-04-15 2006-10-18 Deutsche Thomson-Brandt Gmbh Verfahren und System zum Speichern von logischen Datenblöcken in Löschblöcken in mehreren nichtflüchtigen Speichereinheiten, die an mindestens einem gemeinsamen Datenbus angeschlossen sind
US7290185B2 (en) * 2005-04-28 2007-10-30 International Business Machines Corporation Methods and apparatus for reducing memory errors
JP4991131B2 (ja) * 2005-08-12 2012-08-01 株式会社東芝 半導体記憶装置
US7698591B2 (en) * 2005-08-26 2010-04-13 International Business Machines Corporation Method and apparatus for ensuring data integrity in redundant mass storage systems
US7523381B2 (en) * 2005-09-01 2009-04-21 Micron Technology, Inc. Non-volatile memory with error detection
JP4413840B2 (ja) * 2005-09-20 2010-02-10 株式会社東芝 記憶媒体再生装置、記憶媒体再生方法および記憶媒体再生プログラム
US7631245B2 (en) 2005-09-26 2009-12-08 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US8291295B2 (en) * 2005-09-26 2012-10-16 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US7954037B2 (en) * 2005-10-25 2011-05-31 Sandisk Il Ltd Method for recovering from errors in flash memory
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
US20070106842A1 (en) * 2005-11-04 2007-05-10 Conley Kevin M Enhanced first level storage caching methods using nonvolatile memory
US7634585B2 (en) * 2005-11-04 2009-12-15 Sandisk Corporation In-line cache using nonvolatile memory between host and disk device
US7644251B2 (en) 2005-12-19 2010-01-05 Sigmatel, Inc. Non-volatile solid-state memory controller
US7349260B2 (en) * 2005-12-29 2008-03-25 Sandisk Corporation Alternate row-based reading and writing for non-volatile memory
US7443726B2 (en) * 2005-12-29 2008-10-28 Sandisk Corporation Systems for alternate row-based reading and writing for non-volatile memory
US8219886B1 (en) 2006-01-20 2012-07-10 Marvell International Ltd. High density multi-level memory
US8055979B2 (en) 2006-01-20 2011-11-08 Marvell World Trade Ltd. Flash memory with coding and signal processing
US7844879B2 (en) 2006-01-20 2010-11-30 Marvell World Trade Ltd. Method and system for error correction in flash memory
US7493523B2 (en) * 2006-03-14 2009-02-17 International Business Machines Corporation Method and apparatus for preventing soft error accumulation in register arrays
US7409490B2 (en) * 2006-04-15 2008-08-05 Yi-Chun Liu Method of flash memory management
US7433231B2 (en) * 2006-04-26 2008-10-07 Micron Technology, Inc. Multiple select gates with non-volatile memory cells
US7495966B2 (en) 2006-05-01 2009-02-24 Micron Technology, Inc. Memory voltage cycle adjustment
EP2016590B1 (de) 2006-05-05 2011-10-26 SanDisk Corporation Nicht flüchtiger speicher mit hintergrund-datensperren-caching während leseoperationen und entsprechende verfahren
CN103280239B (zh) 2006-05-12 2016-04-06 苹果公司 存储设备中的失真估计和消除
US7697326B2 (en) * 2006-05-12 2010-04-13 Anobit Technologies Ltd. Reducing programming error in memory devices
WO2007132456A2 (en) * 2006-05-12 2007-11-22 Anobit Technologies Ltd. Memory device with adaptive capacity
KR101202537B1 (ko) * 2006-05-12 2012-11-19 애플 인크. 메모리 디바이스를 위한 결합된 왜곡 추정 및 에러 보정 코딩
US7840875B2 (en) * 2006-05-15 2010-11-23 Sandisk Corporation Convolutional coding methods for nonvolatile memory
US20070266296A1 (en) * 2006-05-15 2007-11-15 Conley Kevin M Nonvolatile Memory with Convolutional Coding
JP4813264B2 (ja) * 2006-06-14 2011-11-09 株式会社日立製作所 ストレージシステム
US7606084B2 (en) * 2006-06-19 2009-10-20 Sandisk Corporation Programming differently sized margins and sensing with compensations at select states for improved read operations in non-volatile memory
US7352628B2 (en) * 2006-06-19 2008-04-01 Sandisk Corporation Systems for programming differently sized margins and sensing with compensations at select states for improved read operations in a non-volatile memory
US7486561B2 (en) * 2006-06-22 2009-02-03 Sandisk Corporation Method for non-real time reprogramming of non-volatile memory to achieve tighter distribution of threshold voltages
US7489549B2 (en) * 2006-06-22 2009-02-10 Sandisk Corporation System for non-real time reprogramming of non-volatile memory to achieve tighter distribution of threshold voltages
JP4908083B2 (ja) * 2006-06-30 2012-04-04 株式会社東芝 メモリコントローラ
JP2008009919A (ja) 2006-06-30 2008-01-17 Toshiba Corp カードコントローラ
CN1933026A (zh) * 2006-08-18 2007-03-21 福昭科技(深圳)有限公司 高可靠排序管理扇区的存储结构
US7474560B2 (en) * 2006-08-21 2009-01-06 Micron Technology, Inc. Non-volatile memory with both single and multiple level cells
US20080046641A1 (en) * 2006-08-21 2008-02-21 Sandisk Il Ltd. NAND flash memory controller exporting a logical sector-based interface
US20080046630A1 (en) * 2006-08-21 2008-02-21 Sandisk Il Ltd. NAND flash memory controller exporting a logical sector-based interface
WO2008026203A2 (en) 2006-08-27 2008-03-06 Anobit Technologies Estimation of non-linear distortion in memory devices
US20080072070A1 (en) * 2006-08-29 2008-03-20 General Dynamics C4 Systems, Inc. Secure virtual RAM
US7450425B2 (en) * 2006-08-30 2008-11-11 Micron Technology, Inc. Non-volatile memory cell read failure reduction
US7716538B2 (en) * 2006-09-27 2010-05-11 Sandisk Corporation Memory with cell population distribution assisted read margining
US7886204B2 (en) * 2006-09-27 2011-02-08 Sandisk Corporation Methods of cell population distribution assisted read margining
WO2008039692A2 (en) * 2006-09-27 2008-04-03 Sandisk Corporation Memory with cell population distribution assisted read margining
US7818653B2 (en) * 2006-09-28 2010-10-19 Sandisk Corporation Methods of soft-input soft-output decoding for nonvolatile memory
US20080092015A1 (en) * 2006-09-28 2008-04-17 Yigal Brandman Nonvolatile memory with adaptive operation
US7904783B2 (en) * 2006-09-28 2011-03-08 Sandisk Corporation Soft-input soft-output decoder for nonvolatile memory
US7805663B2 (en) * 2006-09-28 2010-09-28 Sandisk Corporation Methods of adapting operation of nonvolatile memory
US7447076B2 (en) * 2006-09-29 2008-11-04 Sandisk Corporation Systems for reverse reading in non-volatile memory with compensation for coupling
US7684247B2 (en) * 2006-09-29 2010-03-23 Sandisk Corporation Reverse reading in non-volatile memory with compensation for coupling
US20080091901A1 (en) * 2006-10-12 2008-04-17 Alan David Bennett Method for non-volatile memory with worst-case control data management
US20080091871A1 (en) * 2006-10-12 2008-04-17 Alan David Bennett Non-volatile memory with worst-case control data management
CN101529396B (zh) * 2006-10-20 2011-07-13 富士通株式会社 存储器设备以及更新调整方法
WO2008053472A2 (en) * 2006-10-30 2008-05-08 Anobit Technologies Ltd. Reading memory cells using multiple thresholds
CN101601094B (zh) 2006-10-30 2013-03-27 苹果公司 使用多个门限读取存储单元的方法
KR100784007B1 (ko) * 2006-10-31 2007-12-10 주식회사 하이닉스반도체 비휘발성 메모리 장치 및 그 소거 방법
US7558109B2 (en) * 2006-11-03 2009-07-07 Sandisk Corporation Nonvolatile memory with variable read threshold
US8001441B2 (en) * 2006-11-03 2011-08-16 Sandisk Technologies Inc. Nonvolatile memory with modulated error correction coding
US7904780B2 (en) * 2006-11-03 2011-03-08 Sandisk Corporation Methods of modulating error correction coding
US7904788B2 (en) * 2006-11-03 2011-03-08 Sandisk Corporation Methods of varying read threshold voltage in nonvolatile memory
US7924648B2 (en) 2006-11-28 2011-04-12 Anobit Technologies Ltd. Memory power and performance management
US8151163B2 (en) * 2006-12-03 2012-04-03 Anobit Technologies Ltd. Automatic defect management in memory devices
US7593263B2 (en) * 2006-12-17 2009-09-22 Anobit Technologies Ltd. Memory device with reduced reading latency
US7900102B2 (en) * 2006-12-17 2011-03-01 Anobit Technologies Ltd. High-speed programming of memory devices
US7616506B2 (en) * 2006-12-28 2009-11-10 Sandisk Corporation Systems for complete word line look ahead with efficient data latch assignment in non-volatile memory read operations
TW200828320A (en) * 2006-12-28 2008-07-01 Genesys Logic Inc Method for performing static wear leveling on flash memory
US7616505B2 (en) * 2006-12-28 2009-11-10 Sandisk Corporation Complete word line look ahead with efficient data latch assignment in non-volatile memory read operations
US7561465B2 (en) * 2006-12-28 2009-07-14 Advanced Micro Devices, Inc. Methods and systems for recovering data in a nonvolatile memory array
US8583981B2 (en) 2006-12-29 2013-11-12 Marvell World Trade Ltd. Concatenated codes for holographic storage
US8151166B2 (en) * 2007-01-24 2012-04-03 Anobit Technologies Ltd. Reduction of back pattern dependency effects in memory devices
US7751240B2 (en) * 2007-01-24 2010-07-06 Anobit Technologies Ltd. Memory device with negative thresholds
KR100823171B1 (ko) * 2007-02-01 2008-04-18 삼성전자주식회사 파티션된 플래시 변환 계층을 갖는 컴퓨터 시스템 및플래시 변환 계층의 파티션 방법
KR100813630B1 (ko) * 2007-02-07 2008-03-14 삼성전자주식회사 독출 성능을 향상할 수 있는 플래시 메모리 시스템 및그것의 독출 방법
CN101715595A (zh) * 2007-03-12 2010-05-26 爱诺彼得技术有限责任公司 存储器单元读取阈的自适应估计
US7987332B2 (en) * 2007-03-21 2011-07-26 Sandisk Technologies Inc. Methods for storing memory operations in a queue
US7477547B2 (en) * 2007-03-28 2009-01-13 Sandisk Corporation Flash memory refresh techniques triggered by controlled scrub data reads
EP2135251B1 (de) * 2007-03-28 2017-06-14 SanDisk Technologies LLC Mittels gesteuerter bereinigungsdatenlesung ausgelöste aktualisierungsverfahren für einen flash-speicher
US7573773B2 (en) * 2007-03-28 2009-08-11 Sandisk Corporation Flash memory with data refresh triggered by controlled scrub data reads
US7797480B2 (en) * 2007-03-29 2010-09-14 Sandisk Corporation Method for reading non-volatile storage using pre-conditioning waveforms and modified reliability metrics
US7904793B2 (en) * 2007-03-29 2011-03-08 Sandisk Corporation Method for decoding data in non-volatile storage using reliability metrics based on multiple reads
WO2008121553A1 (en) * 2007-03-29 2008-10-09 Sandisk Corporation Non-volatile storage with decoding of data using reliability metrics based on multiple reads
US8001320B2 (en) * 2007-04-22 2011-08-16 Anobit Technologies Ltd. Command interface for memory devices
US8332574B2 (en) * 2007-04-30 2012-12-11 Sandisk Il Ltd. Method for efficient storage of metadata in flash memory
US7577036B2 (en) * 2007-05-02 2009-08-18 Micron Technology, Inc. Non-volatile multilevel memory cells with data read of reference cells
US8234545B2 (en) * 2007-05-12 2012-07-31 Apple Inc. Data storage with incremental redundancy
WO2008139441A2 (en) 2007-05-12 2008-11-20 Anobit Technologies Ltd. Memory device with internal signal processing unit
KR20080100750A (ko) * 2007-05-14 2008-11-19 삼성전자주식회사 데이터 읽기 장치 및 그 방법
US20080285368A1 (en) * 2007-05-17 2008-11-20 Macronix International Co., Ltd. Method for nrom array word line retry erasing and threshold voltage recovering
JP4994112B2 (ja) * 2007-05-22 2012-08-08 ルネサスエレクトロニクス株式会社 半導体集積回路装置およびメモリ制御方法
US20080294813A1 (en) * 2007-05-24 2008-11-27 Sergey Anatolievich Gorobets Managing Housekeeping Operations in Flash Memory
US20080294814A1 (en) * 2007-05-24 2008-11-27 Sergey Anatolievich Gorobets Flash Memory System with Management of Housekeeping Operations
JP5216244B2 (ja) * 2007-05-31 2013-06-19 株式会社東芝 データリフレッシュ装置、及びデータリフレッシュ方法
US7765426B2 (en) 2007-06-07 2010-07-27 Micron Technology, Inc. Emerging bad block detection
KR100882841B1 (ko) * 2007-06-19 2009-02-10 삼성전자주식회사 읽기 디스터번스로 인한 비트 에러를 검출할 수 있는메모리 시스템 및 그것의 읽기 방법
KR100838292B1 (ko) * 2007-06-20 2008-06-17 삼성전자주식회사 메모리 셀의 읽기 레벨 제어 장치 및 그 방법
US8166239B2 (en) * 2007-06-21 2012-04-24 International Business Machines Corporation Translation lookaside buffer and related method and program product utilized for virtual addresses
US8504784B2 (en) * 2007-06-27 2013-08-06 Sandisk Technologies Inc. Scheduling methods of phased garbage collection and housekeeping operations in a flash memory system
US7925936B1 (en) 2007-07-13 2011-04-12 Anobit Technologies Ltd. Memory device with non-uniform programming levels
US8060798B2 (en) 2007-07-19 2011-11-15 Micron Technology, Inc. Refresh of non-volatile memory cells based on fatigue conditions
US8259497B2 (en) 2007-08-06 2012-09-04 Apple Inc. Programming schemes for multi-level analog memory cells
US8099632B2 (en) * 2007-08-08 2012-01-17 Sandisk Technologies Inc. Urgency and time window manipulation to accommodate unpredictable memory operations
WO2009021176A2 (en) * 2007-08-08 2009-02-12 Sandisk Corporation Urgency and time window manipulation to accommodate unpredictable memory operations
US7770079B2 (en) 2007-08-22 2010-08-03 Micron Technology Inc. Error scanning in flash memory
KR101425958B1 (ko) * 2007-09-06 2014-08-04 삼성전자주식회사 멀티-비트 데이터를 저장하는 메모리 시스템 및 그것의읽기 방법
US7882323B2 (en) * 2007-09-07 2011-02-01 International Business Machines Corporation Scheduling of background scrub commands to reduce high workload memory request latency
US7882314B2 (en) * 2007-09-07 2011-02-01 International Business Machines Corporation Efficient scheduling of background scrub commands
US8174905B2 (en) * 2007-09-19 2012-05-08 Anobit Technologies Ltd. Programming orders for reducing distortion in arrays of multi-level analog memory cells
WO2009037697A2 (en) * 2007-09-20 2009-03-26 Densbits Technologies Ltd. Improved systems and methods for determining logical values of coupled flash memory cells
WO2009095902A2 (en) 2008-01-31 2009-08-06 Densbits Technologies Ltd. Systems and methods for handling immediate data errors in flash memory
US7751237B2 (en) * 2007-09-25 2010-07-06 Sandisk Il, Ltd. Post-facto correction for cross coupling in a flash memory
US7551477B2 (en) * 2007-09-26 2009-06-23 Sandisk Corporation Multiple bit line voltages based on distance
US7773413B2 (en) 2007-10-08 2010-08-10 Anobit Technologies Ltd. Reliable data storage in analog memory cells in the presence of temperature variations
US8068360B2 (en) * 2007-10-19 2011-11-29 Anobit Technologies Ltd. Reading analog memory cells using built-in multi-threshold commands
WO2009050703A2 (en) * 2007-10-19 2009-04-23 Anobit Technologies Data storage in analog memory cell arrays having erase failures
US8000141B1 (en) 2007-10-19 2011-08-16 Anobit Technologies Ltd. Compensation for voltage drifts in analog memory cells
US8694715B2 (en) 2007-10-22 2014-04-08 Densbits Technologies Ltd. Methods for adaptively programming flash memory devices and flash memory systems incorporating same
US20090109755A1 (en) * 2007-10-24 2009-04-30 Mori Edan Neighbor block refresh for non-volatile memory
WO2009053961A2 (en) 2007-10-25 2009-04-30 Densbits Technologies Ltd. Systems and methods for multiple coding rates in flash devices
JP4535117B2 (ja) * 2007-11-06 2010-09-01 ソニー株式会社 メモリ装置、メモリ管理方法、およびプログラム
US7876616B2 (en) * 2007-11-12 2011-01-25 Cadence Design Systems, Inc. System and method for wear leveling utilizing a relative wear counter
WO2009063450A2 (en) * 2007-11-13 2009-05-22 Anobit Technologies Optimized selection of memory units in multi-unit memory devices
CN101436161B (zh) * 2007-11-16 2010-12-29 创见资讯股份有限公司 存储装置与其数据存取和存储器区块管理方法
US8225181B2 (en) 2007-11-30 2012-07-17 Apple Inc. Efficient re-read operations from memory devices
WO2009072105A2 (en) * 2007-12-05 2009-06-11 Densbits Technologies Ltd. A low power chien-search based bch/rs decoding system for flash memory, mobile communications devices and other applications
WO2009072103A2 (en) 2007-12-05 2009-06-11 Densbits Technologies Ltd. Flash memory apparatus and methods using a plurality of decoding stages including optional use of concatenated bch codes and/or designation of 'first below' cells
US8321625B2 (en) 2007-12-05 2012-11-27 Densbits Technologies Ltd. Flash memory device with physical cell value deterioration accommodation and methods useful in conjunction therewith
JP2009140564A (ja) * 2007-12-06 2009-06-25 Toshiba Corp Nand型フラッシュメモリおよびメモリシステム
WO2009074978A2 (en) 2007-12-12 2009-06-18 Densbits Technologies Ltd. Systems and methods for error correction and decoding on multi-level physical media
US8209588B2 (en) * 2007-12-12 2012-06-26 Anobit Technologies Ltd. Efficient interference cancellation in analog memory cell arrays
WO2009074979A2 (en) 2007-12-12 2009-06-18 Densbits Technologies Ltd. Chien-search system employing a clock-gating scheme to save power for error correction decoder and other applications
US8456905B2 (en) 2007-12-16 2013-06-04 Apple Inc. Efficient data storage in multi-plane memory devices
WO2009078006A2 (en) 2007-12-18 2009-06-25 Densbits Technologies Ltd. Apparatus for coding at a plurality of rates in multi-level flash memory systems, and methods useful in conjunction therewith
KR101498669B1 (ko) * 2007-12-20 2015-03-19 삼성전자주식회사 반도체 메모리 시스템 및 그것의 액세스 방법
US8533384B2 (en) 2007-12-27 2013-09-10 Sandisk Enterprise Ip Llc Flash memory controller garbage collection operations performed independently in multiple flash memory groups
US8085586B2 (en) * 2007-12-27 2011-12-27 Anobit Technologies Ltd. Wear level estimation in analog memory cells
US8301912B2 (en) * 2007-12-31 2012-10-30 Sandisk Technologies Inc. System, method and memory device providing data scrambling compatible with on-chip copy operation
KR101454817B1 (ko) * 2008-01-11 2014-10-30 삼성전자주식회사 반도체 메모리 장치 및 그것의 마모도 관리 방법
JP5223869B2 (ja) * 2008-01-16 2013-06-26 富士通株式会社 半導体記憶装置、制御装置、制御方法
PL384327A1 (pl) * 2008-01-26 2009-08-03 Atm Spółka Akcyjna Sieć danych oraz sposób regeneraji stanu zapisu plików cyfrowych w sieci danych
US8156398B2 (en) * 2008-02-05 2012-04-10 Anobit Technologies Ltd. Parameter estimation based on error correction code parity check equations
US7924587B2 (en) * 2008-02-21 2011-04-12 Anobit Technologies Ltd. Programming of analog memory cells using a single programming pulse per state transition
US7864573B2 (en) 2008-02-24 2011-01-04 Anobit Technologies Ltd. Programming analog memory cells for reduced variance after retention
US8230300B2 (en) * 2008-03-07 2012-07-24 Apple Inc. Efficient readout from analog memory cells using data compression
US8400858B2 (en) 2008-03-18 2013-03-19 Apple Inc. Memory device with reduced sense time readout
US8059457B2 (en) * 2008-03-18 2011-11-15 Anobit Technologies Ltd. Memory device with multiple-accuracy read commands
US8972472B2 (en) * 2008-03-25 2015-03-03 Densbits Technologies Ltd. Apparatus and methods for hardware-efficient unbiased rounding
US7971023B2 (en) * 2008-04-30 2011-06-28 Sandisk Corporation Guaranteed memory card performance to end-of-life
US20090282267A1 (en) * 2008-05-09 2009-11-12 Ori Stern Partial scrambling to reduce correlation
EP2297742B1 (de) 2008-05-16 2013-07-24 Fusion-io, Inc. Vorrichtung, system und verfahren zum detektieren und ersetzen von ausgefallenem datenspeicher
KR101486987B1 (ko) * 2008-05-21 2015-01-30 삼성전자주식회사 불휘발성 메모리를 포함하는 반도체 메모리 장치 및 불휘발성 메모리를 위한 커맨드 스케줄링 방법
US7848144B2 (en) * 2008-06-16 2010-12-07 Sandisk Corporation Reverse order page writing in flash memories
US7808831B2 (en) * 2008-06-30 2010-10-05 Sandisk Corporation Read disturb mitigation in non-volatile memory
US7971007B2 (en) * 2008-07-08 2011-06-28 Silicon Motion, Inc. Downgrade memory apparatus, and method for accessing a downgrade memory
US7924613B1 (en) 2008-08-05 2011-04-12 Anobit Technologies Ltd. Data storage in analog memory cells with protection against programming interruption
US8498151B1 (en) 2008-08-05 2013-07-30 Apple Inc. Data storage in analog memory cells using modified pass voltages
JP5478855B2 (ja) * 2008-08-08 2014-04-23 ルネサスエレクトロニクス株式会社 不揮発性メモリ制御方法及び半導体装置
CN101650974B (zh) * 2008-08-12 2012-12-19 创见资讯股份有限公司 可自我检测使用状态的储存装置及其检测方法
US8332725B2 (en) 2008-08-20 2012-12-11 Densbits Technologies Ltd. Reprogramming non volatile memory portions
US8213229B2 (en) * 2008-08-22 2012-07-03 HGST Netherlands, B.V. Error control in a flash memory device
US8169825B1 (en) 2008-09-02 2012-05-01 Anobit Technologies Ltd. Reliable data storage in analog memory cells subjected to long retention periods
US8949684B1 (en) 2008-09-02 2015-02-03 Apple Inc. Segmented data storage
US8000135B1 (en) 2008-09-14 2011-08-16 Anobit Technologies Ltd. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8482978B1 (en) 2008-09-14 2013-07-09 Apple Inc. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8239734B1 (en) 2008-10-15 2012-08-07 Apple Inc. Efficient data storage in storage device arrays
US8261159B1 (en) 2008-10-30 2012-09-04 Apple, Inc. Data scrambling schemes for memory devices
TWI389122B (zh) * 2008-10-30 2013-03-11 Silicon Motion Inc 用來存取一快閃記憶體之方法以及相關之記憶裝置及其控制器
CN101740123B (zh) * 2008-11-10 2012-04-04 扬智科技股份有限公司 存储器的数据保护方法
US8208304B2 (en) * 2008-11-16 2012-06-26 Anobit Technologies Ltd. Storage at M bits/cell density in N bits/cell analog memory cell devices, M>N
CN102855943B (zh) * 2008-11-28 2017-04-12 群联电子股份有限公司 错误校正控制器及其闪存芯片系统与错误校正方法
US7859932B2 (en) * 2008-12-18 2010-12-28 Sandisk Corporation Data refresh for non-volatile storage
US8291297B2 (en) * 2008-12-18 2012-10-16 Intel Corporation Data error recovery in non-volatile memory
US8316201B2 (en) * 2008-12-18 2012-11-20 Sandisk Il Ltd. Methods for executing a command to write data from a source location to a destination location in a memory device
JP4551958B2 (ja) * 2008-12-22 2010-09-29 株式会社東芝 半導体記憶装置および半導体記憶装置の制御方法
US8397131B1 (en) 2008-12-31 2013-03-12 Apple Inc. Efficient readout schemes for analog memory cell devices
US8248831B2 (en) * 2008-12-31 2012-08-21 Apple Inc. Rejuvenation of analog memory cells
US8244960B2 (en) 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US20100174845A1 (en) * 2009-01-05 2010-07-08 Sergey Anatolievich Gorobets Wear Leveling for Non-Volatile Memories: Maintenance of Experience Count and Passive Techniques
US8700840B2 (en) * 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
US8040744B2 (en) * 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US8094500B2 (en) * 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
US8924661B1 (en) 2009-01-18 2014-12-30 Apple Inc. Memory system including a controller and processors associated with memory devices
US8924819B2 (en) * 2009-01-23 2014-12-30 Macronix International Co., Ltd. Memory device and operation method thereof
US8228701B2 (en) 2009-03-01 2012-07-24 Apple Inc. Selective activation of programming schemes in analog memory cell arrays
US8259506B1 (en) 2009-03-25 2012-09-04 Apple Inc. Database of memory read thresholds
US8832354B2 (en) * 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US8819385B2 (en) 2009-04-06 2014-08-26 Densbits Technologies Ltd. Device and method for managing a flash memory
US8458574B2 (en) 2009-04-06 2013-06-04 Densbits Technologies Ltd. Compact chien-search based decoding apparatus and method
US8238157B1 (en) 2009-04-12 2012-08-07 Apple Inc. Selective re-programming of analog memory cells
US9116830B2 (en) * 2009-04-29 2015-08-25 Texas Instruments Incorporated Method to extend data retention for flash based storage in a real time device processed on generic semiconductor technology
US8255613B2 (en) 2009-04-30 2012-08-28 International Business Machines Corporation Wear-leveling and bad block management of limited lifetime memory devices
US8566510B2 (en) 2009-05-12 2013-10-22 Densbits Technologies Ltd. Systems and method for flash memory management
US8281227B2 (en) 2009-05-18 2012-10-02 Fusion-10, Inc. Apparatus, system, and method to increase data integrity in a redundant storage system
US8307258B2 (en) 2009-05-18 2012-11-06 Fusion-10, Inc Apparatus, system, and method for reconfiguring an array to operate with less storage elements
US8775865B2 (en) 2009-06-24 2014-07-08 Headway Technologies, Inc. Method and apparatus for scrubbing accumulated disturb data errors in an array of SMT MRAM memory cells including rewriting reference bits
US9170879B2 (en) * 2009-06-24 2015-10-27 Headway Technologies, Inc. Method and apparatus for scrubbing accumulated data errors from a memory system
US8321727B2 (en) * 2009-06-29 2012-11-27 Sandisk Technologies Inc. System and method responsive to a rate of change of a performance parameter of a memory
US8255773B2 (en) * 2009-06-29 2012-08-28 Sandisk Technologies Inc. System and method of tracking error data within a storage device
US8261136B2 (en) * 2009-06-29 2012-09-04 Sandisk Technologies Inc. Method and device for selectively refreshing a region of a memory of a data storage device
US20100332922A1 (en) * 2009-06-30 2010-12-30 Mediatek Inc. Method for managing device and solid state disk drive utilizing the same
US20110002169A1 (en) 2009-07-06 2011-01-06 Yan Li Bad Column Management with Bit Information in Non-Volatile Memory Systems
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US20110035540A1 (en) * 2009-08-10 2011-02-10 Adtron, Inc. Flash blade system architecture and method
US20110041039A1 (en) * 2009-08-11 2011-02-17 Eliyahou Harari Controller and Method for Interfacing Between a Host Controller in a Host and a Flash Memory Device
US20110041005A1 (en) 2009-08-11 2011-02-17 Selinger Robert D Controller and Method for Providing Read Status and Spare Block Management Information in a Flash Memory System
US20110040924A1 (en) 2009-08-11 2011-02-17 Selinger Robert D Controller and Method for Detecting a Transmission Error Over a NAND Interface Using Error Detection Code
US20110047322A1 (en) * 2009-08-19 2011-02-24 Ocz Technology Group, Inc. Methods, systems and devices for increasing data retention on solid-state mass storage devices
US8370720B2 (en) * 2009-08-19 2013-02-05 Ocz Technology Group, Inc. Mass storage device and method for offline background scrubbing of solid-state memory devices
US8910002B2 (en) * 2009-08-24 2014-12-09 OCZ Storage Solutions Inc. NAND flash-based storage device with built-in test-ahead for failure anticipation
KR20120059506A (ko) * 2009-08-25 2012-06-08 샌디스크 아이엘 엘티디 플래시 저장 디바이스로의 데이터 복원
US8305812B2 (en) * 2009-08-26 2012-11-06 Densbits Technologies Ltd. Flash memory module and method for programming a page of flash memory cells
US8995197B1 (en) 2009-08-26 2015-03-31 Densbits Technologies Ltd. System and methods for dynamic erase and program control for flash memory device memories
US8868821B2 (en) 2009-08-26 2014-10-21 Densbits Technologies Ltd. Systems and methods for pre-equalization and code design for a flash memory
US9330767B1 (en) 2009-08-26 2016-05-03 Avago Technologies General Ip (Singapore) Pte. Ltd. Flash memory module and method for programming a page of flash memory cells
US8743629B2 (en) 2009-08-31 2014-06-03 Sandisk Il Ltd. Preloading data into a flash storage device
US20110059628A1 (en) * 2009-09-04 2011-03-10 Solid State System Co., Ltd. Secure digital card with two micro-sd cards in striping data access
KR101678909B1 (ko) * 2009-09-17 2016-11-23 삼성전자주식회사 플래시 메모리 시스템 및 그것의 소거 리프레쉬 방법
US8495465B1 (en) 2009-10-15 2013-07-23 Apple Inc. Error correction coding over multiple memory pages
US8730729B2 (en) 2009-10-15 2014-05-20 Densbits Technologies Ltd. Systems and methods for averaging error rates in non-volatile devices and storage systems
US8724387B2 (en) 2009-10-22 2014-05-13 Densbits Technologies Ltd. Method, system, and computer readable medium for reading and programming flash memory cells using multiple bias voltages
US8504884B2 (en) * 2009-10-29 2013-08-06 Freescale Semiconductor, Inc. Threshold voltage techniques for detecting an imminent read failure in a memory array
JP5349256B2 (ja) 2009-11-06 2013-11-20 株式会社東芝 メモリシステム
US8769188B2 (en) * 2009-11-18 2014-07-01 Mediatek Inc. Nonvolatile memory controller and method for writing data to nonvolatile memory
US8626988B2 (en) * 2009-11-19 2014-01-07 Densbits Technologies Ltd. System and method for uncoded bit error rate equalization via interleaving
US8473809B2 (en) * 2009-11-20 2013-06-25 Sandisk Technologies Inc. Data coding for improved ECC efficiency
US8495281B2 (en) * 2009-12-04 2013-07-23 International Business Machines Corporation Intra-block memory wear leveling
US8677054B1 (en) 2009-12-16 2014-03-18 Apple Inc. Memory management schemes for non-volatile memory devices
US8725935B2 (en) 2009-12-18 2014-05-13 Sandisk Technologies Inc. Balanced performance for on-chip folding of non-volatile memories
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
US9037777B2 (en) * 2009-12-22 2015-05-19 Densbits Technologies Ltd. Device, system, and method for reducing program/read disturb in flash arrays
TWI416331B (zh) * 2009-12-23 2013-11-21 Phison Electronics Corp 用於快閃記憶體的資料寫入方法及其控制器與儲存裝置
KR101090394B1 (ko) * 2009-12-24 2011-12-07 주식회사 하이닉스반도체 예비 영역을 유동적으로 관리하는 반도체 스토리지 시스템 및 그 제어 방법
US8607124B2 (en) * 2009-12-24 2013-12-10 Densbits Technologies Ltd. System and method for setting a flash memory cell read threshold
US8595411B2 (en) 2009-12-30 2013-11-26 Sandisk Technologies Inc. Method and controller for performing a sequence of commands
US8443263B2 (en) 2009-12-30 2013-05-14 Sandisk Technologies Inc. Method and controller for performing a copy-back operation
US8694814B1 (en) 2010-01-10 2014-04-08 Apple Inc. Reuse of host hibernation storage space by memory controller
US8677203B1 (en) 2010-01-11 2014-03-18 Apple Inc. Redundant data storage schemes for multi-die memory systems
KR101648531B1 (ko) * 2010-02-12 2016-08-17 삼성전자주식회사 불휘발성 메모리 시스템과 이의 동작 방법
KR101655306B1 (ko) * 2010-02-24 2016-09-07 삼성전자주식회사 메모리 시스템 및 그것의 액세스 방법
US8700970B2 (en) * 2010-02-28 2014-04-15 Densbits Technologies Ltd. System and method for multi-dimensional decoding
US8365041B2 (en) * 2010-03-17 2013-01-29 Sandisk Enterprise Ip Llc MLC self-raid flash data protection scheme
US8516274B2 (en) 2010-04-06 2013-08-20 Densbits Technologies Ltd. Method, system and medium for analog encryption in a flash memory
US8527840B2 (en) 2010-04-06 2013-09-03 Densbits Technologies Ltd. System and method for restoring damaged data programmed on a flash device
US8745317B2 (en) 2010-04-07 2014-06-03 Densbits Technologies Ltd. System and method for storing information in a multi-level cell memory
US9183134B2 (en) * 2010-04-22 2015-11-10 Seagate Technology Llc Data segregation in a storage device
US9021177B2 (en) 2010-04-29 2015-04-28 Densbits Technologies Ltd. System and method for allocating and using spare blocks in a flash memory
US8694853B1 (en) 2010-05-04 2014-04-08 Apple Inc. Read commands for reading interfering memory cells
US8452937B2 (en) 2010-05-14 2013-05-28 Sandisk Il Ltd. Moving executable code from a first region of a non-volatile memory to a second region of the non-volatile memory to reduce read disturb
US8572423B1 (en) 2010-06-22 2013-10-29 Apple Inc. Reducing peak current in memory systems
US8621321B2 (en) 2010-07-01 2013-12-31 Densbits Technologies Ltd. System and method for multi-dimensional encoding and decoding
US8539311B2 (en) 2010-07-01 2013-09-17 Densbits Technologies Ltd. System and method for data recovery in multi-level cell memories
US8819503B2 (en) * 2010-07-02 2014-08-26 Stec, Inc. Apparatus and method for determining an operating condition of a memory cell based on cycle information
US20120008414A1 (en) 2010-07-06 2012-01-12 Michael Katz Systems and methods for storing, retrieving, and adjusting read thresholds in flash memory storage system
US8737141B2 (en) 2010-07-07 2014-05-27 Stec, Inc. Apparatus and method for determining an operating condition of a memory cell based on cycle information
US8432732B2 (en) 2010-07-09 2013-04-30 Sandisk Technologies Inc. Detection of word-line leakage in memory arrays
US8514630B2 (en) 2010-07-09 2013-08-20 Sandisk Technologies Inc. Detection of word-line leakage in memory arrays: current based approach
US8737136B2 (en) 2010-07-09 2014-05-27 Stec, Inc. Apparatus and method for determining a read level of a memory cell based on cycle information
US8305807B2 (en) 2010-07-09 2012-11-06 Sandisk Technologies Inc. Detection of broken word-lines in memory arrays
US8595591B1 (en) 2010-07-11 2013-11-26 Apple Inc. Interference-aware assignment of programming levels in analog memory cells
US9104580B1 (en) 2010-07-27 2015-08-11 Apple Inc. Cache memory for hybrid disk drives
US8645794B1 (en) 2010-07-31 2014-02-04 Apple Inc. Data storage in analog memory cells using a non-integer number of bits per cell
US8856475B1 (en) 2010-08-01 2014-10-07 Apple Inc. Efficient selection of memory blocks for compaction
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US8964464B2 (en) 2010-08-24 2015-02-24 Densbits Technologies Ltd. System and method for accelerated sampling
US8508995B2 (en) 2010-09-15 2013-08-13 Densbits Technologies Ltd. System and method for adjusting read voltage thresholds in memories
US9021181B1 (en) 2010-09-27 2015-04-28 Apple Inc. Memory management for unifying memory cell conditions by using maximum time intervals
US8452911B2 (en) 2010-09-30 2013-05-28 Sandisk Technologies Inc. Synchronized maintenance operations in a multi-bank storage system
WO2012048118A2 (en) 2010-10-06 2012-04-12 Blackbird Technology Holdings, Inc. Method and apparatus for adaptive searching of distributed datasets
US9042353B2 (en) 2010-10-06 2015-05-26 Blackbird Technology Holdings, Inc. Method and apparatus for low-power, long-range networking
US8718551B2 (en) 2010-10-12 2014-05-06 Blackbird Technology Holdings, Inc. Method and apparatus for a multi-band, multi-mode smartcard
US9063878B2 (en) 2010-11-03 2015-06-23 Densbits Technologies Ltd. Method, system and computer readable medium for copy back
US8622312B2 (en) 2010-11-16 2014-01-07 Blackbird Technology Holdings, Inc. Method and apparatus for interfacing with a smartcard
US8479062B2 (en) * 2010-12-03 2013-07-02 International Business Machines Corporation Program disturb error logging and correction for flash memory
US8850100B2 (en) 2010-12-07 2014-09-30 Densbits Technologies Ltd. Interleaving codeword portions between multiple planes and/or dies of a flash memory device
US8472280B2 (en) 2010-12-21 2013-06-25 Sandisk Technologies Inc. Alternate page by page programming scheme
JP2012133642A (ja) * 2010-12-22 2012-07-12 Sony Corp メモリ装置、メモリ制御方法、およびプログラム
US8819328B2 (en) 2010-12-30 2014-08-26 Sandisk Technologies Inc. Controller and method for performing background operations
WO2012100145A1 (en) * 2011-01-21 2012-07-26 Blackbird Technology Holdings, Inc. Method and apparatus for memory management
JP5917163B2 (ja) * 2011-01-27 2016-05-11 キヤノン株式会社 情報処理装置、その制御方法及びプログラム並びに記憶媒体
US8886990B2 (en) * 2011-01-27 2014-11-11 Apple Inc. Block management schemes in hybrid SLC/MLC memory
US20120203993A1 (en) * 2011-02-08 2012-08-09 SMART Storage Systems, Inc. Memory system with tiered queuing and method of operation thereof
US8909851B2 (en) 2011-02-08 2014-12-09 SMART Storage Systems, Inc. Storage control system with change logging mechanism and method of operation thereof
US8484542B2 (en) * 2011-02-08 2013-07-09 Sandisk Technologies Inc. Data recovery using additional error correction coding data
US8909865B2 (en) 2011-02-15 2014-12-09 Blackbird Technology Holdings, Inc. Method and apparatus for plug and play, networkable ISO 18000-7 connectivity
US10079068B2 (en) 2011-02-23 2018-09-18 Avago Technologies General Ip (Singapore) Pte. Ltd. Devices and method for wear estimation based memory management
US9191340B2 (en) 2011-03-02 2015-11-17 Blackbird Technology Holdings, Inc. Method and apparatus for dynamic media access control in a multiple access system
US8693258B2 (en) 2011-03-17 2014-04-08 Densbits Technologies Ltd. Obtaining soft information using a hard interface
JP2012198949A (ja) * 2011-03-18 2012-10-18 Toshiba Corp 半導体記憶装置
US8935466B2 (en) 2011-03-28 2015-01-13 SMART Storage Systems, Inc. Data storage system with non-volatile memory and method of operation thereof
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
US9047955B2 (en) 2011-03-30 2015-06-02 Stec, Inc. Adjusting operating parameters for memory cells based on wordline address and cycle information
US8990665B1 (en) 2011-04-06 2015-03-24 Densbits Technologies Ltd. System, method and computer program product for joint search of a read threshold and soft decoding
US8484521B2 (en) * 2011-04-07 2013-07-09 International Business Machines Corporation Firmware monitoring of memory scrub coverage
EP2702491A4 (de) 2011-04-26 2015-02-25 Lsi Corp Variable redundante bereitstellung für nichtflüchtige speicher
JP2012230581A (ja) * 2011-04-27 2012-11-22 Mitsubishi Electric Corp データ記憶装置
US9337872B2 (en) 2011-04-30 2016-05-10 Rambus Inc. Configurable, error-tolerant memory control
KR101678919B1 (ko) 2011-05-02 2016-11-24 삼성전자주식회사 메모리 시스템 및 에러 정정 방법
US8379454B2 (en) 2011-05-05 2013-02-19 Sandisk Technologies Inc. Detection of broken word-lines in memory arrays
US8996790B1 (en) 2011-05-12 2015-03-31 Densbits Technologies Ltd. System and method for flash memory management
US9110785B1 (en) 2011-05-12 2015-08-18 Densbits Technologies Ltd. Ordered merge of data sectors that belong to memory space portions
US9396106B2 (en) 2011-05-12 2016-07-19 Avago Technologies General Ip (Singapore) Pte. Ltd. Advanced management of a non-volatile memory
US9501392B1 (en) 2011-05-12 2016-11-22 Avago Technologies General Ip (Singapore) Pte. Ltd. Management of a non-volatile memory module
US9372792B1 (en) 2011-05-12 2016-06-21 Avago Technologies General Ip (Singapore) Pte. Ltd. Advanced management of a non-volatile memory
US9195592B1 (en) 2011-05-12 2015-11-24 Densbits Technologies Ltd. Advanced management of a non-volatile memory
US8825944B2 (en) 2011-05-23 2014-09-02 International Business Machines Corporation Populating strides of tracks to demote from a first cache to a second cache
CN102163165B (zh) * 2011-05-26 2012-11-14 忆正存储技术(武汉)有限公司 一种闪存错误预估模块及其预估方法
US8667211B2 (en) 2011-06-01 2014-03-04 Densbits Technologies Ltd. System and method for managing a non-volatile memory
US8456911B2 (en) 2011-06-07 2013-06-04 Sandisk Technologies Inc. Intelligent shifting of read pass voltages for non-volatile storage
US8694719B2 (en) 2011-06-24 2014-04-08 Sandisk Technologies Inc. Controller, storage device, and method for power throttling memory operations
US8929961B2 (en) 2011-07-15 2015-01-06 Blackbird Technology Holdings, Inc. Protective case for adding wireless functionality to a handheld electronic device
US8669889B2 (en) 2011-07-21 2014-03-11 International Business Machines Corporation Using variable length code tables to compress an input data stream to a compressed output data stream
US8400335B2 (en) 2011-07-21 2013-03-19 International Business Machines Corporation Using variable length code tables to compress an input data stream to a compressed output data stream
US8750042B2 (en) 2011-07-28 2014-06-10 Sandisk Technologies Inc. Combined simultaneous sensing of multiple wordlines in a post-write read (PWR) and detection of NAND failures
US8726104B2 (en) 2011-07-28 2014-05-13 Sandisk Technologies Inc. Non-volatile memory and method with accelerated post-write read using combined verification of multiple pages
US8775901B2 (en) 2011-07-28 2014-07-08 SanDisk Technologies, Inc. Data recovery for defective word lines during programming of non-volatile memory arrays
US8588003B1 (en) 2011-08-01 2013-11-19 Densbits Technologies Ltd. System, method and computer program product for programming and for recovering from a power failure
US8681554B2 (en) 2011-08-29 2014-03-25 Hitachi, Ltd. Semiconductor storage device comprising electrically rewritable nonvolatile semiconductor memory
JP2013054409A (ja) * 2011-08-31 2013-03-21 Toshiba Corp 情報記憶装置および情報記憶方法
US9098399B2 (en) 2011-08-31 2015-08-04 SMART Storage Systems, Inc. Electronic system with storage management mechanism and method of operation thereof
US9063844B2 (en) 2011-09-02 2015-06-23 SMART Storage Systems, Inc. Non-volatile memory management system with time measure mechanism and method of operation thereof
US9021231B2 (en) 2011-09-02 2015-04-28 SMART Storage Systems, Inc. Storage control system with write amplification control mechanism and method of operation thereof
US9021319B2 (en) 2011-09-02 2015-04-28 SMART Storage Systems, Inc. Non-volatile memory management system with load leveling and method of operation thereof
JP5821445B2 (ja) * 2011-09-09 2015-11-24 富士通株式会社 ディスクアレイ装置及びディスクアレイ装置制御方法
US8553468B2 (en) 2011-09-21 2013-10-08 Densbits Technologies Ltd. System and method for managing erase operations in a non-volatile memory
KR20130049332A (ko) * 2011-11-04 2013-05-14 삼성전자주식회사 메모리 시스템 및 그것의 동작 방법
US8793543B2 (en) 2011-11-07 2014-07-29 Sandisk Enterprise Ip Llc Adaptive read comparison signal generation for memory systems
US9081663B2 (en) * 2011-11-18 2015-07-14 Stec, Inc. Optimized garbage collection algorithm to improve solid state drive reliability
US8687421B2 (en) 2011-11-21 2014-04-01 Sandisk Technologies Inc. Scrub techniques for use with dynamic read
KR101893145B1 (ko) 2011-12-06 2018-10-05 삼성전자주식회사 메모리 시스템들 및 그것들의 블록 복사 방법들
US8762627B2 (en) 2011-12-21 2014-06-24 Sandisk Technologies Inc. Memory logical defragmentation during garbage collection
US8692696B2 (en) 2012-01-03 2014-04-08 International Business Machines Corporation Generating a code alphabet of symbols to generate codewords for words used with a program
US9767032B2 (en) 2012-01-12 2017-09-19 Sandisk Technologies Llc Systems and methods for cache endurance
US9021201B2 (en) 2012-01-17 2015-04-28 International Business Machines Corporation Demoting partial tracks from a first cache to a second cache
US8825953B2 (en) 2012-01-17 2014-09-02 International Business Machines Corporation Demoting tracks from a first cache to a second cache by using a stride number ordering of strides in the second cache to consolidate strides in the second cache
US8966178B2 (en) 2012-01-17 2015-02-24 International Business Machines Corporation Populating a first stride of tracks from a first cache to write to a second stride in a second cache
US8825957B2 (en) * 2012-01-17 2014-09-02 International Business Machines Corporation Demoting tracks from a first cache to a second cache by using an occupancy of valid tracks in strides in the second cache to consolidate strides in the second cache
US9239781B2 (en) 2012-02-07 2016-01-19 SMART Storage Systems, Inc. Storage control system with erase block mechanism and method of operation thereof
US8947941B2 (en) 2012-02-09 2015-02-03 Densbits Technologies Ltd. State responsive operations relating to flash memory cells
US8996788B2 (en) 2012-02-09 2015-03-31 Densbits Technologies Ltd. Configurable flash interface
US9195586B2 (en) 2012-02-23 2015-11-24 Hgst Technologies Santa Ana, Inc. Determining bias information for offsetting operating variations in memory cells based on wordline address
US8730722B2 (en) 2012-03-02 2014-05-20 Sandisk Technologies Inc. Saving of data in cases of word-line to word-line short in memory arrays
US9362003B2 (en) * 2012-03-09 2016-06-07 Sandisk Technologies Inc. System and method to decode data subject to a disturb condition
US20130262942A1 (en) * 2012-03-27 2013-10-03 Yung-Chiang Chu Flash memory lifetime evaluation method
US9298252B2 (en) 2012-04-17 2016-03-29 SMART Storage Systems, Inc. Storage control system with power down mechanism and method of operation thereof
US8996793B1 (en) 2012-04-24 2015-03-31 Densbits Technologies Ltd. System, method and computer readable medium for generating soft information
US8681548B2 (en) 2012-05-03 2014-03-25 Sandisk Technologies Inc. Column redundancy circuitry for non-volatile memory
US8838937B1 (en) 2012-05-23 2014-09-16 Densbits Technologies Ltd. Methods, systems and computer readable medium for writing and reading data
US8879325B1 (en) 2012-05-30 2014-11-04 Densbits Technologies Ltd. System, method and computer program product for processing read threshold information and for reading a flash memory module
US8949689B2 (en) 2012-06-11 2015-02-03 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US8750045B2 (en) 2012-07-27 2014-06-10 Sandisk Technologies Inc. Experience count dependent program algorithm for flash memory
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US9921954B1 (en) 2012-08-27 2018-03-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Method and system for split flash memory management between host and storage controller
US8914696B2 (en) * 2012-08-29 2014-12-16 Seagate Technology Llc Flash memory read scrub and channel tracking
US9810723B2 (en) 2012-09-27 2017-11-07 Sandisk Technologies Llc Charge pump based over-sampling ADC for current detection
US9164526B2 (en) 2012-09-27 2015-10-20 Sandisk Technologies Inc. Sigma delta over-sampling charge pump analog-to-digital converter
US9490035B2 (en) 2012-09-28 2016-11-08 SanDisk Technologies, Inc. Centralized variable rate serializer and deserializer for bad column management
US8897080B2 (en) 2012-09-28 2014-11-25 Sandisk Technologies Inc. Variable rate serial to parallel shift register
US9076506B2 (en) 2012-09-28 2015-07-07 Sandisk Technologies Inc. Variable rate parallel to serial shift register
KR102025263B1 (ko) 2012-10-05 2019-09-25 삼성전자주식회사 메모리 시스템 및 그것의 읽기 교정 방법
US9368225B1 (en) 2012-11-21 2016-06-14 Avago Technologies General Ip (Singapore) Pte. Ltd. Determining read thresholds based upon read error direction statistics
US9171620B2 (en) 2012-11-29 2015-10-27 Sandisk Technologies Inc. Weighted read scrub for nonvolatile memory
US9671962B2 (en) 2012-11-30 2017-06-06 Sandisk Technologies Llc Storage control system with data management mechanism of parity and method of operation thereof
US9032271B2 (en) 2012-12-07 2015-05-12 Western Digital Technologies, Inc. System and method for lower page data recovery in a solid state drive
US9501398B2 (en) 2012-12-26 2016-11-22 Sandisk Technologies Llc Persistent storage device with NVRAM for staging writes
US9239751B1 (en) 2012-12-27 2016-01-19 Sandisk Enterprise Ip Llc Compressing data from multiple reads for error control management in memory systems
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US9069659B1 (en) 2013-01-03 2015-06-30 Densbits Technologies Ltd. Read threshold determination using reference read threshold
US9070479B2 (en) 2013-01-21 2015-06-30 Sandisk Technologies Inc. Systems and methods of updating read voltages
US9123445B2 (en) 2013-01-22 2015-09-01 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
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
US9652376B2 (en) * 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US11249652B1 (en) * 2013-01-28 2022-02-15 Radian Memory Systems, Inc. Maintenance of nonvolatile memory on host selected namespaces by a common memory controller
US9098205B2 (en) 2013-01-30 2015-08-04 Sandisk Technologies Inc. Data randomization in 3-D memory
KR102089532B1 (ko) 2013-02-06 2020-03-16 삼성전자주식회사 메모리 컨트롤러, 메모리 시스템 및 메모리 시스템의 동작 방법
US9214965B2 (en) 2013-02-20 2015-12-15 Sandisk Enterprise Ip Llc Method and system for improving data integrity in non-volatile storage
US9329928B2 (en) 2013-02-20 2016-05-03 Sandisk Enterprise IP LLC. Bandwidth optimization in a non-volatile memory system
US9183137B2 (en) 2013-02-27 2015-11-10 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US9470720B2 (en) 2013-03-08 2016-10-18 Sandisk Technologies Llc Test system with localized heating and method of manufacture thereof
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9367391B2 (en) 2013-03-15 2016-06-14 Micron Technology, Inc. Error correction operations in a memory device
US9136877B1 (en) 2013-03-15 2015-09-15 Sandisk Enterprise Ip Llc Syndrome layered decoding for LDPC codes
US9367246B2 (en) 2013-03-15 2016-06-14 Sandisk Technologies Inc. Performance optimization of data transfer for soft information generation
US9244763B1 (en) 2013-03-15 2016-01-26 Sandisk Enterprise Ip Llc System and method for updating a reading threshold voltage based on symbol transition information
US9236886B1 (en) 2013-03-15 2016-01-12 Sandisk Enterprise Ip Llc Universal and reconfigurable QC-LDPC encoder
US10042750B2 (en) * 2013-03-15 2018-08-07 Micron Technology, Inc. Apparatuses and methods for adaptive control of memory using an adaptive memory controller with a memory management hypervisor
US9092350B1 (en) 2013-03-15 2015-07-28 Sandisk Enterprise Ip Llc Detection and handling of unbalanced errors in interleaved codewords
US9043780B2 (en) 2013-03-27 2015-05-26 SMART Storage Systems, Inc. Electronic system with system modification control mechanism and method of operation thereof
US10049037B2 (en) 2013-04-05 2018-08-14 Sandisk Enterprise Ip Llc Data management in a storage system
US9170941B2 (en) 2013-04-05 2015-10-27 Sandisk Enterprises IP LLC Data hardening in a storage system
US9543025B2 (en) 2013-04-11 2017-01-10 Sandisk Technologies Llc Storage control system with power-off time estimation mechanism and method of operation thereof
US10546648B2 (en) 2013-04-12 2020-01-28 Sandisk Technologies Llc Storage control system with data management mechanism and method of operation thereof
JP6167646B2 (ja) * 2013-04-30 2017-07-26 富士通株式会社 情報処理装置、制御回路、制御プログラム、および制御方法
US9159437B2 (en) 2013-06-11 2015-10-13 Sandisk Enterprise IP LLC. Device and method for resolving an LM flag issue
US9136876B1 (en) 2013-06-13 2015-09-15 Densbits Technologies Ltd. Size limited multi-dimensional decoding
US9313874B2 (en) 2013-06-19 2016-04-12 SMART Storage Systems, Inc. Electronic system with heat extraction and method of manufacture thereof
US9898056B2 (en) 2013-06-19 2018-02-20 Sandisk Technologies Llc Electronic assembly with thermal channel and method of manufacture thereof
US9244519B1 (en) 2013-06-25 2016-01-26 Smart Storage Systems. Inc. Storage system with data transfer rate adjustment for power throttling
US9367353B1 (en) 2013-06-25 2016-06-14 Sandisk Technologies Inc. Storage control system with power throttling mechanism and method of operation thereof
US9230656B2 (en) 2013-06-26 2016-01-05 Sandisk Technologies Inc. System for maintaining back gate threshold voltage in three dimensional NAND memory
US9727413B2 (en) 2013-06-28 2017-08-08 International Business Machines Corporation Flash memory scrub management
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9384126B1 (en) 2013-07-25 2016-07-05 Sandisk Technologies Inc. Methods and systems to avoid false negative results in bloom filters implemented in non-volatile data storage systems
EP3028151A1 (de) 2013-07-31 2016-06-08 Hewlett Packard Enterprise Development LP Versionsbezogene speicherimplementierung
US9146850B2 (en) 2013-08-01 2015-09-29 SMART Storage Systems, Inc. Data storage system with dynamic read threshold mechanism and method of operation thereof
US9569354B2 (en) * 2013-08-02 2017-02-14 Infineon Technologies Ag System and method to emulate an electrically erasable programmable read-only memory
US9448946B2 (en) 2013-08-07 2016-09-20 Sandisk Technologies Llc Data storage system with stale data mechanism and method of operation thereof
US9361222B2 (en) 2013-08-07 2016-06-07 SMART Storage Systems, Inc. Electronic system with storage drive life estimation mechanism and method of operation thereof
US9431113B2 (en) 2013-08-07 2016-08-30 Sandisk Technologies Llc Data storage system with dynamic erase block grouping mechanism and method of operation thereof
US9235509B1 (en) 2013-08-26 2016-01-12 Sandisk Enterprise Ip Llc Write amplification reduction by delaying read access to data written during garbage collection
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
WO2015037159A1 (ja) 2013-09-13 2015-03-19 株式会社 東芝 半導体記憶装置及びメモリシステム
US9240238B2 (en) 2013-09-20 2016-01-19 Sandisk Technologies Inc. Back gate operation with elevated threshold voltage
US9165683B2 (en) 2013-09-23 2015-10-20 Sandisk Technologies Inc. Multi-word line erratic programming detection
US9413491B1 (en) 2013-10-08 2016-08-09 Avago Technologies General Ip (Singapore) Pte. Ltd. System and method for multiple dimension decoding and encoding a message
US9348694B1 (en) 2013-10-09 2016-05-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US9397706B1 (en) 2013-10-09 2016-07-19 Avago Technologies General Ip (Singapore) Pte. Ltd. System and method for irregular multiple dimension decoding and encoding
US9786388B1 (en) 2013-10-09 2017-10-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
US9298608B2 (en) 2013-10-18 2016-03-29 Sandisk Enterprise Ip Llc Biasing for wear leveling in storage systems
US20150121156A1 (en) 2013-10-28 2015-04-30 Sandisk Technologies Inc. Block Structure Profiling in Three Dimensional Memory
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US9263156B2 (en) 2013-11-07 2016-02-16 Sandisk Enterprise Ip Llc System and method for adjusting trip points within a storage device
US9329802B2 (en) 2013-11-11 2016-05-03 Qualcomm Incorporated Fail safe refresh of data stored in NAND memory device
US9244785B2 (en) 2013-11-13 2016-01-26 Sandisk Enterprise Ip Llc Simulated power failure and data hardening
US9152555B2 (en) 2013-11-15 2015-10-06 Sandisk Enterprise IP LLC. Data management with modular erase in a data storage system
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9535777B2 (en) * 2013-11-22 2017-01-03 Intel Corporation Defect management policies for NAND flash memory
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9229644B2 (en) 2013-11-25 2016-01-05 Sandisk Technologies Inc. Targeted copy of data relocation
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US9235245B2 (en) 2013-12-04 2016-01-12 Sandisk Enterprise Ip Llc Startup performance and power isolation
US9129665B2 (en) 2013-12-17 2015-09-08 Sandisk Enterprise Ip Llc Dynamic brownout adjustment in a storage device
US9389956B2 (en) 2014-01-10 2016-07-12 International Business Machines Corporation Implementing ECC control for enhanced endurance and data retention of flash memories
US9536612B1 (en) 2014-01-23 2017-01-03 Avago Technologies General Ip (Singapore) Pte. Ltd Digital signaling processing for three dimensional flash memory arrays
US10120792B1 (en) 2014-01-29 2018-11-06 Avago Technologies General Ip (Singapore) Pte. Ltd. Programming an embedded flash storage device
KR102069274B1 (ko) 2014-02-05 2020-01-22 삼성전자주식회사 메모리 제어 방법
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US9230689B2 (en) 2014-03-17 2016-01-05 Sandisk Technologies Inc. Finding read disturbs on non-volatile memories
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9390814B2 (en) 2014-03-19 2016-07-12 Sandisk Technologies Llc Fault detection and prediction for data storage elements
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9390021B2 (en) 2014-03-31 2016-07-12 Sandisk Technologies Llc Efficient cache utilization in a tiered data structure
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US9542262B1 (en) 2014-05-29 2017-01-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Error correction
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US9070481B1 (en) 2014-05-30 2015-06-30 Sandisk Technologies Inc. Internal current measurement for age measurements
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US8918577B1 (en) 2014-06-13 2014-12-23 Sandisk Technologies Inc. Three dimensional nonvolatile memory with variable block capacity
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
US9892033B1 (en) 2014-06-24 2018-02-13 Avago Technologies General Ip (Singapore) Pte. Ltd. Management of memory units
US9972393B1 (en) 2014-07-03 2018-05-15 Avago Technologies General Ip (Singapore) Pte. Ltd. Accelerating programming of a flash memory module
US9584159B1 (en) 2014-07-03 2017-02-28 Avago Technologies General Ip (Singapore) Pte. Ltd. Interleaved encoding
US9449702B1 (en) 2014-07-08 2016-09-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Power management
US9514835B2 (en) 2014-07-10 2016-12-06 Sandisk Technologies Llc Determination of word line to word line shorts between adjacent blocks
US9484086B2 (en) 2014-07-10 2016-11-01 Sandisk Technologies Llc Determination of word line to local source line shorts
US9443612B2 (en) 2014-07-10 2016-09-13 Sandisk Technologies Llc Determination of bit line to low voltage signal shorts
US9460809B2 (en) 2014-07-10 2016-10-04 Sandisk Technologies Llc AC stress mode to screen out word line to word line shorts
KR102318561B1 (ko) 2014-08-19 2021-11-01 삼성전자주식회사 스토리지 장치, 스토리지 장치의 동작 방법
US9202593B1 (en) 2014-09-02 2015-12-01 Sandisk Technologies Inc. Techniques for detecting broken word lines in non-volatile memories
US9240249B1 (en) 2014-09-02 2016-01-19 Sandisk Technologies Inc. AC stress methods to screen out bit line defects
US9449694B2 (en) 2014-09-04 2016-09-20 Sandisk Technologies Llc Non-volatile memory with multi-word line select for defect detection operations
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
US9542118B1 (en) * 2014-09-09 2017-01-10 Radian Memory Systems, Inc. Expositive flash memory control
US10552085B1 (en) * 2014-09-09 2020-02-04 Radian Memory Systems, Inc. Techniques for directed data migration
KR102128406B1 (ko) 2014-09-26 2020-07-10 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
US9552171B2 (en) 2014-10-29 2017-01-24 Sandisk Technologies Llc Read scrub with adaptive counter management
KR102287760B1 (ko) 2014-10-29 2021-08-09 삼성전자주식회사 메모리 시스템 및 상기 메모리 시스템의 동작 방법
KR102263046B1 (ko) 2014-10-29 2021-06-09 삼성전자주식회사 메모리 장치, 메모리 시스템, 상기 메모리 장치의 동작 방법 및 상기 메모리 시스템의 동작 방법
KR102252378B1 (ko) 2014-10-29 2021-05-14 삼성전자주식회사 메모리 장치, 메모리 시스템, 상기 메모리 장치의 동작 방법 및 상기 메모리 시스템의 동작 방법
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
US9978456B2 (en) 2014-11-17 2018-05-22 Sandisk Technologies Llc Techniques for reducing read disturb in partially written blocks of non-volatile memory
US9349479B1 (en) 2014-11-18 2016-05-24 Sandisk Technologies Inc. Boundary word line operation in nonvolatile memory
US9524211B1 (en) 2014-11-18 2016-12-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Codeword management
US20160188495A1 (en) * 2014-12-26 2016-06-30 Intel Corporation Event triggered erasure for data security
US9224502B1 (en) 2015-01-14 2015-12-29 Sandisk Technologies Inc. Techniques for detection and treating memory hole to local interconnect marginality defects
US10305515B1 (en) 2015-02-02 2019-05-28 Avago Technologies International Sales Pte. Limited System and method for encoding using multiple linear feedback shift registers
US10032524B2 (en) 2015-02-09 2018-07-24 Sandisk Technologies Llc Techniques for determining local interconnect defects
US9449700B2 (en) 2015-02-13 2016-09-20 Sandisk Technologies Llc Boundary word line search and open block read methods with reduced read disturb
US10032223B2 (en) 2015-03-20 2018-07-24 Bank Of America Corporation System for account linking and future event integration into retirement score calculation
US10049406B2 (en) 2015-03-20 2018-08-14 Bank Of America Corporation System for sharing retirement scores between social groups of customers
US10019760B2 (en) 2015-03-20 2018-07-10 Bank Of America Corporation System for utilizing a retirement score to receive benefits
US9830660B2 (en) 2015-03-20 2017-11-28 Bank Of America Corporation System for augmenting a retirement score with health information
US9773563B2 (en) 2015-03-27 2017-09-26 Toshiba Memory Corporation Memory controller, memory control method, and coefficient decision method
US9269446B1 (en) 2015-04-08 2016-02-23 Sandisk Technologies Inc. Methods to improve programming of slow cells
US9564219B2 (en) 2015-04-08 2017-02-07 Sandisk Technologies Llc Current based detection and recording of memory hole-interconnect spacing defects
KR102291806B1 (ko) * 2015-04-20 2021-08-24 삼성전자주식회사 불휘발성 메모리 시스템 및 그것의 동작 방법
US9823962B2 (en) 2015-04-22 2017-11-21 Nxp Usa, Inc. Soft error detection in a memory system
US10628255B1 (en) 2015-06-11 2020-04-21 Avago Technologies International Sales Pte. Limited Multi-dimensional decoding
US10521294B2 (en) 2015-06-30 2019-12-31 Hewlett-Packard Development Company, L.P. Patrol scrub periods based on power status
US9851921B1 (en) 2015-07-05 2017-12-26 Avago Technologies General Ip (Singapore) Pte. Ltd. Flash memory chip processing
US9864653B2 (en) 2015-07-30 2018-01-09 International Business Machines Corporation Memory scrubbing in a mirrored memory system to reduce system power consumption
DE102015215401B4 (de) 2015-08-12 2020-10-01 Infineon Technologies Ag Speichervorrichtung und Verfahren zum Korrigieren einer gespeicherten Bitfolge
US9659666B2 (en) 2015-08-31 2017-05-23 Sandisk Technologies Llc Dynamic memory recovery at the sub-block level
US9653154B2 (en) 2015-09-21 2017-05-16 Sandisk Technologies Llc Write abort detection for multi-state memories
US9910730B2 (en) * 2015-10-21 2018-03-06 Sandisk Technologies Llc System for handling erratic word lines for non-volatile memory
FR3044818B1 (fr) * 2015-12-02 2018-03-30 Stmicroelectronics (Rousset) Sas Procede de gestion d'une ligne defectueuse du plan memoire d'une memoire non volatile et dispositif de memoire correspondant
US9954558B1 (en) 2016-03-03 2018-04-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Fast decoding of data stored in a flash memory
US9698676B1 (en) 2016-03-11 2017-07-04 Sandisk Technologies Llc Charge pump based over-sampling with uniform step size for current detection
TWI594126B (zh) 2016-07-05 2017-08-01 慧榮科技股份有限公司 資料儲存裝置與資料儲存方法
US10013192B2 (en) 2016-08-17 2018-07-03 Nxp Usa, Inc. Soft error detection in a memory system
KR20180035981A (ko) * 2016-09-29 2018-04-09 에스케이하이닉스 주식회사 메모리 시스템 및 그의 동작 방법
US10261876B2 (en) * 2016-11-08 2019-04-16 Micron Technology, Inc. Memory management
US10216570B2 (en) * 2017-01-31 2019-02-26 Winbond Electronics Corporation Memory device and control method thereof
KR20180122087A (ko) * 2017-05-02 2018-11-12 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
US10008278B1 (en) * 2017-06-11 2018-06-26 Apple Inc. Memory block usage based on block location relative to array edge
US10976936B2 (en) 2017-08-23 2021-04-13 Micron Technology, Inc. Sensing operations in memory
US10446197B2 (en) * 2017-08-31 2019-10-15 Micron Technology, Inc. Optimized scan interval
JP2019079377A (ja) * 2017-10-26 2019-05-23 東芝メモリ株式会社 半導体記憶装置
US10817392B1 (en) * 2017-11-01 2020-10-27 Pure Storage, Inc. Ensuring resiliency to storage device failures in a storage system that includes a plurality of storage devices
US11436080B2 (en) * 2017-11-21 2022-09-06 Sony Semiconductor Solutions Corporation Memory controller, memory, memory system, information processing system, and method of control thereof
US10304550B1 (en) 2017-11-29 2019-05-28 Sandisk Technologies Llc Sense amplifier with negative threshold sensing for non-volatile memory
CN107992431A (zh) * 2017-12-21 2018-05-04 珠海亿智电子科技有限公司 一种nand闪存无效数据回收的掉电保护方法
TWI659426B (zh) 2018-03-09 2019-05-11 旺宏電子股份有限公司 記憶體裝置之資料探測方法
CN110265083B (zh) * 2018-03-12 2021-07-27 旺宏电子股份有限公司 存储器装置的数据探测方法
JP6991084B2 (ja) * 2018-03-22 2022-01-12 キオクシア株式会社 不揮発性メモリデバイス及び制御方法
US10691532B2 (en) 2018-06-29 2020-06-23 Alibaba Group Holding Limited Storage drive error-correcting code-assisted scrubbing for dynamic random-access memory retention time handling
US10936199B2 (en) * 2018-07-17 2021-03-02 Silicon Motion, Inc. Flash controllers, methods, and corresponding storage devices capable of rapidly/fast generating or updating contents of valid page count table
US11094383B2 (en) * 2018-08-24 2021-08-17 International Business Machines Corporation Selective page calibration based on hierarchical page mapping
US20200073759A1 (en) * 2018-09-05 2020-03-05 Hewlett Packard Enterprise Development Lp Maximum data recovery of scalable persistent memory
US10896088B2 (en) * 2018-11-15 2021-01-19 Seagate Technology Llc Metadata recovery mechanism for page storage
US10643695B1 (en) 2019-01-10 2020-05-05 Sandisk Technologies Llc Concurrent multi-state program verify for non-volatile memory
US11169730B2 (en) 2019-06-06 2021-11-09 Micron Technology, Inc. Scrub rate control for a memory device
US10937510B2 (en) * 2019-06-28 2021-03-02 Western Digital Technologies, Inc. Multidimensional pseudorandom binary sequence analysis for a memory device
US10922012B1 (en) * 2019-09-03 2021-02-16 Dropbox, Inc. Fair data scrubbing in a data storage system
CN112506420A (zh) * 2019-09-16 2021-03-16 伊姆西Ip控股有限责任公司 在存储系统中管理擦洗操作的方法、设备和产品
CN110750467B (zh) * 2019-10-22 2021-11-02 深圳芯邦科技股份有限公司 一种Nand Flash中干扰页的检测方法、系统
US11557366B2 (en) 2019-11-21 2023-01-17 SK Hynix Inc. Memory, memory system, operation method of the memory, and operation of the memory system
US11024392B1 (en) 2019-12-23 2021-06-01 Sandisk Technologies Llc Sense amplifier for bidirectional sensing of memory cells of a non-volatile memory
WO2022058768A1 (en) * 2020-09-21 2022-03-24 Micron Technology, Inc Memory apparatus and method for operating the same
CN112083891B (zh) * 2020-09-22 2022-12-06 深圳芯邦科技股份有限公司 一种存储器中数据块的检测方法及相关设备
US11556416B2 (en) 2021-05-05 2023-01-17 Apple Inc. Controlling memory readout reliability and throughput by adjusting distance between read thresholds
US11847342B2 (en) 2021-07-28 2023-12-19 Apple Inc. Efficient transfer of hard data and confidence levels in reading a nonvolatile memory

Family Cites Families (137)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4139911A (en) 1978-03-13 1979-02-13 Westinghouse Electric Corp. High speed sense circuit for semiconductor memories
US4218764A (en) 1978-10-03 1980-08-19 Matsushita Electric Industrial Co., Ltd. Non-volatile memory refresh control circuit
US4253059A (en) 1979-05-14 1981-02-24 Fairchild Camera & Instrument Corp. EPROM Reliability test circuit
JPS58139399A (ja) 1982-02-15 1983-08-18 Hitachi Ltd 半導体記憶装置
US4460982A (en) 1982-05-20 1984-07-17 Intel Corporation Intelligent electrically programmable and electrically erasable ROM
US4612630A (en) 1984-07-27 1986-09-16 Harris Corporation EEPROM margin testing design
JPS6134793A (ja) 1984-07-27 1986-02-19 Hitachi Ltd ダイナミツクメモリ装置における診断及びエラ−訂正装置
JPS6148197A (ja) 1984-08-13 1986-03-08 Fujitsu Ltd チヤ−ジアツプ回路
JPS61172300A (ja) 1985-01-26 1986-08-02 Toshiba Corp 半導体記憶装置
EP0198935A1 (de) 1985-04-23 1986-10-29 Deutsche ITT Industries GmbH Elektrisch umprogrammierbarer Halbleiterspeicher mit Redundanz
US4962322A (en) 1988-12-05 1990-10-09 Texas Instruments Incorporated Nonvolatible capacitor random access memory
JPS62114200A (ja) 1985-11-13 1987-05-25 Mitsubishi Electric Corp 半導体メモリ装置
US5157629A (en) 1985-11-22 1992-10-20 Hitachi, Ltd. Selective application of voltages for testing storage cells in semiconductor memory arrangements
US4763305A (en) 1985-11-27 1988-08-09 Motorola, Inc. Intelligent write in an EEPROM with data and erase check
JPH0715799B2 (ja) 1987-06-30 1995-02-22 日本電気株式会社 半導体記憶装置
FR2618579B1 (fr) 1987-07-21 1989-11-10 Thomson Semiconducteurs Circuit integre a memoire comportant un dispositif anti-fraude
JPS6476596A (en) 1987-09-18 1989-03-22 Oki Electric Ind Co Ltd Error of eeprom detecting device
US4809231A (en) 1987-11-12 1989-02-28 Motorola, Inc. Method and apparatus for post-packaging testing of one-time programmable memories
FR2630573B1 (fr) 1988-04-26 1990-07-13 Sgs Thomson Microelectronics Memoire programmable electriquement avec plusieurs bits d'information par cellule
US5095344A (en) 1988-06-08 1992-03-10 Eliyahou Harari Highly compact eprom and flash eeprom devices
US5268870A (en) 1988-06-08 1993-12-07 Eliyahou Harari Flash EEPROM system and intelligent programming and erasing methods therefor
US5043940A (en) 1988-06-08 1991-08-27 Eliyahou Harari Flash EEPROM memory systems having multistate storage cells
JPH07105146B2 (ja) 1988-07-29 1995-11-13 三菱電機株式会社 不揮発性記憶装置
US5070032A (en) 1989-03-15 1991-12-03 Sundisk Corporation Method of making dense flash eeprom semiconductor memory structures
JPH02260298A (ja) 1989-03-31 1990-10-23 Oki Electric Ind Co Ltd 不揮発性多値メモリ装置
US4980859A (en) 1989-04-07 1990-12-25 Xicor, Inc. NOVRAM cell using two differential decouplable nonvolatile memory elements
US5172338B1 (en) 1989-04-13 1997-07-08 Sandisk Corp Multi-state eeprom read and write circuits and techniques
JPH0664918B2 (ja) 1989-05-25 1994-08-22 ローム株式会社 自己訂正機能を有する半導体記憶装置
JPH07114077B2 (ja) 1989-06-01 1995-12-06 三菱電機株式会社 不揮発性半導体記憶装置
US5258958A (en) 1989-06-12 1993-11-02 Kabushiki Kaisha Toshiba Semiconductor memory device
FR2650109B1 (fr) 1989-07-20 1993-04-02 Gemplus Card Int Circuit integre mos a tension de seuil ajustable
JPH03162800A (ja) 1989-08-29 1991-07-12 Mitsubishi Electric Corp 半導体メモリ装置
US5065364A (en) 1989-09-15 1991-11-12 Intel Corporation Apparatus for providing block erasing in a flash EPROM
US5200959A (en) 1989-10-17 1993-04-06 Sundisk Corporation Device and method for defect handling in semi-conductor memory
US5270551A (en) 1990-02-14 1993-12-14 Hitachi, Ltd. Method of and apparatus for protecting electronic circuit against radiation
US4975883A (en) 1990-03-29 1990-12-04 Intel Corporation Method and apparatus for preventing the erasure and programming of a nonvolatile memory
US5132935A (en) 1990-04-16 1992-07-21 Ashmore Jr Benjamin H Erasure of eeprom memory arrays to prevent over-erased cells
US5122985A (en) 1990-04-16 1992-06-16 Giovani Santin Circuit and method for erasing eeprom memory arrays to prevent over-erased cells
US5200922A (en) 1990-10-24 1993-04-06 Rao Kameswara K Redundancy circuit for high speed EPROM and flash memory devices
US5343063A (en) 1990-12-18 1994-08-30 Sundisk Corporation Dense vertical programmable read only memory cell structure and processes for making them
US5239505A (en) 1990-12-28 1993-08-24 Intel Corporation Floating gate non-volatile memory with blocks and memory refresh
US5504760A (en) 1991-03-15 1996-04-02 Sandisk Corporation Mixed data encoding EEPROM system
US5270979A (en) 1991-03-15 1993-12-14 Sundisk Corporation Method for optimum erasing of EEPROM
US5263032A (en) 1991-06-27 1993-11-16 Digital Equipment Corporation Computer system operation with corrected read data function
US5313427A (en) 1991-09-20 1994-05-17 Texas Instruments Incorporated EEPROM array with narrow margin of voltage thresholds after erase
JPH05109292A (ja) 1991-10-14 1993-04-30 Toshiba Corp 不揮発性半導体記憶装置
US5313421A (en) 1992-01-14 1994-05-17 Sundisk Corporation EEPROM with split gate source side injection
US6222762B1 (en) 1992-01-14 2001-04-24 Sandisk Corporation Multi-state memory
US5327383A (en) 1992-04-21 1994-07-05 Intel Corporation Method and circuitry for erasing a nonvolatile semiconductor memory incorporating row redundancy
US5347489A (en) 1992-04-21 1994-09-13 Intel Corporation Method and circuitry for preconditioning shorted rows in a nonvolatile semiconductor memory incorporating row redundancy
US5657332A (en) 1992-05-20 1997-08-12 Sandisk Corporation Soft errors handling in EEPROM devices
US5532962A (en) 1992-05-20 1996-07-02 Sandisk Corporation Soft errors handling in EEPROM devices
JPH065823A (ja) 1992-06-19 1994-01-14 Toshiba Corp 不揮発性半導体記憶装置及びその使用方法
US5550394A (en) 1993-06-18 1996-08-27 Texas Instruments Incorporated Semiconductor memory device and defective memory cell correction circuit
US5315541A (en) 1992-07-24 1994-05-24 Sundisk Corporation Segmented column memory array
JP2708333B2 (ja) 1992-09-02 1998-02-04 株式会社東芝 レベルシフタ回路
US5365486A (en) 1992-12-16 1994-11-15 Texas Instruments Incorporated Method and circuitry for refreshing a flash electrically erasable, programmable read only memory
US5404485A (en) 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5335198A (en) 1993-05-06 1994-08-02 Advanced Micro Devices, Inc. Flash EEPROM array with high endurance
US5555204A (en) 1993-06-29 1996-09-10 Kabushiki Kaisha Toshiba Non-volatile semiconductor memory device
KR0169267B1 (ko) 1993-09-21 1999-02-01 사토 후미오 불휘발성 반도체 기억장치
JP3999822B2 (ja) 1993-12-28 2007-10-31 株式会社東芝 記憶システム
US5661053A (en) 1994-05-25 1997-08-26 Sandisk Corporation Method of making dense flash EEPROM cell array and peripheral supporting circuits formed in deposited field oxide with the use of spacers
GB2289779B (en) 1994-05-24 1999-04-28 Intel Corp Method and apparatus for automatically scrubbing ECC errors in memory via hardware
US5523972A (en) 1994-06-02 1996-06-04 Intel Corporation Method and apparatus for verifying the programming of multi-level flash EEPROM memory
US5450363A (en) 1994-06-02 1995-09-12 Intel Corporation Gray coding for a multilevel cell memory system
JP3563452B2 (ja) 1994-08-10 2004-09-08 株式会社東芝 セル閾値分布検知回路およびセル閾値分布検知方法
JPH08147988A (ja) 1994-11-17 1996-06-07 Sony Corp 半導体不揮発性記憶装置
FR2728380A1 (fr) 1994-12-20 1996-06-21 Sgs Thomson Microelectronics Procede d'ecriture de donnees dans une memoire et memoire electriquement programmable correspondante
US5475693A (en) 1994-12-27 1995-12-12 Intel Corporation Error management processes for flash EEPROM memory arrays
JP3274306B2 (ja) 1995-01-20 2002-04-15 株式会社東芝 半導体集積回路装置
KR100477494B1 (ko) 1995-01-31 2005-03-23 가부시끼가이샤 히다치 세이사꾸쇼 반도체 메모리 장치
US5530705A (en) 1995-02-08 1996-06-25 International Business Machines Corporation Soft error recovery system and method
US5513144A (en) 1995-02-13 1996-04-30 Micron Technology, Inc. On-chip memory redundancy circuitry for programmable non-volatile memories, and methods for programming same
JP3176019B2 (ja) 1995-04-05 2001-06-11 株式会社東芝 不揮発性半導体記憶部を含む記憶システム
US5699297A (en) 1995-05-30 1997-12-16 Kabushiki Kaisha Toshiba Method of rewriting data in a microprocessor additionally provided with a 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
US5687114A (en) 1995-10-06 1997-11-11 Agate Semiconductor, Inc. Integrated circuit for storage and retrieval of multiple digital bits per nonvolatile memory cell
US5703506A (en) 1995-12-26 1997-12-30 Motorola Signal processing method
FR2745114B1 (fr) 1996-02-20 1998-04-17 Sgs Thomson Microelectronics Memoire non volatile multiniveau modifiable electriquement avec rafraichissement autonome
US5903495A (en) 1996-03-18 1999-05-11 Kabushiki Kaisha Toshiba Semiconductor device and memory system
US5712815A (en) 1996-04-22 1998-01-27 Advanced Micro Devices, Inc. Multiple bits per-cell flash EEPROM capable of concurrently programming and verifying memory cells and reference cells
US5715193A (en) 1996-05-23 1998-02-03 Micron Quantum Devices, Inc. Flash memory system and method for monitoring the disturb effect on memory cell blocks due to high voltage conditions of other memory cell blocks
US5675537A (en) 1996-08-22 1997-10-07 Advanced Micro Devices, Inc. Erase method for page mode multiple bits-per-cell flash EEPROM
US5798968A (en) 1996-09-24 1998-08-25 Sandisk Corporation Plane decode/virtual sector architecture
US5890192A (en) 1996-11-05 1999-03-30 Sandisk Corporation Concurrent write of multiple chunks of data into multiple subarrays of flash EEPROM
US5717632A (en) 1996-11-27 1998-02-10 Advanced Micro Devices, Inc. Apparatus and method for multiple-level storage in non-volatile memories
US5835413A (en) 1996-12-20 1998-11-10 Intel Corporation Method for improved data retention in a nonvolatile writeable memory by sensing and reprogramming cell voltage levels
US5930167A (en) 1997-07-30 1999-07-27 Sandisk Corporation Multi-state non-volatile flash memory capable of being its own two state write cache
US5909449A (en) 1997-09-08 1999-06-01 Invox Technology Multibit-per-cell non-volatile memory with error detection and correction
US5937425A (en) 1997-10-16 1999-08-10 M-Systems Flash Disk Pioneers Ltd. Flash file system optimized for page-mode flash technologies
JP3177207B2 (ja) 1998-01-27 2001-06-18 インターナショナル・ビジネス・マシーンズ・コーポレ−ション リフレッシュ間隔制御装置及び方法、並びにコンピュータ
DE69905019T2 (de) * 1998-02-27 2003-10-16 Corning Inc Flexible anorganische elektrolytische brennstoffzellenausführung
JP2000187992A (ja) 1998-12-17 2000-07-04 Mitsubishi Electric Corp 電気的書換可能な不揮発性メモリのリフレッシュ制御回路
US6215697B1 (en) 1999-01-14 2001-04-10 Macronix International Co., Ltd. Multi-level memory cell device and method for self-converged programming
JP2000251483A (ja) 1999-02-24 2000-09-14 Sanyo Electric Co Ltd 1チップマイクロコンピュータとそのデータリフレッシュ方法
JP3937214B2 (ja) * 1999-09-17 2007-06-27 株式会社ルネサステクノロジ エラー訂正回数を記録する記憶装置
US6222768B1 (en) 2000-01-28 2001-04-24 Advanced Micro Devices, Inc. Auto adjusting window placement scheme for an NROM virtual ground array
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
US6567307B1 (en) 2000-07-21 2003-05-20 Lexar Media, Inc. Block management for mass storage
US6772274B1 (en) 2000-09-13 2004-08-03 Lexar Media, Inc. Flash memory system and method implementing LBA to PBA correlation within flash memory array
US6345001B1 (en) 2000-09-14 2002-02-05 Sandisk Corporation Compressed event counting technique and application to a flash memory system
JP4323707B2 (ja) 2000-10-25 2009-09-02 富士通マイクロエレクトロニクス株式会社 フラッシュメモリの欠陥管理方法
US6763424B2 (en) 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
JP3812933B2 (ja) * 2001-04-19 2006-08-23 シャープ株式会社 ファイルシステムおよびその制御方法
US6522580B2 (en) 2001-06-27 2003-02-18 Sandisk Corporation Operating techniques for reducing effects of coupling between storage elements of a non-volatile memory operated in multiple data states
JP4059472B2 (ja) * 2001-08-09 2008-03-12 株式会社ルネサステクノロジ メモリカード及びメモリコントローラ
US6456528B1 (en) 2001-09-17 2002-09-24 Sandisk Corporation Selective operation of a multi-state non-volatile memory system in a binary mode
US6678785B2 (en) 2001-09-28 2004-01-13 M-Systems Flash Disk Pioneers Ltd. Flash management system using only sequential write
US6925007B2 (en) 2001-10-31 2005-08-02 Sandisk Corporation Multi-state non-volatile integrated circuit memory systems that employ dielectric storage elements
US6678192B2 (en) 2001-11-02 2004-01-13 Sandisk Corporation Error management for writable tracking storage units
US6560152B1 (en) 2001-11-02 2003-05-06 Sandisk Corporation Non-volatile memory with temperature-compensated data read
JP2003242789A (ja) 2002-02-14 2003-08-29 Mitsubishi Electric Corp 不揮発性半導体記憶装置
JP2003257192A (ja) 2002-03-06 2003-09-12 Mitsubishi Electric Corp 半導体記憶装置および不揮発性半導体記憶装置
US6963505B2 (en) 2002-10-29 2005-11-08 Aifun Semiconductors Ltd. Method circuit and system for determining a reference voltage
US6912160B2 (en) 2003-03-11 2005-06-28 Fujitsu Limited Nonvolatile semiconductor memory device
US6839281B2 (en) 2003-04-14 2005-01-04 Jian Chen Read and erase verify methods and circuits suitable for low voltage non-volatile memories
US7076598B2 (en) 2003-09-09 2006-07-11 Solid State System Co., Ltd. Pipeline accessing method to a large block memory
JPWO2005029311A1 (ja) 2003-09-18 2006-11-30 松下電器産業株式会社 半導体メモリカード、半導体メモリ制御装置及び半導体メモリ制御方法
US7173852B2 (en) 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
US7012835B2 (en) 2003-10-03 2006-03-14 Sandisk Corporation Flash memory data correction and scrub techniques
JP4083147B2 (ja) 2004-07-02 2008-04-30 シャープ株式会社 半導体記憶装置
US7242618B2 (en) 2004-12-09 2007-07-10 Saifun Semiconductors Ltd. Method for reading non-volatile memory cells
US7206230B2 (en) 2005-04-01 2007-04-17 Sandisk Corporation Use of data latches in cache operations of non-volatile memories
US7339834B2 (en) 2005-06-03 2008-03-04 Sandisk Corporation Starting program voltage shift with cycling of non-volatile memory
US7631245B2 (en) 2005-09-26 2009-12-08 Sandisk Il Ltd. NAND flash memory controller exporting a NAND interface
US7254071B2 (en) 2006-01-12 2007-08-07 Sandisk Corporation Flash memory devices with trimmed analog voltages
US7613043B2 (en) 2006-05-15 2009-11-03 Apple Inc. Shifting reference values to account for voltage sag
US7489549B2 (en) 2006-06-22 2009-02-10 Sandisk Corporation System for non-real time reprogramming of non-volatile memory to achieve tighter distribution of threshold voltages
US7330376B1 (en) 2006-07-27 2008-02-12 Macronix International Co., Ltd. Method for memory data storage by partition into narrower threshold voltage distribution regions
US7450425B2 (en) 2006-08-30 2008-11-11 Micron Technology, Inc. Non-volatile memory cell read failure reduction
US7716538B2 (en) 2006-09-27 2010-05-11 Sandisk Corporation Memory with cell population distribution assisted read margining
US7489548B2 (en) 2006-12-29 2009-02-10 Sandisk Corporation NAND flash memory cell array with adaptive memory state partitioning
US7489547B2 (en) 2006-12-29 2009-02-10 Sandisk Corporation Method of NAND flash memory cell array with adaptive memory state partitioning
US20080294813A1 (en) 2007-05-24 2008-11-27 Sergey Anatolievich Gorobets Managing Housekeeping Operations in Flash Memory
US20080294814A1 (en) 2007-05-24 2008-11-27 Sergey Anatolievich Gorobets Flash Memory System with Management of Housekeeping Operations
KR100838292B1 (ko) 2007-06-20 2008-06-17 삼성전자주식회사 메모리 셀의 읽기 레벨 제어 장치 및 그 방법

Also Published As

Publication number Publication date
CN101630279A (zh) 2010-01-20
US20110055468A1 (en) 2011-03-03
CN1882918A (zh) 2006-12-20
US20060062048A1 (en) 2006-03-23
US20070211532A1 (en) 2007-09-13
EP1847930B1 (de) 2009-06-24
US8004895B2 (en) 2011-08-23
JP2007507804A (ja) 2007-03-29
WO2005036401A3 (en) 2005-07-28
WO2005036401A2 (en) 2005-04-21
CN100541439C (zh) 2009-09-16
EP1847930A1 (de) 2007-10-24
JP4723504B2 (ja) 2011-07-13
EP1687720A2 (de) 2006-08-09
DE602004021735D1 (de) 2009-08-06
DE602004011097D1 (de) 2008-02-14
US7224607B2 (en) 2007-05-29
ATE382892T1 (de) 2008-01-15
ATE434788T1 (de) 2009-07-15
US7518919B2 (en) 2009-04-14
US8050095B2 (en) 2011-11-01
KR101127882B1 (ko) 2012-03-21
US20050073884A1 (en) 2005-04-07
TWI261840B (en) 2006-09-11
EP1687720B1 (de) 2008-01-02
US20090187785A1 (en) 2009-07-23
US7012835B2 (en) 2006-03-14
KR20070001871A (ko) 2007-01-04
CN101630279B (zh) 2012-08-15
TW200532695A (en) 2005-10-01

Similar Documents

Publication Publication Date Title
DE602004011097T2 (de) Flash-speicherdatenkorrektur- und scrub-techniken
DE102018105529B4 (de) Managementschema zur Vermeidung einer Lösch- und Programmierstörung von Subblöcken im nichtflüchtigen Datenspeicher
DE60303895T2 (de) Hybridimplementierung von Fehlerkorrekturkoden eines nichtflüchtigen Speichersystems
US7173852B2 (en) Corrected data storage and handling methods
DE102019123709A1 (de) Verwendung verschachtelter schreibvorgänge zur trennung von die-ebenen
DE69839126T2 (de) Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher
DE60319437T2 (de) Nichtflüchtiger halbleiterspeicher mit zykluszählwerte speichernden grossen löschblöcken
DE102020130044A1 (de) Techniken zum verhindern von lese-störung in nand-speicher
DE112014001305B4 (de) Auswahl einer redundanten Datenspeicherkonfiguration auf der Grundlage verfügbaren Speicherplatzes
DE112008001151B4 (de) Mehrbitprogrammiervorrichtung und Verfahren zum Mehrbitprogrammieren
DE102007016460A1 (de) Nichtflüchtiges Speicherbauelement, nichtflüchtiges Speichersystem und Leseverfahren für ein nichtflüchtiges Speicherbauelement
DE102008030858A1 (de) Speicher mit dynamischer Redundanzkonfigurierung
DE102017114078A1 (de) Fehlerabschwächung für 3d-nand-flash-speicher
DE112015006285T5 (de) Mehrchip-doppelschreiben
DE112017005637T5 (de) Verfahren und System zur Schreibverstärkungsanalyse
DE102006036070B4 (de) Ladungsfallenspeichervorrichtung und Verfahren für deren Herstellung und Betrieb
DE112020002792B4 (de) Verschleissorientierte blockmodusumwandlung in nichtflüchtigen speichern
DE102007041845A1 (de) Verfahren zum Betreiben eines integrierten Schaltkreises mit mindestens einer Speicherzelle
DE102020105946A1 (de) Speicherzellen-fehlform-abschwächung
DE102019124668A1 (de) Transistorschwellenspannungshaltung in 3d-speicher
DE102020202379A1 (de) Speichersystem, speicher-controller und deren betriebsverfahren
DE102017120826A1 (de) Verfahren und Vorrichtung zum Überwachen von Speicher unter Verwendung einer Hintergrundmedienabtastung
DE112021000776T5 (de) Verwaltung von schreib-operationen in einer nichtflüchtigen speichervorrichtung unter verwendung eines variablen vor-lese-spannungspegels
DE102019116097A1 (de) Vorprogramm-lesevorgang zur behebung von wortleitungsfehlern
DE102021114317A1 (de) Nichtflüchtige Speichervorrichtung, Betriebsverfahren derselben, Controller zur Steuerung derselben und Speichervorrichtung, welche diese umfasst

Legal Events

Date Code Title Description
8327 Change in the person/name/address of the patent owner

Owner name: SANDISK CORP., MILPITAS, CALIF., US

8364 No opposition during term of opposition
R082 Change of representative

Ref document number: 1687720

Country of ref document: EP

Representative=s name: PATENTANWAELTE MAXTON LANGMAACK & PARTNER, DE