DE60303895T2 - Hybridimplementierung von Fehlerkorrekturkoden eines nichtflüchtigen Speichersystems - Google Patents

Hybridimplementierung von Fehlerkorrekturkoden eines nichtflüchtigen Speichersystems Download PDF

Info

Publication number
DE60303895T2
DE60303895T2 DE60303895T DE60303895T DE60303895T2 DE 60303895 T2 DE60303895 T2 DE 60303895T2 DE 60303895 T DE60303895 T DE 60303895T DE 60303895 T DE60303895 T DE 60303895T DE 60303895 T2 DE60303895 T2 DE 60303895T2
Authority
DE
Germany
Prior art keywords
block
data
indicator
error detection
algorithm
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60303895T
Other languages
English (en)
Other versions
DE60303895D1 (de
Inventor
Robert C Danville Chang
Bahman San Jose Qawami
Farshid San Jose Sabet-Sharghi
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=32825088&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=DE60303895(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
Application granted granted Critical
Publication of DE60303895D1 publication Critical patent/DE60303895D1/de
Publication of DE60303895T2 publication Critical patent/DE60303895T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)
  • Debugging And Monitoring (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)
  • Detection And Correction Of Errors (AREA)

Description

  • HINTERGRUND DER ERFINDUNG 1. Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft im Allgemeinen Massenspeichersysteme für digitale Daten. Insbesondere betrifft die vorliegende Erfindung Systeme und Verfahren, die ermöglichen, Algorithmen zu verwenden, um Daten zu codieren, die in Blöcke eines dynamisch zu schaltenden nichtflüchtigen Speichers geschrieben werden sollen.
  • 2. Beschreibung des Standes der Technik
  • Die Verwendung von nichtflüchtigen Speichersystemen wie z. B. Flash-Speichersystemen nimmt aufgrund der kompakten physikalischen Größe solcher Speichersysteme und der Fähigkeit, dass der nichtflüchtige Speicher wiederholt umprogrammiert wird, zu. Die kompakte physikalische Größe von Flash-Speichersystemen erleichtert die Verwendung von solchen Speichersystemen in Vorrichtungen, die immer weiter verbreitet werden. Vorrichtungen, die Flash-Speichersysteme verwenden, umfassen Digitalkameras, Digitalcamcorder, digitale Musikabspielgeräte, in der Hand gehaltene Personalcomputer und globale Positionsbestimmungsvorrichtungen, ohne jedoch darauf eingeschränkt zu sein. Die Fähigkeit, einen nichtflüchtigen Speicher, der in Flash-Speichersystemen enthalten ist, wiederholt umzuprogrammieren, ermöglicht, dass Flash-Speichersysteme verwendet und wieder verwendet werden.
  • Im Allgemeinen können Flash-Speichersysteme Flash-Speicherkarten und Flash-Speicherchipsätze umfassen. Flash-Speicherchipsätze umfassen im Allgemeinen Flash-Speicherkomponenten und Steuereinheitskomponenten. Typischerweise kann ein Flash-Speicherchipsatz dazu vorgesehen sein, in einem eingebetteten System montiert zu werden. Die Hersteller solcher Baugruppen oder Hauptrechnersysteme erhalten typischerweise einen Flash-Speicher in Komponentenform sowie andere Komponenten und montieren dann den Flash-Speicher und die anderen Komponenten in einem Hauptrechnersystem.
  • Um die Genauigkeit von Daten, die in physikalischen Blöcken eines Flash-Speichers gespeichert werden, sicherzustellen, kann häufig ein Fehlerkorrekturcode-Algorithmus (ECC-Algorithmus) oder ein Fehlerprüf- und -korrekturcode-Algorithmus verwendet werden, um die Daten zur Speicherung zu codieren und um die gespeicherten Daten zu decodieren. Typischerweise verwenden ECC-Algorithmen eine zweckgebundene Schaltung oder Software, um die Daten zu codieren und zu decodieren. Viele ECC-Algorithmen oder -Verfahren können ein Paritätsbit oder Paritätsbits hinzufügen, die verwendet werden, um Fehler, die zu gespeicherten Daten gehören, sowohl zu erkennen als auch zu korrigieren.
  • Einige ECC-Algorithmen, die verwendet werden, um Daten zur Speicherung zu codieren und zu decodieren, sind als 1-Bit-ECC-Algorithmen und 2-Bit-ECC-Algorithmen bekannt. 1-Bit-ECC-Algorithmen ermöglichen, dass eine Menge von Symbolen derart dargestellt wird, dass, wenn ein Bit der Darstellung falsch ist, z. B. gekippt ist, die Symbole korrigiert werden, und wenn zwei Bits falsch sind, z. B. gekippt sind, die Symbole immer noch korrekt identifiziert werden können. 2-Bit-ECC-Algorithmen ermöglichen, dass eine Menge von Symbolen derart dargestellt wird, dass, wenn zwei Bits der Darstellung gekippt oder anderweitig falsch sind, die zwei Bits korrigiert werden, und wenn mehr als zwei Bits gekippt sind, die Symbole immer noch korrekt identifiziert werden können.
  • Im Allgemeinen kann die Verwendung eines 2-Bit-ECC-Algorithmus gegenüber einem 1-Bit-ECC-Algorithmus aufgrund der Fähigkeit, dass ein 2-Bit-ECC-Algorithmus mehr als zwei fehlerbehaftete Bits erkennt und zwei Bits korrigiert, während ein 1-Bit-ECC-Algorithmus zwei fehlerbehaftete Bits erkennen und ein Bit korrigieren kann, bevorzugt sein. Die Implementierung eines 2-Bit-ECC-Algorithmus beinhaltet jedoch im Allgemeinen, obwohl er erhöhte Fehlerkorrekturfähigkeiten an gespeicherten Daten bereitstellt, mehr Berechnungen und daher mehr Rechen-Overhead als die Implementierung eines 1-Bit-ECC-Algorithmus. Wenn mehr Rechen-Overhead erforderlich ist, kann mehr Leistung, z. B. Batterieleistung, von einem nichtflüchtigen Speicher verbraucht werden. Folglich kann die Gesamtleistung eines Speichersystems gefährdet werden, insbesondere da die Integrität von Daten, die in Blöcken gespeichert sind, die eine relativ niedrige Anzahl von Malen gelöscht wurden, im Allgemeinen relativ hoch ist.
  • Um die Rechen- und Leistungsanforderungen zu verringern, die mit dem Implementieren eines 2-Bit-ECC-Algorithmus verbunden sind, können einige Systeme 1-Bit-ECC-Algorithmen verwenden, um Daten zu codieren und zu decodieren. 1-Bit-ECC-Algorithmen sind jedoch häufig weniger genau als 2-Bit-ECC-Algorithmen. Wenn sich Blöcke, in denen Daten gespeichert werden, dem Ende ihrer Nutzlebensdauern nähern, enthalten ferner die in solchen Blöcken gespeicherten Daten wahrscheinlicher Fehler. Wenn 1-Bit-ECC-Algorithmen verwendet werden, um Daten zu codieren, die in Blöcken gespeichert sind, die eine relativ hohe Anzahl von Malen gelöscht wurden, und um solche Daten zu decodieren, kann an sich die Integrität der Daten gefährdet werden und die den Blöcken zugeordnete Leistung kann nachteilig beeinflusst werden.
  • Im Stand der Technik beschreibt US-A-6041001 ein Verfahren zum Erhöhen der Datenzuverlässigkeit der Flash-Speichervorrichtung ohne Gefährdung der Kompatibilität. Das Verfahren modifiziert Bits in verschiedenen definierten Bereichen eines Sektors innerhalb der Spezifikationen des existierenden Speicherformats, so dass die Bits als Indikatoren dienen. US-A-6085339 beschreibt ein System zum Handhaben eines Speicherfehlers unter Verwendung von Modulen, die zum Schreiben von Daten in und Lesen von Daten aus ihren zugehörigen Speicherblöcken gemäß einem unterschiedlichen Fehlerbehandlungszustand strukturiert sind.
  • Was daher erforderlich ist, ist ein Verfahren und eine Vorrichtung, die ermöglichen, dass die Leistung von Blöcken, die eine relativ hohe Anzahl von Malen gelöscht wurden, verbessert wird, ohne einen relativ hohen Rechen-Overhead und Leistungseinbußen zu erfordern, um Daten zu codieren und zu decodieren, die in Blöcken gespeichert sind, die eine relativ niedrige Anzahl von Malen gelöscht wurden. Das heißt, was erwünscht ist, ist ein Verfahren und eine Vorrichtung, die ermöglichen, dass der Inhalt von Blöcken unter Verwendung von verschiedenen ECC-Algorithmen codiert wird, die auf der Basis der Anzahl von Malen, die die Blöcke gelöscht wurden, ausgewählt werden können.
  • Es ist eine Aufgabe zumindest einer bevorzugten Ausführungsform der vorliegenden Erfindung, zumindest einen der Nachteile des Standes der Technik zu beseitigen oder zu verbessern.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die Erfindung ist in den beigefügten unabhängigen Ansprüchen 1 und 13 definiert. Bevorzugte Merkmale der Aspekte sind in ihren entsprechenden abhängigen Ansprüchen definiert.
  • Die vorliegende Erfindung betrifft ein System und ein Verfahren zur Verwendung von verschiedenen Fehlerkorrekturcode-Algorithmen, um den Inhalt von Blöcken innerhalb eines nichtflüchtigen Speichers zu codieren und zu decodieren. Gemäß einem Aspekt der vorliegenden Erfindung umfasst ein Verfahren zum Speichern von Daten innerhalb eines nichtflüchtigen Speichers das Identifizieren eines ersten Blocks, in dem die Daten gespeichert werden sollen, und das Erhalten eines dem ersten Block zugeordneten Indikators. Dann kann eine Bestimmung hinsichtlich dessen durchgeführt werden, ob der Indikator angibt, dass die Daten unter Verwendung eines ersten Algorithmus codiert werden sollen. Die Daten werden unter Verwendung des ersten Algorithmus codiert, wenn festgestellt wird, dass die Daten unter Verwendung des ersten Algorithmus codiert werden sollen, nach welchem Punkt die unter Verwendung des ersten Algorithmus codierten Daten in den ersten Block geschrieben werden.
  • In einer Ausführungsform umfasst das Verfahren auch das Codieren der Daten unter Verwendung eines zweiten Algorithmus, wenn festgestellt wird, dass die Daten nicht unter Verwendung des ersten Algorithmus codiert werden sollen, und das Schreiben der unter Verwendung des zweiten Algorithmus codierten Daten in den ersten Block. In einer solchen Ausführungsform kann der erste Algorithmus ein 1-Bit-Fehlerkorrekturcode-Algorithmus (ECC-Algorithmus) sein und der zweite Algorithmus kann ein 2-Bit-ECC-Algorithmus sein.
  • Indem ermöglicht wird, dass die in Blöcken eines nichtflüchtigen Speichersystems gespeicherten Daten unter Verwendung von verschiedenen ECC-Algorithmen auf einer blockweisen Basis codiert werden, können einige Blöcke innerhalb des Speichersystems unter Verwendung eines 1-Bit-ECC-Algorithmus codiert werden, während andere Blöcke unter Verwendung eines 2-Bit-ECC-Algorithmus codiert werden können. Ein 1-Bit-ECC-Algorithmus oder ein weniger rechenintensiver Algorithmus wird verwendet, um Daten zu codieren, die in Blöcken gespeichert werden sollen, die keine relativ hohe Anzahl von Löschoperationen durchlaufen haben, während ein 2-Bit-ECC-Algorithmus oder ein rechenintensiverer Algorithmus verwendet wird, um Daten zu codieren, die in Blöcken gespeichert werden sollen, die eine relativ hohe Anzahl von Löschoperationen durchlaufen haben. Da ein 2-Bit-ECC-Algorithmus im Allgemeinen ermöglicht, dass Daten genauer codiert und decodiert werden, als ein 1-Bit-ECC-Algorithmus, ermöglicht die Verwendung eines 2-Bit-ECC-Algorithmus zum Codieren von Daten, die in Blöcken gespeichert werden sollen, die sich dem Ende ihrer Nutzbarkeit nähern, dass die den Blöcken zugeordnete Leistung verbessert wird. Wenn ein 1-Bit-ECC-Algorithmus nicht verwendet wird, wenn ein Block nicht nahe dem Ende seiner Nutzbarkeit liegt, kann die Anzahl von Berechnungen, die erforderlich sind, um Daten zu speichern und aus einem solchen Block zu lesen, verringert werden, wodurch ermöglicht wird, dass die Gesamtgeschwindigkeit von Lese- und Schreibprozessen verbessert wird, und Leistungsanforderungen, die mit dem Speichersystem verbunden sind, verringert werden.
  • Gemäß einem weiteren Aspekt der vorliegenden Erfindung umfasst ein Verfahren zum Lesen von Daten innerhalb eines nichtflüchtigen Speichers eines Speichersystems das Identifizieren eines ersten Blocks, aus dem Daten gelesen werden sollen, das Erhalten eines dem ersten Block zugeordneten Indikators und das Feststellen, wenn der Indikator angibt, dass die im ersten Block gespeicherten Daten unter Verwendung eines ersten Algorithmus codiert wurden. Das Verfahren umfasst auch das Decodieren der Daten unter Verwendung des ersten Algorithmus, wenn festgestellt wird, dass die Daten unter Verwendung des ersten Algorithmus codiert wurden. In einer Ausführungsform umfasst das Verfahren ferner das Decodieren der Daten unter Verwendung eines zweiten Algorithmus, wenn festgestellt wird, dass die Daten nicht unter Verwendung des ersten Algorithmus codiert wurden.
  • In einer weiteren Ausführungsform ist der Indikator dazu beschaffen anzugeben, wenn der Block ein zurückgewonnener Block ist. Wenn der Block ein zurückgewonnener Block ist, ist der Indikator ferner so beschaffen, dass er angibt, dass die Daten unter Verwendung des zweiten Algorithmus codiert wurden. In noch einer weiteren Ausführungsform ist der Indikator so beschaffen, dass er eine Anzahl von Malen angibt, die der Block gelöscht wurde. In einer solchen Ausführungsform kann das Bestimmen, wenn der Indikator angibt, dass die Daten unter Verwendung des ersten Algorithmus codiert wurden, auch das Bestimmen, wenn der Indikator geringer ist als ein Schwellenwert, umfassen. Wenn der Indikator geringer ist als der Schwellenwert, besteht die Implikation darin, dass die Daten unter Verwendung des ersten Algorithmus codiert wurden.
  • Gemäß einem nochmals weiteren Aspekt der vorliegenden Erfindung umfasst ein Speichersystem einen nichtflüchtigen Speicher, der einen ersten Block und einen zweiten Block umfasst. Der erste Block umfasst eine erste Menge von Inhalten, die unter Verwendung eines ersten Algorithmus codiert sind, und der zweite Block umfasst eine zweite Menge von Inhalten, die unter Verwendung eines zweiten Algorithmus codiert sind. Der nichtflüchtige Speicher umfasst auch eine Datenstruktur, z. B. einen Löschzählstandblock, der so beschaffen ist, dass er angibt, dass die erste Menge von Inhalten unter Verwendung des ersten Algorithmus codiert ist und dass die zweite Menge von Inhalten unter Verwendung des zweiten Algorithmus codiert ist. Das Speichersystem umfasst ferner Codevorrichtungen zum Zugreifen auf die Datenstruktur. Solche Codevorrichtungen umfassen Codevorrichtungen zum Bestimmen, dass die erste Menge von Inhalten unter Verwendung des ersten Algorithmus codiert ist, und Codevorrichtungen zum Bestimmen, dass die zweite Menge von Inhalten unter Verwendung des zweiten Algorithmus codiert ist.
  • Ein weiterer Aspekt der Erfindung schafft ein Speichersystem mit:
    einem nichtflüchtigen Speicher mit einer Vielzahl von Blöcken, wobei die Vielzahl von Blöcken einen ersten Block umfassen;
    Codevorrichtungen zum Identifizieren des ersten Blocks, in dem Daten gespeichert werden sollen;
    Codevorrichtungen zum Erhalten eines dem ersten Block zugeordneten Indikators;
    Codevorrichtungen zum Bestimmen, wenn der Indikator angibt, dass die Daten unter Verwendung eines ersten Algorithmus codiert werden sollen;
    Codevorrichtungen zum Codieren der Daten unter Verwendung des ersten Algorithmus, wenn festgestellt wird, dass die Daten unter Verwendung des ersten Algorithmus codiert werden sollen;
    Codevorrichtungen zum Schreiben der unter Verwendung des ersten Algorithmus codierten Daten in den ersten Block; und
    einem Speicherbereich, der die Codevorrichtungen speichert.
  • Vorzugsweise umfasst der Speicher ferner:
    Codevorrichtungen zum Codieren der Daten unter Verwendung eines zweiten Algorithmus, wenn festgestellt wird, dass die Daten nicht unter Verwendung des ersten Algorithmus codiert werden sollen; und
    Codevorrichtungen zum Schreiben der unter Verwendung des zweiten Algorithmus codierten Daten in den ersten Block.
  • Ein weiterer Aspekt der Erfindung schafft ein Speichersystem mit:
    einem nichtflüchtigen Speicher mit einer Vielzahl von Blöcken, wobei die Vielzahl von Blöcken einen ersten Block umfassen, wobei der erste Block Daten umfasst;
    Codevorrichtungen zum Identifizieren des ersten Blocks;
    Codevorrichtungen zum Erhalten eines dem ersten Block zugeordneten Indikators;
    Codevorrichtungen zum Bestimmen, wenn der Indikator angibt, dass die Daten unter Verwendung eines ersten Algorithmus codiert wurden;
    Codevorrichtungen zum Decodieren der Daten unter Verwendung des ersten Algorithmus, wenn festgestellt wird, dass die Daten unter Verwendung des ersten Algorithmus codiert wurden; und
    einem Speicherbereich, der die Codevorrichtungen speichert.
  • Ein weiterer Aspekt der Erfindung schafft ein Speichersystem mit:
    einem nichtflüchtigen Speicher mit einer Vielzahl von Blöcken, wobei die Blöcke einen ersten Block und einen zweiten Block umfassen, wobei der erste Block eine erste Menge von Inhalten umfasst, die unter Verwendung eines ersten Algorithmus codiert sind, der zweite Block eine zweite Menge von Inhalten umfasst, die unter Verwendung eines zweiten Algorithmus codiert sind, wobei der nichtflüchtige Speicher ferner eine Datenstruktur umfasst, die so beschaffen ist, dass sie angibt, dass die erste Menge von Inhalten unter Verwendung des ersten Algorithmus codiert ist und dass die zweite Menge von Inhalten unter Verwendung des zweiten Algorithmus codiert ist;
    Codevorrichtungen zum Zugreifen auf die Datenstruktur, wobei die Codevorrichtungen zum Zugreifen auf die Datenstruktur Codevorrichtungen zum Bestimmen, dass die erste Menge von Inhalten unter Verwendung des ersten Algorithmus codiert ist, und Codevorrichtungen zum Bestimmen, dass die zweite Menge von Inhalten unter Verwendung des zweiten Algorithmus codiert ist, umfassen; und
    einem Speicherbereich, der die Codevorrichtungen speichert.
  • Diese und weitere Vorteile der vorliegenden Erfindung werden beim Lesen der folgenden ausführlichen Beschreibungen und Studieren der verschiedenen Figuren der Zeichnungen ersichtlich.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Bevorzugte Ausführungsformen der Erfindung werden nun mit Bezug auf die begleitenden Zeichnungen beschrieben, in denen:
  • 1a eine schematische Darstellung eines allgemeinen Hauptrechnersystems ist, das einen nichtflüchtigen Speicher umfasst.
  • 1b eine schematische Darstellung einer Speichervorrichtung, z. B. der Speichervorrichtung 120 von 1a, ist.
  • 1c eine schematische Darstellung eines Hauptrechnersystems ist, das einen eingebetteten nichtflüchtigen Speicher umfasst.
  • 2a ein Prozessablaufdiagramm ist, das ein Verfahren zum Schreiben von Anwenderdaten in einen Block unter Verwendung entweder eines 1-Bit- oder 2-Bit-ECC gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
  • 2b ein Prozessablaufdiagramm ist, das ein Verfahren zum Lesen von Inhalten aus einem Block innerhalb eines Systems, in dem die Inhalte entweder unter Verwendung eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert sein können, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
  • 3 ein Prozessablaufdiagramm ist, das ein Verfahren zum Initialisieren eines Speichersystems, in dem Inhalte von Blöcken unter Verwendung einer Hybrid-ECC-Implementierung codiert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
  • 4a eine schematische Blockdiagrammdarstellung eines Prozesses zum Zurückgewinnen von unbrauchbaren Blöcken gemäß einer Ausführungsform der vorliegenden Erfindung ist.
  • 4b eine schematische Darstellung eines Abschnitts eines Löschzählstandblocks gemäß einer Ausführungsform der vorliegenden Erfindung ist.
  • 5a ein Prozessablaufdiagramm ist, das ein Verfahren zum Schreiben in einen Block innerhalb eines Systems, in dem sich zurückgewonnene Blöcke befinden können und Daten unter Verwendung entweder eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
  • 5b ein Prozessablaufdiagramm ist, das ein Verfahren zum Lesen von Inhalten von einem Block, der ein zurückgewonnener Block sein kann und Inhalte aufweisen kann, die entweder unter Verwendung eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert sind, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
  • 6 ein Prozessablaufdiagramm ist, das ein Verfahren zum Initialisieren eines Speichersystems mit einer Hybrid-ECC-Implementierung, das zurückgewonnene Blöcke umfasst, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
  • 7 eine schematische Blockdiagrammdarstellung einer Systemarchitektur gemäß einer Ausführungsform der vorliegenden Erfindung ist.
  • AUSFÜHRLICHE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • Ein Fehlerkorrekturcode-Algorithmus (ECC-Algorithmus), wie z. B. entweder ein 1-Bit-ECC-Algorithmus oder ein 2-Bit-ECC-Algorithmus, wird häufig verwendet, um in einem physikalischen Block eines nichtflüchtigen Speichers zu speichernde Daten zu codieren und gespeicherte Daten zu decodieren. Die Verwendung von ECC-Algorithmen ermöglicht im Allgemeinen, dass die Genauigkeit von Daten, die innerhalb eines physikalischen Blocks gespeichert sind, verbessert wird. Die Verwendung eines rechenintensiveren 2-Bit-ECC-Algorithmus kann gegenüber einem weniger rechenintensiven 1-Bit-ECC-Algorithmus aufgrund der Fähigkeit eines 2-Bit-ECC-Algorithmus, mehr fehlerhafte Bits zu korrigieren, als unter Verwendung eines 1-Bit-ECC-Algorithmus korrigiert werden können, bevorzugt sein. Die Implementierung eines 2-Bit-ECC-Algorithmus ist jedoch, obwohl sie erhöhte Fehlerkorrekturfähigkeiten bereitstellt, hinsichtlich einer Anzahl von Berechnungen und Leistungsanforderungen aufwändiger als ein 1-Bit-ECC-Algorithmus.
  • In vielen Fällen, in denen ein Block, in dem Daten gespeichert sind, relativ jung ist und daher nicht einer relativ hohen Anzahl von Löschzyklen unterzogen wurde, kann ein 1-Bit-ECC-Algorithmus ausreichen, um die Integrität von vielen der Daten sicherzustellen. An sich kann die Implementierung eines 2-Bit-ECC-Algorithmus nicht erforderlich sein. Wenn jedoch ein Block älter wird und einer relativ hohen Anzahl von Löschzyklen unterzogen wurde, kann ein 1-Bit-ECC-Algorithmus nicht ausreichen, um ein gewünschtes Niveau an Datenintegrität sicherzustellen, und die Verwendung eines 2-Bit-ECC-Algorithmus kann die Integrität der Daten signifikant verbessern.
  • Eine Hybrid-ECC-Implementierung ermöglicht, dass ECC-Algorithmen, die zum Codieren und Decodieren von Daten verwendet werden, dynamisch umgeschaltet werden. Insbesondere können in einer Ausführungsform Daten, die in Blöcken gespeichert werden, die einer relativ niedrigen Anzahl von Löschzyklen unterzogen wurden, unter Verwendung eines weniger rechenintensiven und weniger genauen Algorithmus, z. B. eines 1-Bit-ECC-Algorithmus, codiert werden, während Blöcke, die einer relativ hohen Anzahl von Löschzyklen unterzogen wurden, unter Verwendung eines rechenintensiveren und genaueren Algorithmus, wie z. B. eines 2-Bit-ECC-Algorithmus, codiert werden können. Durch dynamisches Feststellen, wenn Daten unter Verwendung eines genaueren Algorithmus wie z. B. eines 2-Bit-ECC-Algorithmus anstatt eines "Standard"-Algorithmus, z. B. eines weniger genauen Algorithmus wie z. B. eines 1-Bit-ECC-Algorithmus, codiert werden sollen, kann der Algorithmus, der zum Codieren von in einem speziellen Block zu speichernden Daten gewählt wird, in Abhängigkeit von den Eigenschaften des speziellen Blocks ausgewählt werden, und der genauere Algorithmus kann wirksam verwendet werden, wenn er einen beträchtlichen Nutzen schaffen würde. Wenn sich beispielsweise ein Block dem Ende seiner hochgerechneten Nutzlebensdauer nähert, kann die Verwendung eines 2-Bit-ECC-Algorithmus zum Codieren von im Block zu speichernden Daten die Genauigkeit oder Integrität der im Block gespeicherten Daten verbessern und kann auch ermöglichen, dass die Nutzlebensdauer des Blocks potentiell verlängert wird. Unter Verwendung eines weniger rechenintensiven Algorithmus zum Codieren von Daten, die in Blöcken gespeichert werden sollen, die sich nicht dem Ende ihrer Nutzlebensdauern nähern, können ferner die Leistungsanforderungen eines gesamten Speichersystems verringert werden, wodurch die Haltbarkeit des gesamten Speichersystems verbessert wird.
  • In einer Ausführungsform kann ein Schwellenlöschzählstand oder eine Schwellenanzahl von Löschzyklen als Indikator dessen verwendet werden, ob ein weniger rechenintensiver ECC- Algorithmus mit geringerer Genauigkeit oder ein rechenintensiverer ECC-Algorithmus mit höherer Genauigkeit verwendet werden soll, um in einen Block zu schreibende Daten zu codieren. Wenn ein Vergleich der Anzahl von Löschzyklen, denen der Block unterzogen wurde, mit der Schwellenanzahl angibt, dass der Block mehr Löschzyklen unterzogen wurde als die Schwellenanzahl, dann kann der ECC-Algorithmus mit höherer Genauigkeit verwendet werden, da der Block als nahe dem Ende seiner Nutzlebensdauer betrachtet werden kann.
  • Flash-Speichersysteme oder allgemeiner nichtflüchtige Speichervorrichtungen, die eine Hybrid-ECC-Implementierung verwenden können, die ermöglicht, dass Blöcke innerhalb eines Systems unter Verwendung von verschiedenen ECC-Algorithmen codiert werden, umfassen im Allgemeinen einen Flash-Speicher, z. B. NAND- oder MLC-NAND, Karten und Chipsätze. Typischerweise werden Flash-Speichersysteme in Verbindung mit einem Hauptrechnersystem verwendet, so dass das Hauptrechnersystem Daten in die Flash-Speichersysteme schreiben oder Daten aus diesen lesen kann. Einige Flash-Speichersysteme umfassen jedoch einen eingebetteten Flash-Speicher und eine Software, die auf einem Hauptrechner ausgeführt wird, so dass sie im Wesentlichen als Steuereinheit für den eingebetteten Flash-Speicher wirkt, wie nachstehend mit Bezug auf 1c erörtert wird. Mit Bezug auf 1a wird ein allgemeines Hauptrechnersystem, das eine nichtflüchtige Speichervorrichtung, z. B. eine CompactFlash-Speicherkarte, umfasst, beschrieben. Ein Hauptrechner- oder Computersystem 100 umfasst im Allgemeinen einen Systembus 104, der ermöglicht, dass ein Mikroprozessor 108, ein Direktzugriffsspeicher (RAM) 112 und Eingabe/Ausgabe-Schaltungen 116 kommunizieren. Es sollte erkannt werden, dass das Hauptrechnersystem 100 im Allgemeinen andere Komponenten umfassen kann, z. B. Anzeigevorrichtungen und eine Vernetzungsvorrichtung, die für Erläuterungszwecke nicht gezeigt sind.
  • Im Allgemeinen kann das Hauptrechnersystem 100 in der Lage sein, Informationen zu erfassen, einschließlich, jedoch nicht begrenzt auf Standbildinformationen, Audioinformationen und Videobildinformationen. Solche Informationen können in Echtzeit erfasst werden und können in einer drahtlosen Weise zum Hauptrechnersystem 100 übertragen werden. Obwohl das Hauptrechnersystem 100 im Wesentlichen ein beliebiges System sein kann, ist das Hauptrechnersystem 100 typischerweise ein System wie z. B. eine Digitalkamera, eine Videokamera, eine zelluläre Kommunikationsvorrichtung, ein Audioabspielgerät oder ein Videoabspielgerät. Es sollte jedoch erkannt werden, dass das Hauptrechnersystem 100 im Allgemeinen im Wesentlichen ein beliebiges System sein kann, das Daten oder Informationen speichert und Daten oder Informationen abruft.
  • Das Hauptrechnersystem 100 kann auch ein System sein, das entweder nur Daten erfasst oder nur Daten abruft. Das heißt, das Hauptrechnersystem 100 kann in einer Ausführungsform ein zweckgebundenes System sein, das Daten speichert, oder das Hauptrechnersystem 100 kann ein zweckgebundenes System sein, das Daten liest. Als Beispiel kann das Hauptrechnersystem 100 eine Speicherschreibvorrichtung sein, die so beschaffen ist, dass sie nur Daten schreibt oder speichert. Alternativ kann das Hauptrechnersystem 100 eine Vorrichtung wie z. B. ein MP3-Spieler sein, der typischerweise dazu beschaffen ist, Daten zu lesen oder abzurufen und nicht Daten zu erfassen.
  • Eine nichtflüchtige Speichervorrichtung 120, die in einer Ausführungsform eine entnehmbare nichtflüchtige Speichervorrichtung ist, ist so beschaffen, dass sie mit dem Bus 104 koppelt, um Informationen zu speichern. Ein wahlweiser Schnittstellenblock 130 kann ermöglichen, dass die nichtflüchtige Speichervorrichtung 120 indirekt mit dem Bus 104 koppelt. Wenn er vorhanden ist, dient der Eingabe/Ausgabe-Block 116 zum Verringern der Belastung am Bus 104, wie für Fachleute verständlich ist. Die nichtflüchtige Speichervorrichtung 120 umfasst einen nichtflüchtigen Speicher 124 und ein wahlweises Speichersteuersystem 128. In einer Ausführungsform kann die nichtflüchtige Speichervorrichtung 120 auf einem einzelnen Chip oder einem Chipschaltkreis implementiert sein. Alternativ kann die nichtflüchtige Speichervorrichtung 120 auf einem Mehrchipmodul oder auf mehreren diskreten Komponenten, die einen Chipsatz bilden können und zusammen als nichtflüchtige Speichervorrichtung 120 verwendet werden können, implementiert sein. Eine Ausführungsform der nichtflüchtigen Speichervorrichtung 120 wird nachstehend mit Bezug auf 1b genauer beschrieben.
  • Der nichtflüchtige Speicher 124, z. B. ein Flash-Speicher wie z. B. ein NAND-Flash-Speicher oder ein MLC-NAND-Flash-Speicher, ist dazu beschaffen, Daten derart zu speichern, dass auf die Daten zugegriffen und diese gelesen werden können, wie erforderlich. Die im nichtflüchtigen Speicher 124 gespeicherten Daten können auch gelöscht werden, wie geeignet, obwohl es selbstverständlich sein sollte, dass einige Daten im nichtflüchtigen Speicher 124 nicht löschbar sein können. Die Prozesse des Speicherns von Daten, Lesens von Daten und Löschens von Daten werden im Allgemeinen durch das Speichersteuersystem 128 oder, wenn das Speichersteuersystem 128 nicht vorhanden ist, durch die vom Mikroprozessor 108 ausgeführte Software gesteuert. Die Operation des nichtflüchtigen Speichers 124 kann derart gemanagt werden, dass die Lebensdauer des nichtflüchtigen Speichers 124 im Wesentlichen maximiert wird, indem im Wesentlichen bewirkt wird, dass Abschnitte des nichtflüchtigen Speichers 124 im Wesentlichen gleich abgenutzt werden.
  • Die nichtflüchtige Speichervorrichtung 120 wurde im Allgemeinen als Vorrichtung mit einem wahlweisen Speichersteuersystem 128, d. h. mit einer Steuereinheit, beschrieben. Häufig kann die nichtflüchtige Speichervorrichtung 120 separate Chips für die Funktionen des nichtflüchtigen Speichers 124 und des Speichersteuersystems 128, d. h. der Steuereinheit, umfassen. Obwohl beispielsweise nichtflüchtige Speichervorrichtungen, einschließlich, jedoch nicht begrenzt auf PC-Karten, CompactFlash-Karten, Multimediakarten und sichere digitale Karten, Steuereinheiten umfassen, die auf einem separaten Chip implementiert sein können, können andere nichtflüchtige Speichervorrichtungen keine Steuereinheiten umfassen, die auf einem separaten Chip implementiert sind. In einer Ausführungsform, in der die nichtflüchtige Speichervorrichtung 120 keine separaten Speicher- und Steuereinheitschips umfasst, können die Speicher- und Steuereinheitsfunktionen in einem einzelnen Chip integriert sein, wie für Fachleute zu erkennen ist. Alternativ kann die Funktionalität des Speichersteuersystems 128 vom Mikroprozessor 108 bereitgestellt werden, wie beispielsweise in einer Ausführungsform, in der die nichtflüchtige Speichervorrichtung 120 keine Speichersteuereinheit 128 umfasst, wie vorstehend erörtert.
  • Mit Bezug auf 1b wird die nichtflüchtige Speichervorrichtung 120 gemäß einer Ausführungsform der vorliegenden Erfindung genauer beschrieben. Wie vorstehend beschrieben, umfasst die nichtflüchtige Speichervorrichtung 120 einen nichtflüchtigen Speicher 124 und kann ein Speichersteuersystem 128 umfassen. Der Speicher 124 und das Steuersystem oder die Steuereinheit können primäre Komponenten der nichtflüchtigen Speichervorrichtung 120 sein, obwohl, wenn der Speicher 124 beispielsweise eine eingebettete NAND-Vorrichtung wie z. B. ein eingebetteter MLC-NAND-Speicher ist, die nichtflüchtige Speichervorrichtung 120 kein Steuersystem 128 umfassen kann. Der Speicher 124 kann eine Matrix von Speicherzellen sein, die auf einem Halbleitersubstrat ausgebildet sind, wobei ein oder mehrere Bits von Daten in den einzelnen Speicherzellen gespeichert werden, indem ein oder zwei oder mehr Pegel von Ladung in einzelnen Speicherelementen der Speicherzellen gespeichert werden. Ein nichtflüchtiger, elektrisch löschbarer, programmierbarer Flash-Festwertspeicher (EEPROM) ist ein Beispiel einer üblichen Art von Speicher für solche Systeme.
  • Wenn es vorhanden ist, kommuniziert das Steuersystem 128 über einen Bus 15 mit einem Hauptrechner oder einem anderen System, das das Speichersystem verwendet, um Daten zu speichern. Der Bus 15 ist im Allgemeinen ein Teil des Busses 140 von 1a. Das Steuersystem 128 steuert auch die Operation des Speichers 124, der eine Speicherzellenmatrix 11 umfassen kann, um Daten zu schreiben, die vom Hauptrechner geliefert werden, Daten zu lesen, die vom Hauptrechner angefordert werden, und verschiedene organisatorische Funktionen beim Betreiben des Speichers 124 durchzuführen. Das Steuersystem 128 umfasst im Allgemeinen einen Universal-Mikroprozessor, dem ein nichtflüchtiger Softwarespeicher, verschiedene Logikschaltungen und dergleichen zugeordnet sind. Eine oder mehrere Zustandsmaschinen sind häufig auch enthalten, um die Durchführung von speziellen Routinen zu steuern.
  • Die Speicherzellenmatrix 11 wird typischerweise vom Steuersystem 128 oder Mikroprozessor 108 über Adressendecodierer 17 adressiert. Die Decodierer 17 legen die korrekten Spannungen an Gate- und Bitleitungen der Matrix 11 an, um Daten in eine Gruppe von Speicherzellen, die vom Steuersystem 128 adressiert werden, zu programmieren, Daten aus dieser zu lesen oder diese zu löschen. Zusätzliche Schaltungen 19 umfassen Programmiertreiber, die Spannungen steuern, die an Elemente der Matrix angelegt werden und die von den in eine adressierte Gruppe von Zellen programmierten Daten abhängen. Die Schaltungen 19 umfassen auch Leseverstärker und andere Schaltungen, die zum Lesen von Daten aus einer adressierten Gruppe von Speicherzellen erforderlich sind. In die Matrix 11 zu programmierende Daten oder Daten, die vor kurzem aus der Matrix 11 gelesen wurden, werden typischerweise in einem Pufferspeicher 21 innerhalb des Steuersystems 128 gespeichert. Das Steuersystem 128 enthält gewöhnlich auch verschiedene Register zum vorübergehenden Speichern von Befehls- und Zustandsdaten und dergleichen.
  • Die Matrix 11 ist in eine große Anzahl von BLÖCKEN 0-N Speicherzellen unterteilt. Wie es für Flash-EEPROM-Systeme üblich ist, ist der Block typischerweise die kleinste Löscheinheit. Das heißt, jeder Block enthält die minimale Anzahl von Speicherzellen, die zusammen gelöscht werden. Jeder Block ist typischerweise in eine Anzahl von Seiten unterteilt. Wie für Fachleute zu erkennen ist, kann eine Seite die kleinste Programmiereinheit sein. Das heißt, eine grundlegende Programmieroperation schreibt Daten in ein Minimum von einer Seite von Speicherzellen oder liest sie daraus. Einer oder mehrere Sektoren von Daten sind typischerweise innerhalb jeder Seite gespeichert. Wie in 1b gezeigt, umfasst ein Sektor Anwenderdaten und Overhead-Daten. Overhead-Daten umfassen typischerweise einen ECC, der aus den Anwenderdaten des Sektors berechnet wurde. Ein Abschnitt 23 des Steuersystems 128 berechnet den ECC, wenn Daten in die Matrix 11 programmiert werden, und prüft auch den ECC, wenn Daten aus der Matrix 11 gelesen werden. Alternativ werden die ECCs in anderen Seiten oder anderen Blöcken gespeichert als die Anwenderdaten, die sie betreffen.
  • Ein Sektor von Anwenderdaten ist typischerweise 512 Bytes entsprechend der Größe eines Sektors in Magnetplattenlaufwerken. Overhead-Daten oder redundante Daten sind typischerweise zusätzliche 16 Bytes. Ein Sektor von Daten ist am üblichsten in jeder Seite enthalten, aber zwei oder mehr Sektoren können statt dessen eine Seite bilden. Eine beliebige Anzahl von Seiten kann im Allgemeinen einen Block bilden. Beispielsweise kann ein Block aus acht Seiten bis zu 512, 1024 oder mehr Seiten gebildet sein. Die Anzahl von Blöcken wird so gewählt, dass sie eine gewünschte Datenspeicherkapazität für das Speichersystem bereitstellt. Die Matrix 11 ist typischerweise in einige Untermatrizes (nicht dargestellt) unterteilt, von denen jede einen Anteil der Blöcke enthält, die etwas unabhängig voneinander arbeiten, um den Grad an Parallelität bei der Ausführung von verschiedenen Speicheroperationen zu erhöhen. Ein Beispiel der Verwendung von mehreren Untermatrizes ist im US-Patent Nr. 5 890 192 beschrieben.
  • In einer Ausführungsform ist ein nichtflüchtiger Speicher wie z. B. ein MLC-NAND-Speicher in ein System, z. B. ein Hauptrechnersystem, eingebettet. 1c ist eine schematische Darstellung eines Hauptrechnersystems, das einen eingebetteten nichtflüchtigen Speicher umfasst. Ein Hauptrechner- oder Computersystem 150 umfasst im Allgemeinen einen Systembus 154, der ermöglicht, dass ein Mikroprozessor 158, ein RAM 162 und Eingabe/Ausgabe-Schaltungen 166 unter anderen Komponenten (nicht dargestellt) des Hauptrechnersystems 150 kommunizieren. Ein nichtflüchtiger Speicher 174, z. B. ein Flash-Speicher, ermöglicht, dass Informationen innerhalb des Hauptrechnersystems 150 gespeichert werden. Eine Schnittstelle 180 kann zwischen dem nichtflüchtigen Speicher 174 und dem Bus 154 vorgesehen sein, um zu ermöglichen, dass Informationen aus dem nichtflüchtigen Speicher 174 gelesen und in diesen geschrieben werden.
  • Der nichtflüchtige Speicher 174 kann vom Mikroprozessor 158 gemanagt werden, der effektiv eine oder beide von Software und Firmware ausführt, die dazu beschaffen sind, den nichtflüchtigen Speicher 174 zu steuern. Das heißt, der Mikroprozessor 158 kann als Steuereinheit dienen, die Codevorrichtungen, d. h. Software-Codevorrichtungen oder Firmware-Codevorrichtungen, abarbeitet, die ermöglichen, dass der nichtflüchtige Speicher 174 gesteuert wird. Solche Codevorrichtungen, die nachstehend beschrieben werden, können ermöglichen, dass physikalische Blöcke im nichtflüchtigen Speicher 174 adressiert werden, und können ermöglichen, dass Informationen in den physikalischen Blöcken gespeichert, aus diesen gelesen und aus diesen gelöscht werden.
  • Innerhalb eines Speichersystems, das eine Hybrid-ECC-Implementierung verwendet, werden, bevor Daten in einen Block geschrieben werden können, dem Block zugeordnete Informationen typischerweise erhalten und untersucht, um einen geeigneten ECC-Algorithmus zu bestimmen, der zum Codieren der Daten zu verwenden ist, die in den Block geschrieben werden sollen. Mit Bezug auf 2a werden die Schritte zum Schreiben von Anwenderdaten in einen Block unter Verwendung entweder eines 1-Bit- oder 2-Bit-ECC gemäß einer Ausführungsform der vorliegenden Erfindung beschrieben. Ein Prozess 200 zum Schreiben von Daten beginnt in Schritt 204, in dem ein Block, in den geschrieben werden soll, identifiziert wird. Der Block kann ein ungenutzter Block sein, z. B. ein Block, der von einer übrigen Blockgruppe erhalten wird, oder der Block kann ein Block sein, der gerade in Gebrauch ist und dazu beschaffen ist, zusätzliche Inhalte anzunehmen. Sobald der Block identifiziert ist, wird der Löschzählstand für den Block aus dem Löschzählstandblock in Schritt 208 gelesen. Ein Löschzählstandblock, wie in der gleichzeitig anhängigen US-Patentanmeldung Nr. 10/281 626 beschrieben, ist eine Datenstruktur, die im nichtflüchtigen Speicher gespeichert wird und Löschzählstände enthält, die im Wesentlichen allen nutzbaren Blöcken innerhalb eines nichtflüchtigen Speichers zugeordnet sind. Ein Löschzählstand gibt im Allgemeinen die Anzahl von Malen an, die ein gegebener Block gelöscht wurde, und sieht daher eine Angabe der Lebensdauer des Blocks vor.
  • Nachdem der Löschzählstand für den Block gelesen ist, wird in Schritt 212 festgestellt, ob der Löschzählstand geringer ist als ein Schwellenlöschzählstand. Ein Schwellenlöschzählstand kann ein Löschzählstand sein, der von einem Anwender eines nichtflüchtigen Speichersystems festgelegt wird, oder der Schwellenlöschzählstand kann ein Systemparameter sein. Der Wert eines Schwellenlöschzählstandes kann umfangreich variieren. In einer Ausführungsform, in der ein Block wahrscheinlich nicht mehr nutzbar ist, nachdem der Block ungefähr 10000 mal gelöscht wurde, kann ein Schwellenlöschzählstand beispielsweise auf einen Wert zwischen ungefähr 9500 und ungefähr 9800 gesetzt werden. Allgemeiner kann ein Schwellenlöschzählstand auf einen Wert gesetzt werden, der zwischen ungefähr zwei Prozent und ungefähr fünf Prozent weniger als der Löschzählstand ist, der als die Lebensdauer eines Blocks bestimmend betrachtet wird.
  • Wenn in Schritt 212 festgestellt wird, dass der Löschzählstand des Blocks geringer ist als der Schwellenlöschzählstand, dann ist die Angabe, dass die Inhalte, z. B. Anwenderdaten, die im Block gespeichert werden sollen, unter Verwendung eines 1-Bit-ECC-Algorithmus codiert werden sollen. Folglich werden in Schritt 224 die Inhalte, die im Block gespeichert werden sollen, unter Verwendung eines 1-Bit-ECC-Algorithmus codiert. Sobald die Inhalte codiert sind, werden die codierten Inhalte in Schritt 228 in den Block geschrieben und der Prozess des Schreibens von Inhalten in einen Block wird beendet.
  • Bei Rückkehr zu Schritt 212 ist, wenn die Feststellung ist, dass der Löschzählstand nicht geringer ist als der Schwellenlöschzählstand, dann die Implikation, dass der Block sich dem Ende seiner Nutzlebensdauer nähert. An sich werden die im Block gespeicherten Inhalte in Schritt 216 unter Verwendung eines 2-Bit-ECC-Algorithmus codiert. Nachdem die Blockinhalte codiert sind, werden die codierten Inhalte dann in Schritt 220 in den Block geschrieben und der Prozess des Schreibens von Inhalten in einen Block wird beendet.
  • Wenn Inhalte von Blöcken, z. B. physikalischen Blöcken, innerhalb eines Speichersystems unter Verwendung von entweder 1-Bit- oder 2-Bit-ECC-Algorithmen codiert werden können, wird, bevor die Inhalte genau decodiert werden können, eine Feststellung hinsichtlich dessen durchgeführt, welcher ECC-Algorithmus verwendet wurde, um die Inhalte zu codieren. Mit anderen Worten, ein Prozess zum Lesen von Inhalten von Blöcken umfasst im Allgemeinen das Identifizieren, ob die Inhalte unter Verwendung eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert wurden. 2b ist ein Prozessablaufdiagramm, das die Schritte darstellt, die einem Verfahren zum Lesen von Inhalten aus einem Block innerhalb eines Systems, in dem die Inhalte entweder unter Verwendung eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung zugeordnet sind. Ein Prozess 240 zum Lesen der Inhalte eines Blocks beginnt in Schritt 244, in dem ein zu lesender Block identifiziert wird. Der Block kann im Allgemeinen von einer Gruppe von Blöcken erhalten werden, die gerade in Gebrauch sind, d. h. die gerade verwendet werden, um Informationen zu speichern. Nachdem der Block identifiziert ist, wird ein dem Block entsprechender Eintrag in einem Löschzählstandblock in Schritt 248 identifiziert. Typischerweise umfasst der Eintrag für den Block im Löschzählstandblock einen Löschzählstand für den Block.
  • In Schritt 252 wird festgestellt, ob der Löschzählstand des Blocks unter einem Löschzählstandschwellenwert oder dem Schwellenwert liegt, der im Wesentlichen bestimmt, wann die Inhalte eines Blocks unter Verwendung eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert werden sollen. Wenn festgestellt wird, dass der Löschzählstand des Blocks unter dem Schwellenwert liegt, dann werden die Daten im Block in Schritt 256 unter Verwendung eines 1-Bit-ECC-Algorithmus decodiert. Sobald die Daten unter Verwendung des 1-Bit-ECC-Algorithmus decodiert sind, wird der Prozess zum Lesen von Inhalten aus einem Block beendet. Wenn in Schritt 252 alternativ festgestellt wird, dass der Löschzählstand nicht unterhalb des Schwellenwerts liegt, dann ist die Angabe, dass die Daten unter Verwendung eines 2-Bit-ECC-Algorithmus codiert wurden. Folglich werden die Daten im Block in Schritt 260 unter Verwendung eines 2-Bit-ECC-Algorithmus decodiert. Nachdem die Daten decodiert sind, wird der Prozess zum Lesen von Daten aus einem Block beendet.
  • Während des Verlaufs der Operation eines Speichersystems können zum Verlängern der Lebensdauer eines nichtflüchtigen Speichers des Speichersystems statische Blöcke oder Blöcke, die selten aktualisiert oder gelöscht werden, identifiziert werden. Solche statischen Blöcke können als unwahrscheinlich aktualisiert identifiziert werden und daher können die Inhalte von solchen statischen Blöcken in Blöcke mit relativ hohen Löschzählständen kopiert werden. Durch Kopieren der Inhalte von statischen Blöcken in Blöcke mit relativ hohen Löschzählständen können die statischen Blöcke effektiv zur Verwendung zurückgeführt werden. Ferner kann sich das Speichern der Inhalte von statischen Blöcken in Blöcken mit relativ hohen Löschzählständen als effiziente Verwendung der Blöcke mit relativ hohen Löschzählständen erweisen, da die Inhalte unwahrscheinlich aktualisiert und gelöscht werden, wodurch die Lebensdauer der Blöcke mit relativ hohen Löschzählständen verlängert wird. Das Vertauschen von statischen Blöcken mit Blöcken, die relativ hohe Löschzählstände aufweisen, ist in der gleichzeitig anhängigen US-Patentanmeldung Nr. 10/281 739 erörtert.
  • Häufig kann das Vertauschen von statischen Blöcken mit Blöcken, die relativ hohe Löschzählstände aufweisen, durchgeführt werden, wenn ein Speichersystem initialisiert wird, z. B. wenn ein Speichersystem eingeschaltet wird, nachdem es ausgeschaltet war. Mit Bezug auf 3 wird ein Initialisierungsprozess für ein Speichersystem, in dem Inhalte von Blöcken unter Verwendung entweder eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung beschrieben. Ein Prozess 300 zum Initialisieren eines Speichersystems umfasst das Identifizieren von statischen Blöcken in Schritt 304. Das Identifizieren von statischen Blöcken kann im Allgemeinen das Identifizieren von Blöcken umfassen, die effektiv nicht aktiv verwendet werden. Sobald statische Blöcke identifiziert sind, werden ungenutzte Blöcke mit relativ hohen Löschzählständen in Schritt 308 identifiziert. Typischerweise umfasst das Identifizieren der ungenutzten Blöcke mit relativ hohen Löschzählständen das Identifizieren einer Menge von ungenutzten Blöcken, die die höchsten Löschzählstände aller ungenutzten Blöcke besitzen, die zu einem nichtflüchtigen Speicher des Speichersystems gehören.
  • Nachdem ungenutzte Blöcke mit relativ hohen Löschzählständen identifiziert sind, wird in Schritt 312 festgestellt, ob der mittlere Löschzählstand, der den Blöcken des nichtflüchtigen Speichers zugeordnet ist, größer ist als ein Löschzählstandschwellenwert. Ein mittlerer Löschzählstand gibt eine mittlere Anzahl von Malen an, die ungenutzte Blöcke innerhalb des nichtflüchtigen Speichers gelöscht wurden, und ist in der gleichzeitig anhängigen US-Patentanmeldung Nr. 10/281823 erörtert. Wenn festgestellt wird, dass der mittlere Löschzählstand nicht größer ist als der Löschzählstandschwellenwert, dann ist die Angabe, dass die Inhalte des statischen Blocks zur Speicherung in den ungenutzten Blöcken mit relativ hohen Löschzählständen unter Verwendung eines 1-Bit-ECC-Algorithmus codiert werden können. An sich geht der Prozessablauf zu Schritt 328 weiter, in dem die Inhalte der statischen Blöcke decodiert werden. Es sollte erkannt werden, dass die zum Decodieren oder Lesen aus den statischen Blöcken gehörenden Schritte die vorstehend mit Bezug auf 2b beschriebenen Schritte sein können.
  • Beim Decodieren der Inhalte der statischen Blöcke werden die decodierten Inhalte in Schritt 332 unter Verwendung eines 1-Bit-ECC-Algorithmus codiert. Die codierten Inhalte werden dann in die ungenutzten Blöcke mit den relativ hohen Löschzählständen in Schritt 336 kopiert oder anderweitig in diesen gespeichert und der Prozess zum Initialisieren eines Speichersystems wird beendet.
  • Bei Rückkehr zu Schritt 312 ist, wenn festgestellt wird, dass der mittlere Löschzählstand größer ist als der Löschzählstandschwellenwert, dann die Angabe, dass die ungenutzten Blöcke mit den relativ hohen Löschzählständen wahrscheinlich alle Löschzählstände aufweisen, die höher sind als der Löschzählstandschwellenwert. An sich geht der Prozessablauf von Schritt 312 zu Schritt 316 weiter, in dem die Inhalte der statischen Blöcke entweder unter Verwendung eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus, wie geeignet, decodiert werden. Sobald die Inhalte der statischen Blöcke decodiert sind, werden die Inhalte in Schritt 320 unter Verwendung eines 2-Bit-ECC-Algorithmus codiert. Nachdem die Inhalte codiert sind, werden die Inhalte in die Blöcke mit den relativ hohen Löschzählständen in Schritt 324 kopiert oder in diesen gespeichert und der Prozess zum Initialisieren eines Speichersystems wird beendet.
  • In einer Ausführungsform der vorliegenden Erfindung können zurückgewonnene Blöcke in Gebrauch sein. Das heißt, Blöcke, die vorher als unbrauchbare Blöcke betrachtet wurden, können nach einem gründlichen Testprozess zur Verwendung zurückgewonnen werden, insbesondere im Fall, dass eine Gruppe von übrigen, nutzbaren Blöcken unzureichend ist. Das Managen von Blöcken, die als unbrauchbar identifiziert werden, und das Zurückgewinnen von Blöcken, die als unbrauchbar identifiziert sind, sind in der gleichzeitig anhängigen provisorischen US-Patentanmeldung Nr. 60/421965 erörtert. Gründliche Testprozesse können das Testen von Blöcken umfassen, die als zunehmende Defekte aufweisend identifiziert wurden, z. B. Blöcke, die vorher nutzbar waren, aber nicht mehr als nutzbar betrachtet werden, indem Testinhalte in die Blöcke unter Verwendung eines 2-Bit-ECC-Algorithmus geschrieben werden und Testinhalte aus den Blöcken unter Verwendung eines 2-Bit-ECC-Algorithmus gelesen werden. Wenn ein Block, der als einen zunehmenden Defekt aufweisend identifiziert wurde, einen gründlichen Testprozess besteht, dann kann der Block wiederum als nutzbar betrachtet werden. Wenn sie verwendet werden, wird in solche Blöcke jedoch im Allgemeinen unter Verwendung eines 2-Bit-ECC-Algorithmus geschrieben und aus diesen gelesen, um die Integrität der in den Blöcken gespeicherten Inhalte zu verbessern.
  • 4a ist eine schematische Blockdiagrammdarstellung eines Prozesses zum Zurückgewinnen von unbrauchbaren Blöcken gemäß einer Ausführungsform der vorliegenden Erfindung. Eine Gruppe oder eine Sammlung 402 von Blöcken 406, die als unbrauchbar identifiziert sind, werden unter Verwendung eines Testers 410 getestet, wenn ein Versuch unternommen wird, zumindest einige der unbrauchbaren Blöcke 406 zurückzugewinnen. Die unbrauchbaren Blöcke 406 können in einem Löschzählstandblock als unbrauchbar identifiziert werden. Typischerweise werden Blöcke mit Werksdefekten wie z. B. der Block 406c nicht auf eine mögliche Zurückgewinnung getestet, da solche Blöcke im Allgemeinen nicht zurückgewinnbar sind. Solche Blöcke, z. B. der Block 406c, werden häufig vom Hersteller als unbrauchbar identifiziert und können auch Blöcke umfassen, die vorher in einem Zurückgewinnungsprozess versagt haben.
  • Blöcke mit zunehmenden Defekten wie z. B. die Blöcke 406a, 406b können einem Testen durch einen Tester 410 unterzogen werden, um festzustellen, ob zumindest einige solche Blöcke brauchbar sein können. Wie gezeigt, wird der Block 406a als Block 406a' zurückgewonnen. Durch Zurückgewinnen des Blocks 406a als Block 406a' ist die Angabe in der beschriebenen Ausführungsform, dass der Block 406a' einen Codier- und Decodiertest unter Verwendung eines 2-Bit-ECC-Algorithmus bestanden hat.
  • Sobald ein Block zurückgewonnen wurde, kann der Block in einem Löschzählstandblock als zurückgewonnen identifiziert werden. 4b ist eine schematische Darstellung eines Abschnitts eines Löschzählstandblocks gemäß einer Ausführungsform der vorliegenden Erfindung. Ein Löschzählstandblock 440 umfasst Einträge 442, 444, 446, die verschiedenen physikalischen Blöcken innerhalb eines nichtflüchtigen Speichers entsprechen. Obwohl die Anzahl von Bytes in jedem Eintrag 442, 444, 446 ungefähr drei ist, kann die Anzahl von Bytes, die jedem Eintrag 442, 444, 446 zugeordnet sind, in der beschriebenen Ausführungsform variieren.
  • Wie gezeigt, ist ein höchstwertiges Bit, das dem Eintrag 442 zugeordnet ist, auf "0" gesetzt, um anzugeben, dass der Block 442 brauchbar ist. Das niedrigstwertige Bit oder die niedrigstwertigen Bits, die dem Eintrag 442 zugeordnet sind, sind der Löschzählstand für den dem Eintrag 442 zugeordneten Block. Daher ist der dem Eintrag 442 zugeordnete Block als brauchbar identifiziert und weist einen Löschzählstand von 200 auf. Typischerweise kann ein HEX-Wert verwendet werden, um den Löschzählstand anzugeben, obwohl für eine leichte Erörterung der Löschzählstand als alphanumerisch gezeigt ist. Es sollte selbstverständlich sein, dass die Bits im Eintrag 442 im Allgemeinen in einer Vielfalt von verschiedenen Weisen organisiert sein können, d. h. ein anderes Bit als das höchstwertige Bit kann gesetzt werden, um anzugeben, dass der dem Eintrag 442 zugeordnete Block brauchbar ist, und andere Bits als die niedrigstwertigen Bits können auf den Löschzählstand des Blocks gesetzt werden.
  • Ein höchstwertiges Bit im Eintrag 444 identifiziert einen Block, der dem Eintrag 444 entspricht, als zurückgewonnen. Das niedrigstwertige Bit oder die niedrigstwertigen Bits des Eintrages 444 identifizieren den entsprechenden Block als einen Löschzählstand von 9870 aufweisend.
  • Wie vorher erwähnt, werden, wenn ein zurückgewonnener Block verwendet wird, um Daten zu speichern, die im zurückgewonnenen Block gespeicherten Daten im Allgemeinen unter Verwendung eines 2-Bit-ECC-Algorithmus codiert, um die Integrität der Daten ungeachtet dessen, ob der Löschzählstand des zurückgewonnenen Blocks über einem Löschzählstandschwellenwert liegt, sicherzustellen. Wenn in einen Block innerhalb eines Systems, in dem sich zurückgewonnene Blöcke befinden können, geschrieben werden soll oder aus diesem gelesen werden soll, werden daher die zurückgewonnenen Blöcke identifiziert. Mit Bezug als nächstes auf 5a wird ein Verfahren zum Schreiben in einen Block innerhalb eines Systems, in dem sich zurückgewonnene Blöcke befinden können und Daten unter Verwendung entweder eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung beschrieben. Ein Prozess 500 zum Schreiben von Daten beginnt in Schritt 504, in dem ein Block, in den geschrieben werden soll, identifiziert wird. Ein Eintrag, der dem Block entspricht, wird von einem Löschzählstandblock in Schritt 508 gelesen. Typischerweise umfasst der Eintrag einen Löschzählstand für den Block und eine Angabe dessen, ob der Block zurückgewonnen wurde.
  • Sobald der Eintrag, der dem Block entspricht, in Schritt 508 gelesen ist, wird in Schritt 512 festgestellt, ob der Block ein zurückgewonnener Block ist. Wenn festgestellt wird, dass der Block ein zurückgewonnener Block ist, dann werden die in den Block zu schreibenden oder in diesem zu speichernden Inhalte in Schritt 516 unter Verwendung eines 2-Bit-ECC-Algorithmus codiert. Nachdem die Inhalte codiert sind, werden die codierten Inhalte in Schritt 520 in den Block geschrieben und der Prozess zum Schreiben von Inhalten in einen Block wird beendet.
  • Bei Rückkehr zu Schritt 512 begibt sich der Prozessablauf, wenn festgestellt wird, dass der Block kein zurückgewonnener Block ist, dann zu Schritt 524, in dem festgestellt wird, ob der Löschzählstand für den Block, der aus dem Löschzählstandblock in Schritt 508 gelesen werden kann, geringer ist als ein Schwellenlöschzählstand. Wenn festgestellt wird, dass der Löschzählstand für den Block nicht geringer ist als Schwellenlöschzählstand, dann ist die Angabe, dass ein 2-Bit-ECC-Algorithmus verwendet werden soll, um die Inhalte zu codieren, die in dem in Schritt 504 identifizierten Block gespeichert werden sollen. An sich begibt sich der Prozessablauf von Schritt 524 zu Schritt 516, in dem die Inhalte unter Verwendung eines 2-Bit-ECC-Algorithmus codiert werden.
  • Wenn alternativ in Schritt 524 festgestellt wird, dass der Löschzählstand nicht geringer ist als der Schwellenlöschzählstand, dann werden die in den identifizierten Block zu schreibenden Inhalte in Schritt 528 unter Verwendung eines 1-Bit-ECC-Algorithmus codiert. Die codierten Inhalte werden dann in Schritt 532 im Block gespeichert oder in diesen geschrieben und der Prozess zum Schreiben von Inhalten in einen Block wird beendet.
  • 5b ist ein Prozessablaufdiagramm, das ein Verfahren zum Lesen von Inhalten aus einem Block, der ein zurückgewonnener Block sein kann und Inhalte aufweisen kann, die entweder unter Verwendung eines 1-Bit-ECC-Algorithmus oder eines 2-Bit-ECC-Algorithmus codiert sind, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt. Ein Leseprozess 550 beginnt in Schritt 554, in dem ein Block mit zu lesenden Inhalten identifiziert wird. Ein Eintrag, der dem Block entspricht, wird dann in Schritt 558 in einem Löschzählstandblock identifiziert. Der Eintrag umfasst im Allgemeinen eine Angabe dessen, ob der Block ein zurückgewonnener Block ist, sowie einen Löschzählstand für den Block.
  • Nachdem der dem Block entsprechende Eintrag identifiziert ist, wird in Schritt 562 eine Feststellung hinsichtlich dessen durchgeführt, ob der Block ein zurückgewonnener Block ist. Typischerweise kann eine solche Feststellung durch Untersuchen des in Schritt 558 identifizierten oder aus dem Löschzählstandblock gelesenen Eintrages durchgeführt werden. Wenn festgestellt wird, dass der Block ein zurückgewonnener Block ist, dann werden die im Block gespeicherten Inhalte unter Verwendung eines 2-Bit-ECC-Algorithmus in Schritt 574 decodiert. Sobald die Inhalte decodiert sind, wird der Prozess zum Lesen von Daten oder Inhalten aus einem Block beendet.
  • Wenn alternativ in Schritt 562 festgestellt wird, dass der Block kein zurückgewonnener Block ist, dann wird in Schritt 566 festgestellt, ob der Löschzählstand des Blocks unter einem Schwellenlöschzustand liegt. Wenn festgestellt wird, dass der Löschzählstand des Blocks nicht unter dem Schwellenwert liegt, dann ist die Angabe, dass die Inhalte unter Verwendung eines 2-Bit-ECC-Algorithmus codiert wurden. An sich werden die Daten in Schritt 574 unter Verwendung eines 2-Bit-ECC-Algorithmus decodiert. Wenn andererseits festgestellt wird, dass der Löschzählstand des Blocks unter dem Schwellenwert liegt, dann werden die Daten in Schritt 570 unter Verwendung eines 1-Bit-ECC-Algorithmus decodiert. Nachdem die Daten decodiert sind, wird der Prozess des Lesens von Daten oder Inhalten aus einem Block beendet.
  • Im Allgemeinen ist ein Systeminitialisierungsprozess für ein System, das ein Vertauschen von statischen Blöcken ermöglicht und Blöcke umfasst, die zurückgewonnen werden können, von einem Systeminitialisierungsprozess für ein System, das das Vertauschen von statischen Blöcken ermöglicht, aber zurückgewonnene Blöcke nicht berücksichtigt, verschieden. Mit Bezug auf 6 wird ein Verfahren zum Initialisieren eines Speichersystems mit einer Hybrid-ECC-Implementierung, das zurückgewonnene Blöcke umfasst, gemäß einer Ausführungsform der vorliegenden Erfindung beschrieben. Ein Initialisierungsprozess beginnt in Schritt 604, in dem statische Blöcke identifiziert werden. Sobald die statischen Blöcke identifiziert sind, werden ungenutzte Blöcke mit relativ hohen Löschzählständen in Schritt 608 identifiziert. Die ungenutzten Blöcke mit relativ hohen Löschzählständen sind im Allgemeinen so beschaffen, dass sie mit den statischen Blöcken vertauscht werden, so dass die statischen Blöcke zurückgeführt oder anderweitig wieder verwendet werden können, während die Inhalte der statischen Blöcke in den ungenutzten Blöcken mit relativ hohen Löschzählständen gespeichert werden.
  • In Schritt 612 wird eine Feststellung hinsichtlich dessen durchgeführt, ob der mittlere Löschzählstand, der dem Speichersystem zugeordnet ist und der aus einem Löschzählstandblock erhalten werden kann, größer ist als ein Löschzählstandschwellenwert. Wenn festgestellt wird, dass der mittlere Löschzählstand größer ist als der Schwellenlöschzählstand, dann werden in Schritt 616 irgendwelche statischen Blöcke, die zurückgewonnene Blöcke sind, identifiziert. Eine solche Identifikation kann entweder durch Untersuchen von redundanten Bereichen, die den statischen Blöcken zugeordnet sind, oder durch Untersuchen von zugehörigen Einträgen in einem Löschzählstandblock druchgeführt werden.
  • Nachdem statische Blöcke, die zurückgewonnen wurden, identifiziert sind, werden die Inhalte der zurückgewonnenen statischen Blöcke in Schritt 620 unter Verwendung eines 2-Bit-ECC-Algorithmus decodiert. In Schritt 624 werden dann die Inhalte der restlichen statischen Blöcke decodiert, wie geeignet. Das heißt, die Inhalte der restlichen statischen Blöcke, die Löschzählstände aufweisen, die geringer sind als der Schwellenlöschzählstand, werden unter Verwendung eines 1-Bit-ECC-Algorithmus decodiert, während die Inhalte der restlichen statischen Blöcke, die Löschzählstände aufweisen, die größer sind als der Schwellenlöschzählstand, unter Verwendung eines 2-Bit-ECC-Algorithmus decodiert werden. Sobald alle Inhalte der statischen Blöcke decodiert sind, werden die Inhalte unter Verwendung eines 2-Bit-ECC-Algorithmus in Schritt 628 codiert und die codierten Inhalte werden in den Blöcken mit den relativ hohen Löschzählständen in Schritt 632 gespeichert oder in diese kopiert. Nach dem Kopieren der codierten Inhalte in Blöcke wird der Systeminitialisierungsprozess beendet.
  • Bei Rückkehr zu Schritt 612 und zur Feststellung dessen, ob ein mittlerer Löschzählstand größer als ein Schwellenlöschzählstand ist, ist, wenn festgestellt wird, dass der mittlere Löschzählstand nicht größer ist als der Schwellenlöschzählstand, dann die Angabe, dass die ungenutzten Blöcke mit relativ hohen Löschzählständen wahrscheinlich Löschzählstände aufweisen, die geringer sind als der Schwellenlöschzählstand. An sich begibt sich der Prozessablauf von Schritt 612 zu Schritt 636, in dem ungenutzte Blöcke, die zurückgewonnene Blöcke sind, identifiziert werden. Das heißt, die ungenutzten Blöcke mit relativ hohen Löschzählständen, die vorher zurückgewonnen wurden, werden identifiziert. Sobald die ungenutzten Blöcke mit relativ hohen Löschzählständen, die vorher zurückgewonnen wurden, identifiziert sind, werden irgendwelche statischen Blöcke, die zurückgewonnene Blöcke sind, in Schritt 640 identifiziert.
  • Von Schritt 640 geht der Prozessablauf zu Schritt 644 weiter, in dem die Inhalte von zurückgewonnenen statischen Blöcken unter Verwendung eines 2-Bit-ECC-Algorithmus decodiert werden. Nachdem die Inhalte der zurückgewonnenen statischen Blöcke decodiert sind, werden die Inhalte der restlichen statischen Blöcke, wie geeignet, in Schritt 648 decodiert. Typischerweise können einige der statischen Blöcke unter Verwendung eines 1-Bit-ECC-Algorithmus decodiert werden, während andere statische Blöcke unter Verwendung eines 2-Bit-ECC-Algorithmus decodiert werden können. Beim Decodieren der Inhalte der restlichen statischen Blöcke werden irgendwelche Inhalte, die in zurückgewonnenen ungenutzten Blöcken gespeichert werden sollen, in Schritt 652 unter Verwendung eines 2-Bit- ECC-Algorithmus codiert. In Schritt 656 werden die Inhalte, die in ungenutzten Blöcken gespeichert werden sollen, die vorher nicht zurückgewonnen wurden, unter Verwendung eines 1-Bit-ECC-Algorithmus codiert. Sobald im Wesentlichen alle Inhalte codiert wurden, werden die codierten Inhalte in ihre vorgesehenen ungenutzten Blöcke mit relativ hohen Löschzählständen in Schritt 660 kopiert und der Initialisierungsprozess wird beendet.
  • Im Allgemeinen ist die Funktionalität, die dem Implementieren einer Hybrid-ECC-Implementierung zugeordnet ist, in der Software, z. B. als Programmcodevorrichtungen, oder als Firmware für ein Hauptrechnersystem, das einen nichtflüchtigen Speicher oder eine nichtflüchtige Speicherkomponente umfasst, vorgesehen. Eine Ausführungsform einer geeigneten Systemarchitektur, die der Software oder Firmware zugeordnet ist, die für ein Hauptrechnersystem vorgesehen ist, ist in 7 gezeigt. Eine Systemarchitektur 700 umfasst im Allgemeinen eine Vielzahl von Modulen, die umfassen können, jedoch nicht begrenzt sind auf ein Anwendungsschnittstellenmodul 704, ein Systemmanagermodul 708, ein Datenmanagermodul 712, einen Datenintegritätsmanager 716 und einen Vorrichtungsmanager und ein Schnittstellenmodul 720. Im Allgemeinen kann die Systemarchitektur 700 unter Verwendung von Softwarecodevorrichtungen oder Firmware implementiert werden, auf die durch einen Prozessor, z. B. den Prozessor 108 von 1a, zugegriffen werden kann.
  • Im Allgemeinen kann das Anwendungsschnittstellenmodul 704 so beschaffen sein, dass es mit einem nichtflüchtigen Speicher wie z. B. einem Flash-Speicher (nicht dargestellt) oder allgemeiner Medien kommuniziert, um die Medien während des Verlaufs einer Initialisierungs- oder Systemformatierungsanforderung zu initialisieren. Das Anwendungsschnittstellenmodul 704 kann auch aus einem Sektor, Cluster oder einer Seite, die den Medien zugeordnet sind, lesen sowie in diese schreiben. Zusätzlich zur Kommunikation mit Medien steht das Anwendungsschnittstellenmodul 704 typischerweise auch mit dem Systemmanagermodul 708 und dem Datenmanagermodul 712 in Kommunikation.
  • Das Systemmanagermodul 708 umfasst ein Systeminitialisierungsuntermodul 724, ein Löschzählstandblock-Managementuntermodul 726 und ein Leistungsmanagementblock-Untermodul 730. Das Systeminitialisierungsmodul 724 ist im Allgemeinen so beschaffen, dass es ermöglicht, dass eine Initialisierungsanforderung verarbeitet wird, und kommuniziert typischerweise mit dem Löschzählstandblock-Managementuntermodul 726. Das Systeminitialisierungsmodul 724 ist auch so beschaffen, dass es eine logisch-physikalische Blockzuweisung von einem zu vielen auflöst.
  • Das Löschzählstandblock-Managementuntermodul 726 umfasst eine Funktionalität, um zu bewirken, dass Löschzählstände von Blöcken gespeichert werden, und eine Funktionalität, um zu bewirken, dass ein mittlerer Löschzählstand unter Verwendung von einzelnen Löschzählständen berechnet sowie aktualisiert wird. Mit anderen Worten, das Löschzählstandblock-Managementuntermodul 726 ermöglicht effektiv, dass Löschzählstände katalogisiert werden, und ermöglicht, dass ein mittlerer Löschzählstand gewartet wird. In einer Ausführungsform synchronisiert das Löschzählstandblock-Managementuntermodul 726 ferner auch im Wesentlichen den Löschzählstand von im Wesentlichen allen Blöcken in einem Löschzählstandblock während einer Initialisierungsanforderung eines Gesamtsystems. Obwohl das Löschzählstandblock-Managementuntermodul 726 so beschaffen sein kann, dass es bewirkt, dass ein mittlerer Löschzählstand in einem Löschzählstandblock gespeichert wird, sollte erkannt werden, dass das Leistungsmanagementblock-Untermodul 730 statt dessen verwendet werden kann, um zu ermöglichen, dass der mittlere Löschzählstand gespeichert wird.
  • Zusätzlich dazu, dass es mit dem Anwendungsschnittstellenmodul 704 in Kommunikation steht, steht das Systemmanagermodul 708 auch mit dem Datenmanagermodul 712 sowie dem Vorrichtungsmanager- und Schnittstellenmodul 720 in Kommunikation. Das Datenmanagermodul 712, das mit sowohl dem Systemmanagermodul 708 als auch dem Anwendungsschnittstellenmodul 704 kommuniziert, kann eine Funktionalität umfassen, um eine Sektorabbildung bereitzustellen, die effektiv logische Sektoren in physikalische Sektoren umsetzt. Das heißt, das Datenmanagermodul 712 ist dazu beschaffen, logische Blöcke in physikalische Blöcke abzubilden. Das Datenmanagermodul 712 kann auch eine Funktionalität umfassen, die den Betriebssystem- und Dateisystem-Schnittstellenschichten zugeordnet ist, und ermöglicht, dass Gruppen innerhalb Blöcken gemanagt werden, wie in der gleichzeitig anhängigen US-Patentanmeldung Nr. 10/281 855 beschrieben. In einer Ausführungsform kann das Datenmanagermodul 712 dazu beschaffen sein zu ermöglichen, dass ein im Wesentlichen sequenzexterner Schreibprozess geschieht.
  • Das Vorrichtungsmanager- und Schnittstellenmodul 720, das mit dem Systemmanagermodul 708, dem Datenmanager 712 und dem Datenintegritätsmanager 716 in Kommunikation steht, stellt typischerweise eine Flash-Speicher-Schnittstelle bereit und umfasst eine Funktionalität, die Hardwareabstraktionen zugeordnet ist, z. B. eine E/A-Schnittstelle. Das Datenintegritätsmanagermodul 716 sieht unter anderen Funktionen eine ECC-Bearbeitung vor.
  • Obwohl nur einige Ausführungsformen der vorliegenden Erfindung beschrieben wurden, sollte es selbstverständlich sein, dass die vorliegende Erfindung in vielen anderen speziellen Formen verkörpert werden kann, ohne vom Gedanken oder Schutzbereich der vorliegenden Erfindung abzuweichen. Beispielsweise wurde ein 1-Bit-ECC-Algorithmus als geeignet zur Verwendung zum Codieren von Inhalten eines Blocks mit einem Löschzählstand, der niedriger ist als ein Löschzählstandschwellenwert, beschrieben, während ein 2-Bit-ECC-Algorithmus als geeignet zur Verwendung zum Codieren von Inhalten eines Blocks mit einem Löschzählstand, der höher ist als ein Löschzählstandschwellenwert, beschrieben wurde. Es sollte jedoch erkannt werden, dass in einigen Ausführungsformen ein 2-Bit-ECC-Algorithmus verwendet werden kann, um Inhalte eines Blocks mit einem Löschzählstand zu codieren, der niedriger ist als ein Löschzählstandschwellenwert, und ein Algorithmus mit noch höherer Genauigkeit als ein 2-Bit-ECC-Algorithmus, z. B. ein 3-Bit-ECC-Algorithmus, verwendet werden kann, um Inhalte eines Blocks mit einem Löschzählstand, der höher ist als der Löschzählstandschwellenwert, zu codieren.
  • Obwohl ECC-Algorithmen im Allgemeinen als 1-Bit-ECC-Algorithmen oder 2-Bit-ECC-Algorithmen beschrieben wurden, können ECC-Algorithmen außerdem statt dessen 1-Symbol-ECC-Algorithmen bzw. 2-Symbol-ECC-Algorithmen sein. Ferner können die tatsächlichen verwendeten ECC-Algorithmen umfangreich variieren. Geeignete ECC-Algorithmen können umfassen, sind jedoch nicht begrenzt auf Reed-Solomon-Algorithmen, Hamming-Code-Algorithmen und binäre Hamming-Code-Algorithmen. In einer Ausführungsform kann beispielsweise ein geeigneter 1-Bit-ECC-Algorithmus ein Hamming-Code-Algorithmus sein, während ein geeigneter 2-Bit-ECC-Algorithmus ein Reed-Solomon-Algorithmus sein kann.
  • Die zu den verschiedenen Verfahren der vorliegenden Erfindung gehörenden Schritte können umfangreich verändert werden. Im Allgemeinen können Schritte hinzugefügt, entfernt, umgeordnet und geändert werden, ohne vom Gedanken oder Schutzbereich der vorliegenden Erfindung abzuweichen. Die Prozesse der Initialisierung eines Speichersystems, das eine Hybrid-ECC-Implementierung umfasst, können beispielsweise das Löschen von statischen Blöcken umfassen. Für Ausführungsformen, in denen zurückgewonnene Blöcke verwendet werden können, um Daten zu speichern, kann außerdem, bevor festgestellt wird, ob ein Block zurückgewonnen wurde, zuerst festgestellt werden, ob der Löschzählstand für den fraglichen Block einen Löschzählstandschwellenwert überschreitet. Daher sollen die vorliegenden Beispiele als erläuternd und nicht einschränkend betrachtet werden und die Erfindung soll nicht auf die hierin angegebenen Details begrenzt sein, sondern kann innerhalb des Schutzbereichs der beigefügten Ansprüche modifiziert werden.
  • Jedes in dieser Patentbeschreibung (wobei der Begriff die Ansprüche einschießt) offenbarte und/oder in den Zeichnungen gezeigte Merkmal kann in die Erfindung unabhängig von anderen offenbarten und/oder dargestellten Merkmalen integriert werden.
  • Der Text der hiermit eingereichten Zusammenfassung wird hier als Teil der Patentbeschreibung wiederholt.
  • Verfahren und Vorrichtungen zur Verwendung von verschiedenen Fehlerkorrekturcode-Algorithmen zum Codieren und Decodieren von Inhalten von Blöcken innerhalb eines nichtflüchtigen Speichers werden offenbart. Gemäß einem Aspekt der vorliegenden Erfindung umfasst ein Verfahren zum Speichern von Daten innerhalb eines nichtflüchtigen Speichers das Identifizieren eines ersten Blocks, in dem die Daten gespeichert werden sollen, und das Erhalten eines Indikators, der angibt, dass die Daten unter Verwendung eines ersten Algorithmus codiert werden sollen. Die Daten werden unter Verwendung des ersten Algorithmus codiert, wenn die Verwendung des ersten Algorithmus festgestellt wird, nach welchem Punkt die unter Verwendung des ersten Algorithmus codierten Daten in den ersten Block geschrieben werden.
  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Die vorliegende Erfindung betrifft die gleichzeitig anhängigen US-Patentanmeldungen Nrn. 10/281 739, 10/281 823, 10 281 670, 10/281 824, 10/281 631, 10/281 855, 10/281 762, 10/281 696, 10/281 626 und 10/281 804 sowie die gleichzeitig anhängigen vorläufigen US-Patentanmeldungen Nrn. 60/421 910, 60/421 725, 60/421 965, 60/422 166, 60/421 746 und 60/421 911, jeweils eingereicht am 28. Oktober 2002.

Claims (25)

  1. Verfahren zum Speichern von Daten in einem nichtflüchtigen Speicher (124; 174) eines Speichersystems, wobei das Verfahren umfasst: Identifizieren (204) eines ersten Blocks, in dem die Daten gespeichert werden sollen; und dadurch gekennzeichnet, dass das Verfahren ferner umfasst: Erhalten (208) eines dem ersten Block zugeordneten Indikators, wobei der Indikator einen Wert besitzt, der die Zuverlässigkeit des ersten Blocks angibt; in Reaktion (212) darauf, dass der dem ersten Block zugeordnete Indikator ein Kriterium erfüllt, Codieren (224) der zu speichernden Daten unter Verwendung eines ersten Fehlerdetektionsalgorithmus und Schreiben (228) der codierten Daten unter Verwendung des ersten Fehlerdetektionsalgorithmus in den ersten Block; und in Reaktion (212) darauf, dass der dem ersten Block zugeordnete Indikator das Kriterium nicht erfüllt, Codieren (216) der zu speichernden Daten unter Verwendung eines zweiten Fehlerdetektionsalgorithmus, wobei der zweite Fehlerdetektionsalgorithmus eine höhere Fehlerdetektionsfähigkeit als der erste Fehlerdetektionsalgorithmus hat, und Schreiben (220) der codierten Daten unter Verwendung des zweiten Fehlerdetektionsalgorithmus in den ersten Block.
  2. Verfahren nach Anspruch 1, ferner dadurch gekennzeichnet, dass der Indikator einen Zählstand enthält, der der Anzahl entspricht, in der der Block gelöscht worden ist; wobei das Kriterium den Indikator, der einen Zählstand besitzt, der kleiner als ein Schwellenwert ist, umfasst.
  3. Verfahren nach Anspruch 1 oder Anspruch 2; ferner dadurch gekennzeichnet, dass der Indikator angibt, ob der Block ein zurückgewonnener Block ist, wobei das Kriterium den Indikator, der angibt, dass der Block kein zurückgewonnener Block ist, umfasst.
  4. Verfahren nach Anspruch 1, das ferner umfasst: Identifizieren (244) des ersten Blocks als einen Block, aus dem Daten gelesen werden sollen; Erhalten des dem ersten Block zugeordneten Indikators; in Reaktion (252) auf die Tatsache, dass der Indikator das Kriterium erfüllt, Decodieren (256) der Daten unter Verwendung des ersten Fehlerdetektionsalgorithmus; und in Reaktion (252) auf die Tatsache, dass der Indikator das Kriterium nicht erfüllt, Decodieren (260) der Daten unter Verwendung des zweiten Fehlerdetektionsalgorithmus.
  5. Verfahren nach Anspruch 1 oder Anspruch 4, bei dem der erste Fehlerdetektionsalgorithmus ein 1-Bit-ECC-Algorithmus ist und der zweite Fehlerdetektionsalgorithmus ein 2-Bit-ECC-Algorithmus ist.
  6. Verfahren nach Anspruch 4, ferner dadurch gekennzeichnet, dass der Indikator angibt, ob der erste Block ein zurückgewonnener Block ist, wobei das Kriterium den Indikator, der angibt, dass der erste Block kein zurückgewonnener Block ist, umfasst; und wobei der Indikator dann, wenn der erste Block ein zurückgewonnener Block ist, ferner so beschaffen ist, dass er angibt, dass die Daten unter Verwendung des zweiten Fehlerdetektionsalgorithmus codiert worden sind.
  7. Verfahren nach Anspruch 4, ferner dadurch gekennzeichnet, dass der Indikator einen Zählstand enthält, der der Anzahl entspricht, in der der Block gelöscht worden ist; wobei das Kriterium den Indikator, der einen Zählstand besitzt, der kleiner als ein Schwellenwert ist, umfasst.
  8. Verfahren nach Anspruch 2 oder Anspruch 7, bei dem der Indikator ferner einen Wert umfasst, der der durchschnittlichen Anzahl entspricht, in der physikalische Blöcke des nichtflüchtigen Speichers gelöscht worden sind.
  9. Verfahren nach Anspruch 1 oder Anspruch 4, bei dem der Indikator in einer von dem ersten Block getrennten Datenstruktur gespeichert wird und bei dem das Erhalten des dem Block zugeordneten Indikators das Erhalten des Indikators aus der Datenstruktur umfasst.
  10. Verfahren nach Anspruch 1 oder Anspruch 4, bei dem der nichtflüchtige Speicher ein Flash-Speicher ist.
  11. Verfahren nach Anspruch 1 oder Anspruch 4, bei dem der nichtflüchtige Speicher entweder ein NAND-Flash-Speicher oder ein MLC-NAND-Flash-Speicher ist.
  12. Verfahren nach Anspruch 1 oder Anspruch 4, bei dem sowohl der erste als auch der zweite Fehlerdetektionsalgorithmus einen Fehlerdetektions- und einen Fehlerkorrekturalgorithmus enthält.
  13. Speichersystem (128; 700), das umfasst: einen nichtflüchtigen Speicher (124; 174), der einen ersten Block enthält, in dem Daten gespeichert werden sollen; und Mittel, die den genannten Block identifizieren; wobei das Speichersystem gekennzeichnet ist durch: Mittel (724), die einen dem ersten Block zugeordneten Indikator enthalten, wobei der Indikator einen Wert hat, der die Zuverlässigkeit des ersten Blocks angibt; Mittel, die in Reaktion darauf, dass der dem ersten Block zugeordnete Indikator ein Kriterium erfüllt, die zu speichernden Daten unter Verwendung eines ersten Fehlerdetektionsalgorithmus codieren; Mittel, die in Reaktion darauf, dass der Indikator das Kriterium nicht erfüllt, die zu speichernden Daten unter Verwendung eines zweiten Fehlerdetektionsalgorithmus, wobei der zweite Fehlerdetektionsalgorithmus eine höhere Fehlerdetektionsfähigkeit als der erste Fehlerdetektionsalgorithmus besitzt, codieren; und Mittel, die die codierten Daten in den ersten Block schreiben.
  14. Speichersystem nach Anspruch 13, bei dem die Identifizierungsmittel, die Erhaltungsmittel, die Codierungsmittel und die Schreibmittel jeweils Codevorrichtungen sind, wobei der nichtflüchtige Speicher ferner mehrere Blöcke einschließlich des ersten Blocks enthält; und ferner gekennzeichnet durch: einen Speicherbereich, der die Codevorrichtungen speichert.
  15. Speichersystem nach Anspruch 13, bei dem der Indikator einen Zählstand enthält, der einer Anzahl entspricht, in der der Block gelöscht worden ist; und wobei das Kriterium den Indikator, der einen Zählstand besitzt, der kleiner als ein Schwellenwert ist, umfasst.
  16. Speichersystem nach Anspruch 13 oder Anspruch 15, bei dem der Indikator angibt, ob der Block ein zurückgewonnener Block ist, wobei das Kriterium den Indikator, der angibt, dass der Block kein zurückgewonnener Block ist, umfasst.
  17. Speichersystem nach Anspruch 15, das umfasst: Codevorrichtungen, um zu bestimmen, ob der Indikator einen Zählstand besitzt, der kleiner als der Schwellenwert ist.
  18. Speichersystem nach Anspruch 13, bei dem der nichtflüchtige Speicher mehrere Blöcke enthält, wobei die Blöcke den ersten Block und einen zweiten Block umfassen, wobei der erste Block eine erste Menge von Inhalten enthält, die unter Verwendung des ersten Fehlerdetektionsalgorithmus codiert worden sind, und der zweite Block eine zweite Menge von Inhalten enthält, die unter Verwendung des zweiten Fehlerdetektionsalgorithmus codiert worden sind, wobei der nichtflüchtige Speicher ferner eine Datenstruktur enthält, die so beschaffen ist, dass sie angibt, dass die erste Menge von Inhalten unter Verwendung des ersten Fehlerdetektionsalgorithmus codiert worden ist und dass die zweite Menge von Inhalten unter Verwendung des zweiten Fehlerdetektionsalgorithmus codiert worden ist; und wobei das System ferner umfasst: Codevorrichtungen, um auf die Datenstruktur zuzugreifen, wobei die Codevorrichtungen zum Zugreifen auf die Datenstruktur Codevorrichtungen, die bestimmen, dass die erste Menge von Inhalten unter Verwendung des ersten Fehlerdetektionsalgorithmus codiert worden ist, sowie Codevorrichtungen, die bestimmen, dass die zweite Menge von Inhalten unter Verwendung des zweiten Fehlerdetektionsalgorithmus codiert worden ist, umfassen; und einen Speicherbereich, der die Codevorrichtungen speichert.
  19. Speichersystem nach Anspruch 13, das umfasst: Mittel, die den dem ersten Block zugeordneten Indikator erhalten; Mittel, die in Reaktion auf die Tatsache, dass der Indikator das Kriterium erfüllt, die Daten von dem ersten Block unter Verwendung des ersten Fehlerdetektionsalgorithmus decodieren; und Mittel, die in Reaktion auf die Tatsache, dass der Indikator das Kriterium nicht erfüllt, die Daten von dem ersten Block unter Verwendung des zweiten Fehlerdetektionsalgorithmus decodieren.
  20. Speichersystem nach Anspruch 19, das umfasst: den nichtflüchtigen Speicher, der mehrere Blöcke enthält, wobei die mehreren Blöcke den ersten Block enthalten, wobei der erste Block Daten enthält; wobei die Erhaltungsmittel und die Decodierungsmittel Codevorrichtungen sind; und das System ferner einen Speicherbereich aufweist, der die Codevorrichtungen speichert.
  21. Speichersystem nach Anspruch 19 oder Anspruch 20, bei dem der Indikator angibt, ob der Block ein zurückgewonnener Block ist; wobei das Kriterium den Indikator, der angibt, dass der Block kein zurückgewonnener Block ist, umfasst.
  22. Speichersystem nach Anspruch 19, bei dem der Indikator einen Zählstand enthält, der einer Anzahl entspricht, in der der Block gelöscht worden ist, wobei das Kriterium den Indikator, der einen Zählstand besitzt, der kleiner als ein Schwellenwert ist, umfasst.
  23. Speichersystem nach Anspruch 22, das umfasst: Codevorrichtungen, um zu bestimmen, ob der Indikator einen Zählstand besitzt, der kleiner als der Schwellenwert ist.
  24. Speichersystem nach Anspruch 13 oder Anspruch 19, bei dem der erste Fehlerdetektionsalgorithmus ein 1-Bit-ECC-Algorithmus ist und der zweite Fehlerdetektionsalgorithmus ein 2-Bit-ECC-Algorithmus ist.
  25. Speichersystem nach Anspruch 13 oder Anspruch 19, bei dem der nichtflüchtige Speicher entweder ein NAND-Flash-Speicher oder ein MLC-NAND-Flash-Speicher ist.
DE60303895T 2002-10-28 2003-10-28 Hybridimplementierung von Fehlerkorrekturkoden eines nichtflüchtigen Speichersystems Expired - Lifetime DE60303895T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US42191102P 2002-10-28 2002-10-28
US421911P 2002-10-28

Publications (2)

Publication Number Publication Date
DE60303895D1 DE60303895D1 (de) 2006-05-04
DE60303895T2 true DE60303895T2 (de) 2006-10-05

Family

ID=32825088

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60303895T Expired - Lifetime DE60303895T2 (de) 2002-10-28 2003-10-28 Hybridimplementierung von Fehlerkorrekturkoden eines nichtflüchtigen Speichersystems

Country Status (7)

Country Link
US (1) US8412879B2 (de)
EP (1) EP1424631B1 (de)
JP (1) JP4429685B2 (de)
KR (1) KR101017443B1 (de)
CN (1) CN1499532B (de)
AT (1) ATE320041T1 (de)
DE (1) DE60303895T2 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102013111549B4 (de) 2012-10-23 2024-04-18 Samsung Electronics Co., Ltd. Kodierung von Programmdaten basierend auf in zu programmierenden Speicherzellen gespeicherten Daten

Families Citing this family (140)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040083334A1 (en) * 2002-10-28 2004-04-29 Sandisk Corporation Method and apparatus for managing the integrity of data in non-volatile memory system
US7559004B1 (en) 2003-10-01 2009-07-07 Sandisk Corporation Dynamic redundant area configuration in a non-volatile memory system
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
KR20070007265A (ko) * 2003-12-30 2007-01-15 쌘디스크 코포레이션 제어 데이터 관리를 구비한 비휘발성 메모리 및 방법
US7383375B2 (en) 2003-12-30 2008-06-03 Sandisk Corporation Data run programming
US7433993B2 (en) 2003-12-30 2008-10-07 San Disk Corportion Adaptive metablocks
JP4182928B2 (ja) * 2004-07-07 2008-11-19 セイコーエプソン株式会社 情報処理装置、メモリ管理プログラムおよびメモリ管理方法
EP1776699A1 (de) * 2004-08-02 2007-04-25 Koninklijke Philips Electronics N.V. Datenspeicher und wiedergabegerät
US8341371B2 (en) * 2005-01-31 2012-12-25 Sandisk Il Ltd Method of managing copy operations in flash memories
GB2428496A (en) 2005-07-15 2007-01-31 Global Silicon Ltd Error correction for 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
CN101405811B (zh) * 2006-01-20 2012-01-04 马维尔国际贸易有限公司 具有编码和信号处理的闪存
US8239735B2 (en) * 2006-05-12 2012-08-07 Apple Inc. Memory Device with adaptive capacity
WO2007132452A2 (en) * 2006-05-12 2007-11-22 Anobit Technologies Reducing programming error in memory devices
KR101202537B1 (ko) * 2006-05-12 2012-11-19 애플 인크. 메모리 디바이스를 위한 결합된 왜곡 추정 및 에러 보정 코딩
KR101375955B1 (ko) 2006-05-12 2014-03-18 애플 인크. 메모리 디바이스 내의 왜곡 추정 및 상쇄
JP2007305267A (ja) * 2006-05-15 2007-11-22 Toshiba Corp 半導体記憶装置
US7971071B2 (en) * 2006-05-24 2011-06-28 Walkoe Wilbur J Integrated delivery and protection device for digital objects
JP4842719B2 (ja) * 2006-06-28 2011-12-21 株式会社日立製作所 ストレージシステム及びそのデータ保護方法
US7533328B2 (en) * 2006-07-04 2009-05-12 Sandisk Il, Ltd. Method of error correction in a multi-bit-per-cell flash memory
WO2008026203A2 (en) 2006-08-27 2008-03-06 Anobit Technologies Estimation of non-linear distortion in memory devices
CN101601094B (zh) 2006-10-30 2013-03-27 苹果公司 使用多个门限读取存储单元的方法
US7975192B2 (en) 2006-10-30 2011-07-05 Anobit Technologies Ltd. Reading memory cells using multiple thresholds
US7545681B2 (en) * 2006-11-27 2009-06-09 Sandisk Corporation Segmented bitscan for verification of programming
US7440319B2 (en) * 2006-11-27 2008-10-21 Sandisk Corporation Apparatus with segmented bitscan for verification of programming
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
US20080140918A1 (en) * 2006-12-11 2008-06-12 Pantas Sutardja Hybrid non-volatile solid state memory system
US9153337B2 (en) 2006-12-11 2015-10-06 Marvell World Trade Ltd. Fatigue management system and method for hybrid nonvolatile solid state memory system
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
KR100842680B1 (ko) 2007-01-08 2008-07-01 삼성전자주식회사 플래시 메모리 장치의 오류 정정 컨트롤러 및 그것을포함하는 메모리 시스템
US7751240B2 (en) 2007-01-24 2010-07-06 Anobit Technologies Ltd. Memory device with negative thresholds
US8151166B2 (en) 2007-01-24 2012-04-03 Anobit Technologies Ltd. Reduction of back pattern dependency effects in memory devices
JP4925301B2 (ja) * 2007-02-07 2012-04-25 株式会社メガチップス 半導体メモリシステム
US8369141B2 (en) * 2007-03-12 2013-02-05 Apple Inc. Adaptive estimation of memory cell read thresholds
US8001320B2 (en) * 2007-04-22 2011-08-16 Anobit Technologies Ltd. Command interface for memory devices
US8234545B2 (en) * 2007-05-12 2012-07-31 Apple Inc. Data storage with incremental redundancy
US8429493B2 (en) 2007-05-12 2013-04-23 Apple Inc. Memory device with internal signap processing unit
US8874831B2 (en) * 2007-06-01 2014-10-28 Netlist, Inc. Flash-DRAM hybrid memory module
US8904098B2 (en) 2007-06-01 2014-12-02 Netlist, Inc. Redundant backup using non-volatile memory
US8301833B1 (en) 2007-06-01 2012-10-30 Netlist, Inc. Non-volatile memory module
US7747903B2 (en) * 2007-07-09 2010-06-29 Micron Technology, Inc. Error correction for memory
US7925936B1 (en) 2007-07-13 2011-04-12 Anobit Technologies Ltd. Memory device with non-uniform programming levels
US8259497B2 (en) 2007-08-06 2012-09-04 Apple Inc. Programming schemes for multi-level analog memory cells
KR101397549B1 (ko) * 2007-08-16 2014-05-26 삼성전자주식회사 고속 프로그램이 가능한 불휘발성 반도체 메모리 시스템 및그것의 독출 방법
KR101413736B1 (ko) 2007-09-13 2014-07-02 삼성전자주식회사 향상된 신뢰성을 갖는 메모리 시스템 및 그것의웨어-레벨링 기법
US8174905B2 (en) * 2007-09-19 2012-05-08 Anobit Technologies Ltd. Programming orders for reducing distortion in arrays of multi-level analog memory cells
US7773413B2 (en) 2007-10-08 2010-08-10 Anobit Technologies Ltd. Reliable data storage in analog memory cells in the presence of temperature variations
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
US8068360B2 (en) * 2007-10-19 2011-11-29 Anobit Technologies Ltd. Reading analog memory cells using built-in multi-threshold commands
US20090125790A1 (en) * 2007-11-13 2009-05-14 Mcm Portfolio Llc Method and Apparatus of Automatically Selecting Error Correction Algorithms by a NAND Flash Controller
WO2009063450A2 (en) * 2007-11-13 2009-05-22 Anobit Technologies Optimized selection of memory units in multi-unit memory devices
US8225181B2 (en) 2007-11-30 2012-07-17 Apple Inc. Efficient re-read operations from memory devices
US8209588B2 (en) * 2007-12-12 2012-06-26 Anobit Technologies Ltd. Efficient interference cancellation in analog memory cell arrays
US8456905B2 (en) 2007-12-16 2013-06-04 Apple Inc. Efficient data storage in multi-plane memory devices
US8085586B2 (en) * 2007-12-27 2011-12-27 Anobit Technologies Ltd. Wear level estimation in analog memory cells
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
JP2008217811A (ja) * 2008-04-03 2008-09-18 Hitachi Ltd 不揮発メモリを使用したディスク制御装置
US20090287969A1 (en) * 2008-05-13 2009-11-19 Bpm Microsystems Electronic apparatus and bit error rate tolerance method for programming non-volatile memory devices
ATE539403T1 (de) * 2008-06-24 2012-01-15 Sandisk Il Ltd Verfahren und vorrichtung zur fehlerkorrektur nach der löschanzahl eines festkörperspeichers
US8498151B1 (en) 2008-08-05 2013-07-30 Apple Inc. Data storage in analog memory cells using modified pass voltages
US7924613B1 (en) 2008-08-05 2011-04-12 Anobit Technologies Ltd. Data storage in analog memory cells with protection against programming interruption
US8213229B2 (en) * 2008-08-22 2012-07-03 HGST Netherlands, B.V. Error control in a flash memory device
US8949684B1 (en) 2008-09-02 2015-02-03 Apple Inc. Segmented data storage
US8169825B1 (en) 2008-09-02 2012-05-01 Anobit Technologies Ltd. Reliable data storage in analog memory cells subjected to long retention periods
US8482978B1 (en) 2008-09-14 2013-07-09 Apple Inc. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8000135B1 (en) 2008-09-14 2011-08-16 Anobit Technologies Ltd. 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
US8713330B1 (en) 2008-10-30 2014-04-29 Apple Inc. Data scrambling in memory devices
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
US8248831B2 (en) * 2008-12-31 2012-08-21 Apple Inc. Rejuvenation of analog memory cells
US8174857B1 (en) 2008-12-31 2012-05-08 Anobit Technologies Ltd. Efficient readout schemes for analog memory cell devices using multiple read threshold sets
US8924661B1 (en) 2009-01-18 2014-12-30 Apple Inc. Memory system including a controller and processors associated with memory devices
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
US8238157B1 (en) 2009-04-12 2012-08-07 Apple Inc. Selective re-programming of analog memory cells
US20130047056A1 (en) * 2009-05-05 2013-02-21 Lite-On It Corporation Flash memory device with rectifiable redundancy and method of controlling the same
CN101794623B (zh) * 2009-06-01 2013-11-06 深圳市朗科科技股份有限公司 存储设备的纠错装置及方法
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US8495465B1 (en) 2009-10-15 2013-07-23 Apple Inc. Error correction coding over multiple memory pages
US8566689B2 (en) * 2009-10-22 2013-10-22 Microsoft Corporation Data integrity units in nonvolatile memory
US8301987B2 (en) * 2009-10-29 2012-10-30 Sandisk Il Ltd. System and method of decoding data with reduced power consumption
US8677054B1 (en) 2009-12-16 2014-03-18 Apple Inc. Memory management schemes for non-volatile memory devices
TWI497293B (zh) * 2009-12-17 2015-08-21 Ibm 固態儲存裝置內之資料管理
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
JP5467270B2 (ja) * 2010-04-28 2014-04-09 国立大学法人 東京大学 データ入出力制御装置および半導体記憶装置システム
US8694853B1 (en) 2010-05-04 2014-04-08 Apple Inc. Read commands for reading interfering memory cells
US8799747B2 (en) 2010-06-03 2014-08-05 Seagate Technology Llc Data hardening to compensate for loss of data retention characteristics in a non-volatile memory
FR2961613B1 (fr) * 2010-06-18 2012-07-27 Commissariat Energie Atomique Procede de protection memoire configurable contre les erreurs permanentes et transitoires et dispositif apparente
US8572423B1 (en) 2010-06-22 2013-10-29 Apple Inc. Reducing peak current in memory systems
US8533550B2 (en) * 2010-06-29 2013-09-10 Intel Corporation Method and system to improve the performance and/or reliability of a solid-state drive
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
US9146875B1 (en) * 2010-08-09 2015-09-29 Western Digital Technologies, Inc. Hybrid drive converting non-volatile semiconductor memory to read only based on life remaining
US9070427B2 (en) 2010-08-13 2015-06-30 Sandisk Technologies Inc. Data coding using divisions of memory cell states
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US9021181B1 (en) 2010-09-27 2015-04-28 Apple Inc. Memory management for unifying memory cell conditions by using maximum time intervals
WO2012058328A1 (en) * 2010-10-27 2012-05-03 Sandforce, Inc. Adaptive ecc techniques for flash memory based data storage
CN103221928B (zh) 2010-10-29 2016-01-20 英派尔科技开发有限公司 用于固态驱动器的擦除次数减少的高级数据编码
JP5720210B2 (ja) * 2010-12-02 2015-05-20 富士通株式会社 アクセス制御装置、誤り訂正制御方法およびストレージ装置
KR20120064462A (ko) 2010-12-09 2012-06-19 삼성전자주식회사 메모리 컨트롤러, 이의 오류정정 방법, 및 이를 포함하는 메모리 시스템
CN102142282B (zh) * 2011-02-21 2012-10-24 北京理工大学 一种NANDFlash存储芯片ECC校验算法的识别方法
US8661221B2 (en) * 2011-03-16 2014-02-25 International Business Machines Corporation Leasing fragmented storage between processes
US10838646B2 (en) 2011-07-28 2020-11-17 Netlist, Inc. Method and apparatus for presearching stored data
US10198350B2 (en) 2011-07-28 2019-02-05 Netlist, Inc. Memory module having volatile and non-volatile memory subsystems and method of operation
US10380022B2 (en) 2011-07-28 2019-08-13 Netlist, Inc. Hybrid memory module and system and method of operating the same
US8910017B2 (en) 2012-07-02 2014-12-09 Sandisk Technologies Inc. Flash memory with random partition
US8996951B2 (en) 2012-11-15 2015-03-31 Elwha, Llc Error correction with non-volatile memory on an integrated circuit
CN103077096A (zh) * 2012-12-31 2013-05-01 记忆科技(深圳)有限公司 数据纠错系统、固态硬盘及数据纠错方法
WO2014109756A1 (en) 2013-01-11 2014-07-17 Empire Technology Development Llc Page allocation for flash memories
WO2014133490A1 (en) 2013-02-27 2014-09-04 Empire Technology Development Llc Linear programming based decoding for memory devices
US10372551B2 (en) 2013-03-15 2019-08-06 Netlist, Inc. Hybrid memory system with configurable error thresholds and failure analysis capability
US9436600B2 (en) 2013-06-11 2016-09-06 Svic No. 28 New Technology Business Investment L.L.P. Non-volatile memory storage for multi-channel memory system
CN104111893A (zh) * 2013-06-21 2014-10-22 芜湖美的厨卫电器制造有限公司 数据的存储方法
US10248328B2 (en) 2013-11-07 2019-04-02 Netlist, Inc. Direct data move between DRAM and storage on a memory module
JP5733766B2 (ja) * 2013-11-07 2015-06-10 国立大学法人 東京大学 データ入出力制御装置および半導体記憶装置システム
US9859925B2 (en) 2013-12-13 2018-01-02 Empire Technology Development Llc Low-complexity flash memory data-encoding techniques using simplified belief propagation
US10114562B2 (en) 2014-09-16 2018-10-30 Sandisk Technologies Llc Adaptive block allocation in nonvolatile memory
US10691531B2 (en) * 2014-12-04 2020-06-23 Western Digital Technologies, Inc. Systems and methods for multi-zone data tiering for endurance extension in solid state drives
CN105988887A (zh) * 2015-01-31 2016-10-05 深圳市硅格半导体有限公司 存储卡数据处理系统及方法
JP6657634B2 (ja) * 2015-07-24 2020-03-04 ソニー株式会社 符号化装置、メモリシステム、通信システムおよび符号化方法
US9401216B1 (en) * 2015-09-22 2016-07-26 Sandisk Technologies Llc Adaptive operation of 3D NAND memory
US9817593B1 (en) 2016-07-11 2017-11-14 Sandisk Technologies Llc Block management in non-volatile memory system with non-blocking control sync system
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
US11762735B2 (en) 2021-10-01 2023-09-19 Western Digital Technologies, Inc. Interleaved ECC coding for key-value data storage devices
US11934264B2 (en) 2021-11-22 2024-03-19 Western Digital Technologies, Inc. ECC parity biasing for Key-Value data storage devices
CN117762819A (zh) * 2022-09-19 2024-03-26 慧荣科技股份有限公司 存取快闪存储器模块的方法与相关的快闪存储器控制器及记忆装置

Family Cites Families (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4785452A (en) 1986-04-25 1988-11-15 International Business Machines Corporation Error detection using variable field parity checking
JPH07109717B2 (ja) 1986-05-31 1995-11-22 キヤノン株式会社 メモリ書き込み制御方法
JP2685173B2 (ja) 1986-05-31 1997-12-03 キヤノン株式会社 メモリ書き込み制御方法
US5268870A (en) 1988-06-08 1993-12-07 Eliyahou Harari Flash EEPROM system and intelligent programming and erasing methods therefor
US5228046A (en) * 1989-03-10 1993-07-13 International Business Machines Fault tolerant computer memory systems and components employing dual level error correction and detection with disablement feature
EP0617363B1 (de) 1989-04-13 2000-01-26 SanDisk Corporation Austausch von fehlerhaften Speicherzellen einer EEprommatritze
US5222109A (en) 1990-12-28 1993-06-22 Ibm Corporation Endurance management for solid state files
US5438573A (en) 1991-09-13 1995-08-01 Sundisk Corporation Flash EEPROM array data and header file structure
US6230233B1 (en) 1991-09-13 2001-05-08 Sandisk Corporation Wear leveling techniques for flash EEPROM systems
JPH06187248A (ja) 1992-12-16 1994-07-08 Nec Corp データエラー検出訂正制御回路
JP2856621B2 (ja) 1993-02-24 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリおよびそれを用いる半導体ディスク装置
US5388083A (en) 1993-03-26 1995-02-07 Cirrus Logic, Inc. Flash memory mass storage architecture
US5603001A (en) * 1994-05-09 1997-02-11 Kabushiki Kaisha Toshiba Semiconductor disk system having a plurality of flash memories
US5845313A (en) 1995-07-31 1998-12-01 Lexar Direct logical block addressing flash memory mass storage architecture
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
US5838614A (en) * 1995-07-31 1998-11-17 Lexar Microsystems, Inc. Identification and verification of a sector within a block of mass storage flash memory
US5835935A (en) 1995-09-13 1998-11-10 Lexar Media, Inc. Method of and architecture for controlling system data with automatic wear leveling in a semiconductor non-volatile mass storage memory
US6125435A (en) 1995-09-13 2000-09-26 Lexar Media, Inc. Alignment of cluster address to block addresses within a semiconductor non-volatile mass storage memory
US5860082A (en) 1996-03-28 1999-01-12 Datalight, Inc. Method and apparatus for allocating storage in a flash memory
US5754565A (en) * 1996-10-15 1998-05-19 Quantum Corporation Reconstruction of syndromes for bi-level on-the-fly error correction in disk drive systems
US5905858A (en) 1996-11-01 1999-05-18 Micron Electronics, Inc. System for method memory error handling
US6311290B1 (en) * 1997-02-14 2001-10-30 Intel Corporation Methods of reliably allocating, de-allocating, re-allocating, and reclaiming objects in a symmetrically blocked nonvolatile memory having a bifurcated storage architecture
US5961660A (en) 1997-03-03 1999-10-05 International Business Machines Corporation Method and apparatus for optimizing ECC memory performance
US6000006A (en) * 1997-08-25 1999-12-07 Bit Microsystems, Inc. Unified re-map and cache-index table with dual write-counters for wear-leveling of non-volatile flash RAM mass storage
US5956743A (en) * 1997-08-25 1999-09-21 Bit Microsystems, Inc. Transparent management at host interface of flash-memory overhead-bytes using flash-specific DMA having programmable processor-interrupt of high-level operations
JPH1173797A (ja) 1997-08-27 1999-03-16 Sony Corp 記憶装置
JP3998307B2 (ja) * 1997-12-25 2007-10-24 富士通株式会社 磁気ディスク装置及び磁気ディスク装置のエラー訂正方法
US6182239B1 (en) * 1998-02-06 2001-01-30 Stmicroelectronics, Inc. Fault-tolerant codes for multi-level memories
KR100297986B1 (ko) 1998-03-13 2001-10-25 김영환 플래쉬 메모리 셀 어레이의 웨어 레벨링 시스템 및 웨어 레벨링 방법
JP3421581B2 (ja) 1998-06-29 2003-06-30 株式会社日立製作所 不揮発性半導体メモリを用いた記憶装置
US6260156B1 (en) 1998-12-04 2001-07-10 Datalight, Inc. Method and system for managing bad areas in flash memory
US6041001A (en) * 1999-02-25 2000-03-21 Lexar Media, Inc. Method of increasing data reliability of a flash memory device without compromising compatibility
JP3937214B2 (ja) 1999-09-17 2007-06-27 株式会社ルネサステクノロジ エラー訂正回数を記録する記憶装置
US6487685B1 (en) * 1999-09-30 2002-11-26 Silicon Graphics, Inc. System and method for minimizing error correction code bits in variable sized data formats
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
US6747827B1 (en) * 2000-03-27 2004-06-08 Texas Instruments Incorporated Error correction codes applied variably by disk zone, track, sector, or content
US20010042230A1 (en) * 2000-05-10 2001-11-15 Seagate Technology Llc Sector validation for use in ECC engine validation
US6941505B2 (en) * 2000-09-12 2005-09-06 Hitachi, Ltd. Data processing system and data processing method
JP2002091831A (ja) 2000-09-12 2002-03-29 Hitachi Ltd データ処理システム及びデータ処理方法
US7113432B2 (en) * 2000-09-14 2006-09-26 Sandisk Corporation Compressed event counting technique and application to a flash memory system
US6834331B1 (en) * 2000-10-24 2004-12-21 Starfish Software, Inc. System and method for improving flash memory data integrity
US6970890B1 (en) * 2000-12-20 2005-11-29 Bitmicro Networks, Inc. Method and apparatus for data recovery
US6961890B2 (en) * 2001-08-16 2005-11-01 Hewlett-Packard Development Company, L.P. Dynamic variable-length error correction code

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102013111549B4 (de) 2012-10-23 2024-04-18 Samsung Electronics Co., Ltd. Kodierung von Programmdaten basierend auf in zu programmierenden Speicherzellen gespeicherten Daten

Also Published As

Publication number Publication date
JP2004164634A (ja) 2004-06-10
ATE320041T1 (de) 2006-03-15
US8412879B2 (en) 2013-04-02
EP1424631A1 (de) 2004-06-02
CN1499532A (zh) 2004-05-26
JP4429685B2 (ja) 2010-03-10
CN1499532B (zh) 2011-05-18
KR101017443B1 (ko) 2011-02-25
EP1424631B1 (de) 2006-03-08
DE60303895D1 (de) 2006-05-04
US20040083333A1 (en) 2004-04-29
KR20040038711A (ko) 2004-05-08

Similar Documents

Publication Publication Date Title
DE60303895T2 (de) Hybridimplementierung von Fehlerkorrekturkoden eines nichtflüchtigen Speichersystems
DE602004011097T2 (de) Flash-speicherdatenkorrektur- und scrub-techniken
DE112014004778B4 (de) Vorrichtung und Verfahren zum Verwalten von Chipgruppen
DE69034227T2 (de) EEprom-System mit Blocklöschung
DE112014004761B4 (de) Beeinflussung des Wear-Leveling in Speichersystemen
DE60319407T2 (de) Verfolgen der am häufigsten gelöschten blöcke eines nichtflüchtigen speichersystems
DE112011103295B4 (de) Decodieren in Solid-State-Speichereinheiten
DE112010003887B4 (de) Datenverwaltung in Halbleiter-Speichereinheiten
DE60317551T2 (de) Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem
DE112011100371B4 (de) Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts
DE112014001305B4 (de) Auswahl einer redundanten Datenspeicherkonfiguration auf der Grundlage verfügbaren Speicherplatzes
DE102020107659A1 (de) Zonenbildung für gezonte namensräume
DE102018105854A1 (de) Dynamische Größenanpassung logischer Speicherblöcke
DE102020112512A1 (de) Datenspeichergerät und Betriebsverfahren dafür
DE102019123709A1 (de) Verwendung verschachtelter schreibvorgänge zur trennung von die-ebenen
DE112014005346T5 (de) Temperaturbasierte Flashspeichersystemerhaltung
DE112015000378T5 (de) Selektives Rückkopieren für einen auf einem Chipplättchen gepufferten nichtflüchtigen Speicher
DE112008001151B4 (de) Mehrbitprogrammiervorrichtung und Verfahren zum Mehrbitprogrammieren
DE112020006139T5 (de) Vor-lese-und lese-schwellenspannungsoptimierung
DE102007016460A1 (de) Nichtflüchtiges Speicherbauelement, nichtflüchtiges Speichersystem und Leseverfahren für ein nichtflüchtiges Speicherbauelement
DE102012112354A1 (de) Speichervorrichtung und nichtflüchtige Speichervorrichtung sowie Betriebsverfahren davon
DE112020002792B4 (de) Verschleissorientierte blockmodusumwandlung in nichtflüchtigen speichern
DE102019125060A1 (de) Datenspeichersysteme und verfahren zum autonomen anpassen der leistung, kapazität und/oder der betriebsanforderungen eines datenspeichersystems
DE69820164T2 (de) Speichervorrichtung sowie Datenlese- und Schreibverfahren
DE102016010277A1 (de) Verfahren und systeme zum verbessern von speicher-journaling

Legal Events

Date Code Title Description
8363 Opposition against the patent
R082 Change of representative

Ref document number: 1424631

Country of ref document: EP

Representative=s name: SCHWABE SANDMAIR MARX, DE