DE69839126T2 - Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher - Google Patents

Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher Download PDF

Info

Publication number
DE69839126T2
DE69839126T2 DE69839126T DE69839126T DE69839126T2 DE 69839126 T2 DE69839126 T2 DE 69839126T2 DE 69839126 T DE69839126 T DE 69839126T DE 69839126 T DE69839126 T DE 69839126T DE 69839126 T2 DE69839126 T2 DE 69839126T2
Authority
DE
Germany
Prior art keywords
block
lba
sector
location
value
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
DE69839126T
Other languages
English (en)
Other versions
DE69839126D1 (de
Inventor
Petro Pleasanton ESTAKHRI
Berhau Sunnyvale IMAN
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Micron Technology Inc
Original Assignee
Lexar Media Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=25484324&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=DE69839126(T2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Lexar Media Inc filed Critical Lexar Media Inc
Publication of DE69839126D1 publication Critical patent/DE69839126D1/de
Application granted granted Critical
Publication of DE69839126T2 publication Critical patent/DE69839126T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • 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/08Address circuits; Decoders; Word-line control circuits
    • 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/10Programming or data input circuits
    • G11C16/102External programming circuits, e.g. EPROM programmers; In-circuit programming or reprogramming; EPROM emulators
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/76Masking faults in memories by using spares or by reconfiguring using address translation or modifications
    • G11C29/765Masking faults in memories by using spares or by reconfiguring using address translation or modifications in solid state disks
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/78Masking faults in memories by using spares or by reconfiguring using programmable devices
    • G11C29/80Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout
    • G11C29/816Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout for an application-specific layout
    • G11C29/82Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout for an application-specific layout for EEPROMs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies

Landscapes

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

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich auf das Gebiet der Massenspeicher für Computer. Insbesondere bezieht sich die vorliegende Erfindung auf eine Architektur zum Ersetzen einer Festplatte durch einen nichtflüchtigen Halbleiterspeicher und besonders einen Flash-Speicher.
  • Stand der Technik
  • Computer verwenden üblicherweise sich drehende magnetische Medien als Massenspeicher für Dokumente, Daten, Programme und Informationen. Obwohl weithin verwendet und allgemein anerkannt, weisen derartige Festplattenlaufwerke eine Vielzahl von Mängeln auf. Aufgrund der Drehung der Platte kommt es zu einer inhärenten Latenz- oder Wartezeit beim Extrahieren von Informationen aus einem Festplattenlaufwerk.
  • Weitere Probleme sind vor allem bei tragbaren Computer schwerwiegend. Insbesondere können Festplatten vielen Arten von physikalischen Beanspruchungen und Stößen nicht standhalten, denen ein tragbarer Computer ausgesetzt ist. Außerdem verbraucht der Motor zum Drehen der Platte erhebliche Mengen Energie, was die Batterielebensdauer von tragbaren Computern verringert.
  • Halbleiterspeicher sind eine ideale Alternative als Ersatz für ein Festplattenlaufwerk für die Massenspeicherung, weil sie die vorstehend genannten Probleme lösen können. Mögliche Lösungen zum Ersatz eines Festplattenlaufwerks durch einen Halbleiterspeicher sind vorgeschlagen worden. Damit ein solches System wirklich sinnvoll ist, muss der Speicher nichtflüchtig und änderbar sein. Die Erfinder haben festgestellt, dass Flash-Speicher für einen solchen Ersatz bevorzugt werden.
  • Ein Flash-Speicher ist eine Transistor-Speicherzelle, die mittels heißer Elektronen, Source-Injektion oder Tunneln programmierbar und durch Fowler-Nordheim-Tunneln löschbar ist. Das Programmieren und Löschen einer solchen Speicherzelle erfordert das Durchleiten von Strom durch die dielektrische Schicht, die die Floating-Gate-Elektrode umgibt. Daher weisen diese Speicherarten eine begrenzte Anzahl von Lösch-Schreib- Zyklen auf. Schließlich zersetzt sich das dielektrische Material. Die Hersteller von Flash-Zellen geben die Grenze für die Anzahl der Lösch-Schreib-Zyklen zwischen 100.000 und 1.000.000 an.
  • Eine Anforderung für den erfolgreichen Einsatz einer Halbleiter-Massenspeichervorrichtung anstelle einer Festplatten-Massenspeichervorrichtung mit einem sich drehenden Datenträger ist die, dass sie für den Designer und den Benutzer eines Systems mit einer solchen Vorrichtung transparent sein muss. Mit anderen Worten, der Designer oder Benutzer eines Computers mit einer solchen Halbleiter-Massenspeichervorrichtung könnte einfach die Festplatte ausbauen und sie durch eine Halbleiter-Massenspeichervorrichtung ersetzen. Alle gegenwärtig erhältliche handelsübliche Software sollte auf einem System mit einer solchen Halbleiter-Massenspeichervorrichtung laufen, ohne dass Änderungen nötig sind.
  • SanDisk hat auf der Silicon Valley PC Design Conference am 9. Juli 1991 eine Architektur für einen Halbleiter-Massenspeicher mit Flash-Speicher vorgeschlagen. Dieses Massenspeichersystem umfasst Lese-Schreib-Blöcke mit einer Größe von 512 Byte entsprechend den üblichen Festplatten-Sektorgrößen. Frühere Entwürfe wiesen eine Architektur „Löschen vor Schreiben" auf. Um eine Datei auf dem Datenträger zu aktualisieren, musste bei diesem Verfahren der Datenträger, wenn der physikalische Ort auf dem Datenträger zuvor programmiert worden war, zuerst gelöscht werden, ehe die neuen Daten neu programmiert werden konnten.
  • Dieses Verfahren hätte eine deutliche Verschlechterung der Durchsatzleistung des Gesamtsystems zur Folge. Wenn ein Host eine neue Datei auf das Speichermedium schreibt, gibt er eine mit dieser Datei verbundene logische Blockadresse an die Peripherie-Speichervorrichtung. Die Speichervorrichtung übersetzt diese angegebene logische Blockadresse in eine tatsächliche physikalische Blockadresse auf dem Speichermedium und führt den Schreibvorgang aus. Bei magnetischen Festplattenlaufwerken können die neuen Daten ohne Änderung an dem Medium über die vorherigen alten Daten geschrieben werden. Sobald daher die physikalische Blockadresse von der Steuerung aus der angegebenen logischen Blockadresse berechnet ist, schreibt sie einfach die Datei an den betreffenden Ort. Bei Halbleiterspeichern muss, wenn der mit der berechneten physikalischen Blockadresse verbundene Ort zuvor programmiert war, der Ort gelöscht werden, bevor dieser Block mit den neuen Daten neu programmiert werden kann. Nach der bekannten Technik ist bei der Löschen-vor-Schreiben-Architektur die Korrelation zwischen der vom Host angegebenen logischen Blockadresse eine Eins-zu-Eins-Entsprechung mit der physikalischen Blockadresse auf dem Medium. Dieses Verfahren weist zahlreiche Mängel auf. Erstens führt es eine Verzögerung in der Ausführung aufgrund des Löschvorgangs vor dem Neuprogrammieren der geänderten Information ein. Bei Halbleiter-Flash-Speichern ist das Löschen ein sehr langsamer Vorgang.
  • Zweitens speichern Benutzer von Festplatten typischerweise zwei Arten von Informationen, von denen eine selten geändert und die andere häufig geändert wird. Ein auf dem System eines Benutzers gespeichertes handelsübliches Tabellenkalkulations- oder Textverarbeitungs-Softwareprogramm wird nur selten, wenn überhaupt, geändert. Die Tabellendateien oder Textverarbeitungsdokumente hingegen werden häufig geändert. Daher unterliegen verschiedene Sektoren einer Festplatte einer erheblich unterschiedlichen Nutzung, was die Häufigkeit der Änderung der darauf gespeicherten Informationen angeht. Während diese Ungleichheit keine Auswirkungen auf eine Festplatte hat, weil diese unempfindlich gegenüber Datenänderungen ist, kann dieser Unterschied bei einer Flash-Speichervorrichtung dazu führen, dass Bereiche des Massenspeichers abnutzen und verschleißen und deutlich früher als andere Bereiche des Massenspeichers unbrauchbar werden.
  • In einer weiteren Architektur haben die Erfinder zuvor eine Lösung zur Speicherung einer Tabelle vorgeschlagen, die die logische Blockadresse mit der physikalischen Blockadresse in Korrelation setzt. Die Erfindungen in Zusammenhang mit dieser Lösung sind in US-Patentanmeldung Nr. 08/038.668 vom 26. März 1993, jetzt US-Patent Nr. 5.388.083 , sowie in US-Patentanmeldung Nr. 08/037.893, jetzt US-Patent Nr. 5.479.638 , ebenfalls vom 26. März 1993, beschrieben.
  • Die frühere Lösung der Erfinder beschreibt zwei primäre Algorithmen und eine zugehörige Hardware-Architektur für eine Halbleiter-Massenspeichervorrichtung. Der Begriff „Datei" in diesem Patentdokument bezieht sich auf eine beliebige Computerdatei einschließlich handelsüblicher Software, Benutzerprogramme, Textverarbeitungsdokumente, Tabellendateien und dergleichen. Der erste Algorithmus nach der früheren Lösung sieht eine Einrichtung zur Vermeidung eines Löschvorgangs vor, wenn eine geänderte Datei auf die Massenspeichervorrichtung zurückgeschrieben wird. Stattdessen wird kein Löschen durchgeführt, und die geänderte Datei wird in einen leeren Abschnitt des Massenspeichers geschrieben.
  • Die Halbleiter-Massenspeicherarchitektur weist Blöcke mit einer Größe auf, die den Sektorgrößen handelsüblicher Festplatten entspricht. Die Blöcke sind einzeln löschbar. Bei einer Ausführungsform kann der Halbleiter-Massenspeicher eine sich drehende Festplatte ohne Auswirkung für den Benutzer ersetzen, so dass dieses Ersetzen transparent ist. Eine Einrichtung ist vorgesehen, um den Löschen-vor-Schreiben-Zyklus bei jedem Ändern der in dem Massenspeicher gespeicherten Informationen zu vermeiden.
  • Nach dem ersten Algorithmus werden Löschzyklen durch Programmieren einer geänderten Datei in einen leeren Block vermieden. Dies wäre normalerweise bei Verwendung herkömmlicher Massenspeicher nicht möglich, weil der Zentralprozessor und handelsübliche Software in herkömmlichen Computersystemen nicht dazu eingerichtet sind, die sich kontinuierlich ändernden physikalischen Speicherorte von Dateien zu verfolgen. Die frühere Lösung umfasst eine programmierbare Map zur Aufrechterhaltung der Korrelation zwischen der logischen Adresse und der physikalischen Adresse der aktualisierten Dateien.
  • Alle Flags und die Tabelle mit der Zuordnung der logischen Blockadressen zu den physikalischen Blockadressen werden in einer Anordnung von CAM-Zellen verwaltet. Die Verwendung von CAM-Zellen erlaubt eine sehr schnelle Bestimmung der gewünschten physikalischen Adresse in dem Massenspeicher, im Allgemeinen innerhalb von ein oder zwei Taktzyklen. Leider erfordern CAM-Zellen bekanntlich jedoch mehrere Transistoren, meist sechs Stück. Daher muss ein integrierter Schaltkreis für eine bestimmte Speichergröße unter Verwendung von CAM-Speicher für die Tabellen und Flags deutlich größer sein als ein Schaltkreis mit anderen Einrichtungen nur zur Aufnahme des Speichers.
  • Die Erfinder haben eine weitere Lösung für dieses Problem vorgeschlagen, die in US-Patentanmeldung Nr. 08/131.495, jetzt US-Patent Nr. 5.485.595 , vom 4. Oktober 1993 beschrieben ist.
  • Diese weitere frühere Lösung derselben Erfinder bezieht sich ebenfalls auf eine nichtflüchtige Speichervorrichtung. Die Vorrichtung ist außerdem so konfiguriert, dass die Durchführung eines Löschen-vor-Schreiben-Zyklus bei jeder Änderung der Datei vermieden wird, indem die Korrelation zwischen der logischen Blockadresse und der physikalischen Blockadresse in einem flüchtigen Speicherverwaltungs-RAM erhalten bleibt. Darüber hinaus vermeidet diese Erfindung den Verwaltungsaufwand, der mit CAM-Zellen-Ansätzen verbunden ist, die zusätzliche Schaltungen erfordern.
  • Wie die vorstehend angegebenen Lösungen derselben Erfinder umfasst die Vorrichtung Schaltungen zur Ausführung der beiden primären Algorithmen und eine zugehörige Hardware-Architektur für eine Halbleiter-Massenspeichervorrichtung. Darüber hinaus wird die CAM-Zelle bei dieser früheren Lösung durch Verwendung von RAM-Zellen vermieden.
  • Das Lesen erfolgt bei dieser früheren Lösung durch Weitergeben der logischen Blockadresse an den Speicher. Das System vergleicht nacheinander die gespeicherten logischen Blockadressen, bis es eine Entsprechung findet. Danach wird die Datei mit dem digitalen System verbunden. Daher leidet die von dieser Lösung gebotene Leistung, weil eventuell alle Speicherorte abgesucht und mit der gewünschten logischen Blockadresse verglichen werden müssen, ehe der physikalische Speicherort der gewünschten Information bestimmt werden kann.
  • Das US-Patent 5.404.485 von Ban beschreibt einen Flash-Speicher mit einem virtuellen Mapping-System, das eine virtuelle Speicher-Map umfasst, um den Speicherort der Daten in dem Flash-Speicher zu verfolgen. Außerdem umfasst es eine Verwaltungssteuerung, die eine Datei durch Neuschreiben der vollständigen aktualisierten Datei in einem neuen freien Platz aktualisiert.
  • Benötigt wird eine Halbleiter-Festplattenarchitektur, die einen schnellen Zugriff auf gespeicherte Daten ohne den übermäßigen Verwaltungsaufwand der CAM-Zellenspeicherung ermöglicht.
  • Aspekte der vorliegenden Erfindung sind in den anliegenden selbstständigen Ansprüchen festgelegt.
  • Eine Ausführungsform stellt eine nichtflüchtige Speichervorrichtung bereit. Die Vorrichtung ist so beschaffen, dass ein Löschen-vor-Schreiben bei jeder Änderung einer Datei vermieden wird. Um den mit CAM-Zellen verbundenen Verwaltungsaufwand zu vermeiden, wird bei diesem Ansatz außerdem ein RAM-Array benutzt.
  • Das Host-System verwaltet die Organisation der Daten auf dem Massenspeicher mittels einer logischen Blockadresse. Das RAM-Array ist so aufgebaut, dass es mit derselben Adresse wie die logischen Blockadressen (LBA) des Hosts adressiert werden kann. Jeder so adressierbare Ort im RAM enthält ein Feld mit der physikalischen Adresse der vom Host erwarteten Daten in dem nichtflüchtigen Massenspeicher. Diese physikalische Blockadressen-Information (PBA-Information) muss im nichtflüchtigen Speicher als Schatten abgelegt werden, um sicherzustellen, dass die Vorrichtung nach Wiederaufnahme des Betriebs nach einem Stromausfall weiter funktioniert, denn RAM-Speicher sind flüchtige Speichervorrichtungen. Zusätzlich werden auch Status-Flags für jeden physikalischen Ort gespeichert. Die Status-Flags können entweder in dem nichtflüchtigen Medium oder sowohl im RAM als auch in dem nichtflüchtigen Medium gespeichert werden.
  • Die Vorrichtung umfasst Schaltungen zur Ausführung von zwei primären Algorithmen und eine zugehörige Hardware-Architektur für eine Halbleiter-Massenspeichervorrichtung. Der erste Algorithmus stellt eine Einrichtung für das Mapping bzw. Zuordnen der logischen Host-Blockadresse zur physikalischen Blockadresse mit deutlich verbesserter Leistung und minimaler Hardware-Unterstützung bereit. Zusätzlich stellt der zweite Algorithmus eine Einrichtung zum Vermeiden eines Löschen-vor-Schreiben-Zyklus bereit, wenn eine geänderte Datei wieder auf die Massenspeichervorrichtung geschrieben wird. Stattdessen wird kein Löschen ausgeführt, und die geänderte Datei wird in einen leeren Abschnitt des Massenspeichers geschrieben.
  • Das Lesen erfolgt bei der vorliegenden Erfindung durch Weitergabe der logischen Blockadresse an den Speicher. Das RAM-Array ist so aufgebaut, das mit der logischen Blockadresse ein RAM-Speicherort gewählt wird. Dieser Ort enthält die physikalische Blockadresse der vom Host oder einem anderen externen System angeforderten Datei. Danach wird die Datei an den Host ausgelesen.
  • Nach dem zweiten Algorithmus werden Löschzyklen vermieden, indem eine geänderte Datei in einen geänderten Datenblock auf dem Massenspeicher programmiert wird, statt auf sich selbst, nachdem ein Löschzyklus für den Block wie bei bekannten Verfahren ausgeführt worden ist.
  • In einer alternativen Ausführungsform der vorliegenden Erfindung werden ein Verfahren und eine Vorrichtung zum effizienten Verschieben von Sektoren in einem Block aus einem ersten Bereich in dem nichtflüchtigen Speicher in einen nicht verwendeten Bereich in dem nichtflüchtigen Speicher und zum Markieren des ersten Bereichs als „verwendet" bereitgestellt.
  • Kurz gesagt, umfasst eine bevorzugte Ausführungsform der vorliegenden Erfindung ein Verfahren und eine Vorrichtung zum Speichern von Mapping-Informationen für die Zuordnung einer logischen Blockadresse, die einen Block angibt, auf den ein Host zugreift, zu einer physikalischen Blockadresse, die einen freien Bereich des nichtflüchtigen Speichers angibt, wobei der Block gezielt löschbar ist und einen oder mehrere Sektoren aufweist, die einzeln verschoben werden können. Die Mapping-Informationen enthalten eine virtuelle physikalische Blockadresse zur Angabe eines „ursprünglichen" Ortes im nichtflüchtigen Speicher, wo ein Block gespeichert ist, und eine verschobene virtuelle physikalische Blockadresse zur Angabe eines „verschobenen" Ortes im nichtflüchtigen Speicher, wohin ein oder mehrere Sektoren des gespeicherten Blocks verschoben worden sind. Die Mapping-Informationen enthalten außerdem Statusinformationen für die Verwendung der „ursprünglichen" physikalischen Blockadresse und der „verschobenen" physikalischen Blockadresse und zur Angabe von Informationen bezüglich „verschobener" Sektoren in dem Block, auf den zugegriffen wird.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 zeigt ein schematisches Blockdiagramm des Aufbaus eines Halbleiter-Massenspeichers nach einer Ausführungsform der vorliegenden Erfindung.
  • 2 zeigt eine alternative Ausführungsform der physikalischen Blockadresse 102 des RAM-Speichers in 1.
  • 3 zeigt ein Blockdiagramm eines Systems mit einer Massenspeichervorrichtung.
  • 4 bis 8 zeigen den Status verschiedener Flags und Informationen.
  • 9 zeigt ein Ablaufdiagramm für den ersten Algorithmus.
  • 10 zeigt ein Blockdiagramm eines digitalen Systems wie etwa einer digitalen Kamera mit einer bevorzugten Ausführungsform der vorliegenden Erfindung.
  • 11 bis 21 zeigen verschiedene Beispiele für den Status einer Mapping-Tabelle, die in dem digitalen System in 10 gespeichert sein kann, einschließlich LBA-PBA-Mapping-Informationen.
  • 22 zeigt ein Beispiel für eine nichtflüchtige Speichervorrichtung, wie sie in der bevorzugten Ausführungsform in 10 verwendet wird.
  • 23 zeigt ein Ablaufdiagramm der allgemeinen Schritte beim Schreiben eines Blocks von Informationen in die nichtflüchtigen Vorrichtungen in 10.
  • 24 bis 26 zeigen allgemein in Form von Ablaufdiagrammen den Betrieb einer weiteren bevorzugten Ausführungsform der vorliegenden Erfindung mit Verschiebungsvorgängen für einzelne fortlaufende Sektoren.
  • 27 zeigt ein Beispiel für den Inhalt der Lookup-Tabelle im SPM-RAM 548 nach dem Initialisieren des Systems.
  • 28 zeigt ein Beispiel für den Inhalt der Speichereinheit 508 nach der in 24 bis 26 beschriebenen bevorzugten Ausführungsform.
  • 29 bis 38 zeigen Beispiele für den Inhalt der Lookup-Tabelle im SPM-RAM nach den bevorzugten Ausführungsformen, wie in 24 bis 28 gezeigt.
  • AUSFÜHRLICHE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORM
  • 1 zeigt eine Architektur zur Implementierung eines Halbleiter-Speichermediums nach einer Ausführungsform. Das Speichermedium ist zur Verwendung mit einem Host oder anderen externen digitalen System gedacht. Der Massenspeicher ist in zwei Abschnitte unterteilt, einen flüchtigen RAM-Array 100 und einen nichtflüchtigen Array 104. Nach der bevorzugten Ausführungsform besteht der gesamte nichtflüchtige Speicher aus Flash-Speicher. Der Flash-Speicher kann durch EEPROM-Speicher ersetzt werden. Der RAM-Speicher kann jeder geeignete Speichertyp sein.
  • Der Speicher 104 ist in N Datenblöcke von 0 bis N – 1 unterteilt. Die Datenblöcke haben eine Länge von jeweils M Bytes. Bei der bevorzugten Ausführungsform hat jeder Datenblock eine Länge von 512 Bytes entsprechend der Sektorlänge in einem handelsüblichen Festplattenlaufwerk plus der zusätzlichen Anzahl von Bytes zum Speichern der Flags und der logischen Blockadresse (LBA) und dem zugehörigen ECC-Code. Der Speicher 104 kann soviel Speicherplatz umfassen wie der Benutzer wünscht. Eine Massenspeichervorrichtung kann zum Beispiel 100 Megabyte adressierbaren Speicher umfassen.
  • Es gibt mehrere RAM-Speicherorte 102. Jeder RAM-Speicherort 102 ist von der Steuerung mit einer entsprechenden vom Host-System gelieferten logischen Blockadresse oder der tatsächlichen physikalischen Adresse des nichtflüchtigen Mediums eindeutig adressierbar. Der RAM-Speicherort 102 enthält die physikalische Blockadresse der mit der logischen Blockadresse verbundenen Daten und die mit einer physikalischen Blockadresse auf dem nichtflüchtigen Medium verbundenen Flags.
  • Es ist möglich, dass die physikalische Blockadresse (PBA) in zwei Felder aufgeteilt werden kann, wie in 2 gezeigt. Diese Felder können für Cluster-Adressen einer Gruppe von Datenblöcken verwendet werden. Das erste Feld 290 wird zum Wählen einer Cluster-Adresse verwendet, und das zweite Feld 292 kann zum Wählen der Startadresse der mit diesem Cluster verbundenen logischen Blockadresse verwendet werden.
  • Eine Gruppe von Informations-Flags ist ebenfalls für jeden nichtflüchtigen Speicherort 106 gespeichert. Diese Flags umfassen ein Alt/Neu-Flag 110, ein Benutzt/Frei-Flag 112, ein Defekt-Flag 114 und ein Einzel/Sektor-Flag 116. Darüber hinaus ist ein Datenspeicher 122 vorgesehen.
  • Beim Schreiben von Daten in die Massenspeichervorrichtung nach der vorliegenden Erfindung bestimmt eine Steuerung den ersten verfügbaren physikalischen Block zum Speichern der Daten. Der RAM-Speicherort 102 entsprechend der vom Host gewählten logischen Blockadresse wird mit der physikalischen Blockadresse beschrieben, wo die Daten tatsächlich in dem nichtflüchtigen Speicher-Array in 104 gespeichert sind (1).
  • Als Beispiel wird angenommen, dass ein Benutzer ein Textverarbeitungsdokument erstellt und den Computer anweist, das Dokument zu sichern. Das Dokument wird im Massenspeichersystem gespeichert. Das Host-System weist ihm eine logische Blockadresse zu. Das Massenspeichersystem nach der vorliegenden Erfindung wählt eine physikalische Adresse eines unbenutzten Blocks oder mehrerer unbenutzter Blöcke im Massenspeicher aus, um das Dokument zu speichern. Die Adresse der physikalischen Blockadresse wird in dem RAM-Speicherort 102 gespeichert, der der logischen, Blockadresse entspricht. Beim Programmieren der Daten setzt das System nach der vorliegenden Erfindung auch das Benutzt/Frei-Flag 112 in 104 und 293, um anzuzeigen, dass dieser Blockort benutzt wird. Ein Benutzt/Frei-Flag 112 ist für jeden Eintrag in dem nichtflüchtigen Array 104 vorgesehen.
  • Später ruft der Benutzer das Dokument auf, nimmt eine Änderung daran vor und weist den Computer erneut an, das Dokument zu speichern. Um einen Löschen-vor-Schreiben-Zyklus zu vermeiden, weist das System nach der vorliegenden Erfindung eine Einrichtung zum Lokalisieren eines Blocks auf, dessen Benutzt/Frei-Flag 112 in 100 nicht gesetzt (nicht programmiert) ist, was angibt, dass der zugehörige Block gelöscht ist. Danach setzt das System das Benutzt/Frei-Flag für den neuen Block 112 in 106 und 293 in 100 und speichert dann das geänderte Dokument an diesem neuen physikalischen Blockort 106 in dem nichtflüchtigen Array 104. Die Adresse des neuen physikalischen Blockorts wird ebenfalls in dem RAM-Speicherort 102 gespeichert, der der logischen Blockadresse entspricht, wodurch der frühere physikalische Blockort in 102 überschrieben wird. Danach setzt das System das Alt/Neu-Flag 110 für die frühere Version des Dokuments, um anzuzeigen, dass dies eine alte, nicht benötigte Version des Dokuments ist, in 110 von 104 und 293 von 109. Auf diese Weise vermeidet das System nach der Ausführungsform den Verwaltungsaufwand für einen Löschzyklus, der beim Löschen-vor-Schreiben in herkömmlichen Systemen nötig ist, um eine geänderte Version eines früheren Dokuments zu speichern.
  • Weil das RAM-Array 100 seinen Speicherinhalt bei einem Stromausfall verliert, wird die logische Blockadresse mit der aktiven physikalischen Blockadresse in dem Medium auch als Schattenspeicher 108 in dem nichtflüchtigen Array 104 gespeichert. Die Schatteninformationen werden durch die Steuerung in den entsprechenden RAM-Speicherorten 102 gespeichert. Beim Einschalten der Stromversorgung werden die RAM-Speicherorte in 100 von jedem physikalischen Ort in 104 durch Lesen der Information 106 in 104 entsprechend aktualisiert. Die logische Adresse 108 von 106 wird zum Adressieren des RAM-Speicherorts von 100 verwendet, um die tatsächliche physikalische Blockadresse zu aktualisieren, die mit der angegebenen logischen Blockadresse verbunden ist. Weil 106 die tatsächliche physikalische Blockadresse ist, die mit den neuen Daten 122 verbunden ist, werden auch die Flags 110, 112, 114 und 116 in 293 von 102 mit der physikalischen Blockadresse von 106 in 100 aktualisiert. Für den Fachmann ist ersichtlich, dass die Flags entweder in dem entsprechenden nichtflüchtigen Speicherort 106 oder in dem nichtflüchtigen Speicherort und dem RAM-Speicherort 102, der mit der physikalischen Blockadresse verbunden ist, gespeichert werden können.
  • Um die neueste physikalische Blockadresse zuzuweisen, die einer logischen Blockadresse im flüchtigen Speicher 100 zugewiesen ist, liest die Steuerung beim Einschalten zuerst den Abschnitt mit den Flags 110, 112, 114 und 116 im nichtflüchtigen Speicher 104 und aktualisiert den Flag-Abschnitt 293 im flüchtigen Speicher 100. Danach liest sie die logische Blockadresse 108 für jede physikalische Blockadresse des nichtflüchtigen Mediums 104, und durch Verfolgen der Flags der angegebenen physikalischen Blockadresse im flüchtigen Speicher 100 und der gelesenen logischen Blockadresse der physikalischen Blockadresse im nichtflüchtigen Speicher 104 kann sie die neueste physikalische Blockadresse aktualisieren, die der gelesenen logischen Blockadresse im flüchtigen Speicher 100 zugewiesen ist.
  • 3 zeigt ein Blockdiagramm eines Systems mit der Massenspeichervorrichtung nach der Ausführungsform. Ein externes digitales System 300 wie zum Beispiel ein Host-Computer, Personalcomputer und dergleichen ist mit der Massenspeichervorrichtung 302 nach der vorliegenden Erfindung verbunden. Eine logische Blockadresse ist über einen Adressbus 306 mit dem flüchtigen RAM-Array 100 und einer Steuerungsschaltung 304 verbunden. Steuersignale sind auch über einen Steuerungsbus 308 mit der Steuerung 304 verbunden. Das flüchtige RAM-Array 100 ist verbunden, um die physikalische Blockadresse an das nichtflüchtige RAM-Array 400 zu geben. Die Steuerung 304 ist verbunden, um sowohl den flüchtigen RAM 100 und das nichtflüchtige Array 104 zu steuern als auch alle Flags zu erzeugen.
  • Ein vereinfachtes Beispiel zur Veranschaulichung des Schreibvorgangs nach der Ausführungsform ist in 4 bis 8. Hier sind nicht alle Informations-Flags gezeigt, um diese Merkmale der Erfindung nicht durch zu viele Details unverständlich zu machen. Die Dateneinträge sind mit Dezimalzahlen angegeben, um das Verständnis der Erfindung weiter zu erleichtern. Für den Fachmann ist ersichtlich, dass bei einer bevorzugten Ausführungsform das Binärsystem verwendet wird.
  • 4 zeigt eine Massenspeichervorrichtung mit elf Einträgen nach der Ausführungsform. In der Massenspeichervorrichtung in 4 sind keine gültigen oder brauchbaren Daten gespeichert. Daher sind alle physikalischen Blockadressen leer. Die Daten im nichtflüchtigen Massenspeicherort '6' sind eingetragen und alt. Außerdem ist der Speicherort '9' defekt und kann nicht verwendet werden.
  • Der Host weist die Massenspeichervorrichtung in dem Beispiel an, nacheinander Daten in die logische Blockadresse '3' und danach in '4' zu schreiben. Die Massenspeichervorrichtung schreibt zuerst die mit der logischen Blockadresse '3' verbundenen Daten. Die Vorrichtung bestimmt, welches der erste nicht verwendete Speicherort im nichtflüchtigen Speicher ist. In diesem Beispiel ist '0' der erste leere Speicherort. Daher zeigt 5, dass für die logische Blockadresse '3' die entsprechende physikalische Blockadresse '0' gespeichert ist und das Benutzt-Flag in der physikalischen Blockadresse '0' gesetzt ist. Der nächste leere Speicherort ist '1'. 6 zeigt, dass für die logische Blockadresse '4' die entsprechende physikalische Blockadresse '1' gespeichert ist und das Benutzt-Flag in der physikalischen Blockadresse '1' gesetzt ist.
  • Der Host weist an, dass erneut etwas in die logische Blockadresse '3' geschrieben werden soll. Der nächste leere Speicherort ist '2'. 7 zeigt, dass das Alt-Flag in Speicherort '0' gesetzt ist, um anzuzeigen, dass diese Daten nicht mehr länger brauchbar sind, das Benutzt-Flag in Speicherort '2' gesetzt ist und die physikalische Blockadresse in Speicherort '3' auf '2' geändert ist.
  • Als Nächstes weist der Host an, dass erneut etwas in die logische Blockadresse '4' geschrieben werden soll. Der nächste leere Speicherort wird mit '3' bestimmt. 8 zeigt, dass das Alt-Flag in Speicherort '1' gesetzt ist, um anzuzeigen, dass diese Daten nicht mehr brauchbar sind, das Benutzt-Flag in Speicherort '3' gesetzt ist und die physikalische Blockadresse in Speicherort '4' auf '3' geändert ist. (Hierbei ist zu beachten, dass zwischen der physikalischen Blockadresse und den am selben Speicherort gespeicherten Daten im Allgemeinen keine Beziehung besteht.)
  • 9 zeigt den ersten Algorithmus nach der vorliegenden Erfindung. Wenn das System nach der vorliegenden Erfindung eine Anweisung erhält, Daten in den Massenspeicher zu programmieren (Schritt 200), versucht das System, einen freien Block zu finden (Schritt 202), das heißt einen Block, für den das Benutzt/Frei-Flag nicht gesetzt (nicht programmiert) ist. Im Erfolgsfall setzt das System das Benutzt/Frei-Flag für diesen Block und programmiert die Daten in diesen Block (Schritt 206).
  • Wenn das System andererseits keinen Block finden kann, für den das Benutzt/Frei-Flag nicht gesetzt ist, löscht das System die Flags (benutzt/frei und alt/neu) und die Daten für alle Blöcke, für die das Alt/Neu-Flag gesetzt und das Defekt-Flag nicht gesetzt ist (Schritt 204), und sucht dann nach einem Block, für den das Benutzt/Frei-Flag nicht gesetzt ist (Schritt 202). Ein solcher Block ist gerade in Schritt 204 gebildet worden. Das System setzt, nun das Benutzt-Flag für diesen Block und programmiert die Datei in diesen Block (Schritt 206).
  • Handelt es sich bei den Daten um eine geänderte Version einer bereits vorhandenen Datei, muss das System verhindern, dass auf die überholte Version zugegriffen werden kann. Das System bestimmt, ob die Datei eine frühere Datei ersetzt (Schritt 208). Wenn ja, setzt das System das Alt/Neu-Flag für den überholten ersetzten Block (Schritt 210). Ist andererseits die zu speichernde Datei eine neu angelegte Datei, wird der Schritt zum Setzen des Alt/Neu-Flags (Schritt 210) übersprungen, weil kein überholter ersetzter Block vorliegt. Zuletzt wird die Map für die Zuordnung der logischen Adresse 308 zu den physikalischen Adressen aktualisiert (Schritt 212).
  • Durch Anwendung des vorstehend beschriebenen Verfahrens wird der mit einem Löschzyklus verbundene Verwaltungsaufwand bei jedem Schreiben in den Speicher 104, außer in regelmäßigen Abständen, vermieden. Dies verbessert die Leistung des gesamten Computersystems mit der Architektur nach der Ausführungsform erheblich. Bei der bevorzugten Ausführungsform der vorliegenden Erfindung erfolgt das Programmieren des Flash-Speichers mit den dem Fachmann bekannten üblichen Verfahren. Mit anderen Worten, die Programmimpulse werden entsprechend auf die zu programmierenden Bits angewendet und dann mit den programmierten Daten verglichen, um sicherzustellen, dass eine ordnungsgemäße Programmierung erfolgt ist. Wenn ein Bit nicht gelöscht oder korrekt programmiert werden kann, wird ein Defekt-Flag 148 gesetzt, was verhindert, dass der Block erneut verwendet wird.
  • 10 zeigt ein digitales System 500 wie zum Beispiel eine digitale Kamera mit einer alternativen Ausführungsform der vorliegenden Erfindung. Das digitale System 500 ist mit einem Host 502 gezeigt, der ein Personalcomputer (PC) oder einfach ein Prozessor einer allgemeinen Art sein kann, der üblicherweise in digitalen Systemen verwendet wird, verbunden mit einer Steuerungsschaltung 506 zum Speichern und Abrufen von Informationen in bzw. aus der nichtflüchtigen Speichereinheit 508. Die Steuerungsschaltung 506 kann ein Halbleiter (auch als „integrierte Schaltung" oder „Chip" bezeichnet) oder optional eine Kombination verschiedener elektronischer Bauteile sein. In der bevorzugten Ausführungsform ist die Steuerungsschaltung als eine aus einem Chip bestehende Vorrichtung gezeigt. Die nichtflüchtige Speichereinheit 508 umfasst eine oder mehrere Speichervorrichtungen, die jeweils Flash- oder EEPROM-Speicher sein können. In der bevorzugten Ausführungsform in 10 weist die Speichereinheit 508 mehrere Flash-Speichervorrichtungen 510 bis 512 auf, die jeweils einzeln adressierbare Speicherorte zur Speicherung von Informationen enthalten. In der bevorzugten Anwendung der Ausführungsform in 10 sind diese Informationen in Blöcken organisiert, wobei jeder Block einen oder mehrere Datensektoren aufweist. Zusätzlich zu den Daten können die gespeicherten Informationen außerdem Statusinformationen bezüglich der Datenblöcke wie zum Beispiel Flag-Felder, Adressinformationen und dergleichen enthalten.
  • Der Host 502 ist über Host-Informationssignale 504 mit einer Steuerungsschaltung 506 verbunden. Die Host-Informationssignale umfassen Adress- und Datenbusse sowie Steuersignale für die Kommunikation von Befehlen, Daten und anderen Arten von Informationen an die Steuerungsschaltung 506, die diese Informationen wiederum über den Flash-Adressbus 512, den Flash-Datenbus 514, Flash-Signale 516 und Flash-Statussignale 518 (508 und 513 bis 516 werden zusammenfassend als Signale 538 bezeichnet) in der Speichereinheit 508 speichert. Die Signale 538 können Befehle, Daten und Statusinformationen zwischen der Steuerung 506 und der Speichereinheit 508 austauschen.
  • Die Steuerung 506 ist mit übergeordneten Funktionsblöcken wie zum Beispiel einem Host-Schnittstellenblock 520, einem Puffer-RAM-Block 522, einem Flash-Steuerungsblock 532, einem Mikroprozessorblock 524, einem Mikroprozessor-Steuerungsblock 528, einem Mikroprozessor-Speicherblock 530, einem Mikroprozessor-ROM-Block 534, einem ECC-Logikblock 540 und einem Speicherplatzverwaltungsblock 544 gezeigt. Der Host-Schnittstellenblock 520 erhält Host-Informationssignale 504 zur Lieferung von Daten und Statusinformationen vom Puffer-RAM-Block 522 und Mikroprozessorblock 524 an den Host 502 über die Host-Informationssignale 504. Der Host-Schnittstellenblock 520 ist über die Mikroprozessor-Informationssignale 526, die einen Adressbus, einen Datenbus und Steuersignale umfassen, mit dem Mikroprozessorblock 524 verbunden.
  • Der Mikroprozessorblock 524 ist mit einem Mikroprozessor-Steuerungsblock 528, einem Mikroprozessor-Speicherblock 530 und einem Mikroprozessor-ROM-Block 534 verbunden und dient zum Steuern der Abläufe der verschiedenen Funktionsblöcke in 10 innerhalb der Steuerung 506 durch Ausführung von im Mikroprozessor-Speicherblock 530 und im Mikroprozessor-ROM-Block 534 gespeicherten Programmanweisungen. Der Mikroprozessor 524 kann zu bestimmten Zeiten Programmanweisungen (oder Code) aus dem Mikroprozessor-ROM-Block 534 ausführen, bei dem es sich um einen nichtflüchtigen Speicherbereich handelt. Andererseits kann der Mikroprozessor-Speicherblock 530 entweder ein flüchtiger Speicher, das heißt ein Lese-und-Schreib-Speicher (RAM), oder ein nichtflüchtiger Speicher, das heißt ein EEPROM-Speicher, sein. Die von dem Mikroprozessorblock 524 ausgeführten Anweisungen, zusammenfassend als Programmcode bezeichnet, werden vor Beginn des Betriebs des Systems nach der vorliegenden Erfindung in dem Speicherblock 530 gespeichert. Zunächst und vor der Ausführung des Programmcodes aus dem Mikroprozessor-Speicherort 530 kann der Programmcode in der Speichereinheit 508 gespeichert sein und später durch die Signale 538 in den Speicherblock 530 geladen werden. Bei dieser Initialisierung kann der Mikroprozessorblock 524 Anweisungen aus dem ROM-Block 534 ausführen.
  • Die Steuerung 506 umfasst weiter einen Flash-Steuerungsblock 532, der über die Mikroprozessor-Informationssignale 526 mit dem Mikroprozessorblock 524 verbunden ist, um unter der Steuerung des Mikroprozessors Informationen an die Speichereinheit zu geben bzw. von dieser zu empfangen. Informationen wie zum Beispiel Daten können mit den Mikroprozessorsignalen 526 vom Flash-Steuerungsblock 532 an den Puffer-RAM-Block 522 gegeben werden, um sie darin (eventuell auch nur vorübergehend) zu speichern. In gleicher Weise können mit den Mikroprozessorsignalen 526 Daten durch den Flash-Steuerungsblock 532 aus dem Puffer-RAM-Block 522 abgerufen werden.
  • Der ECC-Logikblock 540 ist über die Signale 542 mit dem Puffer-RAM-Block 522 und weiter über die Mikroprozessorsignale 526 mit dem Mikroprozessorblock 524 verbunden. Der ECC-Logikblock 540 enthält Schaltungen für die allgemeine Durchführung von Fehlerprüf- und -korrekturfunktionen. Für den Fachmann ist ersichtlich, dass verschiedene ECC-Vorrichtungen und -Algorithmen handelsüblich erhältlich sind und zur Durchführung der erforderlichen Funktionen im ECC-Logikblock 540 verwendet werden können. Kurz gesagt, diese Funktionen umfassen das Anfügen von Code, der für alle intensiven Zwecke speziell aus einem Polynom erzeugt wird, an die übertragenen Daten, und das Verwenden desselben Polynoms beim Empfang von Daten, um einen weiteren Code aus den empfangenen Daten zu erzeugen, um eine vorbestimmte Anzahl von Fehlern zu erkennen und möglicherweise zu korrigieren, die die Daten beschädigt haben. Der ECC-Logikblock 540 führt die Fehlererkennung und/oder Fehlerkorrektur an den in der Speichereinheit 508 gespeicherten Daten oder den vom Host 502 empfangenen Daten durch.
  • Der Speicherplatzverwaltungsblock 544 verwendet eine bevorzugte Vorrichtung und einen bevorzugten Algorithmus, um den neuen nicht benutzten (oder freien) Speicherblock in einer der Flash-Speichervorrichtungen zum Speichern eines Blocks von Informationen zu finden, wie nachstehend unter Bezugnahme auf andere Abbildungen beschrieben. Wie bereits erwähnt, wird die Adresse eines Blocks in einer der Flash-Speichervorrichtungen als PBA bezeichnet, die durch den Speicherplatzmanager durch Übersetzen einer vom Host empfangenen LBA bestimmt wird. Verschiedene Vorrichtungen und Verfahren können zur Durchführung dieser Übersetzung verwendet werden. Ein Beispiel eines solchen Systems ist in US-Patent Nr. 5.485.595 mit dem Titel „Flash Memory Mass Storage Architecture Incorporating Wear Leveling Technique Without Using CAM Cells" beschrieben.
  • Der Speicherplatzverwaltungsblock 544 umfasst einen SPM-RAM-Block 548 und einen SPM-Steuerungsblock 546, wobei die letzteren beiden Blöcke miteinander verbunden sind. Der SPM-RAM-Block 548 speichert die LBA-PBA-Mapping-Informationen (ansonsten hierin auch als Übersetzungstabelle, Mapping-Tabelle, Mapping-Informationen oder Tabelle bezeichnet) unter der Steuerung des SPM-Steuerungsblocks 546. Alternativ kann der SPM-RAM-Block 548 auch außerhalb der Steuerung angeordnet sein, wie zum Beispiel in 3 bezüglich des RAM-Arrays 100 gezeigt.
  • Im Betrieb liest und schreibt der Host 502 Informationen von der bzw. auf die Speichereinheit 508, wenn zum Beispiel ein Lese- oder Schreibvorgang von der Steuerung 506 ausgeführt wird. Dabei liefert der Host 502 über die Host-Signale 504 eine LBA an die Steuerung 506. Die LBA wird vom Host-Schnittstellenblock 520 empfan gen. Unter der Anweisung des Mikroprozessorblocks 524 wird die LBA schließlich an den Speicherplatzverwaltungsblock 544 gegeben, um sie in eine PBA zu übersetzen und diese zu speichern, wie nachstehend ausführlich beschrieben.
  • Unter der Anweisung des Mikroprozessorblocks 524 werden Daten und sonstige Informationen durch den Flash-Steuerungsblock 532 in einen durch die PBA identifizierten Speicherbereich in einer der Flash-Speichervorrichtungen 510 bis 512 geschrieben bzw. aus diesem gelesen. Die in den Flash-Speichervorrichtungen gespeicherten Informationen können nicht mit neuen Informationen überschrieben werden, ohne sie zuvor zu löschen, wie bereits erwähnt. Andererseits ist das Löschen eines Blocks von Informationen (jedes Mal vor dem Schreiben) eine sehr zeitraubende und energieintensive Maßnahme. Dies wird gelegentlich auch als Löschen-vor-Schreiben-Vorgang bezeichnet. Bei der bevorzugten Ausführungsform wird ein solcher Vorgang vermieden, indem ein Sektor (oder mehrere Sektoren) von Informationen innerhalb eines Blocks, der neu geschrieben wird, kontinuierlich aber effizient von einem PBA-Speicherort im Flash-Speicher an einen nicht benutzten PBA-Speicherort in der Speichereinheit 508 verschoben wird, wodurch häufige Löschvorgänge vermieden werden. Ein Informationsblock kann aus mehr als einem Sektor bestehen, zum Beispiel aus 16 oder 32 Sektoren. Ein Informationsblock ist weiter definiert als eine einzeln löschbare Informationseinheit. In der Vergangenheit haben Systeme nach dem Stand der Technik einen in Flash-Speichervorrichtungen gespeicherten Block verschoben, der zuvor in einen freien (oder nicht benutzten) Speicherort in den Flash-Speichervorrichtungen geschrieben worden ist. Solche Systeme verschoben jedoch einen ganzen Block, auch wenn nur ein Sektor mit Informationen in diesem Block neu geschrieben wurde. Mit anderen Worten, es liegt eine Verschwendung sowohl von Speicherkapazität in dem Flash-Speicher als auch von Zeit für das Verschieben des Inhalts eines gesamten Blocks vor, wenn weniger als die Gesamtzahl der Sektoren in dem Block neu geschrieben werden. Die bevorzugten Ausführungsformen der vorliegenden Erfindung erlauben jedoch, wie hier erläutert, das Verschieben von weniger als einem Block mit Informationen, wodurch die Anzahl der Verschiebevorgänge für zuvor beschriebene Sektoren und daher auch die Anzahl der Löschvorgänge verringert wird.
  • In 10 ist zu beachten, dass der SPM-RAM-Block 548 eine Tabelle enthält, die bei dem Schreibvorgang geändert werden kann, um dadurch die LBA-PBA-Mapping-Informationen und sonstige Informationen in Zusammenhang mit jedem in der Speichereinheit 508 gespeicherten Block zu verwalten. Zusätzlich geben diese Mapping-Informationen den tatsächlichen Ort eines Sektors (innerhalb eines Blocks) von Informationen in den Flash-Speichervorrichtungen an. Wie weiter ersichtlich, ist mindestens ein Teil der Informationen in der im SPM-RAM-Block 548 gespeicherten Mapping-Tabelle als Schatten in der Speichereinheit 508 abgelegt (oder kopiert), um den Verlust der Mapping-Informationen zu vermeiden, wenn die Stromversorgung zum System unterbrochen oder abgeschaltet wird. Dies ist größtenteils auf die Verwendung von flüchtigem Speicher für die Mapping-Informationen zurückzuführen. In diesem Zusammenhang wird, wenn die Stromversorgung zum System wiederhergestellt wird, der Teil der in der Speichereinheit 508 gespeicherten Mapping-Informationen an den SPM-RAM-Block 548 übertragen.
  • Es ist zu beachten, dass der SPM-RAM-Block 548 alternativ ein nichtflüchtiger Speicher sein kann, zum Beispiel in der Form von Flash- oder EEPROM-Speicher. In diesem Fall wird die Mapping-Tabelle in dem nichtflüchtigen Speicher gespeichert, wodurch die Notwendigkeit der Schattenspeicherung vermieden wird, weil bei einer Unterbrechung der Stromversorgung die im nichtflüchtigen Speicher gespeicherten Mapping-Informationen klar erhalten bleiben.
  • Wenn einer oder mehr Sektoren aus einem Bereich des Flash-Speichers in einen anderen Bereich verschoben werden, werden bei der bevorzugten Ausführungsform der vorliegenden Erfindung zuerst die Sektoren von dem Ort, wo sie in den Flash-Speichervorrichtungen, das heißt 510 bis 512, gespeichert sind, zur vorübergehenden Speicherung in den Puffer-RAM-Block 522 verschoben. Danach werden die verschobenen Sektoren aus dem Puffer-RAM-Block 522 in einen freien Bereich innerhalb einer der Flash-Speichervorrichtungen verschoben. Außerdem ist zu beachten, dass der von dem ECC-Logikblock 540 erzeugte ECC-Code, wie vorstehend beschrieben, ebenfalls in den Flash-Speichervorrichtungen 510 bis 512 gespeichert wird, zusammen mit den Daten, genau wie andere Informationen wie zum Beispiel die den Daten und Flag-Feldern entsprechende LBA.
  • 11 bis 21 zeigen Beispiele für den Zustand einer Tabelle 700 im SPM-RAM-Block 548 zum Speichern von LBA-PBA-Mapping-Informationen zur Identifizierung und Lokalisierung von Blöcken (und Sektoren in den Blöcken) innerhalb der Speichereinheit 508. Die Tabelle 700 in allen diesen Abbildungen umfasst eine Anordnung von Spalten und Reihen, wobei die Spalten die virtuellen physikalischen Blockadressen-Orte oder VPBA-Blockadressen-Orte 702, die virtuellen physikalischen Verschiebungsadressen-Orte oder MVPBA-Blockadressen-Orte 704, die Verschiebungs-Flag-Orte 706, die Benutzt/Frei-Flag-Orte 708, die Alt/Neu-Flag-Orte 710, die Defekt-Flag-Orte 712 und die Sektorverschiebungsstatus-Orte 714 enthalten.
  • Die Reihen der Tabelle enthalten die PBA/LBA-Reihen 716 bis 728, wobei jede Reihe eine Reihennummer aufweist, die entweder eine LBA oder eine PBA sein kann, je nach den Informationen, die in der Tabelle 700 adressiert werden. Der Reihe 716 ist zum Beispiel die Reihennummer '00' zugewiesen, und wenn PBA-Informationen in Verbindung mit der LBA '00' aus der Tabelle 700 abgerufen werden, kann die LBA '00' im SPM-RAM-Block 548 an Reihe 716 adressiert werden, um die zugehörige PBA in 730 zu erhalten. Wenn andererseits auf Statusinformationen wie zum Beispiel die Flag-Felder 706 bis 712 bezüglich eines Blocks zugegriffen wird, geben die Reihennummern der Reihen 716 bis 728, zum Beispiel '00', '10', '20', '30', '40', '50', 'N – 1' PBA-Werte anstelle von LBA-Werten an. Außerdem kann man sich jede Reihe der Tabelle 700 als einen Blockeintrag vorstellen, wobei die Einträge jeweils Informationen bezüglich eines Blocks enthalten. Darüber hinaus kann jede Reihe der Tabelle 700 mit einer LBA adressiert werden.
  • Bei der bevorzugten Ausführungsform weist ein Block jeweils 16 Sektoren auf. Dies ist auf die Möglichkeit des selektiven Löschens eines ganzen Blocks von 16 Sektoren zurückzuführen (weshalb die Blockgröße gelegentlich auch als „Löschblockgröße" bezeichnet wird). Wenn die Löschblockgröße 16 Sektoren beträgt, wie zum Beispiel in 11 bis 21 gezeigt, enthält jeder Blockeintrag (oder jede Reihe) Informationen im Hinblick auf 16 Sektoren. Reihe 716 enthält daher Informationen für einen mit LBA '00' bis LBA '15' (oder LBA '00' bis LBA '0F' in Hexadezimalschreibweise) adressierten Block. Die nächste Reihe, Reihe 718, enthält Informationen für die mit LBA '16' (oder '10' in Hex) bis LBA '31' (oder '1F' in Hex) adressierten Blöcke. Gleiches gilt auch für die PBAs für jeden Block.
  • Es ist jedoch zu beachten, dass in gleicher Weise auch andere Blockgrößen verwendet werden können. Ein Block kann zum Beispiel 32 Sektoren umfassen und daher eine Löschblockgröße von 32 aufweisen. In letzterem Fall enthielte jeder Blockeintrag oder jede Reihe, zum Beispiel 716, 718, 720 usw., Informationen im Hinblick auf 32 Sektoren.
  • Die VPBA-Blockadressen-Orte 702 in Tabelle 700 enthalten Informationen, die allgemein einen PBA-Wert angeben, der einem bestimmten LBA-Wert entspricht. Die MVPBA-Blockadressen-Orte 704 enthalten Informationen, die einen PBA-Wert angeben, der innerhalb der Speichereinheit 508 den Ort identifiziert, wohin ein Block (oder Sektorabschnitte davon) verschoben worden sein kann. Die Verschiebungs-Flag-Orte 706 enthalten Werte, die angeben, ob der Block, auf den zugegriffen wird, Sektoren aufweist, die an einen Ort verschoben worden sein können, dessen PBA durch den Wert im MVPBA-Blockadressen-Ort 704 angegeben ist (der PBA-Wert in 704 ist anders als der angegebene Wert in der VPBA-Blockadresse 702, wo sich die übrigen Blockadresseninformationen befinden können). Der Benutzt/Frei-Flag-Ort 708 enthält Informatio nen, die angeben, ob der Block, auf den zugegriffen wird, ein freier Block ist, das heißt dass seit dem letzten Löschen des Blocks keine Daten darin gespeichert worden sind. Der Alt/Neu-Flag-Ort 710 enthält Informationen zur Angabe des Status des Blocks, auf den zugegriffen wird, das heißt ob der Block verwendet und erneut verwendet worden ist und daher alt ist. Der Defekt-Flag-Ort 712 enthält Informationen darüber, ob der Block defekt ist. Ist ein Block als defekt markiert, wie durch den Wert in dem gesetzten Defekt-Flag-Ort 712 angegeben, kann er nicht mehr verwendet werden. Die Flags 708 bis 712 entsprechen den in Zusammenhang mit 1 gezeigten und beschriebenen Flags 110 bis 114.
  • Der Sektorverschiebungsstatus-Ort 714 besteht aus 16 Bits (der Ort 714 enthält ein Bit für jeden Sektor in einem Block, so dass für Blöcke mit unterschiedlicher Größe eine unterschiedliche Anzahl von Bits in Ort 714 erforderlich sind), wobei jedes Bit den Status eines Sektors in dem Block dahingehend angibt, ob der Sektor in einen anderen Block innerhalb der Speichereinheit 508 verschoben worden ist. Der Verschiebungs-Blockort in der Speichereinheit 508 würde durch eine PBA identifiziert, die sich von dem PBA-Wert im VPBA-Blockadressen-Ort 702 unterscheidet. Anders ausgedrückt, der Status, ob ein Sektor in einem Block verschoben worden ist, wie durch jedes der Bits in 714 angegeben, lässt erkennen, welcher von entweder den VPBA-Blockadressen-Orten 702 oder den MVPBA-Blockadressen-Orten 704 den neuesten PBA-Ort für den betreffenden Sektor enthält.
  • In 11 ist ein Beispiel für den Status der im SPM-RAM-Block 548 (in 10) gespeicherten Tabelle 700 gezeigt, wenn zum Beispiel die LBA '0' geschrieben ist. Wie bereits erwähnt, wird in den hier gezeigten Abbildungen eine Blockgröße von 16 Sektoren (nummeriert von 0 bis 15 in Dezimalschreibweise oder von 0 bis 10 in Hexadezimalschreibweise) verwendet, um lediglich Beispiele zu veranschaulichen. In gleicher Weise werden N Blöcke (daher N LBAs) verwendet, die von 0 bis N – 1 nummeriert sind. Die Blockgröße und die Anzahl der Blöcke sind beides Auslegungsoptionen, die für unterschiedliche Anwendungen variieren können und von der Speicherkapazität der jeweils verwendeten Flash-Speichervorrichtung (zum Beispiel 510 bis 512) abhängig sein können. Außerdem wird bei diesen Beispielen eine bevorzugte Sektorgröße von 512 Bytes verwendet, während auch andere Sektorgrößen benutzt werden können, ohne vom Umfang der vorliegenden Erfindung abzuweichen.
  • Es wird angenommen, dass der Vorgang des Schreibens in LBA '0' nach dem Initialisieren oder Einschalten des Systems erfolgt, wenn alle Blöcke in den Flash-Speichervorrichtungen 510 bis 512 (in 10) gelöscht wurden und daher frei sind. Der Speicherplatzverwaltungsblock 548 bestimmt vermutlich, dass der nächste freie PBA- Ort '00' ist. Daher wird '00' in 730 an der VPBA-Blockadresse 702 in Reihe 716 geschrieben, wo Informationen bezüglich der LBA '0' enthalten sind, wie in Tabelle 700 durch die LBA-Reihennummer '00' angegeben. Weil keine Notwendigkeit besteht, einen der Sektoren im Block LBA '0' zu verschieben, kann die MVPBA-Blockadresse 704 für Reihe 716, die als Ort 732 gezeigt ist, einen beliebigen Wert enthalten, zum Beispiel einen Initialisierungswert (in 11 ist 'XX' gezeigt, um einen Status „ohne Bedeutung" anzugeben).
  • Der Wert in 734 hat den logischen Zustand '0', um zu zeigen, dass der Block LBA '0' keine verschobenen Sektoren enthält. Der Ort 736 in der Spalte Benutzt-Flag 708 von Reihe 716 wird auf den logischen Zustand '1' gesetzt, um anzugeben, dass der Block PBA '0' benutzt wird. Der Status von Ort 738, der das Alt-Flag 710 für Reihe 716 angibt, wird auf '0' gesetzt, um anzugeben, dass der Block PBA '0' noch nicht „alt" ist. Der Ort 740 hat den logischen Zustand '0', was anzeigt, dass der Block PBA '0' nicht defekt ist, und alle Bits im Verschiebungsstatus-Ort 714 weisen den logischen Zustand '0' auf, um anzuzeigen, dass keiner der Sektoren im Block LBA '0' bis LBA '15' verschoben worden ist.
  • In 11 haben die Statusinformationen für LBA '0' in Reihe 716, zum Beispiel im Verschiebungs-Flag-Ort 706, Benutzt-Flag-Ort 708, Alt-Flag-Ort 710, Defekt-Flag-Ort 712 und Verschiebungsstatus-Ort 714, für alle übrigen Reihen 716 bis 728 in Tabelle 700 den logischen Zustand '0'. Es ist zu beachten, dass beim Einschalten des Systems und/oder nach dem Löschen eines der Blöcke die Einträge für die gelöschten Blöcke, was beim Einschalten alle Blöcke wären, in Tabelle 700 auf den logischen Zustand '0' gesetzt werden.
  • Nachstehend wird hier der Inhalt einer der Flash-Speichervorrichtungen in der Speichereinheit 508, wo sich der Block LBA '0' befinden kann, diskutiert, um ein besseres Verständnis der in Tabelle 700 in 11 gezeigten Mapping-Informationen zu erhalten.
  • 22 zeigt ein Beispiel für den Inhalt der Flash-Speichervorrichtung 510 entsprechend dem Status der Tabelle 700 (wie in 11 gezeigt). LBA '0', die in der Speichereinheit 508 an PBA '0' durch die Steuerung 506 (in 10) identifiziert ist, ist der Ort, wo der vom Host identifizierte Block geschrieben wird. Die in 22 gezeigte PBA0-Reihe 750 enthält Daten im Sektordaten-Ort 752. Außerdem ist ein ECC-Code in ECC-Ort 754 der PBA0-Reihe 750 gespeichert. Dieser ECC-Code wird vom ECC-Logikblock 540 in Verbindung mit den geschriebenen Daten erzeugt, wie vorstehend beschrieben. Das Flag-Feld 756 in der PBA0-Reihe 750 enthält die Verschiebungs-, Benutzt-, Alt- und Defekt-Flag-Informationen entsprechend den Sektordaten des ge schriebenen Blocks. In diesem Beispiel ist im Flag-Feld 756 das „Benutzt"-Flag und kein anderes Flag gesetzt, weshalb das Flag-Feld 756 einen logischen Zustand von '0100' aufweist, der angibt, dass die PBA '0' „benutzt" wird, aber nicht „verschoben", „alt" oder „defekt" ist.
  • Die PBA0-Reihe 750 enthält zusätzlich den Speicherort, um in LBA-Adressort 758 die LBA-Nummer zu verwalten, die der PBA '0' entspricht, die in diesem Fall '0' ist. Auch wenn dies für das vorliegende Beispiel nicht von Bedeutung ist, sind die restlichen PBA-Orte für LBA '0' in den nächsten 15 Reihen nach Reihe 750 in der Flash-Speichervorrichtung 510 gespeichert.
  • Aus der Diskussion der hier angegebenen Beispiele ist ersichtlich, dass die Informationen in einer PBA-Reihe der Flash-Speichervorrichtung 510 ausreichen, um die Daten und Statusinformationen in Zusammenhang damit im Block LBA '0' zu identifizieren, einschließlich etwa damit verbundener Verschiebungen, insbesondere aufgrund des Vorhandenseins des Verschiebungs-Flags in jeder PBA-Reihe (750, 762, 764 usw.) des Flash-Speichers. Dennoch kann alternativ ein weiteres Feld zu der ersten PBA-Reihe für jeden LBA-Ort im Flash-Speicher hinzugefügt werden, das den Status der Bits im Verschiebungsstatus-Ort 714 der entsprechenden Reihe in Tabelle 700 angibt. Dieses Feld wird optional in dem in 22 gezeigten Sektorstatus-Ort 760 gespeichert und ist in der ersten PBA-Reihe jedes LBA-Blocks enthalten, zum Beispiel in Reihe 750, 780 usw. Obwohl die in Ort 760 enthaltenen Informationen durch Prüfen des Status der Verschiebungs-Flags in den Flag-Feldern 756 jeder PBA-Reihe gefunden werden können, besteht ein offensichtlicher Vorteil der Verwendung von Ort 760 darin, dass beim Starten (oder Einschalten) des Systems der Inhalt der Tabelle 700 im SPM-RAM-Block 548 schneller aktualisiert werden kann, weil weniger Lesevorgänge erforderlich sind (der Leser sei daran erinnert, dass die Tabelle 700 im SPM-RAM 548 geführt wird, einem flüchtigen Speicher, dessen Inhalt beim Ausschalten des Systems verlorengeht und beim Einschalten aus dem nichtflüchtigen Speicher, das heißt der Speichereinheit 508, aktualisiert werden muss).
  • Das heißt, anstatt jede PBA-Reihe (insgesamt 16 Reihen bei dem bevorzugten Beispiel) zu lesen, um jeden LBA-Eintrag in der Tabelle 700 beim Einschalten zu aktualisieren, muss nur die erste PBA-Reihe jeder LBA aus dem Flash-Speicher gelesen und im SPM-RAM 548 gespeichert werden, was durch Vermeidung unnötiger Lesevorgänge Zeit spart. Andererseits wird klar mehr Speicherkapazität benötigt, um 16 Bits Sektorstatusinformationen pro LBA zu verwalten.
  • In dem vorstehenden Beispiel, wo der Ort 760 verwendet wird, entspräche der Wert in Sektorstatus-Ort 760 lauter Nullen (oder '0000' in Hexadezimalschreibweise).
  • In der Flash-Speichervorrichtung 510 ist jede der Reihen 750, 762, 764, 768 usw. jeweils ein PBA-Ort, wobei jede Reihe eine PBA-Reihennummer aufweist und zum Speichern von Daten und anderen Informationen (entsprechend der vorstehenden Beschreibung in Zusammenhang mit Reihe 750) für einen Sektor innerhalb eines durch eine bestimmte LBA adressierten Blocks dient. Außerdem stellen jeweils 16 aufeinanderfolgende PBA-Reihen einen Block mit Informationen dar. Das heißt, die PBA-Reihen 750, 762, 764 bis 768, die die 16 PBA-Reihen angeben sollen, entsprechen LBA 0 (gezeigt als Reihe 716 in Tabelle 700 in 11), und jede der PBA-Reihen enthält Informationen für einen Sektor in dem Block. Der nächste Block mit Informationen ist der mit LBA '10' (in Hex) adressierte Block, dessen Mapping-Informationen in Reihe 718 in Tabelle 700 enthalten sind, und der in den Orten beginnend ab '10' (in Hexadezimalschreibweise oder '16' in Dezimalschreibweise) und endend mit '1F' (in Hexadezimalschreibweise oder '31') in der Flash-Speichervorrichtung 510 usw. gespeichert ist.
  • In Fortführung des vorstehenden Beispiels zeigt 12 ein Beispiel für den Zustand von Tabelle 700, wenn durch den Host erneut in die LBA 0 geschrieben wird. Weil die LBA 0 bereits geschrieben ist und erneut geschrieben wird, ohne zuvor gelöscht worden zu sein, wird ein anderer freier Ort in der Speichereinheit 508 durch den Speicherplatzmanager 544 gefunden, um die neuen Informationen zu speichern. (Hierbei ist zu beachten, dass die Blöcke, einschließlich ihrer Sektoren, nacheinander und fortlaufend durch jede der Flash-Speichervorrichtungen der Speichereinheit 508 entsprechend ihren PBAs organisiert sind, so dass zum Beispiel die nächste Flash-Speichervorrichtung nach Vorrichtung 510 die adressierten PBA-Blöcke dort aufnimmt, wo die Flash-Speichervorrichtung 510 aufgehört hat; in einem Beispiel enthält die Flash-Speichervorrichtung 510 die PBAs von 0 bis FF (in Hex), und die nächste Flash-Speichervorrichtung, zum Beispiel 512, kann dann die PBAs von 100 bis 1FF (in Hex) enthalten.) Dieser freie Ort ist mit PBA '10' (in Hexadezimalschreibweise oder. 16 in Dezimalschreibweise) angegeben. In Reihe 718, wo die Einträge für LBA '10' dieselben bleiben wie in 11, außer dass das Benutzt-Flag in Ort 742 gesetzt wird (bei der bevorzugten Ausführungsform ist ein Flag gesetzt, wenn es den logischen Zustand '1' hat, aber die entgegengesetzte Polarität kann ebenfalls verwendet werden, ohne von der vorliegenden Erfindung abzuweichen), um anzuzeigen, dass die PBA '10' jetzt „benutzt" wird.
  • Die Einträge in Reihe 716 sind geändert, um '10' im MVPBA-Blockadressen-Ort 732 zu zeigen, der die PBA-Adresse des verschobenen Teils für den Block LBA '00' angibt. Das Verschiebungs-Flag in Ort 734 ist auf den logischen Zustand '1' gesetzt, um anzuzeigen, dass mindestens ein Teil (einer oder mehrere Sektoren) des Blocks LBA '00' an einen anderen PBA-Ort als den in Ort 730 in Tabelle 700 angegebenen PBA-Ort verschoben wurde. Schließlich sind die Bits des Verschiebungsstatus-Orts 714 in Reihe 716 auf '1000000000000000' (in Binärschreibweise oder '8000' in Hexadezimalschreibweise) gesetzt, was den Status der verschobenen Sektoren im Block LBA '00' angibt. Das heißt, in diesem Beispiel gibt '8000' an, dass der erste Sektor oder Sektor '0' im Block '00' an einen anderen PBA-Ort verschoben worden ist.
  • In 22 wirkt sich der Status der Tabelle 700 in 12 auf den Inhalt der Flash-Speichervorrichtung 510 dahingehend aus, dass der verschobene Sektor des Blocks LBA '0' jetzt in die PBA '10' in Reihe 780 geschrieben wird. Reihe 780 enthält dann die Daten für den verschobenen Sektor, der eine Größe von 512 Bytes hat. Bezüglich der Informationen für den verschobenen Sektor enthält die Reihe 780 außerdem den ECC-Code, eine Kopie der Werte in den Flag-Orten 734 bis 740 in Tabelle 700 (in 12) und die LBA '00', um anzugeben, dass die Daten in Reihe 780 zur LBA '00' gehören, und kann weiter den Verschiebungs-Status für jeden einzelnen der Sektoren im Block LBA '0' enthalten.
  • Auch wenn in der Abbildung nicht ausdrücklich gezeigt, ist das Verschiebungs-Flag in Ort 756 der PBA-Reihe 750 gesetzt, um anzugeben, dass mindestens ein Teil des entsprechenden Blocks verschoben worden ist. Der in dem Verschiebungsstatus-Ort 714 in Reihe 716 (in 12) gespeicherte Wert, '8000' in Hexadezimalschreibweise, ist auch in Ort 760 in Reihe 750 gespeichert. Wie bereits erwähnt, gibt dies an, dass nur Sektor '0' von PBA '0' als „verschoben" markiert war und der neue Block LBA '0' in PBA '10' im Flash-Speicher geschrieben worden ist. Ohne weitere ausführliche Diskussion von 22 dürfte ersichtlich sein, dass die folgenden Beispiele sich ebenfalls auf den Inhalt der Flash-Speichervorrichtung 510 auswirken.
  • 13 zeigt den Status der Tabelle 700, wenn noch ein weiterer Schreibvorgang in LBA '00' durchgeführt wird. Die Werte (oder Einträge) in Reihe 716 bleiben dieselben wie in 12, außer dass der Wert in Ort 732 auf '20' (in Hexadezimalschreibweise) geändert ist, um anzuzeigen, dass der verschobene Teil von Block LBA '00' sich jetzt im PBA-Ort '20' (anstelle von '10' in 12) befindet. Wie in 12, gibt der Wert '8000' im Verschiebungsstatus-Ort 714 an, dass der erste Sektor (mit der PBA '00') der Teil des Blocks ist, der verschoben worden ist.
  • Reihe 718 ist geändert, um zu zeigen, dass der Block LBA '10' jetzt alt ist und nicht mehr verwendet werden kann, ohne zuvor gelöscht zu werden. Dies wird durch den Wert in Ort 744 angegeben, der auf den logischen Zustand '1' gesetzt ist. Die Einträge für LBA '20', Reihe 720, bleiben unverändert, außer dass Ort 746 geändert und auf den logischen Zustand '1' gesetzt ist, um den Status des Blocks PBA '20' als in Gebrauch anzugeben. Es wird angenommen, dass wie in 11 und 12 alle übrigen Werte in Tabelle 700 in 13, die vorstehend nicht erwähnt wurden und für die nicht angegeben wurde, dass sie einen bestimmten logischen Zustand aufweisen, in 13 alle unverändert sind (die Flags sind alle auf den logischen Zustand '0' gesetzt).
  • In weiterer Fortführung des vorstehenden Beispiels zeigt 14 den Status der Tabelle 700, wenn noch ein weiteres Schreiben in LBA '0' erfolgt. Um den Vergleich zu vereinfachen, sind die Werte in 14, die auf einen anderen logischen Zustand bezogen auf ihre Zustände in 13 gesetzt sind, in einem Kreis angegeben. In Reihe 716 bleibt alles unverändert, bis auf den neuen Verschiebungs-Ort, angegeben als PBA '30' in Ort 732. PBA '30' war der nächste freie Ort, den der Speicherplatzmanager 544 gefunden hat. Wie vorstehend erwähnt, gibt dieser Wert an, dass ein Teil des Blocks von LBA '0' jetzt in PBA '30' ist, das heißt der erste Sektor (angegeben durch den Wert '8000' in 714 in Reihe 716) in diesem Block ist nach PBA '30' in der Flash-Speichervorrichtung 510 verschoben worden.
  • Reihe 718 bleibt unverändert, bis sie gelöscht wird. Die Flags in den Orten 742 und 744 sind auf den logischen Zustand '0' gesetzt. Reihe 720 bleibt ebenfalls unverändert, bis auf den Wert in ihrer Spalte Alt-Flag 710, der auf '1' geändert ist, um anzuzeigen, dass der Block von PBA '20' ebenfalls alt ist und erst nach einem Löschen wieder verwendet werden kann. Reihe 722 bleibt unverändert, bis auf den Wert in ihrer Spalte Benutzt-Flag 708, der auf den logischen Zustand '1' geändert ist, um anzuzeigen, dass der Block von LBA '30' jetzt in Gebrauch ist.
  • 15 zeigt ein weiteres Beispiel für den Status von Tabelle 700, wobei angenommen wird, dass die Tabelle in dem in 13 gezeigten Zustand war und der Host anschließend in LBA '5' geschrieben hat. Auch hier sind die Änderungen an den Werten in Tabelle 700 in 15 gegenüber denen in 13 mit einem Kreis um den Wert markiert, der sich geändert hat, das heißt nur eine Änderung in diesem Fall.
  • Beim Schreiben in LBA '5' ist zu beachten, dass die LBA-Einträge in den Reihen 716, 718, 720 usw. nur für LBA '00', LBA '10', LBA '20' usw. gelten und daher keinen Eintrag LBA '5' widerspiegeln. Der Leser sei darauf hingewiesen, dass jeder der Einträge in der LBA-Reihe sich auf einen Block mit Informationen bezieht, wobei jeder Block in der bevorzugten Ausführung 16 Sektoren aufweist. Aus diesem Grund adressiert LBA '5' eigentlich den fünften Sektor in Reihe 716. Weil PBA '20' verwendet wurde, um LBA '0' zu speichern, ist nur der Sektor innerhalb PBA '20', entsprechend LBA '5', noch nicht geschrieben und „frei". Daher werden die Daten für LBA '5' in PBA '20' in Sektor '5' gespeichert. Der Verschiebungsstatus-Ort 714 von Reihe 716 wird auf den logischen Zustand '8400' (in Hexadezimalschreibweise) geändert. Dies gibt an, dass der Ort für die ersten und fünften Sektoren in LBA '0' beide an PBA '20' in der Flash-Speichervorrichtung 510 identifiziert sind.
  • Die übrigen Werte in Tabelle 700 in 15 bleiben dieselben wie in 13. 16 bis 18 zeigen ein weiteres Beispiel für den Status der Tabelle 700 nach dem Einschalten oder Löschen der Blöcke mit der Speichereinheit 508. In 16 und 17 werden dieselben Schreibvorgänge ausgeführt, wie sie unter Bezugnahme auf 11 und 12 beschrieben wurden. Der Status der Tabelle 700 in 16 und 17 entspricht dem in 11 bzw. 12 (die beiden letztgenannten Abbildungen sind lediglich aus Gründen der Bequemlichkeit für den Leser als 16 und 17 erneut dargestellt). Kurz gesagt, 16 zeigt den Status der Tabelle 700 nach einem Schreiben in LBA '0', und 17 zeigt den Status der Tabelle 700 nach einem weiteren Schreiben in LBA '0'.
  • 18 setzt nach 17 an und zeigt den Status der Tabelle 700 nach dem Schreiben in LBA '5' durch den Host. Wie in 18 gezeigt, ist LBA '5' nach PBA '10' verschoben worden, wo sich auch LBA '0' befindet. Zu diesem Zweck wird der MVPBA-Blockadressen-Ort 732 auf '10' in Reihe 716 gesetzt, und das Verschiebungs-Flag wird an Ort 734 in derselben Reihe gesetzt. Außerdem wird der Status des Verschiebungsstatus-Orts 714 in Reihe 716 auf '8400' (in Hex) gesetzt, was angibt, dass LBA '0' und LBA '5' verschoben worden sind oder dass der erste und der fünfte Sektor in LBA '00' verschoben worden sind. Weil diese beiden Sektoren sich jetzt im Ort PBA '10' der Flash-Speichervorrichtung 510 befinden, ist auch das Verschiebungs-Flag für jeden dieser Sektoren in der Flash-Speichervorrichtung 510 gesetzt. Es ist zu beachten, dass LBA '5' nach PBA '10' verschoben wurde, weil übrige freie Sektoren in diesem Block vorhanden waren. Das heißt, auch wenn die LBA '0' dieses Blocks verwendet worden ist, waren 15 andere Sektoren desselben Blocks verfügbar, von den der fünfte Sektor jetzt nach dem Schreiben in LBA '5' in Gebrauch ist.
  • In Fortführung des Beispiels in 18 zeigt 19 den Status der Tabelle 700, nachdem der Host ein weiteres Mal in LBA '0' geschrieben hat. Entsprechend der Tabelle wird ein weiterer freier PBA-Ort '20' gefunden, wohin sowohl LBA '5' als auch LBA '0' verschoben werden. Zuerst wird LBA '5' in den Ort PBA '10' bis PBA '20' verschoben, und danach wird der neue Block in Ort LBA '0' in PBA '20' geschrieben. Wie bereits erwähnt, wird bei jedem Verschieben eines Blocks (hier wird zum Beispiel der Block von LBA '5' verschoben) dieser zuerst von dem Ort im Flash-Speicher, wo er sich gegenwärtig befindet, an einen vorläufigen Speicherort in der Steuerung 506, nämlich den Puffer-RAM-Block 522, verschoben und danach von dort an den neuen Ort in den Flash-Speichervorrichtungen übertragen.
  • Das Benutzt-Flag in Ort 746 in Reihe 720 ist gesetzt, um die Verwendung des Orts PBA '20' im Flash-Speicher anzuzeigen, und das Alt-Flag in Ort 744 ist gesetzt, um die Verwendung des Orts PBA '10' zu verhindern, bis dieser gelöscht ist. Der Status dieser Flags sowie der Status des Verschiebungs-Flags für die beiden Sektoren LBA '0' und LBA '5' sind auch im Flash-Speicher reproduziert.
  • 20 setzt nach dem in 18 gezeigten Status der Tabelle 700 an und zeigt einen weiteren Status der Tabelle 700 nach dem Schreiben in LBA '5' durch den Host. In diesem Fall wird zuerst der Block von LBA '0' von Ort PBA '10' in der Flash-Speichervorrichtung 510, wo er gegenwärtig gespeichert ist, in den Ort PBA '20' des Flash-Speichers verschoben. Danach wird der vom Host in LBA '5' geschriebene neue Block in den Ort PBA '20' des Flash-Speichers geschrieben. Die Flags sowohl in der Tabelle 700 als auch den entsprechenden Orten der Flash-Speichervorrichtung 510 werden entsprechend gesetzt, um diese aktualisierten Orte anzugeben.
  • 21 setzt ebenfalls nach dem in 18 gezeigten Status der Tabelle 700 an und zeigt den möglichen Status der Tabelle 700, nachdem der Host in LBA '7' geschrieben hat. In diesem Fall wird der neue Block einfach in den Ort PBA '10' des Flash-Speichers geschrieben, weil dieser Ort noch nicht verwendet wird. Darüber hinaus werden drei Bits für den Verschiebungsstatus-Ort 714 in Reihe 716 gesetzt, um anzuzeigen, dass LBA '0', LBA '5' und LBA '7' an einen anderen PBA-Ort im Flash-Speicher verschoben worden sind. Der Ort 732 zeigt, dass der Ort, wo diese drei Blöcke gespeichert sind, PBA '10' ist.
  • Wie aus der bisherigen Diskussion ersichtlich, führt zu einem bestimmten Zeitpunkt die Anzahl der Sektoren, die innerhalb eines Blocks verschoben werden, zu einem ineffizienten Betrieb. Daher ergibt sich für den Benutzer die Notwendigkeit, einen Schwellenwert für die Anzahl der Sektoren in einem Block festzulegen, die verschoben werden dürfen, bevor der Block als „alt" deklariert wird (das Alt-Flag wird gesetzt) und der Block nicht mehr verwendet wird, bis er gelöscht ist. Dieser Schwellenwert kann zum Beispiel auf die Hälfte der Anzahl von Sektoren in einem Block eingestellt werden. Dies wird folgendermaßen demonstriert: Für einen Block mit 16 Sektoren werden, wenn acht der Sektoren in einen anderen Block verschoben werden, der „ursprüngliche" Block und der „verschobene" Block (der Block, in dem sich die verschobenen Sektoren befinden) im selben PBA-Block kombiniert. Dieser kombinierte PBA-Block kann vollständig in einem neuen Block gespeichert werden oder alternativ kann der „ursprüngliche" Block mit dem „verschobenen" Block kombiniert und in diesen verschoben werden. In letzterem Fall wird der „ursprüngliche" Block dann als „alt" markiert, um ihn zu löschen. Wenn der kombinierte PBA-Block in einem neuen Block gespeichert ist, wer den sowohl der „ursprüngliche" Block als auch der „verschobene" Block als „alt" markiert.
  • 23 zeigt ein allgemeines Ablaufdiagramm mit einigen der Schritte, die bei einem Schreibvorgang durchgeführt werden. Hier soll der Ablauf einiger der Ereignisse gezeigt werden, die während eines solchen Vorgangs stattfinden, und es versteht sich nicht als umfassende Darstellung des Verfahrens oder der Vorrichtung, die bei der bevorzugten Ausführungsform der vorliegenden Erfindung verwendet werden.
  • Die in 23 gezeigten Schritte werden unter der Anweisung des Mikroprozessorblocks 524 durchgeführt, wenn er den Programmcode (oder die Firmware) während des Betriebs des Systems ausführt. Wenn der Host in Schritt 800 einen Block LBA M schreibt, prüft der Speicherplatzverwaltungsblock 544 in Schritt 802, ob LBA M in Gebrauch ist, indem der Status des entsprechenden Benutzt-Flags in Tabelle 700 des SPM-RAM-Blocks 548 kontrolliert wird. Ist sie nicht in Gebrauch, wird in Schritt 804 eine Suche nach dem nächsten freien PBA-Block in der Speichereinheit 508 durchgeführt. Werden keine freien Blöcke gefunden, wird in Schritt 808 ein Fehlerzustand erkannt. Wird jedoch eine freie PBA gefunden, wird in Schritt 806 ihr Benutzt-Flag in Tabelle 700 sowie im Flash-Speicher markiert (bzw. gesetzt). In Schritt 810 wird die PBA des freien Blocks in den VPBA-Blockadressen-Ort 702 der entsprechenden LBA-Reihe in Tabelle 700 geschrieben.
  • Ist in Schritt 802 der Block LBA M in Gebrauch, wird die Suche nach dem nächsten freien PBA-Block in Schritt 812 dennoch durchgeführt, und wenn kein solcher freier Block gefunden wird, wird in Schritt 814 ein Fehlerzustand gemeldet. Wird jedoch ein freier PBA-Ort gefunden, wird diese PBA in Schritt 816 in Tabelle 700 und im Flash-Speicher als in Gebrauch befindlich markiert. Als Nächstes wird in Schritt 818 der Zustand des Blocks als verschoben angegeben, indem das Verschiebungs-Flag und das entsprechende Bit im Verschiebungsstatus-Ort 714 der Tabelle 700 gesetzt werden. Der neue Ort, an den der Block verschoben worden ist, wird ebenfalls in Tabelle 700 angegeben, wie vorstehend beschrieben.
  • Schließlich werden nach den Schritten 818 und 810 die Daten und alle entsprechenden Statusinformationen, ECC-Code und LBA in den PBA-Ort im Flash-Speicher geschrieben.
  • Wie bereits erwähnt wird, wenn ein wesentlicher Teil eines Blocks Sektoren aufweist, die verschoben worden sind (bei der bevorzugten Ausführungsform sind dies acht von 16 Sektoren), der Block als „alt" markiert, indem sein entsprechendes Alt-Flag gesetzt wird. Blöcke mit gesetzten Alt-Flags werden in regelmäßigen Abständen gelöscht und können dann erneut verwendet (oder neu programmiert oder beschrieben werden).
  • Wie zu erkennen, besteht ein Vorteil der Ausführungsformen in 10 bis 23 darin, dass ein Block nicht jedes Mal gelöscht werden muss, nachdem der Host auf ihn zugegriffen hat, denn wenn zum Beispiel Teile (oder Sektoren) des Blocks neu geschrieben werden, müssen, anstatt den Block in den Flash-Speichervorrichtungen zu löschen oder den gesamten Block in einen freien Bereich im Flash-Speicher zu verschieben, nur die Teile, die neu geschrieben werden, an einen anderen Ort im Flash-Speicher übertragen werden, das heißt einen durch die MVPA-Blockadresse identifizierten freien Ort. In diesem Zusammenhang wird ein Löschzyklus, der zeitaufwändig ist, bis zu einem späteren Zeitpunkt vermieden, und es wird keine Zeit für das Lesen und Übertragen eines ganzen Blocks verschwendet.
  • Verbesserungen an den verschiedenen Ausführungsformen nach der vorliegenden Erfindung, wie sie bisher beschrieben wurden, werden nachstehend für die effiziente Übertragung einzelner Sektoren beschrieben, die nacheinander vom Host adressiert werden und die auch unter der Anweisung der Steuerung 506 (in 10) neu geschrieben werden. Obwohl diese Verbesserungen das Verschieben von Sektoren innerhalb eines Blocks von einem ersten Bereich im nichtflüchtigen Speicher in einen nicht verwendeten Bereich im nichtflüchtigen Speicher umfassen, wird, wie für den Fachmann ersichtlich, weniger Speicherplatz in der Steuerung benutzt, was eine kleinere und preiswertere Lösung ermöglicht. Im Einzelnen wird die Notwendigkeit zur Verwaltung erstens der MVPBA-Blockadressen-Orte 704 und der Sektorverschiebungsstatus-Orte 714 (in 11 bis 21 gezeigt) im SPM-RAM-Block 548 der Steuerung 506 (in 10 gezeigt) und zweitens der Sektorstatus-Orte 760 für jeden Block in der Speichereinheit 508 (in 10 gezeigt) vermieden, wie vorstehend in Zusammenhang mit der Ausführungsform in 10 bis 23 beschrieben. Außerdem ist die Anzahl der nötigen Vorgänge zur Durchführung dieser Verschiebungsvorgänge für einzelne fortlaufende Sektoren deutlich geringer, wodurch sich eine höhere Systemleistung ergibt.
  • Eine Ausführungsform einer solchen Verbesserung der vorliegenden Erfindung ist in dem Ablaufdiagramm in 24 bis 26 gezeigt, wobei das digitale System 500 in 10 verwendet wird, um die Anzahl der Lese- und Schreibzyklen in Zusammenhang mit dem Neu-Schreiben einzelner fortlaufender Sektoren zu verringern.
  • In Systemen wie zum Beispiel digitalen Kameras, in denen das digitale System 500 nach der vorliegenden Erfindung eingesetzt werden kann, überträgt üblicherweise der Host 502 (in 10) unter der Anweisung der Steuerung 506 eine große Menge Informationen in Form von Einzelbildern, wobei jedes Einzelbild im Allgemeinen 1.648 Sektoren zur Speicherung in der Flash-Speichereinheit 508 umfasst. Bei solchen Anwendungen sind die durch die Steuerung 506 empfangenen Informationen vom Host 502 im Allgemeinen in Sektoren in fortlaufender Reihenfolge angeordnet. Wie zum Beispiel in den nachstehenden Beispielen beschrieben wird, kann der Host die Steuerung anweisen, Daten in den mit LBA 5 bis LBA 15 adressierten Sektoren zu speichern. Wie gleich ersichtlich wird, nutzen die verbesserten Ausführungsformen der vorliegenden Erfindung den Vorteil der sequenziellen Adressierung der Sektoren durch den Host, wenn auf diese Sektoren wieder zugegriffen wird, um auf diese Weise unnötige Sektorübertragungen und gleichzeitig die Notwendigkeit von Löschen-vor-Schreiben-Vorgängen zu vermeiden. Wie vorstehend erwähnt, nutzt eine solche Verbesserung den in 10 gezeigten Aufbau in Verbindung mit dem Verfahren, das in 24 bis 26 in Form eines Ablaufdiagramms dargestellt ist.
  • Die meisten der in 24 bis 26 gezeigten Schritte werden von dem Mikroprozessorblock 524 in der Steuerung 506 in 10 ausgeführt. Der Mikroprozessorblock 524 führt Anweisungen aus, die im Mikroprozessor-RAM-Block 530 gespeichert sind, um die meisten der in 24 bis 26 gezeigten Schritte durchzuführen. Für den Fachmann ist jedoch ersichtlich, dass diese Schritte auch durch Hardware-Einrichtungen anstatt durch den Mikroprozessor ausgeführt werden können.
  • 27 zeigt ein Beispiel für den möglichen Inhalt einer Lookup-Tabelle 1030, die im SPM-RAM-Block 548 gespeichert ist. Die Tabelle 1030 ist aus einer Anordnung von flüchtigen Speicherorten (RAM) gebildet, die in LBA/PBA-Reihen und -Spalten organisiert sind. Jede Reihe wird jeweils durch einen LBA-Wert mit 9 Bits, die LBA-Reihen-Adresse 1032 wie zum Beispiel LBA 0, 1, 2, 3, ..., n – 1 adressiert. Die Anzahl der Reihen ist abhängig von der durch die Speichereinheit 508 bereitgestellten Speicherkapazität. Eine Speicherkapazität in der nichtflüchtigen Speichereinheit 508 von mindestens 4 Megabyte kann zum Beispiel 500 Blöcke speichern (wobei jeder Block 16 Sektoren aufweist und jeder Sektor 512 Bytes umfasst), und 500 Blöcke erfordern 500 Reihen in der Tabelle 1030. Die Spalten in der Tabelle 1030 umfassen eine Blockadresse 1034 mit 9 Bits, ein Defekt-Flag 1036, ein Benutzt-Flag 1038 und ein Alt-Flag 1040 zur Angabe des Status jedes Blocks in der Speichereinheit 508 (der Leser sei daran erinnert, dass ein LBA-Wert verwendet wird, um einen vom Host empfangenen Sektor mit Informationen zu adressieren, während ein von der Steuerung erzeugter PBA-Wert verwendet wird, um einen Sektor mit Informationen in einem Block mit mehreren Sektoren zu adressieren, der in der Speichereinheit 508 gespeichert ist).
  • Zum leichteren Verständnis wird das Ablaufdiagramm in 24 bis 27 unter Bezugnahme auf den Inhalt der in 27 gezeigten Tabelle 1030 sowie der Beispiele für den Inhalt von Tabelle 1030 beschrieben, wie in 28 bis 38 gezeigt.
  • In 24 sendet der Host 502 in Schritt 1000 einen Befehl an die Steuerung 506, um einen Sektor mit Informationen in die Speichereinheit 508 zu schreiben. Der Informationssektor wird vom Host adressiert, und diese vom Host gelieferte Adresse wird von der Steuerung in einen LBA-Wert, das heißt LBA X, umgesetzt. Wie vorstehend für andere Ausführungsformen der vorliegenden Erfindung beschrieben, empfängt der Host-Schnittstellenblock 520 den Host-Befehl einschließlich der Sektorinformation und Adresse und erzeugt daraus die LBA X zum Adressieren einer LBA/PBA-Reihe in der Tabelle 1030 in 27.
  • Die LBA X wird aus einer vom Host gelieferten Adresse erzeugt, die entweder im LBA-Format oder im CHS-Format vorliegen kann; in diesem Fall wird sie in das LBA-Format umgewandelt. Die LBA-Adresse umfasst 16 Bits nach der bevorzugten Ausführungsform, aber die vier niedrigstwertigen Bits (LSB) sind maskiert, und die restlichen 12 Bits sind um vier Stellen nach rechts verschoben, wobei die neun LSB-Bits des verschobenen Werts verwendet werden, um die LBA/PBA-Reihen in Tabelle 1030 bei 1032 zu adressieren. Für die Reihenadressierung werden neun Bits verwendet, um 500 Blöcke in der Tabelle 1030 zu adressieren. Wenn die Speichereinheit 508 eine andere Kapazität aufweist und eine andere Anzahl von Blöcken verwendet wird, wird alternativ eine entsprechende Bitgröße verwendet, wie vorstehend beschrieben. In gleicher Weise kann bei alternativen Ausführungsformen ein Block eine andere Anzahl von Sektoren umfassen. Dementsprechend wird die Anzahl der maskierten Bits in der vom Host empfangenen Adresse unterschiedlich sein. Wenn zum Beispiel eine Blockgröße von 32 Sektoren verwendet wird, wären fünf Bits in der Adresse maskiert anstelle der gegenwärtigen vier Bits wie bei dem System nach der bevorzugten Ausführungsform. Außerdem ist ein Informationssektor so aufgebaut, dass er einen Benutzerdatenteil von 512 Bytes und einen Verwaltungsteil umfasst, der mindestens ein ECC-Feld umfasst und mit Flag- und Adressinformationen in der Speichereinheit 508 gespeichert werden kann.
  • In 24 vergleicht der Mikroprozessorblock 524 (auch in der Steuerung 506 enthalten) in Schritt 1002 nach Empfang eines solchen Befehls vom Host-Schnittstellenblock 520 (in der Steuerung 506) die Adresse des Sektors, auf den zugegriffen wird, das heißt LBA X, mit einer Sektoradresse PREV_LBA, die zuvor in einem Speicherort wie etwa einem Register (in den weiteren Abbildungen als Verschiebungs-LBA-Register 1054 bezeichnet) im Mikroprozessorblock 524 gespeichert worden ist. Wenn LBA X und PREV_LBA gleich sind, ist in Schritt 1004 der Schreibbefehl vom Host ein sequenzieller Schreibbefehl, und der Mikroprozessorblock 524 prüft, ob der durch LBA X adressierte Block zuvor geschrieben worden ist, indem er die VPBA, eine 9-Bit-Adresse des einer entsprechenden LBA zugewiesenen Blocks (wie nachstehend erläutert), und den Inhalt der Blockadresse 1034 des SPM-RAM-Blocks 548 prüft.
  • Wenn zum Beispiel der Host den Befehl zum Schreiben in LBA 5 gäbe, würden die vier LSBs der Zahl '5' in Binärschreibweise maskiert, woraus der Wert '0' resultierte, und in 27 würde die VPBA-Blockadresse 1034 entsprechend LBA 0 geprüft, die in diesem Fall auf '1FF' gesetzt ist, um anzugeben, dass der Block noch nicht verwendet wird. Wenn die VPBA gültig ist, das heißt ein anderer Wert als lauter Einsen ('1FF' in Hexadezimalschreibweise), prüft der Mikroprozessorblock 524 ein Flag „anstehende Verschiebung", das ein Bit ist, das im gesetzten Zustand angibt, dass die Information im Mikroprozessor gespeichert ist. Das Flag „anstehende Verschiebung" kann wahlweise im SPM-RAM-Block 548 gespeichert werden, wie in 27 in Spalte 1042 gezeigt, anstatt im Mikroprozessor. Die Entscheidung darüber, wo das Flag für die anstehende Verschiebung gespeichert wird, ist eine Auslegungsoption, obwohl zu beachten ist, dass das Flag „Verschiebung anstehend", egal ob im Mikroprozessorblock oder im SPM-RAM gespeichert, nur ein Informationsbit ist. Dies liegt daran, dass es nur einen Block geben kann, der sich im Prozess des Verschiebens von einem Ort in der nichtflüchtigen Speichereinheit 508 an einen anderen Ort darin befindet, und das Flag „anstehende Verschiebung" angibt, ob ein solches Verschieben eines Blocks ansteht oder nicht. Für den Fachmann sollte ersichtlich sein, dass bei alternativen Ausführungsformen ein Verschieben für mehr als einen Block vorgesehen sein kann. Bei einer solchen Implementierung muss der Mikroprozessor jedoch die Kontrolle über mehr LBAs behalten und es ist mehr Hardware nötig. Die Entscheidung, ob das Verschieben für einen Block oder für mehrere Blöcke anstehen kann, ist eine Auslegungsoption.
  • Wenn das Verschieben eines Blocks ansteht, das heißt wenn mindestens ein Sektor eines Blocks, der vom Host vor dem Löschen neu geschrieben worden ist, in einen anderen Block in der Speichereinheit 508 verschoben worden ist, folgt in 24 nach Schritt 1006 der Schritt 1018, und LBA X-Sektorinformationen werden in den Block geschrieben, der die verschobenen Sektoren enthält. Danach erhöht der Mikroprozessor in Schritt 1020 die LBA X um eins und speichert diesen erhöhten Wert im Ort PREV_LBA.
  • Wenn oben in 24 LBA X in Schritt 1002 nicht mit PREV_LBA übereinstimmt, ist der Sektor, auf den gegenwärtig vom Host zugegriffen wird, nicht fortlaufend mit dem vorherigen Sektor, auf den der Host zugegriffen hat, und daher muss der gesamte Informationsblock, in dem zuvor Sektoren geschrieben wurden, an einen neuen Blockort übertragen werden, wohin der alte Block verschoben wird. Dies ist in Schritt 1022 in 25 gezeigt. Der folgende Schritt 1024 dient zum Durchführen eines Lösch vorgangs für alle Orte eines Blocks, der sich an einer Adresse entsprechend LBA X in der Speichereinheit 508 befindet, vor dessen erneuter Verwendung. Danach werden in Schritt 1026 ein Verschiebungs-PBA-Register, das ein Speicherort für Informationen bezüglich des Orts des Blocks ist, der gerade verschoben wird, ebenso wie das Flag „anstehende Verschiebung" gelöscht, und der Prozess wird mit Schritt 1004 in 24 fortgesetzt.
  • Wenn in 24 die VPBA in 1034, die der LBA X entspricht, nicht gültig ist (oder nicht '1FF' ist, wie vorstehend erläutert), wird vom SPM-Steuerungsblock 546 (in 10) eine Suche durchgeführt, um einen freien Block in der Speichereinheit 508 zu finden, wie in 26 in Schritt 1028 gezeigt. Das Benutzt-Flag entsprechend dem Ort PBA X in der Flash-Speichereinheit 508 ist gesetzt, was angibt, dass auf den Block LBA X vor dessen Löschen zugegriffen worden ist, wie in Schritt 1029 gezeigt. Später wird in Schritt 1031 die VPBA des gefundenen freien Blocks in einem der Orte in der Lookup-Tabelle 1030 gespeichert, wobei dieser Ort sich in einer der Reihen in der Spalte 1034 entsprechend der LBA X in 27 befindet. Nach Schritt 1031 in 26 kehrt der Prozess zu Schritt 1016 in 24 zurück.
  • In gleicher Weise wird in 24, wenn die VPBA in 1034 entsprechend der LBA X gültig ist, das Flag „anstehende Verschiebung" in Schritt 1006 geprüft. Wenn das Flag „anstehende Verschiebung" in Schritt 1006 nicht gesetzt war, wird eine Suche für einen freien LBA-Block in Schritt 1008 durchgeführt, das Flag für die anstehende Verschiebung wird in Schritt 1010 gesetzt, die VPBA für den neu gefundenen freien Block (in Schritt 1008) wird in Schritt 1012 in einem Ort in der Lookup-Tabelle 1030 gespeichert und das Benutzt-Flag entsprechend dem Block LBA X in der Speichereinheit 508 wird gesetzt.
  • In Schritt 1016 wird die VPBA für den neu gefundenen freien Block durch den Mikroprozessor in einem Verschiebungs-PBA-Register gespeichert. In 27 sind das Verschiebungs-PBA-Register als 1052 und das Verschiebungs-LBA-Register als 1054 gezeigt. Diese beiden Register sowie die VPBA-Blockadresse in 1034 werden nach dem erstmaligen Einschalten des digitalen Systems 500 sowie nach dem Löschen des verschobenen Blocks auf den Hexadezimalwert '1FF' initialisiert. In der vorstehenden Beschreibung in Bezug auf die Ablaufdiagramme in 24 bis 26 bedeutet das „Löschen" eines dieser Register (zum Beispiel in Schritt 1026) praktisch, dass der Inhalt der Register auf '1FF' gesetzt wird.
  • Nach Schritt 1016 werden Daten, die vom Host empfangen wurden, um sie in den Block LBA X zu schreiben, in den neu gefundenen freien Block in der Speichereinheit 508 geschrieben, wie in Schritt 1018 gezeigt. In Schritt 1020 wird dann LBA X um eins erhöht und der erhöhte Wert wird in PREV_LBA gespeichert. Auf die vorstehend beschriebene Weise vermeidet die bevorzugte Ausführungsform der vorliegenden Erfindung, dass alle Sektoren eines Blocks, dessen Sektoren vor einem Löschvorgang neu geschrieben werden, in einen nicht benutzten Ort im Flash-Speicher verschoben werden müssen, wenn die Sektoren einzeln und nacheinander vom Host adressiert werden. Dies liegt daran, dass jedes Mal, wenn auf den nächsten fortlaufenden Sektor zugegriffen wird, der Blockort, wo sich die neuesten oder verschobenen Sektoren befinden, im Verschiebungs-PBA-Register 1052 aktualisiert wird, und weil der PREV_LBA-Wert angibt, wo in dem letzteren Block der nächste Sektor geschrieben werden soll, wird der Schreibvorgang mit diesen beiden Parametern ausgeführt, ohne dass ein gesamter Block verschoben werden muss. Dadurch wiederum lassen sich unnötige Lese-, Schreib- und Löschvorgänge einsparen, wie sie bei Systemen nach dem Stand der Technik erforderlich sind. Wenn zum Beispiel bei den bekannten Systemen ein Sektor eines Blocks neu geschrieben wurde, wurden zwangsläufig 15 Lesevorgänge und 15 Schreibvorgänge ausgeführt, weil ein ganzer Informationsblock verschoben wurde. Wie anhand der nachstehenden Beispiele gezeigt wird, vermeiden die Ausführungsformen jedoch diese 15 Lese- und Schreibvorgänge und schreiben nur den Sektor, der neu geschrieben wurde.
  • 28 zeigt allgemein die Organisation der Informationen in den Blöcken der Speichereinheit 508. Wie gezeigt, umfasst jeder Block 16 Sektoren, und jeder Sektor eines Blocks enthält einen Ort 1056 mit 512 Bytes zum Speichern des Benutzerdatenteils und einen Speicherort 1058 zum Speichern des ECC-Codes. Jeder Block, das heißt Block 0, Block 1 usw. wird mit dem 9-Bit-Blockadressenwert 1034 (in 27) adressiert, und jeder Sektor in dem Block wird mit den vorstehend beschriebenen vier maskierten LSB-Bits adressiert, nachdem die Maskierung aufgehoben ist. Der letzte Sektor jedes Blocks enthält außerdem einen Blockadressen-Ort 1060 zum Speichern des 9-Bit-LBA-Werts für den Block, in dem sich der Blockadressen-Ort 1060 befindet. Der Blockadressen-Ort 1060 von Block 0 enthält zum Beispiel den Wert '0', der Blockadressen-Ort 1060 von Block 1 den Wert '1', der Blockadressen-Ort 1060 von Block 2 den Wert '2' usw. für alle Blöcke. Faktisch sind diese Werte identisch mit den Werten der LBA/PBA-Reihenadresse 1032 (in 27 gezeigt).
  • Außerdem ist im letzten Sektorspeicherbereich für jeden Block ein Speicherort zur Aufnahme des Defekt-Flags 1062, des Benutzt-Flags 1064, des Alt-Flags 1066 und eines Blockgut-Flags 1068 enthalten. Das Defekt-Flag und das Alt-Flag 1062 bzw. 1066 entsprechen den Defekt- und Alt-Flags 1036 und 1040 in der SPM-RAM-Lookup-Tabelle 1030 (in 27 gezeigt). Jedes Benutzt-Flag entspricht einem Sektor eines Blocks; daher weist jeder Sektorort in jedem Block einen Benutzt-Flag-Ort auf. Der Grund für die Benutzung eines Benutzt-Flags für jeden Sektor in dem Block besteht darin, anzugeben, welche Sektoren des Blocks aus dem ursprünglich enthaltenen LBA-Ort (wie durch das Verschiebungs-LBA-Register 1054 angegeben) verschoben wurden oder in den Verschiebungs-PBA-Ort (wie durch den Inhalt des Verschiebungs-PBA-Registers 1052 angegeben) geschrieben werden. Dies ist besonders nützlich beim Verschieben eines ganzen Blocks, der einige Sektoren aufweist, die verschoben wurden, und andere, die nicht verschoben wurden.
  • Wenn zum Beispiel vom Host auf einen Sektor zugegriffen wird, der nicht in fortlaufender Reihenfolge ist, wie vorstehend anhand von 24 bis 26 beschrieben, wird ein ganzer Sektor, der sich im Zustand „Verschiebung anstehend" befand, verschoben. In einem solchen Fall prüft der Mikroprozessor das Benutzt-Flag für jeden Sektor in dem verschobenen Block und verschiebt nur die Sektoren, deren Benutzt-Flags nicht gesetzt sind, weil jene Sektoren, die gesetzte Benutzt-Flags aufweisen, bereits bei sequenziellen Zugriffen durch den Host verschoben worden sind.
  • Bei einer alternativen Ausführungsform wird anstelle der Benutzt-Flags zur Angabe, welche Sektoren verschoben werden müssen, vom Mikroprozessor ein Verschiebungszeiger-Ort, das heißt ein Wort mit einer Länge von 16 Bits, verwendet und im Mikroprozessorblock 524 gespeichert, um dieselbe Aufgabe zu erfüllen. Nachdem das Flag für die anstehende Verschiebung gesetzt ist, wird bei jedem Verschieben eines Sektors in den Verschiebungs-PBA-Ort ein Bit im Verschiebungszeiger-Wort (in dem Beispiel in 29 und folgende als 170 gezeigt) entsprechend dem Ort des Sektors in dem Block gesetzt. Daher dient das Verschiebungszeiger-Wort als eine Zuordnungs-Map für die verschobenen Sektoren eines Blocks und bietet eine schnelle Möglichkeit zur Identifizierung dessen, welche Sektoren des Blocks, für den ein Verschieben ansteht, sich im Verschiebungs-PBA-Ort und welche sich im Verschiebungs-LBA-Ort befinden.
  • Das Blockgut-Flag 1068 ist in den ersten und letzten Sektoren jedes Blocks enthalten, um den Ort des Blocks anzugeben, wo sich die neueste und exakte Kopie der gespeicherten Datei befindet. Nach einem Stromausfall wird der Inhalt der Speichereinheit 508 verwendet, um die Lookup-Tabelle 1030 im SPM-RAM zu aktualisieren, und wenn ein Block zum Beispiel gerade von einem ersten Ort in der nichtflüchtigen Speichereinheit 508 an einen zweiten Ort in der Speichereinheit 508 verschoben wurde, als der Stromausfall eintrat, werden die Blockinformationen auf zwei Blöcke aufgeteilt, die mit derselben LBA adressiert werden. Für den zweiten Block, wohin Informationen verschoben wurden, kann nicht zuverlässig angenommen werden, dass er gute Daten enthält, weil das Verschieben nicht abgeschlossen wurde, und die Informationen in dem ersten Block können in der Tat brauchbarer sein.
  • Wenn ein Block von einem ersten Block in einen zweiten Block verschoben wird, wird der letzte Sektor des ersten Blocks zuerst in den zweiten Block verschoben, und das Blockgut-Flag 1068 für den letzten Sektor des zweiten Blocks wird gesetzt, um anzuzeigen, dass dieser Block 'gut' ist; danach werden der nächste Sektor bis zum letzten Sektor des ersten Blocks an den entsprechenden Ort des zweiten Blocks verschoben usw., bis alle Sektoren einschließlich des ersten Sektors des ersten Blocks verschoben sind. Danach wird das Blockgut-Flag für den ersten Sektor des zweiten Blocks gesetzt, um anzuzeigen, dass der zweite Block 'gut' ist. In diesem Zusammenhang kann, wenn zum Beispiel beim Wiederherstellen der Stromversorgung zwei Blöcke aufgrund der unvollständigen Übertragung der Blockinformationen von einem Block zum anderen dieselben LBA-Werte aufweisen, der Block mit den genauen Informationen identifiziert werden, indem der Status der beiden Blockgut-Flags für jeden Block geprüft wird. Das heißt, wenn ein Block zwei nicht übereinstimmende Blockgut-Flag-Werte aufweist, wurde er nicht vollständig übertragen und ist daher kein guter Block. Wenn andererseits einer der Blöcke zwei übereinstimmende Blockgut-Flags aufweist, die angeben, dass der Block gut ist, und der andere Block zwei nicht übereinstimmende Flags aufweist, die angeben, dass der Block nicht gut ist, und das Flag „Verschiebung anstehend" gesetzt ist, kommt der Mikroprozessor zu dem Schluss, dass der letztere Block nicht gut ist, und verwendet die Informationen im ersteren Block als gültige Informationen.
  • 29 bis 38 zeigen verschiedene Beispiele für den Inhalt der SPM-RAM-Lookup-Tabelle bei verschiedenen Arten von LBA-Zugriffen für ein besseres Verständnis der Funktion der bevorzugten Ausführungen, wie sie vorstehend anhand von 24 bis 28 beschrieben worden sind. Zunächst werden beim Einschalten des Systems die Werte in den Blockadressen-Orten 1034 sowie der Inhalt des Verschiebungs-PBA-Registers und des Verschiebungs-LBA-Registers alle auf '1FF' in Hexadezimalschreibweise gesetzt. Die Flags und das Verschiebungszeiger-Wort 170 werden alle auf '0' gesetzt.
  • In 29, wenn der Host nach dem Einschalten die Steuerung anweist, in LBA 0 bis LBA 15 zu schreiben, stellt die SPM-Steuerung vermutlich fest, dass Block 0 frei ist, und der Mikroprozessor verwendet ihn, um die vom Host gelieferten Daten zu speichern. Daher enthält die Blockadresse 1034 des LBA-Blocks 0 den Wert '0' und das Benutzt-Flag für diesen Block wird gesetzt.
  • In 30 weist der Host die Steuerung nach dem Schreibvorgang in 29 an, nur in LBA 5 zu schreiben. In diesem Fall wird der Wert '5' in Hexadezimalschreibweise verarbeitet, um seine vier LSBs zu maskieren und so den Wert '0' zu erhalten. Weil der Ort LBA 0 in der Speichereinheit 508 jedoch zuvor in den Schritten in 29 be schrieben wurde, muss die SPM-Steuerung einen anderen verfügbaren freien Block suchen. Unter der Annahme, dass sich ein solcher Block an der Adresse '1' befindet, schreibt die Steuerung dann die Daten, die vom Host gesendet wurden, um sie als LBA 5 zu speichern, in Ort 5 des LBA-Blocks 1, das heißt den sechsten Sektorort (Ort 0 ist der erste Sektor) in Block 1. Danach wird das Flag „anstehende Verschiebung", das entweder im Mikroprozessorblock oder alternativ in der SPM-RAM-Lookup-Tabelle an Ort 1042 gespeichert werden kann, von der Steuerung gesetzt.
  • Außerdem schreibt die Steuerung die Adresse '001', an die der Block verschoben wird, in das Verschiebungs-PBA-Register 1052 und setzt das Flag „anstehende Verschiebung" (entweder im Mikroprozessor oder in 1042). Es ist zu beachten, dass das Verschiebungs-PBA-Register 1052 bei alternativen Ausführungsformen im SPM-RAM gespeichert werden kann. Die Steuerung setzt auch das Benutzt-Flag 1038 entsprechend Block 1 in der SPM-RAM-Lookup-Tabelle 1030 und aktualisiert das Verschiebungs-LBA-Register 1054, um einen Wert '0' zu speichern, der angibt, dass mindestens einer oder mehrere Sektoren von Block 0 an einen anderen Ort in der Speichereinheit 508 verschoben worden sind. Wenn das Verschiebungszeiger-Wort 170 verwendet wird, aktualisiert die Steuerung dieses ebenfalls, um anzuzeigen, dass LBA 5 verschoben worden ist.
  • Ab hier können verschiedene unterschiedliche Ereignisse eintreten, und in jedem Fall hat die Lookup-Tabelle 1030 einen vollkommen anderen Inhalt. 31 bis 33 zeigen den möglichen Inhalt der Lookup-Tabelle 1030 nach dem in 31 gezeigten Zustand, um die Wirkung der verschiedenen Ereignisse zu zeigen. Im Einzelnen zeigt 31 den Inhalt der Tabelle 1030, wenn eine LBA, die nicht in Block 0 ist, geschrieben wird. 32 zeigt den Inhalt der Tabelle 1030, wenn der Host erneut in LBA 5 schreibt, und 33 zeigt den Inhalt der Tabelle 1030, wenn der Host in eine andere LBA als LBA 5 schreibt, die sich aber dennoch in Block 0 befindet, das heißt LBA 6.
  • Wenn in 31 der Host in LBA 17 schreibt, liegt dies eindeutig außerhalb von Block 0 und es handelt sich um einen nicht fortlaufenden Sektor-Schreibvorgang, weil das vorherige Schreiben in LBA 5 erfolgte. Hier werden wieder die vier LSBs der Hexadezimalentsprechung für den Wert '17' maskiert, um Block '1' zu erhalten. Die Steuerung vergleicht dann das Verschiebungs-LBA-Register 1054 mit '1' und prüft auch, ob das Flag „anstehende Verschiebung" gesetzt ist. Weil der Wert im Verschiebungs-LBA-Register '0' lautet, liegt eine Übereinstimmung vor, und die anstehende Verschiebung muss beendet werden. Das heißt, alle Sektoren, die in Block 1 noch nicht aktualisiert worden sind, müssen von Block 0 nach Block 1 verschoben werden, und Block 0 muss entweder gelöscht oder bis zu einem späteren Zeitpunkt als 'alt' markiert werden, bis er im Hintergrund gelöscht werden kann, bevor die neue LBA 17 in einen Block in der Speichereinheit 508 geschrieben wird. Die neue LBA 17 wird daher in Block 2 geschrieben, der der von der SPM-Steuerung gefundene nächste freie Block ist.
  • 32 zeigt den Fall, wo der Host erneut auf LBA 5 zugreift. In diesem Fall müssen die vom Host empfangenen Daten für LBA 5 in einen anderen Block geschrieben werden, und das Verschiebungs-PBA-Register 1052 muss mit der nächsten Blockadresse aktualisiert werden und der alte Block muss als 'alt' markiert werden, um ihn später zu löschen. In diesem Fall wird die LBA 5 in Block 2 geschrieben, der frei ist, und weil außer Sektor 5 keine anderen Sektoren in Block 1 geschrieben wurden, werden keine anderen Sektoren von Block 1 nach Block 2 verschoben, und der Inhalt von Block 0 bleibt unverändert. Block 1 wird als 'alt' markiert, und das Verschiebungs-PBA-Register 1052 wird aktualisiert, um den Wert 002 zu enthalten, weil LBA 5 sich jetzt in Block 2 befindet. Hierbei ist zu beachten, dass in diesem Beispiel die Notwendigkeit vermieden wird, alle Sektoren von Block 0 nach Block 1 oder Block 2 zu verschieben, wie dies bei bekannten Verfahren erforderlich ist, wodurch 15 Lese- und 15 Schreibzyklen entfallen. Außerdem setzt die Steuerung das Benutzt-Flag entsprechend Block 2.
  • In 33 schreibt der Host in LBA 6. Hier maskiert die Steuerung wieder die unteren vier Bits der Hexadezimalentsprechung von '6', wodurch sich '0' ergibt. Die Steuerung vergleich dann diesen Wert '0' mit dem Wert im Verschiebungs-LBA-Register 1054 und stellt fest, dass eine Übereinstimmung zwischen den beiden Werten vorliegt. Durch Prüfen des Verschiebungszeiger-Worts 170 oder durch Prüfen des Benutzt-Flags entsprechend Sektor 6 wird festgestellt, ob Sektor 6 zuvor geschrieben worden ist oder zur Benutzung frei ist. Weil der Sektor 6 zuvor nicht geschrieben worden ist, setzt die Steuerung in diesem Fall nur das entsprechende Bit des Verschiebungszeiger-Worts 170 (oder alternativ das Benutzt-Flag für Sektor 6 in der Speichereinheit 508) und schreibt die vom Host empfangenen Daten in Sektor 6 von Block 1. Weitere Änderungen am Inhalt der Lookup-Tabelle 1030 sind nicht nötig.
  • Wenn der Host weiter Daten nacheinender in die LBAs 7, 8, 9 bis 15 schreibt, werden diese neuen LBAs von der Steuerung dementsprechend in die jeweiligen Sektoren 7, 8, 9 bis 15 geschrieben. Nachdem das Ende des Blocks erreicht ist, das heißt nachdem der letzte Sektor, Sektor 15, geschrieben ist, werden die Sektoren 0, 1, 2, 3 und 4 von Block 0 nach Block 1 verschoben, weil der Host diese Sektoren nicht aktualisiert hat. Block 0 wird dann als 'alt' markiert, und das Verschiebungs-PBA-Register 1053 und das Verschiebungs-LBA-Register 1054 werden auf '1FF' initialisiert, um anzuzeigen, dass keine Verschiebung ansteht. Aus demselben Grund wird auch das Verschiebungszeiger-Wort 170 auf '0' initialisiert. Diese Beschreibung ist in den Beispielen in 34 bis 38 gezeigt. In 38 ist der Status der Lookup-Tabelle 1030 gezeigt, wenn der Block vollständig gebraucht ist und die anstehende Verschiebung beendet ist. Wie gezeigt, lautet die Blockadresse 1034 von LBA-Block 0 jetzt '001', und Block 0 ist als 'alt' markiert, um ihn zu löschen, und die Register 1052 und 1054 sind als initialisiert gezeigt.
  • Obwohl die vorliegende Erfindung anhand von bestimmten Ausführungsformen beschrieben worden ist, ist für den Fachmann zweifellos ersichtlich, dass Änderungen und Modifikationen daran möglich sind.

Claims (14)

  1. Verfahren zur Aktualisierung von Sektorinformation in einem digitalen System, das einen Host aufweist, der über eine Steuerung mit einer nichtflüchtigen Speichervorrichtung zum Speichern digitaler Information verbunden ist, die in Sektoren im nichtflüchtigen Speicher eingeteilt ist, von denen jeder Sektor einen Datenbereich und einen Verwaltungsbereich aufweist und vom Host unter Verwendung einer logischen Blockadresse (LBA) eindeutig identifizierbar ist, wobei die Sektorinformation innerhalb eines Sektororts innerhalb der nichtflüchtigen Speichervorrichtung gespeichert wird, eine Gruppe von Sektororten einen von der Steuerung unter Verwendung einer virtuellen physikalischen Blockadresse (VPBA) adressierbaren Block bildet und jeder Sektorort innerhalb eines Blocks von der Steuerung unter Verwendung einer physikalischen Blockadresse (PBA) identifizierbar ist, wobei die in einem Sektorort eines Blocks innerhalb der nichtflüchtigen Speichervorrichtung gespeicherte Sektorinformation vor einem Löschen des Blocks aktualisiert wird, mit folgenden Schritten: a. Gewinnen eines LBA-Werts, der einem vom Host adressierten Sektor entspricht, aufgrund eines vom Host empfangenen Befehls, eine Sektorinformation neu auf einen vom Host identifizierten Sektor zu schreiben, b. Gewinnen einer LBA-Blockadresse aus dem LBA-Wert zum Adressieren eines Blocks innerhalb der Speichervorrichtung, innerhalb dessen der vom Host gelieferte Sektor gespeichert werden soll, c. Vergleichen des LBA-Werts mit einem früheren LBA-Wert (PREV_LBA), um zu bestimmen, ob eine Entsprechung auftritt, d. wenn der LBA-Wert und der PREV_LBA-Wert einander entsprechen, Prüfen ob seit dem letzten Löschvorgang des LBA-Blocks auf dem LBA-Block ein früherer Schreibvorgang ausgeführt wurde, e. wenn ein früherer Schreibvorgang ausgeführt wurde, Prüfen ob einer der Sektoren des von der LBA-Blockadresse identifizierten Blocks seit dem Auftreten des letzten Löschvorgangs für den LBA-Block von einem Ort innerhalb der Speichervorrichtung zu einem anderen Ort innerhalb der Speichervorrichtung übertragen wurde, f. wenn die Sektoren des von der LBA-Blockadresse identifizierten Blocks nicht übertragen wurden, Finden eines freien Blocks innerhalb der nichtflüchtigen Speichervorrichtung, um die Sektorinformation zu speichern, wobei der freie Block von einem dem LBA-Block entsprechenden virtuellen physikalischen Blockadressen-Wert (VPBA) identifiziert wird, g. Speichern der Sektorinformation innerhalb eines Sektororts des freien Blocks, der dem Sektorort des LBA-Blocks entspricht, h. Speichern des VPBA-Werts in einem PBA-Speicherort zum Angeben des freien Blockorts innerhalb der Speichervorrichtung, in dem die neue Sektorinformation abgelegt ist, i. Erhöhen des LBA-Werts um eins, und j. Ersetzen des PREV_LBA-Werts durch den erhöhten LBA-Wert, wobei für einen Sektor eines Blocks, der vorher geschrieben und noch nicht gelöscht wurde, einzelne aufeinanderfolgende Schreibvorgänge ausgeführt werden, ohne alle anderen Sektoren des Blocks zu verschieben.
  2. Verfahren nach Anspruch 1, wobei ein Verschiebungszeiger-Wert erzeugt und in einem bestimmten Speicherort gespeichert wird und nach dem Schritt zum Speichern der Sektorinformation ein Schritt zum Ändern des Werts eines Verschiebungszeiger-Speicherorts ausgeführt wird, um den Status anzugeben, welcher Sektor innerhalb des LBA-Blocks aktualisiert wurde, indem ein Bit in dem bestimmten Speicherort gesetzt wird, dessen Position innerhalb des Verschiebungszeiger-Werts der Position des aktualisierten Sektors innerhalb des LBA-Blocks entspricht.
  3. Verfahren nach Anspruch 1, wobei der Sektorverwaltungsbereich ein Verwendungs-Flag enthält, das anzeigt, daß der Sektor seit dem letzten Löschvorgang vom Host beschrieben wurde, wenn es gesetzt ist, und anzeigt, daß der Sektor seit dem letzten Löschvorgang nicht vom Host beschrieben wurde, wenn es nicht gesetzt ist.
  4. Verfahren nach Anspruch 3, das nach dem Findeschritt einen Schritt zum Setzen eines Verwendungs-Flags für den vom LBA-Wert identifizierten Sektor umfaßt.
  5. Verfahren nach Anspruch 1, das nach dem Findeschritt einen Schritt zum Setzen eines Verschiebungsverlaufs-Flags umfaßt, um anzuzeigen, daß mindestens ein Teil des Blocks an einen anderen Ort innerhalb der Speichervorrichtung verschoben wurde.
  6. Verfahren nach Anspruch 1 mit einem Schritt zum Speichern des dem LBA-Wert zugeordneten VPBA-Werts in einem LBA-Speicherort, um den Ort des Blocks innerhalb der Speichervorrichtung anzuzeigen, in dem die Sektorinformation aller von der LBA adressierten Sektoren abgelegt ist.
  7. Verfahren nach Anspruch 1, wobei dann, wenn der Vergleichsschritt keine Entsprechung zwischen dem LBA-Wert und dem PREV_LBA-Wert ergibt, Sektorinformationen für alle Sektoren des vom LBA-Werts identifizierten Blocks zum Blockort übertragen werden, der vom im PBA-Speicherort gespeicherten VPBA-Wert identifiziert wird.
  8. Verfahren nach Anspruch 7, wobei der vom LBA-Wert identifizierte Block gelöscht wird.
  9. Verfahren nach Anspruch 8, wobei nach dem Übertragungsschritt ein Verschiebungsverlaufs-Flag und ein PBA-Speicherort gelöscht wird und die Schritte d. bis j. ausgeführt werden.
  10. Verfahren nach Anspruch 7, wobei der Sektorverwaltungsbereich mindestens zweier der Sektoren jedes in der Speichervorrichtung gespeicherten Blocks jeweils ein Bit zum Speichern eines Blockgut-Flags aufweist und während des Übertragens von Sektorinformation das Blockgut-Flag des ersten Sektors nach dessen Übertragung gesetzt wird und das Blockgut-Flag des letzten Sektors nach dessen Übertragung gesetzt wird.
  11. Verfahren nach Anspruch 10, wobei nach einer Stromunterbrechung der Zustand der Blockgut-Flags des VPBA-Blocks verglichen wird und dann, wenn sie nicht gleich sind, auf die Sektorinformation innerhalb des LBA-Blocks anstelle des VPBA-Blocks zugegriffen wird, wenn der Host den LBA-Block adressiert.
  12. Verfahren nach Anspruch 1, wobei dann, wenn der frühere Schreibvorgang von Schritt e nicht ausgeführt wurde, ein freier Block innerhalb der nichtflüchtigen Speichervorrichtung gefunden wird, um Sektorinformation zu speichern, wobei der freie Block von einem dem LBA-Block entsprechenden VPBA-Wert identifiziert wird.
  13. Verfahren nach Anspruch 3 oder 12, wobei nach dem Findeschritt die Verwendungs-Flags der Sektoren des vom LBA-Wert identifizierten Blocks gesetzt werden und die Schritte h. bis j. ausgeführt werden.
  14. Digitales System zur Verwendung mit einem Host, um Befehle von ihm zu erhalten, und einer nichtflüchtigen Speichervorrichtung zum Speichern digitaler Information, die in Sektoren eingeteilt ist, von denen jeder einen Datenbereich und einen Verwaltungsbereich aufweist, und in einen Sektorort innerhalb der nichtflüchtigen Speichervorrichtung gespeichert wird, wobei eine Gruppe der Sektororte einen Block bildet, der von der Steuerung unter Verwendung eines virtuellen physikalischen Blockadressen-Werts (VPBA) adressierbar ist und jeder Sektorort innerhalb eines Blocks von der Steuerung unter Verwendung eines physikalischen Blockadressen-Werts (PBA) identifizierbar ist, aufweisend: die Steuerung mit a. einer Hostinterface-Einrichtung, die auf einen Schreibbefehl vom Host anspricht, um Sektorinformation neu auf einen Sektor zu schreiben, der von einer Sektoradresse identifiziert wird, und die eingerichtet ist, einen LBA-Wert zu erzeugen, der dem vom Host adressierten Sektor entspricht, und aus dem LBA-Wert eine logische Blockadresse (LBA) als Blockadresse zum Adressieren eines Blocks zum Speichern der Sektorinformation innerhalb der Speichervorrichtung zu erzeugen, b. einer Einrichtung zum Vergleichen des LBA-Werts mit einem PREV_LBA-Wert, c. einer Einrichtung zum Prüfen, ob seit dem letzten Löschvorgang des LBA-Blocks ein früherer Schreibvorgang für den LBA-Block ausgeführt wurde, d. einer Einrichtung zum Erfassen, ob einer der Sektoren des von der LBA-Blockadresse identifizierten Blocks seit dem Auftreten des letzten Löschvorgangs für den LBA-Block von einem Ort innerhalb der Speichervorrichtung an einen anderen Ort innerhalb der Speichervorrichtung übertragen wurde, sowie einer Einrichtung zum Suchen eines freien Blocks zum Speichern der Sektorinformation innerhalb der nichtflüchtigen Speichervorrichtung, wobei der freie Block von einem dem LBA-Block entsprechenden VPBA-Wert identifiziert wird, e. einer Einrichtung zum Speichern der Sektorinformation innerhalb eines Sektororts des VPBA-Blocks, der dem Sektorort des LBA-Blocks entspricht, f. einer Einrichtung zum Speichern des VPBA-Werts in einen PBA-Speicherort zum Anzeigen des Blockorts innerhalb der Speichervorrichtung, in dem die neue Sektorinformation abgelegt ist, und g. einer Einrichtung zum Erhöhen der LBA um eins und einer Einrichtung zum Ersetzen des PREV_LBA-Werts durch den erhöhten LBA-Wert, wobei auf einem Sektor eines Blocks, der vorher geschrieben und noch nicht gelöscht wurde, einzelne aufeinanderfolgende Schreibvorgänge ausgeführt werden, ohne alle anderen Sektoren des Blocks verschieben zu müssen.
DE69839126T 1997-10-07 1998-10-06 Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher Expired - Lifetime DE69839126T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US946331 1986-12-24
US08/946,331 US5930815A (en) 1995-07-31 1997-10-07 Moving sequential sectors within a block of information in a flash memory mass storage architecture
PCT/US1998/021107 WO1999018509A1 (en) 1997-10-07 1998-10-06 Moving sequential sectors within a block of information in a flash memory mass storage architecture

Publications (2)

Publication Number Publication Date
DE69839126D1 DE69839126D1 (de) 2008-03-27
DE69839126T2 true DE69839126T2 (de) 2009-03-05

Family

ID=25484324

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69839126T Expired - Lifetime DE69839126T2 (de) 1997-10-07 1998-10-06 Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher

Country Status (5)

Country Link
US (1) US5930815A (de)
EP (1) EP1029278B1 (de)
AU (1) AU1517799A (de)
DE (1) DE69839126T2 (de)
WO (1) WO1999018509A1 (de)

Families Citing this family (116)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5430859A (en) 1991-07-26 1995-07-04 Sundisk Corporation Solid state memory system including plural memory chips and a serialized bus
US5845313A (en) 1995-07-31 1998-12-01 Lexar Direct logical block addressing flash memory mass storage architecture
US6978342B1 (en) 1995-07-31 2005-12-20 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
US6728851B1 (en) 1995-07-31 2004-04-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US8171203B2 (en) 1995-07-31 2012-05-01 Micron Technology, Inc. Faster write operations to nonvolatile memory using FSInfo sector manipulation
US5890192A (en) * 1996-11-05 1999-03-30 Sandisk Corporation Concurrent write of multiple chunks of data into multiple subarrays of flash EEPROM
GB2339044B (en) * 1998-03-02 2003-06-04 Lexar Media Inc Flash memory card with enhanced operating mode detection and user-friendly interfacing system
KR100533140B1 (ko) 1998-09-04 2005-12-02 하이퍼스톤 아게 제한된 소거빈도의 메모리의 액세스제어방법
US6901457B1 (en) 1998-11-04 2005-05-31 Sandisk Corporation Multiple mode communications system
JP3730423B2 (ja) * 1998-11-24 2006-01-05 富士通株式会社 半導体記憶装置
US6434678B1 (en) * 1999-02-12 2002-08-13 Gtp, Inc. Method for data storage organization
US6405295B1 (en) * 1999-09-07 2002-06-11 Oki Electric Industry, Co., Ltd. Data storage apparatus for efficient utilization of limited cycle memory material
US6606628B1 (en) * 2000-02-14 2003-08-12 Cisco Technology, Inc. File system for nonvolatile memory
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
US7167944B1 (en) 2000-07-21 2007-01-23 Lexar Media, Inc. Block management for mass storage
US7155559B1 (en) * 2000-08-25 2006-12-26 Lexar Media, Inc. Flash memory architecture with separate storage of overhead and user data
US6772274B1 (en) 2000-09-13 2004-08-03 Lexar Media, Inc. Flash memory system and method implementing LBA to PBA correlation within flash memory array
US6678785B2 (en) * 2001-09-28 2004-01-13 M-Systems Flash Disk Pioneers Ltd. Flash management system using only sequential write
GB0123416D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
GB0123421D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Power management system
GB0123415D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
GB0123410D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Memory system for data storage and retrieval
TWI240861B (en) * 2002-01-11 2005-10-01 Integrated Circuit Solution In Data access method and architecture of flash memory
DE60332091D1 (de) * 2002-01-31 2010-05-27 Panasonic Corp Informationsverarbeitungsvorrichtung, speicherverwaltungsvorrichtung, speicherverwaltungsverfahren und informationsverarbeitungsverfahren
US7231643B1 (en) 2002-02-22 2007-06-12 Lexar Media, Inc. Image rescue system including direct communication between an application program and a device driver
AU2003211154A1 (en) * 2002-02-22 2003-09-09 Lexar Media, Inc. Removable memory media with integral indicator light
DE10256509B4 (de) * 2002-06-19 2008-06-12 Hyperstone Gmbh Verfahren zum Adressieren von blockweise löschbaren Speichern
KR20040028469A (ko) 2002-09-30 2004-04-03 엘지전자 주식회사 1 회 기록 가능한 광디스크의 디펙트 영역 관리방법
US7233550B2 (en) * 2002-09-30 2007-06-19 Lg Electronics Inc. Write-once optical disc, and method and apparatus for recording management information on write-once optical disc
US7526599B2 (en) 2002-10-28 2009-04-28 Sandisk Corporation Method and apparatus for effectively enabling an out of sequence write process within a non-volatile memory system
AU2003282447B2 (en) * 2002-12-11 2010-03-11 Lg Electronics Inc. Method of managing overwrite and method of recording management information on an optical disc write once
TWI314315B (en) 2003-01-27 2009-09-01 Lg Electronics Inc Optical disc of write once type, method, and apparatus for managing defect information on the optical disc
TWI334595B (en) * 2003-01-27 2010-12-11 Lg Electronics Inc Optical disc, method and apparatus for managing a defective area on an optical disc
US6944063B2 (en) * 2003-01-28 2005-09-13 Sandisk Corporation Non-volatile semiconductor memory with large erase blocks storing cycle counts
JP3928724B2 (ja) * 2003-02-20 2007-06-13 ソニー株式会社 記録媒体の記録制御方法および記録媒体の記録制御装置
US7032090B2 (en) * 2003-04-08 2006-04-18 International Business Machines Corporation Method, system, and apparatus for releasing storage in a fast replication environment
TWI405191B (zh) 2003-05-09 2013-08-11 Lg Electronics Inc 單寫型光碟及由單寫型光碟回復碟片管理資訊的方法與裝置
MXPA05012044A (es) * 2003-05-09 2006-02-03 Lg Electronics Inc Disco optico de una sola escritura, metodo y aparato par recuperacion de informacion de administracion de disco del disco optico de una sola escritura.
US7069402B2 (en) * 2003-06-02 2006-06-27 International Business Machines Corporation Host-independent incremental backup method, apparatus, and system
US7313065B2 (en) 2003-08-05 2007-12-25 Lg Electronics Inc. Write-once optical disc, and method and apparatus for recording/reproducing management information on/from optical disc
DE10349595B3 (de) * 2003-10-24 2004-12-09 Hyperstone Ag Verfahren zum Schreiben von Speichersektoren in einem blockweise löschbaren Speicher
KR100608592B1 (ko) * 2004-01-27 2006-08-03 삼성전자주식회사 플래시 메모리의 데이터 관리 장치 및 방법
KR101113866B1 (ko) * 2004-03-19 2012-03-02 엘지전자 주식회사 기록매체내에 기록되는 데이터 구조 및 데이터 기록방법과기록장치
US7725628B1 (en) 2004-04-20 2010-05-25 Lexar Media, Inc. Direct secondary device interface by a host
US7370166B1 (en) 2004-04-30 2008-05-06 Lexar Media, Inc. Secure portable storage device
US7594063B1 (en) 2004-08-27 2009-09-22 Lexar Media, Inc. Storage capacity status
US7464306B1 (en) 2004-08-27 2008-12-09 Lexar Media, Inc. Status of overall health of nonvolatile memory
KR101215370B1 (ko) * 2004-09-14 2012-12-26 엘지전자 주식회사 기록매체 및 기록매체의 기록 재생 방법 및 장치
US7634258B2 (en) * 2004-11-22 2009-12-15 Motorola, Inc. System and method for over-the-air update of wireless communication devices
US7457909B2 (en) * 2005-01-14 2008-11-25 Angelo Di Sena Controlling operation of flash memories
US7523381B2 (en) * 2005-09-01 2009-04-21 Micron Technology, Inc. Non-volatile memory with error detection
US20070083697A1 (en) * 2005-10-07 2007-04-12 Microsoft Corporation Flash memory management
US20070094445A1 (en) * 2005-10-20 2007-04-26 Trika Sanjeev N Method to enable fast disk caching and efficient operations on solid state disks
US7979624B2 (en) * 2006-03-31 2011-07-12 Intel Corporation Techniques to truncate data files in nonvolatile memory
US7840878B1 (en) * 2006-04-11 2010-11-23 Marvell International Ltd. Systems and methods for data-path protection
US7783956B2 (en) * 2006-07-12 2010-08-24 Cronera Systems Incorporated Data recorder
US9104599B2 (en) 2007-12-06 2015-08-11 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for destaging cached data
CN101681282A (zh) * 2006-12-06 2010-03-24 弗森多系统公司(dba弗森-艾奥) 用于共享的、前端、分布式raid的装置、系统和方法
US8489817B2 (en) 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
US9116823B2 (en) 2006-12-06 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for adaptive error-correction coding
US9495241B2 (en) 2006-12-06 2016-11-15 Longitude Enterprise Flash S.A.R.L. Systems and methods for adaptive data storage
US8443134B2 (en) * 2006-12-06 2013-05-14 Fusion-Io, Inc. Apparatus, system, and method for graceful cache device degradation
US8706968B2 (en) * 2007-12-06 2014-04-22 Fusion-Io, Inc. Apparatus, system, and method for redundant write caching
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
KR100877609B1 (ko) * 2007-01-29 2009-01-09 삼성전자주식회사 버퍼 메모리의 플래그 셀 어레이를 이용하여 데이터 오류 정정을 수행하는 반도체 메모리 시스템 및 그 구동 방법
US7689762B2 (en) * 2007-05-03 2010-03-30 Atmel Corporation Storage device wear leveling
US8316277B2 (en) * 2007-12-06 2012-11-20 Fusion-Io, Inc. Apparatus, system, and method for ensuring data validity in a data storage process
US9519540B2 (en) 2007-12-06 2016-12-13 Sandisk Technologies Llc Apparatus, system, and method for destaging cached data
US7836226B2 (en) 2007-12-06 2010-11-16 Fusion-Io, Inc. Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
JP4439569B2 (ja) * 2008-04-24 2010-03-24 株式会社東芝 メモリシステム
US20090327581A1 (en) * 2008-06-30 2009-12-31 Coulson Richard L Nand memory
US8094500B2 (en) * 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
US20100174845A1 (en) * 2009-01-05 2010-07-08 Sergey Anatolievich Gorobets Wear Leveling for Non-Volatile Memories: Maintenance of Experience Count and Passive Techniques
US8040744B2 (en) * 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US8244960B2 (en) * 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US8700840B2 (en) * 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
US8180995B2 (en) 2009-01-21 2012-05-15 Micron Technology, Inc. Logical address offset in response to detecting a memory formatting operation
WO2011031796A2 (en) 2009-09-08 2011-03-17 Fusion-Io, Inc. Apparatus, system, and method for caching data on a solid-state storage device
WO2011031903A2 (en) 2009-09-09 2011-03-17 Fusion-Io, Inc. Apparatus, system, and method for allocating storage
US9122579B2 (en) 2010-01-06 2015-09-01 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for a storage layer
US9563397B1 (en) * 2010-05-05 2017-02-07 Western Digital Technologies, Inc. Disk drive using non-volatile cache when garbage collecting log structured writes
WO2012083308A2 (en) 2010-12-17 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
WO2012106362A2 (en) 2011-01-31 2012-08-09 Fusion-Io, Inc. Apparatus, system, and method for managing eviction of data
US8874823B2 (en) 2011-02-15 2014-10-28 Intellectual Property Holdings 2 Llc Systems and methods for managing data input/output operations
US9201677B2 (en) 2011-05-23 2015-12-01 Intelligent Intellectual Property Holdings 2 Llc Managing data input/output operations
US9003104B2 (en) 2011-02-15 2015-04-07 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a file-level cache
US9141527B2 (en) 2011-02-25 2015-09-22 Intelligent Intellectual Property Holdings 2 Llc Managing cache pools
WO2012129191A2 (en) 2011-03-18 2012-09-27 Fusion-Io, Inc. Logical interfaces for contextual storage
US9563555B2 (en) 2011-03-18 2017-02-07 Sandisk Technologies Llc Systems and methods for storage allocation
JP5708216B2 (ja) * 2011-05-09 2015-04-30 ソニー株式会社 フラッシュメモリ装置、メモリ制御装置、メモリ制御方法、ストレージシステム
US9274937B2 (en) 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
US9251052B2 (en) 2012-01-12 2016-02-02 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for profiling a non-volatile cache having a logical-to-physical translation layer
US9767032B2 (en) 2012-01-12 2017-09-19 Sandisk Technologies Llc Systems and methods for cache endurance
US10102117B2 (en) 2012-01-12 2018-10-16 Sandisk Technologies Llc Systems and methods for cache and storage device coordination
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
US9116812B2 (en) 2012-01-27 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a de-duplication cache
US10019353B2 (en) 2012-03-02 2018-07-10 Longitude Enterprise Flash S.A.R.L. Systems and methods for referencing data on a storage medium
US10339056B2 (en) 2012-07-03 2019-07-02 Sandisk Technologies Llc Systems, methods and apparatus for cache transfers
US9612966B2 (en) 2012-07-03 2017-04-04 Sandisk Technologies Llc Systems, methods and apparatus for a virtual machine cache
US8750043B2 (en) * 2012-08-16 2014-06-10 Winbond Electronics Corp. Data storage device and control method for non-volatile memory
US10346095B2 (en) 2012-08-31 2019-07-09 Sandisk Technologies, Llc Systems, methods, and interfaces for adaptive cache persistence
US10318495B2 (en) 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
US10509776B2 (en) 2012-09-24 2019-12-17 Sandisk Technologies Llc Time sequence data management
TWI459203B (zh) * 2012-10-02 2014-11-01 Winbond Electronics Corp 資料儲存裝置以及非揮發性記憶體控制方法
US9842053B2 (en) 2013-03-15 2017-12-12 Sandisk Technologies Llc Systems and methods for persistent cache logging
US10102144B2 (en) 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
US10558561B2 (en) 2013-04-16 2020-02-11 Sandisk Technologies Llc Systems and methods for storage metadata management
US9842128B2 (en) 2013-08-01 2017-12-12 Sandisk Technologies Llc Systems and methods for atomic storage operations
US10019320B2 (en) 2013-10-18 2018-07-10 Sandisk Technologies Llc Systems and methods for distributed atomic storage operations
US10073630B2 (en) 2013-11-08 2018-09-11 Sandisk Technologies Llc Systems and methods for log coordination
CN105260325A (zh) * 2014-07-17 2016-01-20 广明光电股份有限公司 固态硬盘搜集垃圾区块的方法
US9946607B2 (en) 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US11635913B2 (en) * 2017-12-12 2023-04-25 Winbond Electronics Corp. NOR flash memory apparatus and recover and read method thereof
WO2019147286A1 (en) 2018-01-29 2019-08-01 Hewlett-Packard Development Company, L.P. Validity of data sets stored in memory
JP2020086483A (ja) * 2018-11-15 2020-06-04 株式会社日立製作所 計算機システム及び記憶デバイスの制御方法
US11687447B1 (en) * 2022-01-04 2023-06-27 Silicon Motion, Inc. Method and apparatus for performing access control of memory device with aid of additional physical address information

Family Cites Families (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2426938A1 (fr) * 1978-05-26 1979-12-21 Cii Honeywell Bull Dispositif de detection de secteurs defectueux et d'allocation de secteurs de remplacement dans une memoire a disques
JPS5764383A (en) * 1980-10-03 1982-04-19 Toshiba Corp Address converting method and its device
JPS57132256A (en) * 1981-02-09 1982-08-16 Sony Corp Memory device
JPS5877034A (ja) * 1981-10-30 1983-05-10 Hitachi Ltd 記録方法
US4450559A (en) * 1981-12-24 1984-05-22 International Business Machines Corporation Memory system with selective assignment of spare locations
JPS58215794A (ja) * 1982-06-08 1983-12-15 Toshiba Corp 不揮発性メモリ装置
JPS58215795A (ja) * 1982-06-08 1983-12-15 Toshiba Corp 不揮発性メモリ装置
US4498146A (en) * 1982-07-30 1985-02-05 At&T Bell Laboratories Management of defects in storage media
JPS5945695A (ja) * 1982-09-07 1984-03-14 Fujitsu Ltd Icメモリ
US4710871A (en) * 1982-11-01 1987-12-01 Ncr Corporation Data transmitting and receiving apparatus
AU557723B2 (en) * 1982-12-17 1987-01-08 Blue Circle Southern Cement Ltd. Electronic memory system
JPS59162695A (ja) * 1983-03-07 1984-09-13 Nec Corp 記憶装置
US4896262A (en) * 1984-02-24 1990-01-23 Kabushiki Kaisha Meidensha Emulation device for converting magnetic disc memory mode signal from computer into semiconductor memory access mode signal for semiconductor memory
JPS60212900A (ja) * 1984-04-09 1985-10-25 Nec Corp 半導体固定記憶装置
JPS6196598A (ja) * 1984-10-17 1986-05-15 Fuji Electric Co Ltd 電気的消去可能なp−romのカウントデ−タ記憶方法
US4654847A (en) * 1984-12-28 1987-03-31 International Business Machines Apparatus for automatically correcting erroneous data and for storing the corrected data in a common pool alternate memory array
JPS61208673A (ja) * 1985-03-12 1986-09-17 Matsushita Electric Ind Co Ltd 情報記録再生装置
US4744062A (en) * 1985-04-23 1988-05-10 Hitachi, Ltd. Semiconductor integrated circuit with nonvolatile memory
JPS62102482A (ja) * 1985-10-28 1987-05-12 Matsushita Electric Ind Co Ltd 情報記録再生装置
US4800520A (en) * 1985-10-29 1989-01-24 Kabushiki Kaisha Toshiba Portable electronic device with garbage collection function
JP2664137B2 (ja) * 1985-10-29 1997-10-15 凸版印刷株式会社 Icカード
US4746998A (en) * 1985-11-20 1988-05-24 Seagate Technology, Inc. Method for mapping around defective sectors in a disc drive
US4924331A (en) * 1985-11-20 1990-05-08 Seagate Technology, Inc. Method for mapping around defective sectors in a disc drive
US4757474A (en) * 1986-01-28 1988-07-12 Fujitsu Limited Semiconductor memory device having redundancy circuit portion
JP2685173B2 (ja) * 1986-05-31 1997-12-03 キヤノン株式会社 メモリ書き込み制御方法
JPH07109717B2 (ja) * 1986-05-31 1995-11-22 キヤノン株式会社 メモリ書き込み制御方法
US4953122A (en) * 1986-10-31 1990-08-28 Laserdrive Ltd. Pseudo-erasable and rewritable write-once optical disk memory system
JPS63183700A (ja) * 1987-01-26 1988-07-29 Mitsubishi Electric Corp Eepromアクセス方法
US4914529A (en) * 1988-07-18 1990-04-03 Western Digital Corp. Data disk defect handling using relocation ID fields
US5070474A (en) * 1988-07-26 1991-12-03 Disk Emulation Systems, Inc. Disk emulation system
EP1031992B1 (de) * 1989-04-13 2006-06-21 SanDisk Corporation EEprom-System mit Blocklöschung
US5226168A (en) * 1989-04-25 1993-07-06 Seiko Epson Corporation Semiconductor memory configured to emulate floppy and hard disk magnetic storage based upon a determined storage capacity of the semiconductor memory
US5200959A (en) * 1989-10-17 1993-04-06 Sundisk Corporation Device and method for defect handling in semi-conductor memory
US5303198A (en) * 1990-09-28 1994-04-12 Fuji Photo Film Co., Ltd. Method of recording data in memory card having EEPROM and memory card system using the same
EP0489204B1 (de) * 1990-12-04 1995-08-16 Hewlett-Packard Limited Wiederprogrammierbare Datenspeicherungsanlage
GB2251324B (en) * 1990-12-31 1995-05-10 Intel Corp File structure for a non-volatile semiconductor memory
US5270979A (en) * 1991-03-15 1993-12-14 Sundisk Corporation Method for optimum erasing of EEPROM
JPH04332999A (ja) * 1991-05-07 1992-11-19 Hitachi Koki Co Ltd メモリの使用方法
JP2582487B2 (ja) * 1991-07-12 1997-02-19 インターナショナル・ビジネス・マシーンズ・コーポレイション 半導体メモリを用いた外部記憶システム及びその制御方法
US5430859A (en) * 1991-07-26 1995-07-04 Sundisk Corporation Solid state memory system including plural memory chips and a serialized bus
JPH05151097A (ja) * 1991-11-28 1993-06-18 Fujitsu Ltd 書換回数制限型メモリのデータ管理方式
JPH05233426A (ja) * 1992-02-20 1993-09-10 Fujitsu Ltd フラッシュ・メモリ使用方法
US5337275A (en) * 1992-10-30 1994-08-09 Intel Corporation Method for releasing space in flash EEPROM memory array to allow the storage of compressed data
US5341339A (en) * 1992-10-30 1994-08-23 Intel Corporation Method for wear leveling in a flash EEPROM memory
US5357475A (en) * 1992-10-30 1994-10-18 Intel Corporation Method for detaching sectors in a flash EEPROM memory array
US5341330A (en) * 1992-10-30 1994-08-23 Intel Corporation Method for writing to a flash memory array during erase suspend intervals
US5459850A (en) * 1993-02-19 1995-10-17 Conner Peripherals, Inc. Flash solid state drive that emulates a disk drive and stores variable length and fixed lenth data blocks
US5581723A (en) * 1993-02-19 1996-12-03 Intel Corporation Method and apparatus for retaining flash block structure data during erase operations in a flash EEPROM memory array
US5586285A (en) * 1993-02-19 1996-12-17 Intel Corporation Method and circuitry for increasing reserve memory in a solid state memory disk
US5404485A (en) * 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5388083A (en) * 1993-03-26 1995-02-07 Cirrus Logic, Inc. Flash memory mass storage architecture
US5479638A (en) * 1993-03-26 1995-12-26 Cirrus Logic, Inc. Flash memory mass storage architecture incorporation wear leveling technique
US5485595A (en) * 1993-03-26 1996-01-16 Cirrus Logic, Inc. Flash memory mass storage architecture incorporating wear leveling technique without using cam cells
US5353256A (en) * 1993-06-30 1994-10-04 Intel Corporation Block specific status information in a memory device
US5566314A (en) * 1993-08-30 1996-10-15 Lucent Technologies Inc. Flash memory device employing unused cell arrays to update files

Also Published As

Publication number Publication date
DE69839126D1 (de) 2008-03-27
WO1999018509A9 (en) 1999-07-01
EP1029278A1 (de) 2000-08-23
EP1029278A4 (de) 2004-06-16
AU1517799A (en) 1999-04-27
EP1029278B1 (de) 2008-02-13
US5930815A (en) 1999-07-27
WO1999018509A1 (en) 1999-04-15

Similar Documents

Publication Publication Date Title
DE69839126T2 (de) Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher
DE60030876T2 (de) Bereichsverwaltung eines nichtflüchtigen Speichers mit hoher Kapazität
DE69635962T2 (de) Flash-Speicher-Massenspeichersystem und Verfahren dafür
DE60211653T2 (de) Teildatenprogrammier- und leseoperationen in einem nichtflüchtigen speicher
DE69034191T2 (de) EEPROM-System mit aus mehreren Chips bestehender Blocklöschung
DE4143072C2 (de) Blockweise löschbarer nicht-flüchtiger Halbleiterspeicher
DE69333906T2 (de) Verfahren und System für die Dateienverwaltung mit einem schnell löschbaren, programmierbaren ROM
DE60019903T2 (de) Speichersystem
DE19782041B4 (de) Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher
DE60217883T2 (de) Verfahren zum schreiben von daten in einen nicht-flüchtigen speicher
DE60130593T2 (de) Flash-Speicherarchitektur mit gleichzeitig programmierbaren mehrfachen hostfähigen Flash-Speicherbanken
DE112010003650B4 (de) Container-Markierungsschema zum Verringern einer Schreibverstärkung bei Halbleiter-Einheiten
DE60317551T2 (de) Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem
DE60316171T2 (de) Automatischer abnutzungsausgleich in einem nicht-flüchtigen speichersystem
DE69233228T2 (de) Datenverwaltungssystem für Halbleiterspeicher mit beschränkter Programmierung und I.C. Speicherkarte mit solchem Datenverwaltungssystem
DE69630624T2 (de) EEPROM-Matrix mit einem, dem "Flash"-Speicher ähnlichen Kern
DE112015000378T5 (de) Selektives Rückkopieren für einen auf einem Chipplättchen gepufferten nichtflüchtigen Speicher
DE112010003577T5 (de) Datenverwaltung in Halbleiterspeicher-Einheiten und mehrstufigen Speichersystemen
DE602004005939T2 (de) Vorrichtung und Verfahren zur Datenverwaltung nichtflüchtiger Speicher
DE102009034651A1 (de) Prozess und Verfahren zur Abbildung von logischen Adressen auf physische Adressen in Festkörperplatten
DE102009019271A1 (de) Übertragen von Sequenzzahlen für das Wiederherstellen nach Stromausfall bei einem nichtflüchtigen Speicher
DE102009051862A1 (de) Speichervorrichtung und Speicherverfahren
DE102006003261A1 (de) Speichersystem und Verfahren zur Datenzusammenführung
DE102005063250A1 (de) Datenspeicherungssteuersystem, Speicher- und Rechnersystem und Betriebsverfahren
DE112010003887T5 (de) Datenverwaltung in Halbleiter-Speichereinheiten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition