DE60319437T2 - Nichtflüchtiger halbleiterspeicher mit zykluszählwerte speichernden grossen löschblöcken - Google Patents

Nichtflüchtiger halbleiterspeicher mit zykluszählwerte speichernden grossen löschblöcken Download PDF

Info

Publication number
DE60319437T2
DE60319437T2 DE60319437T DE60319437T DE60319437T2 DE 60319437 T2 DE60319437 T2 DE 60319437T2 DE 60319437 T DE60319437 T DE 60319437T DE 60319437 T DE60319437 T DE 60319437T DE 60319437 T2 DE60319437 T2 DE 60319437T2
Authority
DE
Germany
Prior art keywords
data
memory
overhead data
blocks
programming
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
DE60319437T
Other languages
English (en)
Other versions
DE60319437D1 (de
Inventor
Jian San Jose CHEN
Tomoharu Minato-ku Tanaka
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.)
Toshiba Corp
SanDisk Corp
Original Assignee
Toshiba Corp
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
Application filed by Toshiba Corp, SanDisk Corp filed Critical Toshiba Corp
Application granted granted Critical
Publication of DE60319437D1 publication Critical patent/DE60319437D1/de
Publication of DE60319437T2 publication Critical patent/DE60319437T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • G11C11/5635Erasing circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3418Disturbance prevention or evaluation; Refreshing of disturbed memory data
    • G11C16/3427Circuits or methods to prevent or reduce disturbance of the state of a memory cell when neighbouring cells are read or written
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3436Arrangements for verifying correct programming or erasure
    • G11C16/3454Arrangements for verifying correct programming or for detecting overprogrammed cells
    • G11C16/3459Circuits or methods to verify correct programming of nonvolatile memory cells
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/564Miscellaneous aspects
    • G11C2211/5641Multilevel memory having cells with different number of storage levels
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/564Miscellaneous aspects
    • G11C2211/5646Multilevel memory with flag bits, e.g. for showing that a "first page" of a word line is programmed but not a "second page"

Description

  • Die vorliegende Erfindung betrifft allgemein nichtflüchtige Halbleiterspeicher sowie deren Funktionsweise und betrifft spezieller die Nutzung von Lösch/Schreib-Zykluszählwerten für Speicherzellenblöcke.
  • Heutzutage werden viele kommerziell erfolgreiche, nichtflüchtige Speicherprodukte genutzt, insbesondere in Form von Karten mit kleinem Formfaktor, bei denen ein Array aus Flash-EEPROM-(elektrisch löschbarer und programmierbarer Nur-Lese-Speicher)Zellen genutzt werden.
  • NOR-Array
  • Bei einem typischen NOR-Array sind Speicherzellen zwischen benachbarte Bitleitungs-Source- und Drain-Diffusionsgebiete geschaltet, die sich in Spaltenrichtung erstrecken, wobei Steuergates mit Wortleitungen verbunden sind, die sich entlang von Zellenzeilen erstrecken. Eine typische Speicherzelle weist einen "geteilten Kanal" zwischen Source- und Drain-Diffusionsgebieten auf. Ein Ladungsspeicherelement der Zelle ist über dem einen Abschnitt des Kanals angeordnet, und die Wortleitung (auch als Steuergate bezeichnet) ist über dem anderen Kanalabschnitt wie auch über dem Ladungsspeicherelement angeordnet. Damit wird effektiv eine Zelle mit zwei in Reihe geschalteten Transistoren gebildet, einem (dem Speichertransistor), bei dem die Ladungsmenge auf dem Ladungsspeicherelement in Kombination mit der Spannung an der Wortleitung die Stärke des Stroms steuert, der durch dessen Abschnitt des Kanals fließen kann, und dem anderen (dem Auswahltransistor), bei dem die Wortleitung allein als dessen Gate dient. Die Wortleitung erstreckt sich über eine Zeile von Ladungsspeicherelementen hin. Beispiele für solche Zellen, deren Nutzung in Speichersystemen sowie für Verfahren zur Herstellung derselben sind in den US-Patenten 5,070,032 ; 5,095,344 ; 5,315,541 ; 5,343,063 und 5,661,053 sowie in der gleichzeitig anhängigen US-Patentanmeldung 09/239,073 , eingereicht am 27. Januar 1999 (erteilt als US 6,281,075 ) angegeben.
  • Bei einer Modifikation dieser Flash-EEPROM-Zelle mit geteiltem Kanal ist ein Steuergate hinzugefügt, das zwischen dem Ladungsspeicherelement und der Wortleitung angeordnet ist. Jedes Steuergate eines Arrays erstreckt sich über eine Spalte von Ladungsspeicherelementen hin, senkrecht zu der Wortleitung. Der Effekt besteht darin, die Wortleitung davon zu entlasten, zwei Funktionen gleichzeitig ausführen zu müssen, wenn eine ausgewählte Zelle gelesen oder programmiert wird. Diese beiden Funktionen bestehen darin, (1) als ein Gate für einen Auswahltransistor zu dienen, sodass eine geeignete Spannung erforderlich ist, um den Auswahltransistor an- und abzuschalten, und (2) die Spannung des Ladungsspeicherelements auf einen gewünschten Pegel zu führen, und zwar über eine elektrische (kapazitive) Feldkopplung zwischen der Wortleitung und dem Ladungsspeicherelement. Es ist oft schwierig, diese beiden Funktionen in optimaler Weise mit einer einzigen Spannung auszuführen. Bei Hinzufügen des Steuergates braucht die Wortleitung nur die Funktion (1) auszuführen, während das ergänzte Steuergate die Funktion (2) ausführt. Die Nutzung von Steuergates in einem Flash-EEPROM-Array ist zum Beispiel in den US-Patenten 5,313,421 und 6,222,762 beschrieben.
  • Es gibt verschiedene Programmierverfahren zum Injizieren von Elektronen aus dem Substrat auf ein Floating-Gate-Speicherelement durch das Gate-Dielektrikum hindurch. Die üblichsten Programmiermechanismen sind in einem von Brown und Brewer herausgegeben Buch, "Nonvolatile Semiconductor Memory Technology" IEEE Press, Abs. 1.2, Seiten 9–25 (1998) beschrieben. Bei einem Verfahren, das als "Hot Electron Injection" oder Injektion heißer Elektronen bezeichnet wird (Abs. 1.2.3), werden Elektronen von dem Kanal der Zelle in einen Bereich des Floating Gate angrenzend an den Drain-Bereich der Zelle injiziert. Bei einem weiteren Verfahren, das als "Source Side Injection" oder sourceseitige Injektion bezeichnet wird (Abs. 1.2.4), wird das elektrische Potential der Substratoberfläche auf der Länge des Kanals der Speicherzelle in solcher Weise gesteuert, dass Bedingungen für eine Elektroneninjektion in einem von dem Drain-Bereich entfernten Bereich des Kanals erzeugt werden. Die sourceseitige Injektion ist auch in einem Artikel von Kamiya et al., "EPROM Cell with High Gate Injection Efficiency", IEDM Technical Digest, 1982, Seiten 741–744, und in den US-Patenten 4,622,656 und 5,313,421 beschrieben.
  • Zwei Verfahren zum Entfernen von Ladung von den Ladungsspeicherelementen zum Löschen von Speicherzellen werden in beiden der zuvor beschriebenen zwei Typen von NOR-Speicherzellenarrays genutzt. Das eine besteht darin, zu dem Substrat hin zu löschen, indem geeignete Spannungen an Source, Drain und ein anderes oder mehrere andere Gate(s) angelegt werden, welche bewirken, dass Elektronen durch einen Abschnitt einer dielektrischen Schicht zwischen dem Speicherelement und dem Substrat tunneln. Bei dem anderen Löschverfahren werden Elektronen von dem Speicherelement auf ein anderes Gate übertragen, durch eine dielektrische Tunnelschicht hindurch, die zwischen diesen angeordnet ist. Bei dem vorstehend beschriebenen ersten Typ von Zellen ist ein drittes Gate für diesen Zweck vorgesehen. Bei dem zuvor beschriebenen zweiten Typ von Zellen, der bereits drei Gates aufweist, wegen der Nutzung eines Steuergates, wird das Ladungsspeicherelement zu der Wortleitung hin gelöscht, ohne dass ein viertes Gate hinzugefügt zu werden braucht. Obwohl bei diesem zweiten Verfahren wieder eine zweite Funktion hinzukommt, die von der Wortleitung auszuführen ist, werden diese Funktionen zu unterschiedlichen Zeitpunkten ausgeführt, sodass die Notwendigkeit, wegen dieser beiden Funktionen einen Kompromiss einzugehen, vermieden wird. Wenn eines der Löschverfahren genutzt wird, wird eine große Anzahl von Speicherzellen zum gleichzeitigen, "blitzartigen" Löschen zusammengruppiert. Bei einem Ansatz umfasst die Gruppe genügend Speicherzellen, um die Menge an Benutzerdaten zu speichern, die in einem Plattensektor gespeichert sind, nämlich 512 Byte plus einige Overhead-Daten. Bei einem weiteren Ansatz enthält jede Gruppe genügend Zellen, um mehrere tausend Byte Benutzerdaten zu halten, die der Datenmenge vieler Plattensektoren entsprechen. Ein Löschvorgang für mehrere Blöcke, Defektbehandlung sowie weitere Merkmale eines Flash-EEPROM-Systems sind in US-Patent Nr. 5,297,148 beschrieben.
  • Wie bei fast allen Anwendungen integrierter Schaltungen besteht auch bei Flash-EEPROM-Systemen der Druck, die zum Implementieren einer gewissen integrierten Schaltungsfunktion erforderliche Siliciumsubstratfläche zu verkleinern. Es wird weiterhin gewünscht, die Menge an digitalen Daten, die in einem gegebenen Bereich eines Siliciumsubstrats gespeichert werden kann, zu erhöhen, um die Speicherkapazität einer Speicherkarte mit gegebener Größe und anderer Typen von Baugruppen zu erhöhen oder sowohl die Kapazität zu erhöhen als auch die Größe zu vermindern. Eine Möglichkeit zum Erhöhen der Speicherdichte der Daten besteht darin, mehr als ein Bit Daten pro Speicherzelle zu speichern. Dies wird erreicht, indem ein Fenster eines Ladungsmenge-Spannungsbereichs eines Speicherelements in mehr als zwei Zustände unterteilt wird. Die Nutzung von vier solchen Zuständen ermöglicht es, in jeder Zelle zwei Bits Daten zu speichern, bei acht Zuständen werden drei Bits Daten pro Zelle gespeichert, und so weiter. Eine Flash-EEPROM-Struktur mit mehreren Zuständen sowie deren Funktionsweise sind in den US-Patenten 5,043,940 und 5,172,338 beschrieben.
  • Ein anderer Typ von Speicherzelle umfasst zwei Speicherelemente, die ebenfalls mit mehreren Zuständen in jedem Speicherelement betrieben werden können. Bei diesem Typ von Zelle sind über derem Kanal zwischen Source- und Drain-Diffusionsgebieten zwei Speicherelemente vorhanden, mit einem Auswahltransistor zwischen diesen. Ein Steuergate ist entlang jeder Spalte von Speicherelementen integriert, und darüber ist entlang jeder Zeile von Speicherelementen eine Wortleitung angeordnet. Wenn auf ein gegebenes Speicherelement zugegriffen wird, zum Lesen oder zum Programmieren, wird das Steuergate über dem anderen Speicherelement der Zelle, die das interessierende Speicherelement enthält, auf ausreichend hohen Pegel gehoben, um den Kanal unter dem anderen Speicherelement einzuschalten, und zwar egal, welche Ladungsmenge auf diesem vorhanden ist. Damit wird effektiv das andere Speicherelement als Faktor beim Lesen oder Programmieren des interessierenden Speicherelements in derselben Speicherzelle ausgeschlossen. Beispielsweise ist dann die Stärke des durch die Zelle fließenden Stroms, die genutzt werden kann, um deren Zustand zu lesen, eine Funktion der Ladungsmenge auf dem interessierenden Speicherelement, aber nicht des anderen Speicherelement in derselben Zelle. Beispiele für diese Architektur eines Zellenarrays sowie für Betriebsverfahren sind in den US-Patenten 5,712,180 ; 6,103,573 und 6,151,248 beschrieben.
  • NAND-Array
  • Bei einer weiteren Flash-EEPROM-Architektur wird ein NAND-Array genutzt, bei welchem serielle Stränge aus mehr als zwei Speicherzellen, beispielsweise 16 oder 32, zusammen mit einem oder mehreren Auswahltransistoren zwischen einzelne Bitleitungen und ein Referenzpotential geschaltet sind, um Zellenspalten zu bilden. Wortleitungen erstrecken sich innerhalb einer großen Anzahl dieser Spalten quer zu den Zellen. Eine einzelne Zelle in einer Spalte wird gelesen und während der Programmierung verifiziert, indem bewirkt wird, dass die verbleibenden Zellen in dem Strang hart angeschaltet werden, sodass der Strom, der durch einen Strang fließt, von der Ladungsmenge abhängt, die in der adressierten Zelle gespeichert ist. Ein Beispiel für ein Array mit NAND-Architektur und dessen Betrieb als Teil eines Speichersystems findet sich in den US-Patenten Nr. 5,570,315 ; 5,774,397 und 6,046,935 .
  • Ladungsspeicherelemente
  • Die Ladungsspeicherelemente derzeitiger Flash-EEPROM-Arrays und wie sie in den vorstehend erwähnten Patenten und Artikeln diskutiert werden, sind meist elektrisch leitfähige Floating Gates, die typischerweise aus dotiertem Polysiliciummaterial ausgebildet sind. Bei einem anderen Typ von Speicherzelle, der in Flash-EEPROM-Systemen genutzt werden kann, wird ein nicht-leitfähiges dielektrisches Material anstelle eines leitfähigen Floating Gate genutzt, um Ladung in nichtflüchtiger Weise zu speichern. Eine solche Zelle ist in einem Artikel von Chan et al., "A True Single-Transistor Oxide-Nitride-Oxide EEPROM Device", IEEE Electron Device Letters, Bd. EDL-8, Nr. 3, März 1987, S. 93–95, beschrieben. Ein dreischichtiges Dielektrikum, das aus Siliciumoxid, Siliciumnitrid und Siliciumoxid ("ONO") ausgebildet ist, ist in Zwischenlage zwischen einem leitfähigen Steuergate und einer Oberfläche eines Halbleitersubstrats oberhalb des Kanals der Speicherzelle angeordnet. Die Zelle wird durch Injektion von Elektronen aus dem Zellenkanal in das Nitrid programmiert, wo diese eingefangen werden und in einem begrenzten Bereich gespeichert werden. Diese gespeicherte Ladung ändert dann die Schwellspannung eines Abschnitts des Kanals der Zelle in einer Weise, die feststellbar ist. Die Zelle wird durch Injektion von heißen Löchern in das Nitrid gelöscht. Man vergleiche auch Nozaki et al., "A 1-Mb EEPROM with MONDS Memory Cell for Semiconductor Disk Application", IEEE Journal of Solid-State Circuits, Bd. 26, Nr. 4, April 1991, S. 497–501, wo eine ähnliche Zelle mit einer Konfiguration mit geteiltem Gate beschrieben ist, bei der sich ein Gate aus dotiertem Polysilicium über einem Abschnitt des Speicherzellenkanals erstreckt, um einen separaten Auswahltransistor zu bilden.
  • US-Patent 5,851,881 beschreibt die Nutzung von zwei Speicherelementen, die benachbart zueinander über dem Kanal der Speicherzelle angeordnet sind, wobei das eine ein solches dielektrisches Gate darstellt und das andere ein leitfähiges Floating Gate darstellt. Es werden zwei Bits Daten gespeichert, ein Bit in dem dielektrischen Element und das andere in dem Floating Gate. Die Speicherzelle wird auf eine von vier unterschiedlichen Kombinationen von Schwellspannungspegeln programmiert, die einen von vier Speicherzuständen darstellt, indem jedes der beiden Gates in einen von zwei unterschiedlichen Ladungsmengebereichen programmiert wird.
  • Ein weiterer Ansatz zum Speichern von zwei Bits in jeder Zelle unter Nutzung eines dielektrischen Speicherelements wurde von Eitan et al. beschrieben, "NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device Letters, Bd. 21, Nr. 11, November 2000, S. 543–545. Eine dielektrische ONO-Schicht erstreckt sich über den Kanal zwischen Source- und Drain-Diffusionsgebieten hin. Die Ladung für ein Bit Daten wird in der dielektrischen Schicht angrenzend an den Drain-Bereich positioniert, und die Ladung für das andere Bit Daten wird in der dielektrischen Schicht angrenzend an den Source-Bereich positioniert. Eine Mehrzustands-Datenspeicherung wird durch separates Auslesen der Binärzustände der räumlich getrennten Ladungsspeicherbereiche in dem Dielektrikum erreicht.
  • Große Löschblöcke
  • Die Speicherzellen eines typischen Flash-EEPROM-Arrays sind in diskrete Zellenblöcke unterteilt, die zusammen gelöscht werden. Das bedeutet, der Block stellt die Löscheinheit dar. Jeder Block speichert typischerweise eine oder mehrere Speicherseiten an Daten, wobei die Speicherseite die Programmier- und Lese-Einheit darstellt, wenngleich bei einer einzigen Operation auch mehr als eine Speicherseite programmiert oder gelesen werden kann. Jede Speicherseite speichert typischerweise einen oder mehrere Sektoren an Daten, wobei die Größe des Sektors durch das Hostsystem definiert wird. Gemäß einer Norm, die für Magnetplattenlaufwerke etabliert ist, umfasst ein beispielhafter Sektor 512 Byte Benutzerdaten zuzüglich einer gewissen Anzahl von Bytes mit Verwaltungs-(Overhead-)Informationen zu den Benutzerdaten und/oder dem Block, in welchem diese gespeichert sind.
  • Block-Verlaufszählwerte
  • Die Anzahl der Lösch- und Neuprogrammierzyklen, die einzelne Blöcke aus Speicherzellen erleben, wird oft als Teil der optimierten Steuerung des Betriebs des Speichersystems protokolliert. Ein Grund dafür besteht darin, dass Flash-EEPROM-Zellen nur einer begrenzten Anzahl von Lösch/Schreib-Zyklen standhalten können. Das Leistungsverhalten und die Zuverlässigkeit verschlechtern sich üblicherweise mit steigender Anzahl solcher Zyklen, und der Grad einer solchen Verschlechterung, der toleriert werden kann, hängt von verschiedenen Betriebsparametern des Systems ab. Einige Speicherzellenblöcke durchlaufen im normalen Betrieb typischerweise mehr Zyklen als andere. Wenn der Zyklenzählwert für einen Block einen vorgegebenen Grenzwert für die erwartete Haltbarkeit erreicht, kann dieser Block für die Speicherabbildung aus dem System ausgeschlossen werden, zugunsten eines redundanten Blocks. Ein Beispiel dafür ist in US-Patent Nr. 5,268,870 beschrieben, in welchem der Verlaufszählwert für jeden Block als Teil der Overhead-Daten in dem Block gespeichert wird. US-Patent Nr. 6,426,893 beschreibt ein System, bei dem die Block-Verlaufszählwerte wie auch andere Overhead-Daten in Blöcken getrennt von denjenigen Blöcken, auf welche sie sich beziehen, gespeichert werden. Ferner kann der Verlaufszählwert genutzt werden, um die Nutzung (den Verschleiß) der Speicherzellenblöcke eines Systems auszugleichen. Die relativen Block-Verlaufszählwerte werden durch den System-Controller überwacht, und in Reaktion darauf, dass eine vorbestimmte Ungleichmäßigkeit in der Nutzung erkannt wird, wird die Umsetzung von logischen in physikalische Adressen der Blöcke geändert, um zukünftige hochvolumige Neuschreibvorgänge zu Blöcken mit niedrigeren Verlaufs-Zykluszählwerten zu lenken. Beispiele für solche Abnutzungsausgleichsverfahren sind in US-Patent Nr. 6,081,447 angegeben. Als Alternative zum Halten der Verlaufszählwerte in denjenigen Blöcken, auf welche sie sich beziehen, können diese in anderen Blöcken gespeichert werden, die für Overhead-Informationen der Blöcke vorgesehen sind. Ein Beispiel dafür ist in der US-Patentanmeldung 09/505,555, eingereicht am 17. Februar 2000 (erteilt als US 6,426,893 ) beschrieben. Zusätzlich zur Verwendung des Verlaufszählwertes zum Zwecke der Blocksubstitution kann der Zählwert von dem Controller auch genutzt werden, um Spannungen festzulegen, die während der Programmierung, des Lesens und/oder bei Löschoperationen genutzt werden, da die optimalen Spannungen sich mit zunehmender Nutzungsdauer oft erhöhen werden.
  • Die US 6 028 794 , über welche die unabhängigen Ansprüche charakterisiert sind, offenbart ein nichtflüchtiges Halbleiter-Speicherbauelement, bei welchem zwei Speicherzellen pro Block zum Halten eines Datensatzes für oder der Anzahl von in dem Block ausgeführten Löschoperationen reserviert sind.
  • Die US 6 230 233 offenbart ein EEPROM-Speichersystem, das Blöcke mit Speicherzellen umfasst, die zu Speicherbänken gruppiert sind. Das System überwacht die Nutzung der Speicherbänke und vertauscht unter Ansprechen auf das Feststellen einer ungleichmäßigen Nutzung die physikalischen Adressen der Speicherbank periodisch, um die Nutzung über die Standzeit des Speichers hin auszugleichen.
  • Die EP 0 589 597 offenbart einen nichtflüchtigen Flash-Speicher, bei welchem ein Zählwert für die Anzahl von Löschoperationen, die in jedem Block ausgeführt werden, unterhalten wird. Informationen werden in denjenigen Speicherblock geschrieben, der den kleinsten Lösch-Zählwert aufweist.
  • Die US 5 930 167 offenbart einen Flash-EEPROM, der ein Zellen-Array umfasst, in welchem einzelne Zellen mehr als ein Bit Daten speichern. Teile des Arrays, in welchem keine Daten gespeichert sind, werden als Schreib-Zwischenspeicher genutzt, in welchem einzelne Zellen vorübergehend einzelne Bits Daten speichern, indem mit nur zwei erkennbaren Schwellwertbereichen gearbeitet wird. Zu einem späteren Zeitpunkt werden die Zwischenspeicherdaten gelesen, komprimiert und zurück in den Speicher geschrieben, indem einzelne Zellen mit mehr als zwei erkennbaren Schwellwertbereichen betrieben werden, für eine längerfristige Speicherung.
  • Entsprechend der vorliegenden Erfindung wird ein Verfahren zum Betreiben eines nichtflüchtigen Speichers zur Verfügung gestellt, der ein Array aus Speicherzellen umfasst, die zu Blöcken von Zellen organisiert sind, die zusammen als eine Einheit gelöscht werden können und die einzeln mehrere Seiten von Benutzerdaten speichern. Das Verfahren beinhaltet das Speichern von Overhead-Daten in den einzelnen Blöcken mit Informationen, die sich auf den Betrieb des Blocks beziehen, in dem die Overhead-Daten gespeichert sind, und eine Löschoperation. Die Löschoperation beinhaltet das Adressieren von einem oder mehreren der Blöcke zum Löschen, das Lesen der Overhead-Daten aus dem einen Block oder den mehreren Blöcken und das vorübergehende Speichern der gelesenen Overhead-Daten, das Löschen der Speicherzellen in dem einen oder den mehreren Blöcken, das Aktualisieren der gelesenen Overhead-Daten und das Programmieren der aktualisierten Overhead-Daten zurück in jeweilige der genannten ein oder mehreren Blöcke, um dadurch die Speicherseiten in dem einen oder den mehreren Blöcken zum Programmieren von Benutzerdaten in diesen verfügbar zu lassen. Das Programmieren der aktualisierten Overhead-Daten umfasst das Programmieren einzelner Speicherzellen-Speicherelemente in einen von genau zwei Speicherzuständen, um dadurch ein Bit an Overhead-Daten pro Speicherelement zu speichern. Nach der Löschoperation werden Benutzerdaten in Speicherseiten des genannten einen oder der mehreren Blöcke programmiert, wobei die Programmierung das Programmieren einzelner Speicherzellen-Speicherelemente in einen von mehr als zwei Speicherzuständen beinhaltet, um dadurch mehr als ein Bit von Benutzerdaten pro Speicherelement zu speichern.
  • Entsprechend der vorliegenden Erfindung wird ferner ein nichtflüchtiges Speichersystem mit einem Array aus Speicherzellen zur Verfügung gestellt, die zu Blöcken aus Zellen organisiert sind, die zusammen als eine Einheit gelöscht werden können und die einzeln mehrere Seiten von Benutzerdaten speichern. Das nichtflüchtige Speichersystem umfasst Mittel zum Speichern von Overhead-Daten in den einzelnen Blöcken mit Informationen, die sich auf den Betrieb des Blocks beziehen, in dem die Overhead-Daten gespeichert sind, und Mittel zum Ausführen einer Löschoperation. Die Mittel zum Ausführen einer Löschoperation umfassen Mittel zum Adressieren eines oder mehrerer der Blöcke zum Löschen, Mittel zum Lesen von Overhead-Daten aus dem einen oder den mehreren Blöcken, Mittel zum vorübergehenden Speichern der gelesenen Overhead-Daten, Mittel zum Löschen der Speicherzellen in dem einen oder den mehreren Blöcken und Mittel zum Aktualisieren der gelesenen Overhead-Daten. Die Mittel zum Speichern von Overhead-Daten haben die Aufgabe, die aktualisierten Overhead-Daten zurück in jeweilige der genannten ein oder mehreren Blöcke zu programmieren, um dadurch die Speicherseiten in dem einen oder den mehreren Blöcken zum Programmieren von Benutzerdaten in diesen verfügbar zu halten. Die Mittel zum Speichern von Overhead-Daten haben ferner die Aufgabe, die aktualisierten Overhead-Daten durch Programmieren einzelner Speicherzellen-Speicherelemente in einen von genau zwei Speicherzuständen zu programmieren, um dadurch ein Bit an Overhead-Daten pro Speicherelement zu speichern. Die Mittel zum Programmieren von Daten haben die Aufgabe, Benutzerdaten in Speicherseiten des genannten einen oder der mehreren Blöcke zu programmieren, was das Programmieren einzelner Speicherzellen-Speicherelemente in einen von mehr als zwei Speicherzuständen umfasst, um dadurch mehr als ein Bit an Benutzerdaten pro Speicherelement zu speichern.
  • In einem nichtflüchtigen Speichersystem, bei dem die Speicherzellen zu Blöcken aus gleichzeitig löschbaren Zellen organisiert sind, wobei die Blöcke weiter in mehrere Speicherseiten mit Benutzerdaten unterteilt sind, die einzeln programmiert und gelesen werden können, werden Overhead-Daten, die sich auf einzelne Blöcke beziehen, in den Blöcken gespeichert, auf welche sich die Daten beziehen, und werden als Teil eines Löschzyklus des Blocks aktualisiert. Wenn die Zyklusdaten in Reservezellen einer einzelnen Speicherseite eines Blocks gespeichert werden, können sie danach mittels eines einzigen an dieser Speicherseite erfolgenden Lesevorgangs gelesen werden. Alternativ können die Zyklusdaten über zwei oder mehr Speicherseiten des Blocks auf ungenutzte Zellen verteilt werden, beispielsweise in Headern (Köpfen) von Datensektoren, die in den Speicherseiten gespeichert sind. Diese Verfahren finden insbesondere Anwendung bei Flash-Speichersystemen des NAND-Typs, können aber auch vorteilhaft bei anderen Typen nichtflüchtiger Speichersysteme genutzt werden, bei welchen Blöcke aus Speicherzellen zusammen gelöscht werden.
  • Da der Trend dahin geht, die Menge an Daten zu vergrößern, die eine gegebene Anzahl von Speicherzellen speichern kann, werden mehr als ein Bit Benutzerdaten in jedem Speicherzellen-Speicherelement gespeichert, indem mehr als zwei programmierte Zustände für jedes Speicherelement festgelegt werden. Was die Block-Zykluszähldaten betrifft, hat es jedoch Vorteile, diese Daten in zwei Zuständen oder mit einem Bit pro Speicherzellen-Speicherelement zu speichern. Die Programmierung der Zykluszähldaten wird verbessert, und diese Programmierung kann in einer Weise erfolgen, bei der die Menge der Störungen in dem neu gelöschten Block, in welchen diese geschrieben werden, reduziert wird.
  • Anhand der Zykluszähldaten kann ein Redundanzcode berechnet werden und kann danach mit diesen als Teil der Overhead-Daten des Blocks programmiert werden. Ein Fehlerkorrekturcode (ECC) stellt ein Beispiel für eine solche Redundanz dar, die bereitgestellt werden kann, um einige Fehler in den Zykluszähldaten korrigieren zu können und, wenn zu viele Fehler vorhanden sind, als dass diese korrigiert werden könnten, festzustellen, dass die Zykluszähldaten ungültig sind. Wenn diese ungültig sind, wird der Block für die Speicherabbildung aus dem System ausgeschlossen, weil die Anzahl der Löschzyklen, die er erfahren hat, unbekannt ist und da diese Ungewissheit Entscheidungen negativ beeinflussen kann, die von dem Speicher-Controller beim Betrieb des Blocks getroffen werden. Ein Block kann auch in dem Fall für die Speicherabbildung aus dem System ausgeschlossen werden, dass die Zykluszähldaten während einer Löschoperation verloren gehen, wie es passieren kann, wenn die Stromversorgung während einer Zeit, in welcher der Zählwert vorübergehend in einem flüchtigen Speicher gespeichert ist, unterbrochen wird. Dies kann beispielsweise passieren, wenn ein Benutzer während eines Löschzyklus eine Speicherkarte von dem Hostsystem, das die Stromversorgung bereitstellt, absteckt.
  • Die vorliegende Erfindung funktioniert bei vielen unterschiedlichen Arten von nichtflüchtigen Speichern, darunter Flash-EEPROM-Systemen, die zuvor im Hintergrund beschrieben worden sind, und bei anderen. Eine spezielle NOR-Array-Struktur, bei der Floating-Gate-Ladungsspeicherelemente genutzt werden, ist in den US-Patentanmeldungen 09/925,102, eingereicht am 08. August 2001 (erteilt als US 6,762,092 ), und 09/667,344 , eingereicht am 22. September 2000 (erteilt als US 6,512,263 ), beschrieben. Flash-Speicher-Arrays, bei denen dielektrische Ladungsspeicherelemente genutzt werden, sind in der US-Patentanmeldung 10/280,352, eingereicht am 25. Oktober 2002 (erteilt als US 6,925,007 ), beschrieben. Die Verwaltung großer Speicherzellen-Löschblöcke ist in den US-Patentanmeldungen 09/718,802, eingereicht am 22. November 2000 (erteilt als US 6,684,289 ) und 09/766,436 , eingereicht am 19. Januar 2001 (erteilt als US 6,763,424 ) beschrieben. Die Programmierung von NAND-Arrays ist in den Anmeldungen 09/893,277, eingereicht am 27. Juni 2001 (erteilt als US 6,522,580 ), und in Patent Nr. 6,456,528 beschrieben.
  • Weitere Zielstellungen, Merkmale und Vorteile der verschiedenen Aspekte der vorliegenden Erfindung sind in der folgenden Beschreibung repräsentativer Ausführungsformen enthalten, wobei die Beschreibung im Zusammenhang mit den beigefügten Zeichnungen gelesen werden sollte.
  • 1 stellt ein Blockdiagramm eines ersten nichtflüchtigen Speichersystems dar, in welchem die vorliegende Erfindung implementiert werden kann;
  • 2 stellt ein Blockdiagramm eines zweiten nichtflüchtigen Speichersystems dar, in welchem die vorliegende Erfindung implementiert werden kann;
  • 3 stellt eine Spannungswellenform dar, die genutzt werden kann, um Daten in eines der Speichersysteme aus 1 oder 2 zu programmieren;
  • 4 stellt eine Verteilung von Spannungsschwellwerten einer Gruppe nichtflüchtiger Speicherzellen dar, die einzeln auf einen von vier Zuständen programmiert worden sind;
  • 5 stellt eine Verteilung von Spannungsschwellwerten einer Gruppe nichtflüchtiger Speicherzellen dar, die einzeln auf einen von zwei Zuständen programmiert worden sind;
  • 6 zeigt eine erste beispielhafte Organisation eines Blocks von Speicherzellen in solcher Art, dass dieser mehrere Speicherseiten umfasst;
  • 7 stellt Block-Overhead-Daten dar, die in Blöcken des in 6 dargestellten Typs gespeichert werden können;
  • 8 zeigt eine zweite beispielhafte Organisation eines Blocks von Speicherzellen in solcher Art, dass dieser mehrere Speicherseiten umfasst; und
  • 9 stellt ein Ablaufdiagramm dar, das eine exemplarische Löschoperation in einem der Speichersysteme aus den 1 oder 2 zeigt, wenn Block-Overhead-Daten gespeichert werden.
  • Ein beispielhaftes Speichersystem, in welchem die verschiedenen Aspekte der vorliegenden Erfindung implementiert werden können, wird durch das Blockdiagramm aus 1 veranschaulicht. Eine große Anzahl von einzeln adressierbaren Speicherzellen 11 ist in einer regelmäßigen Matrix aus Zeilen und Spalten angeordnet, wenngleich sicherlich auch andere physikalische Anordnungen der Zellen möglich sind. Dieses System ist insbesondere dafür ausgelegt, dass das Array 11 ein NOR-Array ist, wie es zuvor im Hintergrund beschrieben worden ist und in den zuvor erwähnten Dokumenten beschrieben ist. Bitleitungen, für die hier gezeigt ist, dass sie sich entlang von Spalten des Zellenarrays 11 erstrecken, sind über Leitungen 15 elektrisch mit einer Bitleitungs-Decoder- und Treiberschaltung 13 verbunden. Wortleitungen, für die in dieser Beschreibung spezifiziert worden ist, dass sie sich entlang von Zeilen des Zellenarrays 11 erstrecken, sind über Leitungen 17 elektrisch mit einer Wortleitungs-Decoder- und Treiberschaltung 19 verbunden. Die Steuergates, welche sich entlang von Spalten aus Speicherzellen in dem Array 11 erstrecken, sind über Leitungen 23 elektrisch mit einer Steuergate-Decoder- und Treiberschaltung 21 verbunden. Jeder der Decoder 13, 19 und 21 empfängt Speicherzellenadressen über einen Bus 25 von einem Speicher-Controller 27. Die Decoder- und Treiberschaltungen sind außerdem mit dem Controller 27 über jeweilige Steuer- und Status-Signalleitungen 29, 31 und 33 verbunden. Spannungen, die an die Steuergates und an die Bitleitungen angelegt werden, werden über einen Bus 22 koordiniert, welcher die Decoder- und Treiberschaltungen 13 und 21 verbindet. Der Controller enthält verschiedene Arten von Registern und weiteren Speichern, darunter einen flüchtigen Direktzugriffsspeicher (RAM) 28.
  • Der Controller 27 kann über Leitungen 35 mit einem (nicht gezeigten) Host-Gerät verbunden werden. Der Host kann ein Personalcomputer sein, ein Notebookcomputer, eine digitale Kamera, ein Audioabspielgerät, verschiedene andere tragbare elektronische Geräte und dergleichen. Das Speichersystem aus 1 wird üblicherweise als Karte entsprechend einer von mehreren bestehenden physikalischen und elektrischen Normen implementiert, beispielsweise dem Standard PCMCIA, der CompactFlashTM Association, der MMCTM Association und anderen. Wenn ein Kartenformat vorliegt, enden die Leitungen 35 in einem Steckverbinder an der Karte, der mit einem komplementären Steckverbinder des Host-Geräts gekoppelt werden kann. Die elektrische Schnittstelle vieler Karten folgt dem ATA-Standard, wobei das Speichersystem für den Host erscheint, als ob es ein Magnetplattenlaufwerk wäre. Es gibt auch andere Schnittstellenstandards für Speicherkarten. Als Alternative zum Kartenformat kann ein Speichersystem der in 1 gezeigten Art dauerhaft in dem Host-Gerät eingebettet sein.
  • Die Decoder- und Treiberschaltungen 13, 19 und 21 erzeugen geeignete Spannungen in ihren jeweiligen Leitungen des Arrays 11, so wie sie über den Bus 25 adressiert werden, und zwar gemäß Steuersignalen in jeweiligen Steuer- und Statusleitungen 29, 31 und 33, um Programmier-, Lese- und Löschfunktionen auszuführen. Etwaige Statussignale, darunter Spannungspegel und andere Array-Parameter, werden über dieselben Steuer- und Statusleitungen 29, 31 und 33 von dem Array 11 an den Controller 27 geliefert. Eine Mehrzahl von Leseverstärkern in der Schaltung 13 empfängt Stromstärke- oder Spannungswerte, welche für die Zustände der adressierten Speicherzellen in dem Array 11 kennzeichnend sind, und stellt dem Controller 27 während eines Lesevorgangs Informationen bezüglicher dieser Zustände über Leitungen 41 zur Verfügung. Üblicherweise wird eine große Anzahl von Leseverstärkern genutzt, um die Zustände einer großen Anzahl von Speicherzellen parallel lesen zu können. Während der Lese- und Program mieroperationen wird typischerweise gleichzeitig eine Zeile von Zellen adressiert, und zwar über die Schaltungen 19, um auf eine Reihe von Zellen in der adressierten Zeile zuzugreifen, die durch die Schaltungen 13 und 21 ausgewählt werden. Während einer Löschoperation werden typischerweise sämtliche Zellen in jeder von vielen Zeilen gemeinsam als Block adressiert, zum gleichzeitigen Löschen.
  • Die Funktionsweise eines Speichersystems wie dem in 1 dargestellten ist eingehender in Patenten und Artikeln beschrieben, die bereits im Absatz 'NOR-Array' des Hintergrunds angegeben worden sind, sowie in weiteren Patenten, die der SanDisk Corp. erteilt wurden, dem Abtretungsempfänger der vorliegenden Anmeldung. Außerdem beschreibt die US-Patentanmeldung 09/793,370, eingereicht am 26. Februar 2001 (erteilt als US 6,738,289 ), ein Datenprogrammierverfahren.
  • Ein weiteres Beispiel für ein Speichersystem, in welchem die verschiedenen Aspekte der vorliegenden Erfindung implementiert werden können, wird durch das Blockdiagramm aus 2 veranschaulicht. Das Speicherzellenarray 1, das eine Mehrzahl von Speicherzellen M umfasst, die in einer Matrix angeordnet sind, wird durch eine Spalten-Steuerschaltung 2, eine Zeilen-Steuerschaltung 3, eine gemeinsame ("c" für engl.: common) Source-Steuerschaltung 4 und eine gemeinsame (c-)p-Wannen-Steuerschaltung 5 gesteuert. Das Speicherzellenarray 1 kann ein NAND-Array sein, wie es vorstehend im Hintergrund wie auch in Dokumenten, die hier durch Bezugnahme einbezogen worden sind, beschrieben ist. Eine Steuerschaltung 2 ist mit Bitleitungen (BL) des Speicherzellenarrays 1 verbunden, um Daten zu lesen, die in den Speicherzellen (M) gespeichert sind, um einen Zustand der Speicherzellen (M) während eines Programmiervorgangs zu bestimmen und um die Potentialpegel der Bitleitungen (BL) zu kontrollieren, um die Programmierung zu unterstützen oder die Programmierung zu sperren. Die Zeilen-Steuerschaltung 3 ist mit Wortleitungen (WL) verbunden, um eine der Wortleitungen (WL) auszuwählen, um Lesespannungen anzulegen, um Programmierspannungen anzulegen, in Kombination mit den Bitleitungs-Potentialpegeln, die durch die Spalten-Steuerschaltung 2 gesteuert werden, und um eine Löschspannung anzulegen, gekoppelt mit einer Spannung eines p-Gebiets, auf welchem die Speicherzellen (M) ausgebildet sind. Die c-Source-Steuerschaltung 4 steuert eine gemeinsame Source-Leitung (in 2 als "c-Source" bezeichnet), die mit den Speicherzellen (M) verbunden sind. Die c-p-Wannen-Steuerschaltung 5 steuert die gemeinsame Spannung der p-Wannen.
  • Die Daten, die in den Speicherzellen (M) gespeichert sind, werden durch die Spalten-Steuerschaltung 2 ausgelesen und werden über eine E/A-Leitung und einen Daten-Eingabe/Ausgabepuffer 6 an externe E/A-Leitungen ausgegeben. Programmierdaten, die in den Speicherzellen gespeichert werden sollen, werden über die externen E/A-Leitungen in den Daten-Eingabe/Ausgabepuffer 6 eingegeben und werden an die Spalten-Steuerschaltung 2 übermittelt. Die externen E/A-Leitungen sind mit einem Controller 43 verbunden. Der Controller 43 umfasst verschiedene Typen von Registern und anderen Speichern, typischerweise flüchtige Direktzugriffsspeicher (RAMs).
  • Befehlsdaten zum Steuern des Flash-Speicherbauelements werden in Befehlsschaltungen 7 eingegeben, die mit externen Steuerleitungen verbunden sind, welche mit dem Controller 43 verbunden sind. Die Befehlsdaten informieren den Flash-Speicher darüber, welche Operation gefordert wird. Der eingegebene Befehl wird an eine Zustandsmaschine 8 übermittelt, welche die Spalten-Steuerschaltung 2, die Zeilen-Steuerschaltung 3, die c-Source-Steuerschaltung 4, die c-p-Wannen-Steuerschaltung 5 und den Daten-Eingabe/Ausgabepuffer 6 steuert. Die Zustandsmaschine 8 kann Statusdaten des Flash-Speichers wie beispielsweise READY/BUSY oder PASS/FAIL ausgeben. Die Zustandsmaschine 8 enthält ebenfalls eine Reihe von Registern und andere flüchtige Direktzugriffsspeicher 45.
  • Der Controller 43 wird mit einem Host-System wie beispielsweise einem Personalcomputer, einer Digitalkamera oder einem PDA (persönlichen digitalen Assistenten) verbunden oder kann mit einem solchen verbunden werden. Es ist der Host, der Befehle auslöst, wie beispielsweise Daten in das Speicherarray 1 zu speichern oder aus diesem zu lesen, und der diese Daten bereitstellt bzw. empfängt. Der Controller wandelt solche Befehle in Befehlssignale um, die von den Befehlsschaltungen 7 interpretiert und ausgeführt werden können. Der Controller enthält außerdem typischerweise einen Pufferspeicher für die Benutzerdaten, die in das Speicherarray geschrieben werden oder aus diesem gelesen werden. Ein typisches Speichersystem umfasst einen integrierten Schaltungschip 47, der den Controller 43 umfasst, sowie einen oder mehrere integrierte Schaltungschips 49, die jeweils ein Speicherarray und zugehörige Steuer-, Eingabe/Ausgabe- und Zustandsmaschinen-Schaltungen umfassen. Der Trend geht natürlich dahin, das Speicherarray und die Steuerschaltungen eines Systems zusammen auf einem oder mehreren integrierten Schaltungschips zu integrieren.
  • Jedes der Speichersysteme aus den 1 und 2 kann als Teil des Host-Systems eingebettet werden oder kann in eine Speicherkarte integriert werden, die entfernbar in einen Paarungssteckplatz eines Host-Systems eingefügt werden kann. Eine solche Karte kann das gesamte Speichersystem umfassen, oder der Controller und das Speicherarray mit zugehörigen Peripherieschaltungen können auf separaten Karten bereitgestellt werden. Verschiedene Kartenimplementierungen sind zum Beispiel in US-Patent Nr. 5,887,145 beschrieben.
  • 3 stellt ein Impulsverfahren zum inkrementellen Programmieren von Speicherelementen eines der Speicherzellenarrays 1 oder 11 dar. Es ist die Wellenform für eine Programmierspannung Vpgm dargestellt. Die Programmierspannung Vpgm ist in viele Impulse unterteilt und erhöht sich von Impuls zu Impuls um ΔVpgm. In den Zeitspannen zwischen den Impulsen werden die Verifizierungs-(Lese-)Operationen ausgeführt. Das bedeutet, der programmierte Pegel jeder parallel programmierten Zelle wird zwischen den jeweiligen Programmierimpulsen gelesen, um festzustellen, ob er gleich dem oder größer als der Verifizierungspegel ist, auf welchen programmiert wird. Wenn festgestellt wird, dass die Schwellspannung einer gegebenen Speicherzelle den Verifizierungspegel überschritten hat, wird Vpgm weggenommen, indem die Spannung auf einer Bit- oder Steuerleitung, mit welcher die Zellenreiheneinheit der gegebenen Zelle verbunden ist, von 0 V auf Vdd angehoben wird. Das Programmieren der anderen parallel programmierten Zellen wird fortgesetzt, bis diese ihrerseits ihre Verifizierungspegel erreichen. Die Schwellspannung verschiebt sich während des letzten Programmierimpulses für die Zelle von unterhalb des Verifizierungspegels über diesen hinaus.
  • 4 stellt ein Verfahren zur Programmierung eines Speicherzellenarrays mit vier Zuständen pro Speicherelement dar. Zwei Bits Daten werden somit in jedem Speicherelement gespeichert. Die programmierten Speicherelemente bilden Speicherzellentransistoren mit Schwellspannungspegeln (VT), die in eine der Schwellspannungsverteilungen 61, 63, 65 oder 67 fallen. Die Verteilung 61 stellt den gelöschten Zustand dar, und stellt außerdem einen der programmierten Zustände dar, bei diesem Beispiel "11". Die Verteilung 61 umfasst Zellen, die eine negative Schwellspannung VT aufweisen. Die Verteilung 63 umfasst positive Schwellspannungen und stellt Datenbits "10" dar. Analog repräsentiert die Verteilung 65 "00", und die Verteilung 67 repräsentiert "01". In jedes Speicherelement kann eine weitere Anzahl von Zuständen und somit mehr Bits programmiert werden, zur Veranschaulichung wurde jedoch ein System mit vier Zuständen ausgewählt.
  • Die einzelnen Zellen werden durch eine Reihe von Impulsen wie den in 3 dargestellten programmiert. Nachdem ein Block gelöscht worden ist, weisen sämtliche Speichertransistoren von dessen Speicherzellen Schwellspannungen innerhalb der Verteilung 61 auf. Beim Programmieren von entweder Benutzerdaten oder Block-Overhead-Daten in eine Reihe von Speicherzellen, die einen gesamten Block oder einen Teil eines Blocks bilden, werden an diejenigen Zellen, deren Zustand von "11" auf einen anderen geändert werden soll, Programmierspannungsimpulse angelegt. Für diejenigen Transistoren, die aus dem gelöschten in den ersten Zustand "10" programmiert werden sollen, wird die Impulsgebung beendet, wenn deren VT gleich oder größer dem Verifizierungspegel VV10 in der Verteilung 63 wird. Die Zustände der Zellen werden zwischen den Programmierimpulsen verifiziert. Analog wird die Impulsgebung für diejenigen Speichertransistoren, die in den Zustand "00" programmiert werden sollen, beendet, wenn deren VT gleich oder größer dem Verifizierungspegel VV00 in der Verteilung 65 wird. Schließlich werden für diejenigen Speicherelementtransistoren, die in den Zustand "01" programmiert werden, die Programmierimpulse beendet, wenn deren VT den Verifizierungspegel VV01 in der Verteilung 67 erreicht. Zu diesem Zeitpunkt ist die parallele Programmierung der Gruppe von Speicherzellen beendet.
  • Die einzelnen Programmierverifizierungspegel VV10, VV00 und VV01 fallen mit den unteren Grenzen der jeweiligen Verteilungen 63, 65 und 67 zusammen. Die Anfangsspannung der Programmierimpulse aus 3 kann für eine typische Programmierung zum Beispiel bei ungefähr 12 Volt liegen, und die Schrittweite zwischen den Impulsen ΔVpgm bei ungefähr 0,2 Volt. Die Spreizung der einzelnen Verteilungen 61, 63, 65 und 67 ist ungefähr gleich ΔVpgm.
  • 4 stellt außerdem die Spannungen dar, die zum Lesen von Daten aus einzelnen Zellen genutzt werden, indem festgestellt wird, auf welchen der vier Schwellspannungszustände die Zelle programmiert worden ist. Die Spannungen VR10, VR00 und VR01 sind Referenzspannungen, die zum Lesen der Speicherzustände "10", "00" bzw. "01" genutzt werden. Diese Spannungen liegen ungefähr in der Mitte zwischen benachbarten Verteilungen der Verteilungen 61, 63, 65 und 67. Sie stellen die Schwellspannungen dar, mit welchen der Schwellspannungszustand jedes gelesenen Speicherzellentransistors verglichen wird. Dies wird erreicht, indem eine an der Zelle gemessene Stromstärke oder Spannung mit einer Referenzstromstärke bzw. -spannung verglichen wird.
  • In einem System mit vier oder mehr Speicherzuständen ist es oft wünschenswert, einige Zellen in einen von zwei Zuständen (binär) programmieren zu können. Die Nutzung sowohl einer Mehrzustands- als auch einer binären Programmierung in einem einzelnen Array ist in US-Patent 5,930,167 und in der bereits erwähnten US-Anmeldung 09/956,340 (erteilt als US 6,456,528 ) beschrieben. Eine weitere Form einer solchen dualen Programmierung, bei der Programmierspannungen minimiert werden und somit Störungen der programmierten oder gelöschten Zustände anderer Speicherzellen minimiert werden, ist in 5 dargestellt. Ein gelöschter Zustand "0" stellt auch einen der beiden programmierten Zustände dar, der durch eine programmierte Verteilung 71 veranschaulicht wird. Der zweite programmierte Zustand "1" wird durch eine Verteilung 73 repräsentiert. Die Programmierung in den Zustand "1" wird unter Nutzung des Verifizierungspegels VV1 erreicht. Die Daten werden unter Verwendung eines Referenzpegels VR1 bei einer VT von Null Volt aus den Zweizustands-Speicherzellen aus 5 gelesen. Die Verteilungen 71 und 73 aus 5 entsprechen den Verteilungen 61 bzw. 63 aus 4. Durch Vermeiden der Verteilungen 65 und 67 mit höherem Schwellpegel im binären Fall werden Störungen an den gelöschten oder programmierten Zuständen von anderen Zellen infolge der binären Programmierung von Zellen minimiert.
  • 6 zeigt die Organisation eines ersten Beispiels für eine große Anzahl von einzeln adressierbaren Blöcken von Speicherzellen in einem typischen System. Der Block aus Speicherzellen, die Löscheinheit, ist in eine Anzahl von Speicherseiten P0 bis PN unterteilt. Die Anzahl N der Speicherseiten in einem Block kann beispielsweise 8, 16 oder 32 betragen. Jede einzelne Speicherseite stellt die Einheit zum Programmieren und Lesen dar. In jeder Speicherseite werden ein oder mehr Host-Sektoren Daten als Benutzerdaten gespeichert. Physikalisch kann eine Speicherseite aus einer einzelnen Zeile von Speicherzellen in einem der Arrays 1 oder 11 der Systeme aus den 1 und 2 gebildet werden. Eine Speicherseite P3 aus 6 umfasst zum Beispiel einen Raum 81 für die Benutzerdaten sowie einen Raum 83 für einen Header mit Overhead-Daten, die sich auf die Benutzerdaten beziehen. Ein ECC, der anhand der in dem Speicherraum 81 gespeicherten Benutzerdaten berechnet wird, wird beispielsweise in dem Raum 83 gespeichert. Einige Speicherarrays enthalten außerdem einige wenige Reservebytes an Speicherkapazität in einem Raum 85, um etwaige schlechte Bytes in dem Benutzerraum 81 zu ersetzen.
  • Diese Reservebytes einer Speicherseite des Blocks sind es, die genutzt werden, um Overhead-Informationsdaten für den gesamten Block zu speichern. Block-Overhead- Daten 87 sind zum Beispiel als Teil der Speicherseite P1 gezeigt. Ein wichtiger Bestandteil der Informationen, die als Teil der Daten 87 gespeichert werden, ist oft ein Zählwert für die Anzahl, wie oft der Block, in welchem die Daten 87 gespeichert sind, gelöscht worden ist. Alternativ kann eine andere Angabe für die Anzahl der Löschzyklen, die der Block erfahren hat, gespeichert werden. Diese Daten sind zum Organisieren des Betriebs des Arrays sinnvoll. Andere Block-Overhead-Daten 87, die sinnvoll sein können, sind optimale Lösch-, Programmier- und/oder Lesespannungen für die Speicherzellen des Blocks, Merker (Flags), um den Status des Blocks anzugeben, logische und/oder physikalische Adressen des Blocks sowie eines etwaigen Ersatzblocks und dergleichen. Die Block-Overhead-Daten 87 liefern Informationen zu dem physikalischen Block selbst, während die Speicherseiten-Overhead-Daten 83 Informationen zu den in derselben Speicherseite gespeicherten Benutzerdaten bereitstellen. Wenngleich eine oder beide Arten dieser Overhead-Daten in einem oder mehreren anderen Blöcken als dem Block, auf welchen sie sich beziehen, gespeichert werden können, werden für die meisten Anwendungen die in 6 gezeigten Speicherstellen bevorzugt.
  • Die Benutzerdaten werden in den Speicherzellen jeder Speicherseite in mehreren Zuständen gespeichert; das bedeutet, jedes Floating Gate oder andere Speicherelement der Speicherzellen wird auf einen von mehr als zwei Zuständen programmiert, um mehr als ein Bit Daten in jedem Speicherelement zu speichern. Zweckmäßigerweise wird das in 4 gezeigte Beispiel implementiert, bei welchem die einzelnen Speicherelemente in einen von vier Zuständen programmiert werden. Damit wird die Anzahl der Speicherzellen reduziert, die erforderlich ist, um eine gegebene Datenmenge zu speichern. Die Block-Overhead-Daten in der Gruppe von Zellen 87 werden binär programmiert; das bedeutet, jedes Floating Gate oder andere Speicherelement der Speicherzellen wird auf einen von exakt zwei Zuständen programmiert. Das in 5 gezeigte Beispiel kann genutzt werden. Wenngleich dafür mehr Speicherzellen erforderlich sind, um den Block-Overhead zu speichern, als wenn dies mit mehreren Zuständen erfolgen würde, ist der Nachteil gering, weil die Datenmenge klein ist. Der Vorteil besteht in der Möglichkeit, die Block-Overhead-Daten in kürzerer Zeit zu programmieren, mit einer verringerten Empfindlichkeit für Störungen und Feldkopplungseffekte und mit einer weniger störenden Auswirkung auf den gelöschten oder programmierten Zustand anderer Speicherzellen in demselben oder in benachbarten Blöcken.
  • Wenngleich die binäre Programmierung der Block-Overhead-Daten vorzugsweise unter Nutzung aufeinanderfolgender Programmierimpulse und dazwischen erfolgender Verifikationen des Zustands ausgeführt wird, wie vorstehend mit Bezug auf 3 diskutiert worden ist, kann die Zeit, die zum Ausführen eines Programmierprozesses erforderlich ist, deutlich reduziert werden, indem der Betrag des Anfangsimpulses erhöht und/oder die Größe der Schritte ΔVpgm erhöht wird. Wenn ΔVpgm zum Programmieren von Benutzerdaten in mehrere Zustände bei einem Wert von 0,2 Volt liegt, kann für die binäre Programmierung der Block-Overhead-Daten ein höherer Wert, beispielsweise 0,4 Volt, genutzt werden. Die größere ΔVpgm führt dazu, dass sich die Verteilung 73 für die programmierten Zellen aus 5 verbreitert, wie bei 75 angegeben. Da es aber keine weiteren höher programmierten Zustände als den Zustand 73 gibt, stellt diese größere Breite der Verteilung kein Problem dar.
  • Allgemein können die Block-Overhead-Daten in den Reservezellen irgendeiner der Speicherseiten in dem exemplarischen Block aus 6 gespeichert werden. Die Speicherseite in jedem Block, in welchem die Block-Overhead-Daten gespeichert werden, kann entweder festgelegt sein oder kann von Block zu Block und im Zeitverlauf variabel sein. Wenn zum Beispiel bei der Speicherseite P1 die Nutzung einiger ihrer Reservezellen zum Ersetzen defekter Zellen erforderlich ist und wenn dann nicht genügend Reservezellen verbleiben, um die Block-Overhead-Daten zu speichern, können die Overhead-Daten für diesen Block in einer anderen Speicherseite gespeichert werden. Ferner braucht der Raum für die Block-Overhead-Daten nicht notwendigerweise am Ende einer Speicherseite oder am Ende der Speicherzellenzeile dieser zu liegen, wie in 6 dargestellt ist, sondern kann vielmehr an irgendeiner anderen Stelle liegen, an der ungenutzte Speicherzellen vorhanden sind. Außerdem brauchen die Block-Overhead-Daten nicht notwendigerweise in nebeneinander liegenden Speicherzellen gespeichert zu werden, wenngleich es wahrscheinlich für den Speicher-Controller einfacher ist, wenn die Daten an Speicherstellen mit aufeinanderfolgenden Zellenadressen gespeichert werden.
  • Wenn das Speicher-Array ein NAND-Array ist, können einige Speicherseiten vorhanden sein, die zum Speichern der Block-Overhead-Daten gegenüber anderen bevorzugt werden. Bei einem Typ eines NAND-Flash-Speichers, der in den bereits im Hintergrund angegebenen Patenten diskutiert wird, besteht die Einschränkung, dass die Speicherseiten in einer bestimmten Reihenfolge programmiert werden, beispielsweise P0 bis PN, um störende Effekte der Programmierung einer Speicherseite auf die programmierten Zustände der Zellen anderer Speicherseiten zu reduzieren. Ferner sind die letzten Speicherseiten PN und P(N-1) tendenziell empfindlicher für störende Einflüsse als andere Speicherseiten. Daher ist es vorzuziehen, die Block-Overhead-Daten in irgendeiner anderen Seite, die dem Beginn des Blocks näher liegt, zu speichern, beispielsweise in der P4 oder P5 von Blöcken, die insgesamt 16 Speicherseiten aufweisen.
  • Da die Block-Overhead-Daten für den Betrieb des Speichers wichtig sein können, kann aus den Block-Overhead-Daten ein Redundanzcode, beispielsweise ein ECC, berechnet werden und zusammen mit diesen Daten in demselben Block gespeichert werden. Der ECC wird danach genutzt, um die Daten zu verifizieren, wenn diese gelesen werden, und um eine Möglichkeit zu bieten, einige wenige ungültige Bits zu korrigieren. Die Organisation der Block-Overhead-Daten 87 aus 6 beim Integrieren eines ECC ist in 7 gezeigt. Wenn die Anzahl der ungültigen Bits der gespeicherten Block-Overhead-Daten größer ist als sie der ECC korrigieren kann, ist diese Information nützlich für den Controller. Wenn die Art der gespeicherten Overhead-Daten für die Funktionsweise des Speichersystems wichtig ist, wird die Unmöglichkeit des Lesens dieser Daten aus einem Block von dem Controller genutzt, um diesen Block für die Speicherabbildung auszuschließen, sodass er nicht mehr genutzt wird. In dem Block kann ein Merker gesetzt werden, um anzuzeigen, dass er nicht genutzt werden soll, oder der Controller kann in unabhängiger Weise eine Liste ungültiger Blöcke unterhalten.
  • Eine andere Speicherzellenblockanordnung als in 6 ist in 8 gezeigt, um eine weitere Implementierung bereitzustellen. In diesem Fall sind nicht in jeder Speicherseite Reservezellen enthalten. Die Block-Overhead-Daten müssen daher irgendwo anders in dem Block gespeichert werden. Bei dem in 8 gezeigten Beispiel werden diese Daten in Reservebytes in den Headern der Speicherseite des Blocks verteilt, wie etwa an den Speicherstellen 91, 93 und 95 in den Headern dreier unterschiedlicher Seiten. Damit ist es dann erforderlich, dass alle drei Speicherseiten gelesen werden, bevor die Block-Overhead-Daten erhalten werden können, im Gegensatz zu dem Beispiel aus 6, bei dem nur eine Speicherseite eines Blocks gelesen zu werden braucht.
  • Mit Bezugnahme auf 9 wird eine exemplarische Löschoperation erklärt, bei der die zuvor beschriebenen Block-Overhead-Daten genutzt werden. In einem ersten Schritt 101 wird ein Befehl von dem Controller (27 in 1 oder 43 in 2) ausgegeben, um gleichzeitig einen oder eine Anzahl mehrerer Blöcke zu löschen, der/die durch Adressen spezifiziert werden, welche in einem Schritt 103 ausgegeben werden. In einem nächsten Schritt 105 liest der Controller die Block-Overhead-Daten aus jedem der adressierten Blöcke. Bei einem üblichen System beinhaltet dies das Lesen der gesamten Speicherseite(n) jedes adressierten Blocks, in welcher/n dessen Block-Overhead-Daten ge speichert sind, da die Speicherseite die Programmier- und Löscheinheit darstellt. Die Overhead-Daten können zum Beispiel die Daten 87 aus 6 oder die Daten 91, 93, 95 aus 8 sein. Wenn die Block-Overhead-Daten in einer anderen Anzahl von Zuständen gespeichert sind als die Benutzerdaten und deren Header, liest der Controller die Overhead-Daten mit einem anderen Satz von Referenzpegeln als sie genutzt werden, wenn die Benutzerdaten und Header gelesen werden. Diese gelesenen Daten werden dann von dem Controller vorübergehend in dem System gespeichert, am praktischsten in einem Direktzugriffsspeicher (RAM), 28 oder 45, der als Teil des Controllers 27 bzw. der Zustandsmaschine 8 integriert ist. Die Speicherzellen in jedem der adressierten Blöcke werden dann in dem Schritt 109 zusammen gelöscht.
  • Wenn die Block-Overhead-Daten zusammen mit einem ECC oder einem anderen anhand der Daten berechneten Redundanzcode gespeichert sind, wird danach die Gültigkeit der Daten überprüft, bevor diese in den RAM geschrieben werden. Wenn festgestellt wird, dass sie gültig sind, oder wenn fehlerhafte Overhead-Daten korrigiert werden können, um sie gültig zu machen, erfolgt der Prozess wie beschrieben. Wenn die Block-Overhead-Daten jedoch nicht gültig sind oder nicht gültig gemacht werden können, ist es möglicherweise erwünscht, den Block außer Dienst zu stellen, und zwar wegen der Befürchtung, dass der Block zukünftig nicht ordnungsgemäß betrieben werden kann, wenn seine Verlaufshistorie nicht bekannt ist. Der Löschprozess kann dann in Bezug auf diesen Block gestoppt werden und dessen Adresse kann zu einer Liste schlechter Blöcke hinzugefügt werden, die von dem Controller unterhalten wird. Alternativ kann der Löschprozess fortgesetzt werden und in den Overhead-Raum des Blocks kann ein Merker geschrieben werden, um anzuzeigen, dass dieser nicht mehr genutzt werden soll. Der Controller sucht dann nach solchen Merkern, wenn er die Blöcke festlegt, die zukünftigen Lösch- und Programmierzyklen unterzogen werden sollen.
  • Außerdem werden, wenn die Stromversorgung für das Speichersystem unterbrochen wird, nachdem die adressierten Blöcke gelöscht worden sind, die Block-Overhead-Daten verloren sein, wenn der RAM, in welchem die Daten vorübergehend gespeichert sind, ein flüchtiger Speicher ist, was üblicherweise der Fall ist. In dieser Situation hat der Controller, wenn die Stromversorgung wiederhergestellt ist, keine Block-Overhead-Daten zum Zurückschreiben in die gelöschten Blöcke. Jegliche zukünftigen Versuche, die Blöcke zu nutzen, die das Lesen der Block-Overhead-Daten beinhalten, können, wenn diese Daten nicht existent sind, bewirken, dass der Controller dann die Blöcke für die Speicher abbildung aus dem System ausschließt, indem er deren Adressen zu der Liste schlechter Blöcke hinzufügt, einen Merker in den Blöcken setzt, oder durch ein anderes Verfahren.
  • Wie bereits diskutiert, kann ein wichtiger Bestandteil der Block-Overhead-Daten der Zählwert dafür sein, wie oft der einzelne Block einen Lösch- und Neuprogrammierzyklus durchlaufen hat. Diese Zahl oder eine mit dieser Zahl in Zusammenhang stehende Größe, falls vorhanden, wird dann als Teil des Löschzyklus aktualisiert. Die in dem Controller-RAM gespeicherte Größe wird aus dem RAM gelesen und wird für jeden Block, der gelöscht wird, aktualisiert, um aufzuzeichnen, dass der Block einem weiteren Löschzyklus ausgesetzt war. Wie durch einen Schritt 111 in 9 angegeben ist, wird die aktualisierte Zahl zurück in den jeweiligen Block geschrieben, auf welchen sie sich bezieht. Die einfachste Implementierung besteht darin, den Löschzyklus-Zählwert, der aus dem Block gelesen wird, um Eins zu inkrementieren und danach diesen inkrementierten Zählwert zurück in den Block zu schreiben, nachdem dieser gelöscht worden ist. Die Block-Overhead-Daten können auch andere Informationsdaten enthalten, die nicht jedes Mal aktualisiert werden, wenn der Block gelöscht wird, in welchem Fall diese Art von Daten ohne irgendeine Änderung zurück in den gelöschten Block geschrieben wird. Falls ein ECC oder ein anderer Redundanzcode mit den Block-Overhead-Daten genutzt wird, wird dieser Code aus den aktualisierten Overhead-Daten berechnet, die zurück in den Block geschrieben werden sollen, und wird dann zusammen mit den aktualisierten Overhead-Daten in den Block programmiert.
  • Ein letzter Schritt des Löschzyklus für das Array und dessen Peripherieschaltungen besteht darin, ein Abschluss-Statussignal zurück an den Controller zu senden, wie in Schritt 113 angegeben ist. Die gelöschten Blöcke bleiben gelöscht, außer an der/den Speicherstelle(n), an welche die Block-Overhead-Daten programmiert werden. Danach können Benutzerdaten in die Speicherseiten des Blocks programmiert werden.
  • Der Löschzyklus-Zählwert kann in mehrerlei unterschiedlicher Weise genutzt werden. Da sich bestimmte Eigenschaften der Speicherzellen ändern, wenn sich die Anzahl der Lösch/Programmierzyklen für diese erhöht, lässt sich die Funktionsweise des Arrays optimieren, wenn beeinflusste Betriebsparameter ebenfalls geändert werden. Beispiele für solche Betriebsparameter sind Lösch- und Programmierspannungen sowie die Häufigkeit, mit welcher Benutzerdaten in den Blöcken aufgefrischt werden, um die Ladungspegel zurück in ihre optimalen Bereiche zu bringen. Blöcke mit niedrigen Zykluszählwerten können mit niedrigeren Programmier- und Löschspannungen betrieben werden, um dadurch deren Nutzungsdauer zu verlängern. Eine Datenauffrischung kann das Leistungsverhalten beeinträchtigen, wenn sie zu häufig erfolgt, Blocks mit niedrigen Zykluszählwerten werden also nicht so häufig aufgefrischt wie diejenigen mit hohen Zykluszählwerten. Der Zykluszählwert kann auch genutzt werden, um die Nutzung (den Verschleiß) der einzelnen Blöcke auszugleichen, indem eine Tabelle mit Zuordnung logischer zu physikalischen Blockadressen geändert wird, wenn die Unterschiede in der Nutzung verschiedener Blöcke bestimmte festgesetzte Grenzwerte übersteigen. Außerdem können, wenn irgendwelche Blöcke eine Anzahl von Zyklen erleben, die deren erwartete Nutzungsdauer übersteigt, diese Blöcke dauerhaft für die Speicherabbildung aus dem System ausgeschlossen werden.
  • Wenngleich die vorliegende Erfindung mit Bezug auf spezielle Ausführungsformen beschrieben worden ist, wird zu verstehen sein, dass die Erfindung Schutz mit dem vollständigen Schutzumfang der anhängenden Ansprüche beansprucht.

Claims (15)

  1. Verfahren zum Betreiben eines nichtflüchtigen Speichers mit einem Array von Speicherzellen, die zu Blöcken von Zellen organisiert sind, die zusammen als eine Einheit gelöscht werden können und die individuell mehrere Seiten von Benutzerdaten speichern, das die folgenden Schritte beinhaltet: (a) Speichern von Overhead-Daten in den individuellen Blöcken mit Informationen über den Betrieb des Blocks, in dem die Overhead-Daten gespeichert sind, und (b) eine Löschoperation, die Folgendes beinhaltet: Adressieren von einem oder mehreren der Blöcke zum Löschen, Lesen der Overhead-Daten aus den genannten ein oder mehreren Blöcken und vorübergehendes Speichern der gelesenen Overhead-Daten, Löschen der Speicherzellen in den genannten ein oder mehreren Blöcken, Aktualisieren der gelesenen Overhead-Daten, und Programmieren der aktualisierten Overhead-Daten zurück in jeweilige der genannten ein oder mehreren Blöcke, um dadurch die Seiten in den ein oder mehreren Blöcken zum Programmieren von Benutzerdaten darin verfügbar zu lassen, dadurch gekennzeichnet, dass das Programmieren der aktualisierten Overhead-Daten das Programmieren individueller Speicherzellen-Speicherelemente in einen von genau zwei Speicherzuständen beinhaltet, um dadurch ein Bit von Overhead-Daten pro Speicherelement zu speichern, und dadurch, dass nach der Löschoperation Benutzerdaten zu Seiten der genannten ein oder mehreren Blöcke programmiert werden, wobei die Programmierung das Programmieren individueller Speicherzellen-Speicherelemente in einen von mehr als zwei Speicherzuständen beinhaltet, um dadurch mehr als ein Bit von Benutzerdaten pro Speicherelement zu speichern.
  2. Verfahren nach Anspruch 1, bei dem die aktualisierten Overhead-Daten zu Reservezellen einer einzelnen Seite der jeweiligen der genannten ein oder mehreren Blöcke programmiert werden.
  3. Verfahren nach Anspruch 2, wobei die in den individuellen Blöcken gespeicherten Overhead-Daten eine Menge beinhalten, die die Anzahl von Löschoperationen angibt, denen der die Menge enthaltende Block unterzogen wurde, und wobei das Aktualisieren der Overhead-Daten das Aktualisieren der Zahl der Löschoperationen beinhaltet, so dass sie die aktuelle Löschoperation beinhaltet.
  4. Verfahren nach einem der vorherigen Ansprüche, wobei das Programmieren von Benutzerdaten das Programmieren von Kopfdaten in designierten Regionen der individuellen Seiten mit Informationen der in jeweiligen der Seiten programmierten Benutzerdaten beinhaltet, und wobei die aktualisierten Kopfdaten zu Reservezellen der Kopfregionen von mehr als einer Seite innerhalb jedes der genannten ein oder mehreren Blöcke programmiert werden.
  5. Verfahren nach Anspruch 4, wobei die in individuellen Seiten gespeicherten Kopfdaten einen Redundanzcode beinhalten, der anhand der Benutzerdaten der jeweiligen Seiten berechnet wurde, in denen die Benutzerdaten programmiert sind.
  6. Verfahren nach Anspruch 5, wobei der Redundanzcode einen Fehlerkorrekturcode beinhaltet.
  7. Verfahren nach einem der Ansprüche 1 bis 4, das das Berechnen eines Redundanzcodes von den Overhead-Daten beinhaltet, die in den einzelnen Blöcken gespeichert sind, und das ferner das Speichern des Redunanzcode in den einzelnen Blöcken beinhaltet, die die Overhead-Daten enthalten, von denen sie berechnet wurden.
  8. Verfahren nach Anspruch 7, wobei das Lesen der Overhead-Daten das Lesen des von den Overhead-Daten berechneten und darin gespeicherten Redundanzcode und das Prüfen der gelesenen Overhead-Daten anhand des gelesenen Redundanzcode beinhaltet, und wobei das Programmieren der aktualisierten Overhead-Daten das Berechnen eines Redundanzcode von den aktualisierten Overhead-Daten und das Speichern des berechneten Redundanzcode im selben Block wie die Overhead-Daten beinhaltet.
  9. Verfahren nach Anspruch 8, das, wenn das Prüfen der gelesenen Overhead-Daten anhand des gelesenen Redundanzcode ergibt, dass die Overhead-Daten ungültig sind, die folgenden Schritte beinhaltet: Markieren des Blocks, in dem sich die gelesenen Overhead-Daten und der Redunanzcode befinden, als unbenutzbar anstatt Löschen des Blocks, Aktualisieren der Overhead-Daten oder Programmieren des Blocks entweder mit aktualisierten Overhead- oder mit Benutzerdaten.
  10. Verfahren nach Anspruch 9, das zusätzlich das Markieren des unbenutzbaren Blocks als ungültig durch Setzen eines Flag als Teil der Overhead-Daten in dem unbenutzbaren Block beinhaltet.
  11. Verfahren nach einem der vorherigen Ansprüche, das in einem Fall, in dem die Overhead-Daten entweder vor dem Aktualisieren der Overhead-Daten oder vor dem Programmieren der aktualisierten Overhead-Daten zurück in die genannten ein oder mehreren Blöcke verloren gehen, den Schritt des Markierens der genannten ein oder mehreren Blöcke als unbenutzbar anstatt Programmieren von Benutzerdaten in Seiten der genannten ein oder mehreren Blöcke beinhaltet.
  12. Verfahren nach einem der vorherigen Ansprüche, wobei das Löschen der Speicherzellen das Ansteuern der Ladung auf Speicherzellen-Speicherelementen in einen ersten Bereich beinhaltet, wobei das Programmieren der Overhead-Daten das Ansteuern eines Teils der Speicherzellen-Speicherelemente in einen zweiten Bereich gemäß den Overhead-Daten beinhaltet, und wobei das Programmieren von Benutzerdaten zusätzlich das Programmieren individueller Speicherzellen-Speicherelemente in wenigstens einen dritten und einen vierten Ladungsbereich beinhaltet, die weiter von dem ersten Bereich entfernt sind als der zweite Bereich.
  13. Verfahren nach einem der vorherigen Ansprüche, wobei das Programmieren der Benutzerdaten das Anlegen aufeinander folgender Programmierimpulse, getrennt durch eine Überprüfung der Zustände der Zellen, bis die gewünschten programmierten Zustände erreicht sind, beinhaltet, wobei die Größe der individuellen Impulse um einen ersten Betrag zunehmen und wobei das Programmieren der Overhead-Daten das Anlegen aufeinander folgender Programmierimpulse beinhaltet, getrennt durch eine Überprüfung des Zustands der Zellen, bis die gewünschten programmierten Zustände erreicht sind, wobei die Größe der individuellen Impulse um einen zweiten Betrag zunimmt, der höher ist als der erste Betrag, um dadurch die Overhead-Daten schneller zu programmieren als die Benutzerdaten.
  14. Verfahren nach einem der vorherigen Ansprüche, wobei das Array von Speicherzellen ein NAND-Array ist.
  15. Nichtflüchtiges Speichersystem mit einem Array von Speicherzellen, die zu Blöcken von Zellen organisiert sind, die zusammen als eine Einheit gelöscht werden können und die individuell mehrere Seiten von Benutzerdaten speichern, wobei das nichtflüchtige Speichersystem Folgendes umfasst: Mittel zum Speichern von Overhead-Daten in den individuellen Blöcken von Informationen über den Betrieb des Blocks, in dem die Overhead-Daten gespeichert sind; und Mittel zum Ausführen einer Löschoperation, das Folgendes umfasst: Mittel zum Adressieren von einem oder mehreren der Blöcke zum Löschen; Mittel zum Lesen von Overhead-Daten aus den genannten ein oder mehreren Blöcken; Mittel zum vorübergehenden Speichern der gelesenen Overhead-Daten; Mittel zum Löschen der Speicherzellen in den genannten ein oder mehreren Blöcken; und Mittel zum Aktualisieren der gelesenen Overhead-Daten; wobei das Mittel zum Speichern von Overhead-Daten die Aufgabe hat, die aktualisierten Overhead-Daten zurück in jeweilige der genannten ein oder mehreren Blöcke zu programmieren, um dadurch die Seiten in den ein oder mehreren Blöcken zum Programmieren von Benutzerdaten darin verfügbar zu halten, dadurch gekennzeichnet, dass: das Mittel zum Speichern von Overhead-Daten ferner die Aufgabe hat, die aktualisierten Overhead-Daten durch Programmieren individueller Speicherzellen-Speicherelemente in einen von genau zwei Speicherzuständen zu programmieren, um dadurch ein Bit von Overhead-Daten pro Speicherelement zu speichern; und dadurch, dass das Mittel zum Programmieren von Daten die Aufgabe hat, Benutzerdaten zu Seiten der genannten ein oder mehreren Blöcke zu programmieren, inklusive Programmieren individueller Speicherzellen-Speicherelemente in einen von mehr als zwei Speicherzuständen, um dadurch mehr als ein Bit von Benutzerdaten pro Speicherelement zu speichern.
DE60319437T 2003-01-28 2003-12-18 Nichtflüchtiger halbleiterspeicher mit zykluszählwerte speichernden grossen löschblöcken Expired - Lifetime DE60319437T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/353,574 US6944063B2 (en) 2003-01-28 2003-01-28 Non-volatile semiconductor memory with large erase blocks storing cycle counts
US353574 2003-01-28
PCT/US2003/040361 WO2004070731A1 (en) 2003-01-28 2003-12-18 Non-volatile semiconductor memory with large erase blocks storing cycle counts

Publications (2)

Publication Number Publication Date
DE60319437D1 DE60319437D1 (de) 2008-04-10
DE60319437T2 true DE60319437T2 (de) 2009-02-19

Family

ID=32736208

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60319437T Expired - Lifetime DE60319437T2 (de) 2003-01-28 2003-12-18 Nichtflüchtiger halbleiterspeicher mit zykluszählwerte speichernden grossen löschblöcken

Country Status (10)

Country Link
US (4) US6944063B2 (de)
EP (2) EP1975942B1 (de)
JP (1) JP4648006B2 (de)
KR (1) KR101089575B1 (de)
CN (1) CN1754230B (de)
AT (1) ATE387715T1 (de)
AU (1) AU2003297327A1 (de)
DE (1) DE60319437T2 (de)
TW (1) TWI323466B (de)
WO (1) WO2004070731A1 (de)

Families Citing this family (101)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7246268B2 (en) * 2002-01-16 2007-07-17 Sandisk Corporation Method and apparatus for dynamic degradation detection
JP4230753B2 (ja) * 2002-10-30 2009-02-25 株式会社東芝 半導体メモリ
JP3935139B2 (ja) 2002-11-29 2007-06-20 株式会社東芝 半導体記憶装置
US6944063B2 (en) * 2003-01-28 2005-09-13 Sandisk Corporation Non-volatile semiconductor memory with large erase blocks storing cycle counts
US6906961B2 (en) 2003-06-24 2005-06-14 Micron Technology, Inc. Erase block data splitting
US7139863B1 (en) * 2003-09-26 2006-11-21 Storage Technology Corporation Method and system for improving usable life of memory devices using vector processing
US7171526B2 (en) * 2003-11-07 2007-01-30 Freescale Semiconductor, Inc. Memory controller useable in a data processing system
US7143332B1 (en) * 2003-12-16 2006-11-28 Xilinx, Inc. Methods and structures for providing programmable width and error correction in memory arrays in programmable logic devices
JP4660316B2 (ja) * 2004-09-03 2011-03-30 パナソニック株式会社 不揮発性メモリ装置
US7259989B2 (en) * 2004-09-03 2007-08-21 Matsushita Electric Industrial Co., Ltd. Non-volatile memory device
ATE428421T1 (de) 2004-09-17 2009-05-15 Eisai R&D Man Co Ltd Medizinische zusammensetzung mit verbesserter stabilität und reduzierten gelierungseigenschaften
US7275190B2 (en) 2004-11-08 2007-09-25 Micron Technology, Inc. Memory block quality identification in a memory device
US7412560B2 (en) * 2004-12-16 2008-08-12 Sandisk Corporation Non-volatile memory and method with multi-stream updating
KR100669342B1 (ko) * 2004-12-21 2007-01-16 삼성전자주식회사 낸드 플래시 메모리 장치의 프로그램 방법
KR100672121B1 (ko) 2005-01-12 2007-01-19 주식회사 하이닉스반도체 불휘발성 메모리 장치 및 그것의 프로그램/판독 방법
US20060256623A1 (en) * 2005-05-12 2006-11-16 Micron Technology, Inc. Partial string erase scheme in a flash memory device
JP4575288B2 (ja) * 2005-12-05 2010-11-04 株式会社東芝 記憶媒体、記憶媒体再生装置、記憶媒体再生方法および記憶媒体再生プログラム
KR100703806B1 (ko) * 2006-02-16 2007-04-09 삼성전자주식회사 비휘발성 메모리, 이를 위한 데이터 유효성을 판단하는장치 및 방법
US7467253B2 (en) * 2006-04-13 2008-12-16 Sandisk Corporation Cycle count storage systems
US7451264B2 (en) * 2006-04-13 2008-11-11 Sandisk Corporation Cycle count storage methods
US7495966B2 (en) * 2006-05-01 2009-02-24 Micron Technology, Inc. Memory voltage cycle adjustment
US7653778B2 (en) 2006-05-08 2010-01-26 Siliconsystems, Inc. Systems and methods for measuring the useful life of solid-state storage devices
KR100736103B1 (ko) * 2006-06-27 2007-07-06 삼성전자주식회사 비휘발성 메모리, 상기 비휘발성 메모리의 데이터 유효성을판단하는 장치 및 방법
JP2008009527A (ja) * 2006-06-27 2008-01-17 Toshiba Corp メモリシステム
JP5002201B2 (ja) * 2006-06-30 2012-08-15 株式会社東芝 メモリシステム
US7529969B1 (en) * 2006-08-24 2009-05-05 Micron Technology, Inc. Memory device internal parameter reliability
US7525838B2 (en) * 2006-08-30 2009-04-28 Samsung Electronics Co., Ltd. Flash memory device and method for programming multi-level cells in the same
US7602650B2 (en) * 2006-08-30 2009-10-13 Samsung Electronics Co., Ltd. Flash memory device and method for programming multi-level cells in the same
KR100805840B1 (ko) * 2006-09-01 2008-02-21 삼성전자주식회사 캐시를 이용한 플래시 메모리 장치 및 그것의 프로그램방법
US20080077840A1 (en) * 2006-09-27 2008-03-27 Mark Shaw Memory system and method for storing and correcting data
KR100908526B1 (ko) * 2006-09-29 2009-07-20 주식회사 하이닉스반도체 플래쉬 메모리 장치 및 그의 소거 방법
US8549236B2 (en) * 2006-12-15 2013-10-01 Siliconsystems, Inc. Storage subsystem with multiple non-volatile memory arrays to protect against data losses
TW200828320A (en) 2006-12-28 2008-07-01 Genesys Logic Inc Method for performing static wear leveling on flash memory
US7870457B2 (en) * 2006-12-29 2011-01-11 Sandisk Corporation Page by page ECC variation in a memory device
US7877665B2 (en) * 2006-12-29 2011-01-25 Sandisk Corporation Page by page ECC variation in a memory device
WO2008083161A1 (en) * 2006-12-29 2008-07-10 Sandisk Corporation Page by page ecc variation in a memory device
US7925151B2 (en) * 2007-01-31 2011-04-12 Kobre Kenneth R Device for redirecting and reflecting light from camera flash and methods for using same
US7596643B2 (en) * 2007-02-07 2009-09-29 Siliconsystems, Inc. Storage subsystem with configurable buffer
US7958301B2 (en) * 2007-04-10 2011-06-07 Marvell World Trade Ltd. Memory controller and method for memory pages with dynamically configurable bits per cell
KR100866626B1 (ko) * 2007-07-02 2008-11-03 삼성전자주식회사 스페어 영역을 갖는 비휘발성 메모리 장치 및 그의 블록소거 방법
KR101397549B1 (ko) * 2007-08-16 2014-05-26 삼성전자주식회사 고속 프로그램이 가능한 불휘발성 반도체 메모리 시스템 및그것의 독출 방법
CN101383186B (zh) * 2007-09-05 2011-09-14 联咏科技股份有限公司 与非门型闪速存储器的编程方法与装置以及读取方法
US20090080258A1 (en) * 2007-09-21 2009-03-26 Walker Andrew J Erase method in thin film nonvolatile memory
US7894263B2 (en) * 2007-09-28 2011-02-22 Sandisk Corporation High voltage generation and control in source-side injection programming of non-volatile memory
US8045373B2 (en) * 2007-10-02 2011-10-25 Cypress Semiconductor Corporation Method and apparatus for programming memory cell array
NZ562200A (en) * 2007-10-04 2008-11-28 Arc Innovations Ltd Method and system for updating a stored data value in a non-volatile memory
US8261013B2 (en) * 2007-11-26 2012-09-04 Hyperstone Gmbh Method for even utilization of a plurality of flash memory chips
US7925822B2 (en) * 2008-01-31 2011-04-12 Sandisk Il Ltd Erase count recovery
US8078918B2 (en) * 2008-02-07 2011-12-13 Siliconsystems, Inc. Solid state storage subsystem that maintains and provides access to data reflective of a failure risk
US7962792B2 (en) * 2008-02-11 2011-06-14 Siliconsystems, Inc. Interface for enabling a host computer to retrieve device monitor data from a solid state storage subsystem
JP5214422B2 (ja) * 2008-02-15 2013-06-19 株式会社東芝 データ記憶システム
US8788923B2 (en) * 2008-07-01 2014-07-22 Lsi Corporation Methods and apparatus for soft demapping and intercell interference mitigation in flash memories
TWI364661B (en) * 2008-09-25 2012-05-21 Silicon Motion Inc Access methods for a flash memory and memory devices
CN102855943B (zh) * 2008-11-28 2017-04-12 群联电子股份有限公司 错误校正控制器及其闪存芯片系统与错误校正方法
US8825940B1 (en) 2008-12-02 2014-09-02 Siliconsystems, Inc. Architecture for optimizing execution of storage access commands
US8291297B2 (en) * 2008-12-18 2012-10-16 Intel Corporation Data error recovery in non-volatile memory
US8700840B2 (en) 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
US8244960B2 (en) * 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US8094500B2 (en) 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
US8040744B2 (en) * 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US9176859B2 (en) * 2009-01-07 2015-11-03 Siliconsystems, Inc. Systems and methods for improving the performance of non-volatile memory operations
KR101038991B1 (ko) * 2009-03-10 2011-06-03 주식회사 하이닉스반도체 메모리 영역의 균등한 사용을 위한 반도체 스토리지 시스템및 그 제어 방법
US10079048B2 (en) * 2009-03-24 2018-09-18 Western Digital Technologies, Inc. Adjusting access of non-volatile semiconductor memory based on access time
KR101586047B1 (ko) * 2009-03-25 2016-01-18 삼성전자주식회사 불휘발성 메모리 장치 및 그것의 프로그램 방법
TWI404071B (zh) * 2009-06-23 2013-08-01 Phison Electronics Corp 能識別快閃記憶體中錯誤資料的控制電路及儲存系統與方法
JP2010055745A (ja) * 2009-12-07 2010-03-11 Toshiba Corp 記憶媒体
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
CN102543198B (zh) * 2010-12-20 2015-11-25 北京兆易创新科技股份有限公司 一种mlc存储单元的编程方法和装置
KR20120096212A (ko) * 2011-02-22 2012-08-30 삼성전자주식회사 비휘발성 메모리 장치, 메모리 컨트롤러, 및 이들의 동작 방법
KR20120128014A (ko) 2011-05-16 2012-11-26 삼성전자주식회사 불휘발성 메모리 장치의 동작 방법 및 불휘발성 메모리 장치를 포함하는 메모리 시스템의 동작 방법
KR20120128978A (ko) * 2011-05-18 2012-11-28 삼성전자주식회사 데이터 저장 장치 및 그것의 데이터 관리 방법
US8902653B2 (en) 2011-08-12 2014-12-02 Micron Technology, Inc. Memory devices and configuration methods for a memory device
KR20130033017A (ko) * 2011-09-26 2013-04-03 에스케이하이닉스 주식회사 불휘발성 메모리 장치의 동작 방법
JP5781047B2 (ja) * 2012-10-17 2015-09-16 株式会社東芝 記憶媒体
US8634247B1 (en) * 2012-11-09 2014-01-21 Sandisk Technologies Inc. NAND flash based content addressable memory
JP2013137792A (ja) * 2013-02-28 2013-07-11 Toshiba Corp 電子機器及びその制御方法
US9075424B2 (en) 2013-03-06 2015-07-07 Sandisk Technologies Inc. Compensation scheme to improve the stability of the operational amplifiers
US8908441B1 (en) * 2013-10-15 2014-12-09 Sandisk Technologies Inc. Double verify method in multi-pass programming to suppress read noise
TWI515737B (zh) * 2013-12-09 2016-01-01 慧榮科技股份有限公司 資料儲存裝置以及其資料抹除方法
US20150169438A1 (en) * 2013-12-18 2015-06-18 Infineon Technologies Ag Method and device for incrementing an erase counter
US9190142B2 (en) 2014-03-12 2015-11-17 Kabushiki Kaisha Toshiba Semiconductor memory device and method of controlling the same
US9230689B2 (en) * 2014-03-17 2016-01-05 Sandisk Technologies Inc. Finding read disturbs on non-volatile memories
US9811458B2 (en) 2014-03-19 2017-11-07 Htc Corporation Mobile electronic device and method for clearing memory blocks based on processor determination of physical block to erase in response to GUI input from user specified time and directing controller to erase within the specified time
CN104932981B (zh) * 2014-03-20 2018-05-25 宏达国际电子股份有限公司 移动电子装置与清理存储区块的方法
US9607703B2 (en) 2014-09-08 2017-03-28 Kabushiki Kaisha Toshiba Memory system
US9305638B1 (en) * 2014-10-29 2016-04-05 Macronix International Co., Ltd. Operation method for memory device
US9852799B2 (en) 2014-11-19 2017-12-26 Sandisk Technologies Llc Configuration parameter management for non-volatile data storage
US10643700B2 (en) * 2015-10-29 2020-05-05 Micron Technology, Inc. Apparatuses and methods for adjusting write parameters based on a write count
FR3044818B1 (fr) 2015-12-02 2018-03-30 Stmicroelectronics (Rousset) Sas Procede de gestion d'une ligne defectueuse du plan memoire d'une memoire non volatile et dispositif de memoire correspondant
TWI604455B (zh) * 2016-05-13 2017-11-01 Silicon Motion Inc 資料儲存裝置、記憶體控制器及其資料管理方法與資料區塊管理方法
KR20180031853A (ko) * 2016-09-19 2018-03-29 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
CN109935264B (zh) * 2017-12-18 2021-03-26 北京兆易创新科技股份有限公司 一种存储单元的擦除方法、装置及存储器
US10586584B2 (en) * 2018-06-01 2020-03-10 Samsung Electronics Co., Ltd. Semiconductor semiconductor memory devices, memory systems and methods of operating memory devices
US10978156B2 (en) 2018-06-29 2021-04-13 Sandisk Technologies Llc Concurrent programming of multiple cells for non-volatile memory devices
US11545221B2 (en) 2018-06-29 2023-01-03 Sandisk Technologies Llc Concurrent programming of multiple cells for non-volatile memory devices
KR102387960B1 (ko) * 2018-07-23 2022-04-19 삼성전자주식회사 컨트롤러 및 그것의 동작 방법
US10891077B2 (en) * 2018-12-26 2021-01-12 Macronix International Co., Ltd. Flash memory device and controlling method thereof
JP2020144554A (ja) * 2019-03-05 2020-09-10 キオクシア株式会社 記憶装置およびデータ読出方法
JP6727365B1 (ja) * 2019-03-27 2020-07-22 ウィンボンド エレクトロニクス コーポレーション 半導体記憶装置
CN110865772A (zh) * 2019-11-11 2020-03-06 深圳忆联信息系统有限公司 保护系统数据物理块擦除计数值的方法、装置、计算机设备及存储介质
KR20210152673A (ko) * 2020-06-09 2021-12-16 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법

Family Cites Families (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US568870A (en) * 1896-10-06 Mark m
JPS59111370A (ja) 1982-12-16 1984-06-27 Seiko Instr & Electronics Ltd 不揮発性半導体メモリ
US5043940A (en) 1988-06-08 1991-08-27 Eliyahou Harari Flash EEPROM memory systems having multistate storage cells
US5268870A (en) 1988-06-08 1993-12-07 Eliyahou Harari Flash EEPROM system and intelligent programming and erasing methods therefor
US5095344A (en) 1988-06-08 1992-03-10 Eliyahou Harari Highly compact eprom and flash eeprom devices
US5844842A (en) * 1989-02-06 1998-12-01 Hitachi, Ltd. Nonvolatile semiconductor memory device
US5070032A (en) 1989-03-15 1991-12-03 Sundisk Corporation Method of making dense flash eeprom semiconductor memory structures
US5172338B1 (en) 1989-04-13 1997-07-08 Sandisk Corp Multi-state eeprom read and write circuits and techniques
EP0392895B1 (de) 1989-04-13 1995-12-13 Sundisk Corporation EEprom-System mit Blocklöschung
US5291440A (en) * 1990-07-30 1994-03-01 Nec Corporation Non-volatile programmable read only memory device having a plurality of memory cells each implemented by a memory transistor and a switching transistor stacked thereon
US5343063A (en) 1990-12-18 1994-08-30 Sundisk Corporation Dense vertical programmable read only memory cell structure and processes for making them
US6230233B1 (en) 1991-09-13 2001-05-08 Sandisk Corporation Wear leveling techniques for flash EEPROM systems
US5438573A (en) 1991-09-13 1995-08-01 Sundisk Corporation Flash EEPROM array data and header file structure
US5281075A (en) * 1991-11-15 1994-01-25 Tatman Darrell J Apparatus for transporting recreational type vehicles
US5313421A (en) 1992-01-14 1994-05-17 Sundisk Corporation EEPROM with split gate source side injection
US6222762B1 (en) 1992-01-14 2001-04-24 Sandisk Corporation Multi-state memory
US5712180A (en) 1992-01-14 1998-01-27 Sundisk Corporation EEPROM with split gate source side injection
US5315541A (en) 1992-07-24 1994-05-24 Sundisk Corporation Segmented column memory array
JPH0750558B2 (ja) 1992-09-22 1995-05-31 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリ
US5485595A (en) 1993-03-26 1996-01-16 Cirrus Logic, Inc. Flash memory mass storage architecture incorporating wear leveling technique without using cam cells
US5555204A (en) 1993-06-29 1996-09-10 Kabushiki Kaisha Toshiba Non-volatile semiconductor memory device
US5443063A (en) * 1993-08-31 1995-08-22 The Johns Hopkins University Cuffed oro-pharyngeal airway
US5887145A (en) 1993-09-01 1999-03-23 Sandisk Corporation Removable mother/daughter peripheral card
KR0169267B1 (ko) 1993-09-21 1999-02-01 사토 후미오 불휘발성 반도체 기억장치
US5661053A (en) 1994-05-25 1997-08-26 Sandisk Corporation Method of making dense flash EEPROM cell array and peripheral supporting circuits formed in deposited field oxide with the use of spacers
JP3153730B2 (ja) * 1995-05-16 2001-04-09 株式会社東芝 不揮発性半導体記憶装置
US5930815A (en) * 1995-07-31 1999-07-27 Lexar Media, Inc. Moving sequential sectors within a block of information in a flash memory mass storage architecture
US6081878A (en) * 1997-03-31 2000-06-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US5838614A (en) 1995-07-31 1998-11-17 Lexar Microsystems, Inc. Identification and verification of a sector within a block of mass storage flash memory
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
KR100253868B1 (ko) * 1995-11-13 2000-05-01 니시무로 타이죠 불휘발성 반도체기억장치
US5619448A (en) * 1996-03-14 1997-04-08 Myson Technology, Inc. Non-volatile memory device and apparatus for reading a non-volatile memory array
US5903495A (en) 1996-03-18 1999-05-11 Kabushiki Kaisha Toshiba Semiconductor device and memory system
JPH09330598A (ja) * 1996-06-10 1997-12-22 Mitsubishi Electric Corp 記憶装置及びその特性劣化状態判定方法
US6335878B1 (en) * 1998-07-28 2002-01-01 Hitachi, Ltd. Non-volatile multi-level semiconductor flash memory device and method of driving same
US5860124A (en) * 1996-09-30 1999-01-12 Intel Corporation Method for performing a continuous over-write of a file in nonvolatile memory
JP3930074B2 (ja) * 1996-09-30 2007-06-13 株式会社ルネサステクノロジ 半導体集積回路及びデータ処理システム
US5956473A (en) * 1996-11-25 1999-09-21 Macronix International Co., Ltd. Method and system for managing a flash memory mass storage system
JP3946849B2 (ja) * 1997-01-17 2007-07-18 株式会社東芝 不揮発性半導体記憶装置及びその消去方法
US6028794A (en) 1997-01-17 2000-02-22 Kabushiki Kaisha Toshiba Nonvolatile semiconductor memory device and erasing method of the same
US5928370A (en) 1997-02-05 1999-07-27 Lexar Media, Inc. Method and apparatus for verifying erasure of memory blocks within a non-volatile memory structure
JPH10320984A (ja) 1997-05-15 1998-12-04 Sharp Corp 記憶装置
US5930167A (en) 1997-07-30 1999-07-27 Sandisk Corporation Multi-state non-volatile flash memory capable of being its own two state write cache
US5822251A (en) * 1997-08-25 1998-10-13 Bit Microsystems, Inc. Expandable flash-memory mass-storage using shared buddy lines and intermediate flash-bus between device-specific buffers and flash-intelligent DMA controllers
JP3788205B2 (ja) 1997-09-30 2006-06-21 ソニー株式会社 記憶装置、データ処理システム、データの書き込み及び読み出し方法並びにデータ処理装置
US5851881A (en) 1997-10-06 1998-12-22 Taiwan Semiconductor Manufacturing Company, Ltd. Method of making monos flash memory for multi-level logic
US6034891A (en) * 1997-12-01 2000-03-07 Micron Technology, Inc. Multi-state flash memory defect management
JPH11224491A (ja) * 1997-12-03 1999-08-17 Sony Corp 不揮発性半導体記憶装置およびそれを用いたicメモリカード
US6076137A (en) 1997-12-11 2000-06-13 Lexar Media, Inc. Method and apparatus for storing location identification information within non-volatile memory devices
US6614070B1 (en) * 1998-04-16 2003-09-02 Cypress Semiconductor Corporation Semiconductor non-volatile memory device having a NAND cell structure
JPH11328990A (ja) * 1998-05-15 1999-11-30 Hitachi Ltd 半導体集積回路装置およびそれを用いたメモリカード
US6567302B2 (en) * 1998-12-29 2003-05-20 Micron Technology, Inc. Method and apparatus for programming multi-state cells in a memory device
US6281075B1 (en) 1999-01-27 2001-08-28 Sandisk Corporation Method of controlling of floating gate oxide growth by use of an oxygen barrier
JP2000285688A (ja) * 1999-04-01 2000-10-13 Mitsubishi Electric Corp 不揮発性半導体記憶装置
US6103573A (en) 1999-06-30 2000-08-15 Sandisk Corporation Processing techniques for making a dual floating gate EEPROM cell array
US6151248A (en) 1999-06-30 2000-11-21 Sandisk Corporation Dual floating gate EEPROM cell array with steering gates shared by adjacent cells
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
US6721843B1 (en) * 2000-07-07 2004-04-13 Lexar Media, Inc. Flash memory architecture implementing simultaneously programmable multiple flash memory banks that are host compatible
US7113432B2 (en) 2000-09-14 2006-09-26 Sandisk Corporation Compressed event counting technique and application to a flash memory system
US6345001B1 (en) * 2000-09-14 2002-02-05 Sandisk Corporation Compressed event counting technique and application to a flash memory system
US6512263B1 (en) 2000-09-22 2003-01-28 Sandisk Corporation Non-volatile memory cell array having discontinuous source and drain diffusions contacted by continuous bit line conductors and methods of forming
JP2001188713A (ja) * 2000-11-15 2001-07-10 Fujitsu Ltd 記憶装置の管理方法
US6684289B1 (en) * 2000-11-22 2004-01-27 Sandisk Corporation Techniques for operating non-volatile memory systems with data sectors having different sizes than the sizes of the pages and/or blocks of the memory
JP2002197878A (ja) * 2000-12-26 2002-07-12 Hitachi Ltd 半導体装置及びデータ処理システム
US6763424B2 (en) 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
US6738289B2 (en) 2001-02-26 2004-05-18 Sandisk Corporation Non-volatile memory with improved programming and method therefor
JP4282248B2 (ja) * 2001-03-30 2009-06-17 株式会社東芝 半導体記憶装置
US7158517B2 (en) * 2001-05-21 2007-01-02 Intel Corporation Method and apparatus for frame-based protocol processing
US6522580B2 (en) 2001-06-27 2003-02-18 Sandisk Corporation Operating techniques for reducing effects of coupling between storage elements of a non-volatile memory operated in multiple data states
US6762092B2 (en) 2001-08-08 2004-07-13 Sandisk Corporation Scalable self-aligned dual floating gate memory cell array and methods of forming the array
US6948026B2 (en) * 2001-08-24 2005-09-20 Micron Technology, Inc. Erase block management
US6456528B1 (en) 2001-09-17 2002-09-24 Sandisk Corporation Selective operation of a multi-state non-volatile memory system in a binary mode
GB0123416D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
US6925007B2 (en) 2001-10-31 2005-08-02 Sandisk Corporation Multi-state non-volatile integrated circuit memory systems that employ dielectric storage elements
US6967872B2 (en) * 2001-12-18 2005-11-22 Sandisk Corporation Method and system for programming and inhibiting multi-level, non-volatile memory cells
US6781877B2 (en) * 2002-09-06 2004-08-24 Sandisk Corporation Techniques for reducing effects of coupling between storage elements of adjacent rows of memory cells
US7181611B2 (en) * 2002-10-28 2007-02-20 Sandisk Corporation Power management block for use in a non-volatile memory system
US6829167B2 (en) * 2002-12-12 2004-12-07 Sandisk Corporation Error recovery for nonvolatile memory
US6944063B2 (en) * 2003-01-28 2005-09-13 Sandisk Corporation Non-volatile semiconductor memory with large erase blocks storing cycle counts

Also Published As

Publication number Publication date
US7394692B2 (en) 2008-07-01
EP1588379B1 (de) 2008-02-27
JP2006513525A (ja) 2006-04-20
US20060206770A1 (en) 2006-09-14
EP1975942B1 (de) 2012-06-06
US20040145952A1 (en) 2004-07-29
WO2004070731A1 (en) 2004-08-19
US6944063B2 (en) 2005-09-13
US20050102466A1 (en) 2005-05-12
US7307881B2 (en) 2007-12-11
AU2003297327A1 (en) 2004-08-30
JP4648006B2 (ja) 2011-03-09
TW200421349A (en) 2004-10-16
ATE387715T1 (de) 2008-03-15
AU2003297327A8 (en) 2004-08-30
KR20050116796A (ko) 2005-12-13
EP1975942A1 (de) 2008-10-01
CN1754230A (zh) 2006-03-29
CN1754230B (zh) 2010-10-06
US20050099870A1 (en) 2005-05-12
DE60319437D1 (de) 2008-04-10
US7085161B2 (en) 2006-08-01
EP1588379A1 (de) 2005-10-26
KR101089575B1 (ko) 2011-12-05
TWI323466B (en) 2010-04-11

Similar Documents

Publication Publication Date Title
DE60319437T2 (de) Nichtflüchtiger halbleiterspeicher mit zykluszählwerte speichernden grossen löschblöcken
DE60304220T2 (de) Techniken zur reduzierung von kopplungseffekten zwischen speicherzellen benachbarter zeilen
DE60214023T2 (de) Selektiver betrieb eines nichtflüchtigen mehrzustandsspeichersystems in einem binärmodus
DE4207934C2 (de) Nichtflüchtige Halbleiterspeichervorrichtung und Programmierverfahren für eine nichtflüchtige Halbleiterspeichervorrichtung
DE60220590T2 (de) Verfahren zur Reduzierung von Kopplungseffekten zwischen multi-level Speicherelementen eines nicht flüchtigen Speichers
DE602005003924T2 (de) Programmierung nicht-flüchtiger speicher
DE69729502T2 (de) Mehrpegelspeicher-System
DE19880311B3 (de) Nichtflüchtige Speicherstruktur
DE102008005338B4 (de) Integrierter Schaltkreis mit einer Speicherzellenanordnung und Verfahren zum Lesen eines Speicherzellenzustands unter Verwendung einer Mehrzahl von Teil-Leseoperationen
DE602004013347T2 (de) Verfahren zum identifizieren nichtflüchtiger speicherelmente mit schlechter subschwellensteigung oder schwacher transkonduktanz
DE112008001151B4 (de) Mehrbitprogrammiervorrichtung und Verfahren zum Mehrbitprogrammieren
DE102013100596B4 (de) Nichtflüchtiges Speichersystem mit Programmier- und Löschverfahren und Blockverwaltungsverfahren
DE112005000866T5 (de) Verfahren und Systeme zur Erreichung einer hohen Schreibleistung in Multibit-Speichervorrichtungen
DE102008007685B4 (de) Integrierte Schaltung und Verfahren zum Betreiben einer integrierten Schaltung
DE102007041845A1 (de) Verfahren zum Betreiben eines integrierten Schaltkreises mit mindestens einer Speicherzelle
DE102020105946A1 (de) Speicherzellen-fehlform-abschwächung
DE102019124668A1 (de) Transistorschwellenspannungshaltung in 3d-speicher
DE102008033518A1 (de) Datenverarbeitungsverfahren für eine Solid-State-Disk-Steuereinheit, Solid-State-Disk-Steuereinheit und Datenspeicherelement
DE102008003637A1 (de) Integrierter Schaltkreis, Verfahren zum Programmieren einer Speicherzellen-Anordnung eines Integrierten Schaltkreises, und Speichermodul
DE69731255T2 (de) Verfahren zum Löschen eines nichtflüchtigen Speichers
DE102020107504A1 (de) Nichtflüchtiges speicher-array, das zur leistungsverbesserung von beiden seiten angesteuert wird
DE102010037064A1 (de) Nichtflüchtige Speichervorrichtung und -system sowie Verfahren des Programmierens einer nichtflüchtigen Speichervorrichtung
DE69627318T2 (de) Mehrpegelige nichtflüchtige Speicheranordnung
DE102015117496A1 (de) Steuerung der zeitbereich-anstiegsquote für die löschsperre im flash-speicher
DE60204600T2 (de) Verfahren und Vorrichtung zur Softprogrammverfikation in einem Speicherbaustein

Legal Events

Date Code Title Description
8381 Inventor (new situation)

Inventor name: CHEN, JIAN, SAN JOSE, CALIF., US

Inventor name: TANAKA, TOMOHARU, MINATO-KU, TOKYO, JP

8364 No opposition during term of opposition