DE102021105183A1 - Verfahren und Vorrichtung zum Betreiben eines nichtflüchtigen Speichers - Google Patents

Verfahren und Vorrichtung zum Betreiben eines nichtflüchtigen Speichers Download PDF

Info

Publication number
DE102021105183A1
DE102021105183A1 DE102021105183.5A DE102021105183A DE102021105183A1 DE 102021105183 A1 DE102021105183 A1 DE 102021105183A1 DE 102021105183 A DE102021105183 A DE 102021105183A DE 102021105183 A1 DE102021105183 A1 DE 102021105183A1
Authority
DE
Germany
Prior art keywords
data
block
volatile memory
storage location
counter
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.)
Pending
Application number
DE102021105183.5A
Other languages
English (en)
Inventor
Bo Mellberg
Rikard Ekstroem
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.)
Robert Bosch GmbH
Original Assignee
Robert Bosch GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Robert Bosch GmbH filed Critical Robert Bosch GmbH
Priority to DE102021105183.5A priority Critical patent/DE102021105183A1/de
Priority to CN202210201505.9A priority patent/CN115035940A/zh
Publication of DE102021105183A1 publication Critical patent/DE102021105183A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/14Circuits for erasing electrically, e.g. erase voltage switching circuits
    • G11C16/16Circuits for erasing electrically, e.g. erase voltage switching circuits for erasing blocks, e.g. arrays, words, groups
    • 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

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

Verfahren, beispielsweise computerimplementiertes Verfahren, zum Betreiben eines nichtflüchtigen Speichers, umfassend: Bestimmen, ob in einem ersten Block des nichtflüchtigen Speichers ausreichend freier Speicherplatz für in den nichtflüchtigen Speicher zu schreibende Daten vorhanden ist, und, wenn in dem ersten Block nicht genügend freier Speicherplatz für die in den nichtflüchtigen Speicher zu schreibenden Daten vorhanden ist, Schreiben der zu schreibenden Daten in einen weiteren Block, beispielsweise in einen zweiten Block, des nichtflüchtigen Speichers.

Description

  • Technisches Gebiet der Offenbarung
  • Die Offenbarung betrifft ein Verfahren zum Betreiben eines nichtflüchtigen Speichers.
  • Die Offenbarung betrifft ferner eine Vorrichtung zum Betreiben eines nichtflüchtigen Speichers.
  • Beschreibung beispielhafter Ausführungsformen
  • Beispielhafte Ausführungsformen betreffen ein Verfahren, beispielsweise ein computerimplementiertes Verfahren, zum Betreiben eines nichtflüchtigen Speichers, umfassend: Bestimmen, ob in einem ersten Block des nichtflüchtigen Speichers ausreichend freier Speicherplatz für in den nichtflüchtigen Speicher zu schreibende Daten vorhanden ist, und, wenn in dem ersten Block nicht genügend freier Speicherplatz für die in den nichtflüchtigen Speicher zu schreibenden Daten vorhanden ist, Schreiben der zu schreibenden Daten in mindestens einen weiteren Block, beispielsweise in einen zweiten Block, des nichtflüchtigen Speichers. In einigen beispielhaften Ausführungsformen kann dies zum Wear-Leveling für den nichtflüchtigen Speicher beitragen, während es beispielsweise ermöglicht, häufige und/oder sofortige Schreibvorgänge in den nichtflüchtigen Speicher zu unterstützen und/oder die letzten gültigen Daten, die in den nichtflüchtigen Speicher geschrieben wurden, wiederherzustellen.
  • In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher einen Flash-Speicher umfassen oder sein, beispielsweise vom Flash-EEPROM-Typ. In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher zwei oder mehr Blöcke umfassen, wobei beispielsweise jeder der zwei oder mehr Blöcke einzeln, d. h. ohne einen anderen Block zu beeinflussen, gelöscht werden kann.
  • In einigen Ausführungsformen sind der erste Block und der mindestens eine weitere Block benachbart, beispielsweise in einem Adressraum des nichtflüchtigen Speichers. In einigen Ausführungsformen sind der erste Block und der mindestens eine weitere Block im Adressraum des nichtflüchtigen Speichers nicht benachbart.
  • In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher eine Blockgröße von 4096 Bytes umfassen. In anderen Ausführungsformen sind auch andere Blockgrößen möglich.
  • In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher mindestens eine Datenschnittstelle zum Austauschen von Daten mit mindestens einer weiteren Vorrichtung, z. B. einer Komponente eines eingebetteten Systems, z. B. einem Mikrocontroller oder einem Fahrzeugcomputer, umfassen. In einigen beispielhaften Ausführungsformen kann die mindestens eine Datenschnittstelle eine serielle Schnittstelle sein, beispielsweise eine serielle Peripherieschnittstelle, SPI, und/oder QSPI (Quad SPI), oder dergleichen. In einigen Ausführungsformen ist auch eine parallele Schnittstelle möglich.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren, wenn in dem ersten Block ausreichend freier Speicherplatz für die in den nichtflüchtigen Speicher zu schreibenden Daten vorhanden ist, Schreiben der zu schreibenden Daten in den ersten Block.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: Verwenden einer Datenstruktur, die einen Zähler und eine, beispielsweise, vorbestimmte Kennung, beispielsweise eine magische Zahl, umfasst, wobei die in den nichtflüchtigen Speicher zu schreibenden Daten beispielsweise in die Datenstruktur eingebettet sind, beispielsweise zwischen dem Zähler und der Kennung, und, optional, Schreiben der Datenstruktur in den nichtflüchtigen Speicher.
  • In einigen beispielhaften Ausführungsformen können in dem nichtflüchtigen Speicher zu speichernde Daten unter Verwendung der Datenstruktur eingerichtet werden, wobei der Zählerwert sich z. B. am Anfang der Datenstruktur befindet, und wobei die Kennung, beispielsweise eine magische Zahl, sich an letzter Position in der Struktur befindet.
  • In einigen beispielhaften Ausführungsformen kann die Datenstruktur wie folgt aussehen:
 struct rbdNvMData_st
 {
 uint16_t Counter;
 ...
 data
 ...
 uint32_t MagicNumber;
 },

wobei „Counter“ (Zähler) z. B. einen vorzeichenlosen Integer-Datentyp umfasst, beispielsweise mit 16 Bit, wobei „data“ (Daten) die in den nichtflüchtigen Speicher zu schreibenden Daten charakterisiert (diese Daten können einen sich dynamisch ändernden Wert und/oder eine Länge umfassen, die beispielsweise zwischen 1 Byte und einer Blockgröße des nichtflüchtigen Speichers oder mehr liegt), und wobei „MagicNumber“ (magische Zahl) die Kennung charakterisiert (beispielsweise, und nicht beschränkt auf, einen vorzeichenlosen 32-Bit-Integer-Datentyp).
  • In einigen beispielhaften Ausführungsformen sind die Daten, die zwischen dem Zähler und der Kennung/magischen Zahl gesetzt werden, dynamisch, und können je nach Bedarf zu der Struktur hinzugefügt oder von ihr entfernt werden. In einigen beispielhaften Ausführungsformen können der Zähler und die Kennung/magische Zahl als Schutzgrenzen wirken, die die Daten innerhalb der oben erläuterten Datenstruktur „umgeben“.
  • In einigen beispielhaften Ausführungsformen kann die Datenstruktur auch weitere Elemente umfassen, die z. B. zwischen dem Zähler und den Daten und/oder zwischen den Daten und der Kennung eingebettet werden.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: Wiederholen der Schritte des Verwendens der Datenstruktur und/oder des Schreibens der Datenstruktur in den nichtflüchtigen Speicher, wobei vorzugsweise mehrere Datenstrukturen sequentiell geschrieben werden (z. B. umfasst jede Datenstruktur einen jeweiligen, beispielsweise ansteigenden, Zählerwert und/oder einzelne Daten und die Kennung), beispielsweise in den ersten Block und/oder in den mindestens einen weiteren Block, wobei beispielsweise ein Wert des Zählers nachfolgender Datenstrukturen erhöht wird, beispielsweise um eins. Auf diese Weise kann in dem einen oder den mehreren Blöcken des nichtflüchtigen Speichers eine geordnete Sequenz von Datenstrukturen eingerichtet werden.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: Verwenden einer vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers, beispielsweise des ersten Blocks und des mindestens einen weiteren Blocks, in einer beispielsweise vorbestimmten Sequenz. Mit anderen Worten, in einigen Beispielen wird zuerst der erste Block sequentiell mit zu schreibenden Daten „gefüllt“, z. B. in Form der oben beispielhaft offenbarten Datenstruktur, und, sobald der erste Block voll ist, z. B. nicht ausreichend freien Speicherplatz umfasst, um eine weitere Datenstruktur aufzunehmen, der mindestens eine weitere, z. B. zweite Block, sequentiell mit den in den nichtflüchtigen Speicher zu schreibenden Daten „gefüllt“.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: wenn beispielsweise alle Blöcke der vorbestimmten Anzahl von Blöcken gefüllt sind, beispielsweise mit zu schreibenden Daten, beispielsweise unter Verwendung einer oder mehrerer Datenstrukturen, Löschen mindestens des ersten Blocks der Sequenz. Mit anderen Worten, sobald alle Blöcke der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers mit zu schreibenden Daten „gefüllt“ worden sind, kann das Verfahren zu dem ersten Block springen, z. B. den ersten Block löschen, und damit fortfahren, Daten der in den nichtflüchtigen Speicher zu schreibenden Daten in den ersten Block zu schreiben. Wenn der erste Block erneut gefüllt ist, kann das Verfahren in einigen beispielhaften Ausführungsformen das Löschen des zweiten Blocks und das erneute Schreiben von in den nichtflüchtigen Speicher zu schreibenden Daten in den zweiten Block umfassen, und so weiter.
  • In einigen Ausführungsformen umfasst das Verfahren mindestens eines der folgenden Elemente: a) Definieren eines Wertebereichs für gültige Werte für den Zähler, b) Definieren mindestens eines ungültigen Werts für den Zähler, wobei beispielsweise der mindestens eine ungültige Wert für den Zähler einem Bitmuster entspricht, das zum Löschen mindestens eines Blocks des nichtflüchtigen Speichers verwendet wird.
  • In einigen beispielhaften Ausführungsformen kann, wenn z. B. ein vorzeichenloser 16-Bit-Datentyp für den Zähler verwendet wird, ein gültiger Wertebereich für Zählerwerte z. B. von 0x0000 bis 0xFFFE reichen, wobei 0xFFFF z.B. als ungültiger Zählerwert definiert werden kann, z.B. weil in einigen beispielhaften Ausführungsformen der Wert 0xFFFF z. B. einem Bitmuster entsprechen kann, das zum Löschen mindestens eines Blocks des nichtflüchtigen Speichers verwendet wird (wenn also 0xFFFF als gültiger Zählerwert verwendet würde, kann nicht zwischen einem gelöschten Speicherabschnitt des nichtflüchtigen Speichers und dem Zählerwert 0xFFFF unterschieden werden).
  • In einigen beispielhaften Ausführungsformen kann ein Wert der Kennung/magischen Zahl in drei Kategorien unterteilt werden (beispielhaft wird angenommen, dass die Kennung einen vorzeichenlosen 32-Bit-Integer-Datentyp umfasst):
    1. 1. Der Kennungswert ist gleich 0xFFFFFFFF, d. h., er wurde nicht programmiert (Löschmuster des nichtflüchtigen Speichers entspricht alle Bits auf ‚1‘ gesetzt),
    2. 2. Der Kennungswert ist gleich der magischen Zahl, die beispielsweise zu 0xDEADBEEF gewählt werden kann,
    3. 3. Am Speichertort der magischen Zahl wurde ein anderer Kennungswert als die oben genannten (0xFFFFFFFF, 0xDEADBEEF) programmiert. Wenn dies der Fall ist, kann die magische Zahl als beschädigt betrachtet werden.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: Auslesen von Daten, beispielsweise aus mindestens einem Block der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers, und, optional, Interpretieren der gelesenen Daten basierend auf der Datenstruktur. In einigen beispielhaften Ausführungsformen kann das Interpretieren der gelesenen Daten basierend auf der Datenstruktur Interpretieren der ersten zwei Bytes der gelesenen Daten als der Zählerwert und/oder Interpretieren der letzten vier Bytes der gelesenen Daten als die magische Zahl und/oder Interpretieren der Informationen der gelesenen Daten zwischen dem zweiten Byte und den letzten vier Bytes als die Daten, die in den nichtflüchtigen Speicher geschrieben wurden, umfassen.
  • In einigen beispielhaften Ausführungsformen kann basierend auf dem Zählerwert, z. B. der gelesenen Daten, ein „Alter“ und/oder eine Aktualität der gelesenen Daten ausgewertet werden.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: Auslesen einer ersten Datenspeicherstelle aus mindestens einem Block der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers, und, optional, wenn a) der der ersten Datenspeicherstelle zugeordnete Zähler einen ungültigen Wert umfasst (z. B. 0xFFFF, siehe das oben erwähnte Beispiel) und/oder wenn b) die der ersten Datenspeicherstelle zugeordnete Kennung einen ungültigen Wert umfasst (z. B. unterschiedlich zu 0xDEADBEEF, siehe das oben erwähnte Beispiel), wird gefolgert, dass der mindestens eine Block der vorgegebenen Anzahl von Blöcken leer ist.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: Auslesen einer ersten Datenspeicherstelle aus mindestens einem Block der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers, und, optional, wenn a) der der ersten Datenspeicherstelle zugeordnete Zähler einen ungültigen Wert umfasst (z. B. 0xFFFF, siehe das oben erwähnte Beispiel), und wenn b) die der ersten Datenspeicherstelle zugeordnete Kennung einen Lösch-Musterwert umfasst (z. B. 0xFFFFFFFF, siehe das oben erwähnte Beispiel), Folgern, dass der mindestens eine Block der vorbestimmten Zahl von Blöcken leer ist.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren ferner: wenn der der ersten Datenspeicherstelle zugeordnete Zähler einen ungültigen Wert umfasst (z. B. 0xFFFF, in dem oben erwähnten Beispiel), und wenn die der ersten Datenspeicherstelle zugeordnete Kennung einen Nichtlösch-Musterwert umfasst (z. B. unterschiedlich zu 0xFFFFFFFF, in dem oben erwähnten Beispiel), Betrachten der ersten Datenspeicherstelle als beschädigt.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren ferner: wenn der der ersten Datenspeicherstelle zugeordnete Zähler einen gültigen Wert umfasst (z. B. unterschiedlich zu 0xFFFF, in dem oben erwähnten Beispiel), und wenn die der ersten Datenspeicherstelle zugeordnete Kennung einen ungültigen Wert umfasst (z. B. unterschiedlich zu 0xDEADBEEF, in dem oben erwähnten Beispiel), Betrachten der ersten Datenspeicherstelle als beschädigt.
  • In einigen beispielhaften Ausführungsformen können mindestens einige Einträge der folgenden beispielhaften Tabelle zutreffen oder verwendet werden, z. B zur Charakterisierung mindestens eines der vorgenannten Aspekte:
    Zähler Kennung Bewertungsergebnis
    0×FFFF 0×FFFFFFFF Leer (stimmt mit dem LöschMuster überein)
    0×FFFF !=0×FFFFFFFF Daten beschädigt
    !=0×FFFF 0×DEADBEEF gültige Daten
    !=0×FFFF !=0×DEADBEEF Daten beschädigt
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren ferner: wenn der der ersten Datenspeicherstelle zugeordnete Zähler einen gültigen Wert umfasst (z. B. unterschiedlich zu 0xFFFF, in dem oben erwähnten Beispiel), und wenn die der ersten Datenspeicherstelle zugeordnete Kennung einen gültigen Wert umfasst (z. B. 0xDEADBEEF, in dem oben erwähnten Beispiel), Betrachten des ersten Datenspeicherstelle als die jüngsten Daten umfassend.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren ferner: Auslesen mindestens eines weiteren Datenspeicherstelle aus dem mindestens einen Block der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers, und, wenn der dem mindestens einen weiteren Datenspeicherstelle zugeordnete Zähler einen gültigen Wert umfasst und wenn die der mindestens einen weiteren Datenspeicherstelle zugeordnete Kennung einen gültigen Wert umfasst, Betrachten der mindestens einen weiteren Datenspeicherstelle als die jüngsten Daten umfassend.
  • Weitere Ausführungsformen betreffen eine Vorrichtung zur Durchführung des Verfahrens nach mindestens einem der vorhergehenden Ansprüche. In einigen Ausführungsformen umfasst die Vorrichtung mindestens eine Recheneinheit und mindestens eine Speichereinheit, die der mindestens einen Recheneinheit zugeordnet ist (d. h., von dieser nutzbar ist), um ein Computerprogramm PRG und/oder Daten DAT mindestens temporär zu speichern, wobei das Computerprogramm PRG z. B. dazu ausgelegt sein kann, mindestens temporär einen Betrieb der Vorrichtung 200 zu steuern, z. B. die Ausführung eines Verfahrens gemäß den Ausführungsformen.
  • Gemäß weiteren beispielhaften Ausführungsformen umfasst die mindestens eine Recheneinheit mindestens einen Kern (nicht gezeigt) zum Ausführen des Computerprogramms oder mindestens Teilen davon, z. B. zum Ausführen des erfindungsgemäßen Verfahrens oder mindestens eines oder mehrerer Schritte davon.
  • Gemäß weiteren bevorzugten Ausführungsformen kann die mindestens eine Recheneinheit mindestens eines der folgenden Elemente umfassen: einen Mikroprozessor, einen Mikrocontroller, einen digitalen Signalprozessor (DSP), ein programmierbares Logikelement (z. B. FPGA, feldprogrammierbares Gatearray), einen ASIC (anwendungsspezifischen integrierten Schaltkreis), Hardwareschaltkreise, einen Tensorprozessor, eine Grafikverarbeitungseinheit (GPU). Gemäß weiteren bevorzugten Ausführungsformen ist auch eine beliebige Kombination zweier oder mehrerer dieser Elemente möglich.
  • Gemäß weiteren bevorzugten Ausführungsformen umfasst die Speichereinheit mindestens eines der folgenden Elemente: einen flüchtigen Speicher, insbesondere einen Direktzugriffsspeicher (RAM), einen nichtflüchtigen Speicher, insbesondere ein Flash-EEPROM. Vorzugsweise ist das Computerprogramm mindestens temporär in dem nichtflüchtigen Speicher gespeichert. Daten, die z. B. zur Ausführung des erfindungsgemäßen Verfahrens verwendet werden, können mindestens temporär in dem RAM gespeichert werden.
  • Gemäß weiteren beispielhaften Ausführungsformen kann ein optionales computerlesbares Speichermedium, das Anweisungen umfasst, z. B. in Form eines Computerprogramms, bereitgestellt werden, wobei das Computerprogramm, wenn es von einem Computer, d. h. von der Recheneinheit, ausgeführt wird, den Computer veranlassen kann, das Verfahren gemäß den Ausführungsformen auszuführen. Beispielsweise kann das Speichermedium ein digitales Speichermedium, wie etwa eine Halbleiterspeichervorrichtung (z. B. ein Solid State Drive, SSD), und/oder ein magnetisches Speichermedium, wie etwa ein Platten- oder Festplattenlaufwerk (HDD), und/oder ein optisches Speichermedium, wie etwa eine Compact Disc (CD) oder DVD (Digital Versatile Disc) oder dergleichen umfassen oder darstellen.
  • Gemäß weiteren beispielhaften Ausführungsformen kann die Vorrichtung eine optionale Datenschnittstelle umfassen, vorzugsweise zum bidirektionalen Datenaustausch mit einer externen Vorrichtung (nicht gezeigt). Beispielsweise kann mittels der Datenschnittstelle ein Datenträgersignal empfangen werden, z. B. von der externen Vorrichtung, beispielsweise über ein drahtgebundenes oder ein drahtloses Datenübertragungsmedium, z. B. über ein (virtuelles) privates Computernetzwerk und/oder ein öffentliches Computernetzwerk, wie z. B. das Internet. Gemäß weiteren bevorzugten Ausführungsformen kann das Datenträgersignal das erfindungsgemäße Computerprogramm oder mindestens einen Teil davon darstellen oder tragen.
  • Weitere Ausführungsformen betreffen ein Computerprogramm mit Anweisungen, die bei Ausführung des Programms durch einen Computer den Computer veranlassen, das erfindungsgemäße Verfahren auszuführen.
  • Weitere Ausführungsformen betreffen ein computerlesbares Speichermedium, das Anweisungen umfasst, die bei Ausführung durch einen Computer den Computer veranlassen, das erfindungsgemäße Verfahren auszuführen.
  • Weitere Ausführungsformen betreffen eine Verwendung des erfindungsgemäßen Verfahrens und/oder der erfindungsgemäßen Vorrichtung und/oder des erfindungsgemäßen Computerprogramms und/oder des computerlesbaren Speichermediums und/oder einer Dateiträgersignals, das das Computerprogramm gemäß den Ausführungsformen umfasst und/oder charakterisiert, für mindestens eines von: a) Schreiben von Daten in den nichtflüchtigen Speicher, beispielsweise wiederholtes Schreiben von Daten in den nichtflüchtigen Speicher, b) häufiges Schreiben von Daten in den nichtflüchtiger Speicher, c) sofortiges Schreiben von Daten in den nichtflüchtigen Speicher, d) Auslesen von Daten aus dem nichtflüchtigen Speicher, e) Auslesen der jüngsten, beispielsweise gültig gespeicherten, Daten aus dem nichtflüchtigen Speicher, f) Durchführen von Wear-Leveling in Bezug auf den nichtflüchtigen Speicher.
  • Figurenliste
  • Einige beispielhafte Ausführungsformen werden nun unter Bezugnahme auf die beigefügten Zeichnungen beschrieben, in denen:
    • 1 ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 2 ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 3 ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 4 ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 5 ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 6 ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 7 ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 8 ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 9 ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 10 ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 11A ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 11B ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 11C ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 11D ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 11E ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 11F ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 11G ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 11H ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 12 ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 13 ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 14 ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 15 ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 16 ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 17A ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 17B ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 17C ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 17D ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 17E ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 17F ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen schematisch darstellt,
    • 18 Aspekte der Verwendung gemäß einigen beispielhaften Ausführungsformen schematisch darstellt.
  • Beschreibung einiger beispielhafter Ausführungsformen
  • Beispielhafte Ausführungsformen, siehe 1 und 2, betreffen ein Verfahren, beispielsweise ein computerimplementiertes Verfahren, zum Betreiben eines nichtflüchtigen Speichers 10 (2), umfassend: Bestimmen 100 (1), ob in einem ersten Block bl-1 (2) des nichtflüchtigen Speichers 10 ausreichend freier Speicherplatz für in den nichtflüchtigen Speicher (10) zu schreibende Daten vorhanden ist, und, wenn in dem ersten Block bl-1 nicht genügend freier Speicherplatz für die in den nichtflüchtigen Speicher 10 zu schreibenden Daten dtbw vorhanden ist, Schreiben 102 der zu schreibenden Daten dtbw in mindestens einen weiteren Block bl-2, bl-n, beispielsweise in einen zweiten Block bl-2, des nichtflüchtigen Speichers 10. In einigen beispielhaften Ausführungsformen kann dies zum Wear-Leveling für den nichtflüchtigen Speicher 10 beitragen, während es beispielsweise ermöglicht, häufige und/oder sofortige Schreibvorgänge 102 in den nichtflüchtigen Speicher 10 zu unterstützen und/oder die letzten gültigen Daten, die in den nichtflüchtigen Speicher 10 geschrieben wurden, wiederherzustellen.
  • In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher 10 (2) einen Flash-Speicher umfassen oder sein, beispielsweise vom Flash-EEPROM-Typ. In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher 10 zwei oder mehr Blöcke bl-1, bl-2, ..., bl-n, ... umfassen, wobei beispielsweise jeder der zwei oder mehr Blöcke einzeln, d. h. ohne einen anderen Block zu beeinflussen, gelöscht werden kann.
  • In einigen Ausführungsformen sind der erste Block bl-1 und der mindestens eine weitere Block benachbart, beispielsweise in einem Adressraum des nichtflüchtigen Speichers, siehe beispielsweise der erste Block bl-1 und der zweite Block bl-2 in 2. In einigen beispielhaften Ausführungsformen sind der erste Block bl-1 und der mindestens eine weitere Block im Adressraum des nichtflüchtigen Speichers nicht benachbart, siehe beispielsweise der erste Block bl-1 und der n-te Block bl-n in 2.
  • In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher 10 eine Blockgröße von 4096 Bytes umfassen. In anderen Ausführungsformen sind auch andere Blockgrößen möglich.
  • In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher 10 mindestens eine Datenschnittstelle IF zum Austauschen von Daten mit mindestens einer weiteren Vorrichtung (nicht gezeigt), z. B. einer Komponente eines eingebetteten Systems, z. B. einem Mikrocontroller oder einem Fahrzeugcomputer, umfassen. In einigen beispielhaften Ausführungsformen kann die mindestens eine Datenschnittstelle eine serielle Schnittstelle sein, beispielsweise eine serielle Peripherieschnittstelle, SPI, und/oder QSPI (Quad SPI) oder dergleichen. In einigen Ausführungsformen ist auch eine parallele Schnittstelle möglich.
  • In einigen beispielhaften Ausführungsformen kann der nichtflüchtige Speicher 10 in die mindestens eine weitere Vorrichtung integriert sein.
  • In einigen beispielhaften Ausführungsformen, 1, umfasst das Verfahren, wenn in dem ersten Block bl-1 (2) genügend freier Speicherplatz für die in den nichtflüchtigen Speicher zu schreibenden Daten vorhanden ist, Schreiben 104 der zu schreibenden Daten dtbw in den ersten Block bl-1.
  • In einigen beispielhaften Ausführungsformen, 3, 4, umfasst das Verfahren: Verwenden 110 (4) einer Datenstruktur DS, die einen Zähler CNT und eine, beispielsweise vorbestimmte, Kennung ID, beispielsweise eine magische Zahl, umfasst, wobei die in den nichtflüchtigen Speicher 10 zu schreibenden Daten dtbw beispielsweise eingebettet werden, siehe Block 110a, beispielsweise in die Datenstruktur DS zwischen dem Zähler CNT und der Kennung ID, und, optional, Schreiben 112 (4) der Datenstruktur DS in den nichtflüchtigen Speicher 10. In einigen beispielhaften Ausführungsformen kann mindestens einer der Blöcke 110, 112 wiederholt werden, siehe den Pfeil 113.
  • In einigen beispielhaften Ausführungsformen können in dem nichtflüchtigen Speicher 10 zu speichernde Daten unter Verwendung der Datenstruktur DS ( 3) eingerichtet werden, wobei der Zählerwert sich z. B. am Anfang der Datenstruktur DS befindet, und wobei die Kennung ID, beispielsweise eine magische Zahl, sich an letzter Position in der Datenstruktur DS befindet.
  • In einigen beispielhaften Ausführungsformen kann die Datenstruktur DS wie folgt aussehen:
  •  struct rbdNvMData_st
     {
     uint16_t Counter;
     ...
     data
     ...
     uint32_t MagicNumber;
     },

    wobei „rbdNvMData_st“ einen Namen des Datenstrukturtyps bezeichnet, wobei „Counter“ z. B. einen vorzeichenlosen Integer-Datentyp umfassen kann, beispielsweise mit 16 Bit, wobei „data“ die in den nichtflüchtigen Speicher zu schreibenden Daten charakterisiert (diese Daten können einen sich dynamisch ändernden Wert und/oder eine Länge umfassen, die beispielsweise zwischen 1 Byte und einer Blockgröße oder des nichtflüchtigen Speichers oder mehr betragen kann), und wobei „MagicNumber“ die Kennung charakterisiert (beispielsweise, und nicht beschränkt auf einen vorzeichenlosen 32-Bit-Integer-Datentyp).
  • In einigen beispielhaften Ausführungsformen sind die Daten, die zwischen dem Zähler CNT und der Kennung/magischen Zahl ID platziert sind, dynamisch, und können je nach Bedarf zu der Datenstruktur DS hinzugefügt oder von dieser entfernt werden. In einigen beispielhaften Ausführungsformen können der Zähler CNT und die Kennung/magische Zahl ID als Schutzgrenzen wirken, die die Daten innerhalb der oben erläuterten Datenstruktur DS „umgeben“.
  • In einigen beispielhaften Ausführungsformen kann die Datenstruktur DS auch weitere Elemente (nicht gezeigt) umfassen, die z. B. zwischen dem Zähler CNT und den Daten und/oder zwischen den Daten und der Kennung ID eingebettet werden.
  • In einigen beispielhaften Ausführungsformen, 4, umfasst das Verfahren: Wiederholen 113 der Schritte des Verwendens 110 der Datenstruktur DS und/oder des Schreibens 112 der Datenstruktur DS in den nichtflüchtigen Speicher 10, wobei vorzugsweise eine Vielzahl von Datenstrukturen DS sequentiell geschrieben werden (z. B. umfasst jede Datenstruktur DS jeweils einen, beispielsweise ansteigenden, Zählerwert (z. B. 0x0000, 0x0001, 0x0002, ...) und/oder einzelnen Daten und die Kennung), beispielsweise in den ersten Block bl-1 und/oder in den mindestens einen weiteren Block bl-n, wobei beispielsweise ein Wert des Zählers CNT nachfolgender Datenstrukturen DS erhöht wird, beispielsweise um eins. Auf diese Weise kann eine geordnete Sequenz von Datenstrukturen DS effizient in dem einen oder den mehreren Blöcken des nichtflüchtigen Speichers 10 eingerichtet werden.
  • In einigen beispielhaften Ausführungsformen, 5, umfasst das Verfahren: Verwenden 120 einer vorbestimmten Anzahl pnb von Blöcken des nichtflüchtigen Speichers 10, beispielsweise den ersten Block bl-1 und den mindestens einen weiteren Block bl-2, bl- n, in einer beispielsweise vorgegebenen Sequenz seq. Mit anderen Worten, in einigen Beispielen wird zuerst der erste Block bl-1 sequentiell mit zu schreibenden Daten dtbw „gefüllt“, z. B. in der Form der DatenStrukturen) DS, wie oben beispielhaft offenbart, und sobald der erste Block bl-1 voll ist, z. B. nicht genügend freien Speicherplatz umfasst, um eine weitere Datenstruktur DS aufzunehmen, die zu schreibende Daten umfasst, wird der mindestens eine weitere Block, z. B. der zweite Block b1-2, sequentiell mit den in den nichtflüchtigen Speicher 10 zu schreibenden Daten „gefüllt“.
  • Beachte, dass sich einige beispielhafte Ausführungsformen der Einfachheit halber auf eine vorbestimmte Anzahl von zwei Blöcken beziehen. Ohne Einschränkung der Allgemeinheit kann das Prinzip der Ausführungsformen jedoch auf andere Anzahlen von Blöcken, z. B. auch größer als zwei, angewendet werden.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: wenn beispielsweise alle Blöcke der vorbestimmten Anzahl von Blöcken gefüllt sind, beispielsweise mit zu schreibenden Daten, beispielsweise unter Verwendung einer oder mehrerer Datenstrukturen, Löschen 122 mindestens des ersten Blocks b1-1 der Sequenz seq. Mit anderen Worten, sobald alle Blöcke der vorbestimmten Anzahl pnb von Blöcken des nichtflüchtigen Speichers 10 mit zu schreibenden Daten „gefüllt“ wurden, kann das Verfahren zu dem ersten Block b1-1 springen 123, z. B. den ersten Block bl-1 löschen, und damit fortfahren, erneut Daten von in den nichtflüchtigen Speicher 10 zu schreibenden Daten in den ersten Block bl-1 zu schreiben. Wenn der erste Block bl-1 erneut gefüllt wird, kann das Verfahren in einigen beispielhaften Ausführungsformen Löschen des zweiten Blocks bl-2 und Fortsetzen eines erneuten Schreibens von in den nichtflüchtigen Speicher 10 zu schreibenden Daten in den zweiten Block bl-2 umfassen, und so weiter.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren mindestens eines der folgenden Elemente: a) Definieren 130 eines Wertebereichs vr für gültige Werte für den Zähler CNT, b) Definieren 132 mindestens eines ungültigen Werts val-inv für den Zähler CNT, wobei beispielsweise der mindestens eine ungültige Wert für den Zähler CNT beispielsweise einem Bitmuster entspricht (z. B. 0xFFFF), das zum Löschen mindestens eines Blocks des nichtflüchtigen Speichers 10 verwendet wird.
  • In einigen beispielhaften Ausführungsformen kann, wenn z. B. ein vorzeichenloser 16-Bit-Integer-Datentyps für den Zähler CNT verwendet wird, ein gültiger Wertebereich vr für Zählerwerte von 0x0000 bis 0xFFFE reichen, wobei 0xFFFF z. B. als ungültiger Zählerwert val-inv definiert werden kann, z. B., weil in einigen beispielhaften Ausführungsformen der Wert 0xFFFF z. B. einem Bitmuster entsprechen kann, das zum Löschen mindestens eines Blocks des nichtflüchtigen Speichers verwendet wird (wenn also 0xFFFF als gültiger Zählerwert verwendet würde, kann nicht zwischen einem gelöschten Speicherabschnitt des nichtflüchtigen Speichers und dem Zählerwert 0xFFFF unterschieden werden).
  • In einigen beispielhaften Ausführungsformen kann ein Wert des Kennung/der magischen Nummer ID mindestens eine von z. B. drei Kategorien umfassen und/oder in diese eingeteilt werden (beispielhaft wird angenommen, dass der Bezeichner einen vorzeichenlosen 32-Bit-Integer-Datentyp umfasst):
    1. 1. Der Kennungswert ist gleich 0xFFFFFFFF, d. h. er wurde nicht programmiert (Löschmuster des nichtflüchtigen Speichers entspricht alle Bits auf ‚1‘ gesetzt),
    2. 2. Der Kennungswert ist gleich der magischen Zahl, die beispielsweise zu OxDEADBEEF gewählt werden kann,
    3. 3. An der Stelle der magischen Zahl wurde ein anderer Kennungswert als die oben genannten (0xFFFFFFFF, 0xDEADBEEF) geschrieben/programmiert. In einigen Ausführungsformen kann die magische Zahl als beschädigt angesehen werden, wenn dies der Fall ist.
  • In einigen beispielhaften Ausführungsformen, 7, umfasst das Verfahren: Auslesen 140 von Daten, beispielsweise aus mindestens einem Block der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers 10, und, optional, Interpretieren 142 der gelesenen Daten rd basierend auf der Datenstruktur DS. In einigen beispielhaften Ausführungsformen kann das Interpretieren 142 der gelesenen Daten rd basierend auf der Datenstruktur DS Interpretieren der ersten zwei Bytes der gelesenen Daten rd als den Zählerwert und/oder das Interpretieren der letzten vier Bytes der gelesenen Daten rd als die magische Zahl ID und/oder Interpretieren der Informationen der gelesenen Daten rd zwischen dem zweiten Byte und den letzten vier Bytes als die Daten, die in den nichtflüchtigen Speicher 10 geschrieben wurden.
  • In einigen beispielhaften Ausführungsformen kann basierend auf dem Zählerwert, z. B. der gelesenen Daten, ein „Alter“ und/oder eine Aktualität der gelesenen Daten rd ausgewertet werden.
  • In einigen beispielhaften Ausführungsformen, 8, umfasst das Verfahren: Auslesen 150 einer ersten Datenspeicherstelle dl-1 aus mindestens einem Block der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers, z. B. aus dem ersten Block bl-1 (2), und, optional, wenn a) der der ersten Datenspeicherstelle dl-1 zugeordnete Zähler CNT (3) einen ungültigen Wert umfasst (z. B. 0xFFFF, siehe oben erwähntes Beispiel), und/oder wenn b) die der ersten Datenspeicherstelle dl-1 zugeordnete Kennung ID einen ungültigen Wert umfasst (z. B. unterschiedlich zu 0xDEADBEEF, siehe das oben erwähnte Beispiel), Folgern 152, dass der mindestens eine Block bl-1 der vorbestimmten Anzahl von Blöcken leer ist.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren: Auslesen einer ersten Datenspeicherstelle aus dem mindestens einem Block der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers, und optional, wenn a) der der ersten Datenspeicherstelle zugeordnete Zähler einen ungültigen Wert umfasst (z. B. 0xFFFF, siehe das oben erwähnte Beispiel), und wenn b) die der ersten Datenspeicherstelle zugeordnete Kennung einen Lösch-Musterwert umfasst (z. B. 0xFFFFFFFF, siehe das oben erwähnte Beispiel), Folgern, dass der mindestens eine Block der vorbestimmten Anzahl von Blöcken leer ist.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren ferner: wenn der der ersten Datenspeicherstelle zugeordnete Zähler einen ungültigen Wert umfasst (z. B. 0xFFFF, in dem oben erwähnten Beispiel), und wenn die der ersten Datenspeicherstelle zugeordnete Kennung einen Nichtlösch-Musterwert umfasst (z. B. unterschiedlich zu 0xFFFFFFFF, in dem oben erwähnten Beispiel), Betrachten der ersten Datenspeicherstelle als beschädigt.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren ferner: wenn der der ersten Datenspeicherstelle zugeordnete Zähler einen gültigen Wert umfasst (z. B. unterschiedlich zu 0xFFFF, in dem oben erwähnten Beispiel), und wenn die der ersten Datenspeicherstelle zugeordnete Kennung einen ungültigen Wert umfasst (z. B. unterschiedlich zu 0xDEADBEEF, in dem oben erwähnten Beispiel), Betrachten der ersten Datenspeicherstelle als beschädigt.
  • In einigen beispielhaften Ausführungsformen können mindestens einige Einträge der folgenden beispielhaften Tabelle zutreffen oder verwendet werden, z. B. zur Charakterisierung mindestens eines der vorgenannten Aspekte:
    Zähler Kennung Bewertungsergebnis
    0×FFFF 0×FFFFFFFF Leer (stimmt mit dem LöschMuster überein)
    0×FFFF !=0×FFFFFFFF Daten beschädigt
    !=0×FFFF 0×DEADBEEF gültige Daten
    !=0×FFFF !=0×DEADBEEF Daten beschädigt
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren ferner: wenn der der ersten Datenspeicherstelle zugeordnete Zähler CNT einen gültigen Wert umfasst (z. B. unterschiedlich zu 0xFFFF, in dem oben erwähnten Beispiel), und wenn die der ersten Datenspeicherstelle zugeordnete Kennung ID einen gültigen Wert umfasst (z. B. 0xDEADBEEF, in dem oben erwähnten Beispiel), Betrachten 154 der ersten Datenspeicherstelle dl-1 als die jüngsten Daten umfassend.
  • In einigen beispielhaften Ausführungsformen umfasst das Verfahren ferner: Auslesen 156 mindestens einer weiteren Datenspeicherstelle dl-f aus dem mindestens einen Block der vorbestimmten Anzahl von Blöcken des nichtflüchtigen Speichers 10, und wenn der der mindestens einen weiteren Datenspeicherstelle dl-f zugeordnete Zähler CNT einen gültigen Wert umfasst, und wenn die der mindestens einen weiteren Datenspeicherstelle dl-f zugeordnete Kennung ID einen gültigen Wert umfasst, Betrachten 158 der mindestens einen weiteren Datenspeicherstelle dl-f als die jüngsten Daten umfassend.
  • Weitere Ausführungsformen, 9, betreffen eine Vorrichtung 200 zur Durchführung des Verfahrens nach mindestens einem der vorhergehenden Ansprüche. In einigen Ausführungsformen umfasst die Vorrichtung 200 mindestens eine Recheneinheit 202 und mindestens eine Speichereinheit 204, die der mindestens einen Recheneinheit zugeordnet ist (d. h. von ihr genutzt werden kann), um ein Computerprogramm PRG und/oder Daten DAT mindestens temporär zu speichern, wobei das Computerprogramm PRG z. B. dazu ausgelegt sein kann, mindestens temporär einen Betrieb der Vorrichtung 200, z. B. die Ausführung eines Verfahrens gemäß den Ausführungsformen, zu steuern.
  • Gemäß weiteren beispielhaften Ausführungsformen umfasst die mindestens eine Recheneinheit 202 mindestens einen Kern (nicht gezeigt) zum Ausführen des Computerprogramms PRG oder mindestens Teilen davon, z. B. zum Ausführen des erfindungsgemäßen Verfahrens oder mindestens eines oder mehrerer Schritte davon.
  • Gemäß weiteren beispielhaften Ausführungsformen kann die mindestens eine Recheneinheit 202 mindestens eines der folgenden Elemente umfassen: einen Mikroprozessor, einen Mikrocontroller, einen digitalen Signalprozessor (DSP), ein programmierbares Logikelement (z. B. ein FPGA, feldprogrammierbares Gatearray), einen ASIC (anwendungsspezifischer integrierter Schaltkreis), Hardwareschaltkreise, einen Tensorprozessor, eine Grafikverarbeitungseinheit (GPU). Gemäß weiteren bevorzugten Ausführungsformen ist auch eine beliebige Kombination zweier oder mehrerer dieser Elemente möglich.
  • Gemäß weiteren Ausführungsformen umfasst die Speichereinheit 204 mindestens eines der folgenden Elemente: einen flüchtigen Speicher 204a, insbesondere einen Direktzugriffsspeicher (RAM), einen nichtflüchtigen Speicher 204b, insbesondere ein Flash-EEPROM. Vorzugsweise wird das Computerprogramm mindestens temporär in dem nichtflüchtigen Speicher 204b gespeichert. Daten DAT, die z. B. zum Ausführen des Verfahrens gemäß den Ausführungsformen verwendet werden, können mindestens temporär in dem RAM 204a gespeichert werden.
  • Gemäß weiteren beispielhaften Ausführungsformen kann ein optionales computerlesbares Speichermedium SM bereitgestellt werden, das Anweisungen, z. B. in Form eines Computerprogramms PRG, umfasst, wobei das Computerprogramm PRG, wenn es von einem Computer, d. h. von der Recheneinheit 202, ausgeführt wird, den Computer veranlassen kann, das Verfahren gemäß den Ausführungsformen auszuführen. Beispielsweise kann das Speichermedium SM ein digitales Speichermedium, wie etwa eine Halbleiterspeichervorrichtung (z. B. ein Solid State Drive, SSD), und/oder ein magnetisches Speichermedium, wie etwa ein Platten- oder Festplattenlaufwerk (HDD), und/oder ein optisches Speichermedium, wie etwa eine Compact Disc (CD) oder DVD (Digital Versatile Disc) oder dergleichen, umfassen oder darstellen.
  • Gemäß weiteren beispielhaften Ausführungsformen kann die Vorrichtung 200 eine optionale Datenschnittstelle 206 umfassen, vorzugsweise zum bidirektionalen Datenaustausch mit einer externen Vorrichtung (nicht gezeigt). Beispielsweise kann mittels der Datenschnittstelle 206 ein Datenträgersignal DCS empfangen werden, z. B. von der externen Vorrichtung, beispielsweise über ein drahtgebundenes oder ein drahtloses Datenübertragungsmedium, z. B. über ein (virtuelles) privates Computernetzwerk und/oder ein öffentliches Computernetzwerk, wie z.B. das Internet. Gemäß weiteren bevorzugten Ausführungsformen kann das Datenträgersignal DCS das erfindungsgemäße Computerprogramm PRG oder mindestens einen Teil davon darstellen oder tragen.
  • Weitere Ausführungsformen betreffen ein Computerprogramm PRG mit Anweisungen, die bei Ausführung des Programms durch einen Computer 202 den Computer 202 veranlassen, das erfindungsgemäße Verfahren auszuführen.
  • Weitere Ausführungsformen betreffen ein computerlesbares Speichermedium SM mit Anweisungen PRG, die bei Ausführung durch einen Computer 202 den Computer 202 veranlassen, das erfindungsgemäße Verfahren auszuführen.
  • Im Folgenden werden weitere Ausführungsformen offenbart, die mit beliebigen der oben erläuterten Ausführungsformen kombiniert werden können.
  • 10 zeigt schematisch ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen. Dargestellt sind zwei beispielhafte Blöcke bl-n, bl-n+1 des nichtflüchtigen Speichers 10 (2), wobei das Element e1 eine erste Lesestelle symbolisiert, wobei der gestrichelte Bereich e2 des Blocks bl-n zuvor in den Block bl-n geschriebene (Daten-) Einträge symbolisiert, wobei das Element e3 letzte gültige Daten symbolisiert, die in den Block bl-n geschrieben wurden, wobei das Element e4 eine erste freie Speicherstelle des Blocks bl-n symbolisiert, z. B. eine nächste Schreibstelle. Optional werden die weiteren Speicherbereiche der Blöcke bl-n, bl-n+1 mit einem einen gelöschten Zustand charakterisierenden Bitmuster gefüllt (z. B. gefüllt mit ‚1‘-Bits, entsprechend 0xFFFF im Fall einer beispielhaften vier- einstellige Hexadezimalzahl).
  • In einigen beispielhaften Ausführungsformen kann das Verfahren, das z. B. beim Hochfahren eines Zielsystems und/oder Hochfahren der Vorrichtung 200 (9) durchgeführt wird, Beginnen am Anfang e1 des ersten Blocks bl-n (wie in 10 dargestellt) und Beginnen des Lesens der Flash-Speicherstelle der Zählerwerte und der magischen Zahlen, bis die Suche nach gültigen Daten als abgeschlossen betrachtet wird, umfassen.
  • In einigen beispielhaften Ausführungsformen kann ein Ziel darin bestehen, mindestens eines zu finden von: a) die letzten gültigen Daten e3, die in einem der Flash-Blöcke bl-n, bl-n+1 (falls vorhanden) gespeichert sind, b) die ersten freien Speicherstelle e4 in den Blöcken bl-n, bl-n+1, die groß genug sind, um eine nächste in den nichtflüchtigen Speicher 10 zu schreibende Datenstruktur DS zu halten.
  • In einigen beispielhaften Ausführungsformen wird, wie oben bereits erwähnt, die Datenstruktur DS (3) sequentiell in den nichtflüchtigen Speichers 10 (bzw. dessen Blöcke) geschrieben, was bedeutet, dass, wenn ein gültiger Zählerwert und eine magische Zahl gefunden werden, die gesamte Datenstruktur DS vollständig geschrieben wurde und als gültig betrachtet wird. In einigen beispielhaften Ausführungsformen werden in diesem Zusammenhang keine weiteren Gültigkeitsprüfungen der Daten durchgeführt, da in einigen beispielhaften Ausführungsformen eine Anwendung so ausgelegt sein kann, dass sie nichts anderes als den Zählerwert CNT und die magische Zahl ID kennt.
  • In einigen beispielhaften Ausführungsformen kann eine Prozedur des Schreibens von Daten in die Blöcke bl-n, bl-n+1 des nichtflüchtigen Speichers 10 umfassen: Füllen der Blöcke bl-n, bl-n+1 mit Daten von Anfang (eines Blocks) bis zum Ende (des Blocks), einen Block nach dem anderen ab dem (derzeit, gemäß dem Beispiel von 10) ersten Block bl-n bis zu dem letzten Block bl-n+1. In einigen beispielhaften Ausführungsformen kann, sobald alle Flash-Blöcke bl-n, bl-n+1 geschrieben wurden, die Prozedur wieder zum ersten Flash-Block bl-n springen, ihn z. B. löschen, beispielsweise bevor erneut darauf geschrieben wird. In einigen beispielhaften Ausführungsformen kann die Prozedur dann zum nächsten Flash-Block b1-n+1 wechseln und ihn löschen, z. B. bevor erneut darauf geschrieben wird, und so weiter.
  • 11A bis 11H stellen schematisch vereinfachte Blockdiagramme gemäß einigen beispielhaften Ausführungsformen dar, die verschiedene beispielhafte Betriebszustände der Blöcke bl-n, b1-n+1 symbolisieren, wie oben unter Bezugnahme auf 10 erläutert wurde, wobei Zustandsübergänge durch die Blockpfeile A1, A2, A3, A4, A5, A6, A7, A8 symbolisiert werden. In einigen Ausführungsformen kann die beispielhafte Prozedur, wie unten unter Bezugnahme auf 11A bis 11H erläutert wird, wiederholt werden, siehe beispielsweise den Blockpfeil A8.
  • Das Element e10 symbolisiert eine beispielhafte Basisadresse des in 11A in 11A „ersten“ Blocks bl-n, und Element e11 symbolisiert eine beispielhafte Basisadresse des in 11A dargestellten „zweiten“ Blocks bl-n+1. Wenn beispielsweise die Basisadresse e10 des Blocks bl-n 0x001FE000 ist, kann die Basisadresse e11 des Blocks bl-n+1 0x001FF000 sein, unter der Annahme einer Blockgröße von 4K, z. B. 4096 Byte.
  • 11A zeigt beispielhaft einen Zustand, in dem beide Blöcke bl-n, bl-n+1 leer sind, z. B: ein Bitmuster umfassen, bei dem alle Bits aufgrund einer beispielhaften Löschstrategie auf „1“ gesetzt sind.
  • 11B zeigt beispielhaft einen Zustand, in dem in den nichtflüchtigen Speicher 10 zu schreibende Daten dtbw (1), beispielsweise in Form einer oder mehrerer Datenstrukturen DS (3), in den ersten der Blöcke bl-n, bl-n+1 geschrieben werden, z. B. derzeit in den Block bl-n, beispielsweise bis der Block bl-n voll ist, während der Block bl-n+1 leer ist.
  • 11C zeigt beispielhaft einen Zustand, in dem in den nichtflüchtigen Speicher 10 zu schreibende Daten dtbw (1), beispielsweise in Form einer oder mehrerer Datenstrukturen DS (3), in den zweiten der Blöcke bl-n, bl-n+1 geschrieben werden, z. B. derzeit in den Block bl-n+1, beispielsweise bis der Block bl-n+1 auch voll ist.
  • 11D zeigt beispielhaft einen Zustand, in dem von dem Block bl-n+1 zu dem Block bl-n gesprungen wird, wobei der Blocks bl-n beispielsweise für zukünftiges Schreiben vorbereitet wird, z. B. durch Löschen des Blocks bl-n, während der Block bl-n+1 noch voll ist.
  • 11E zeigt beispielhaft einen Zustand, in dem in den nichtflüchtigen Speicher 10 zu schreibende Daten dtbw (1) erneut, beispielsweise in Form einer oder mehrerer Datenstrukturen DS (3), in den ersten der Blöcke bl-n, bl-n+1 geschrieben werden, z. B. derzeit in den Block bl-n, beispielsweise bis der Block bln voll ist, während der Block bl-n+1 noch Daten umfasst, die zuvor geschrieben wurden, siehe beispielsweise 11C.
  • 11F zeigt beispielhaft einen Zustand, in dem zum Schreiben auf den „zweiten“ Block b1-n+1 umgeschaltet wird, z. B. umfassend Löschen des zweiten Blocks bl-n+1, während der erste Block bl-n voll ist.
  • 11G zeigt beispielhaft einen Zustand, in dem in den nichtflüchtigen Speicher 10 zu schreibende Daten dtbw (1) erneut, beispielsweise in Form einer oder mehrerer Datenstrukturen DS (3), in den zweiten der Blöcke bl-n, bl-n+1 geschrieben werden, z. B. derzeit in den Block bl-n+1, beispielsweise bis der Block bl-n+1 wieder voll ist.
  • 11H zeigt beispielhaft einen Zustand ähnlich zu 11D.
  • 12 zeigt schematisch ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen. Das Element e20 symbolisiert die letzten gültigen Daten des „ersten“ Blocks bl-n, das Element e21 symbolisiert die ersten gültigen Daten des „zweiten“ Blocks bl-n+1, das Element e22 symbolisiert einen Vergleich von Zählerwerten CNT (hier beispielhaft 0x1337, 0x1234) gemäß beispielhaften Ausführungsformen, z. B., um die jüngsten Daten zu bestimmen, und das Element e23 symbolisiert verbleibende freie Teile in den Blöcken bl-n, bln+1, die beispielsweise jeweils kleiner sind als eine Größe der Datenstruktur DS (3).
  • In einigen beispielhaften Ausführungsformen kann ein Ansatz zum Bestimmen von Datenblöcken, die zuvor in den Block/die Blöcke bl-n, bl-n+1 geschrieben wurden, z. B. zum Durchsuchen zuvor geschriebener Datenblöcke, mindestens einen der folgenden Aspekte umfassen:
    • In einigen beispielhaften Ausführungsformen können die Blöcke bl-n, bl-n+1 durchsucht werden, z. B. beginnend mit dem allerersten Dateneintrag (siehe beispielsweise das Element e1 von 10) in dem ersten Flash-Block bl-n, fortfahrend bis zum allerjüngsten Dateneintrag in dem jüngsten Flash-Block, wenn erforderlich.
  • In einigen beispielhaften Ausführungsformen kann es ein Ziel sein, eine Suchzeit so kurz wie möglich zu halten, d. h. eine Menge an Lesezugriffen auf den nichtflüchtigen Speicher 10 auf einem Minimum zu halten. In einigen Ausführungsformen kann dies einer Anwendung, die den nichtflüchtigen Speicher 10 verwendet, ermöglichen, ihre zuvor in den nichtflüchtigen Speicher 10 geschriebenen Daten (und z. B. einen zugehörigen Zustand) effizient und/oder unverzüglich wiederherzustellen.
  • In einigen beispielhaften Ausführungsformen können aufgrund einer Sequenz, in der Daten in den nichtflüchtigen Speicher 10 geschrieben werden, siehe beispielsweise die oben erwähnte Sequenz seq (5), Zählerwerte der Datenstrukturen DS kontinuierlich innerhalb - und zwischen - den Blöcken bl-n, bl-n+1 ( 12) ansteigen, z. B. solange, bis der Zähler in einigen beispielhaften Ausführungsformen umspringt.
  • In einigen beispielhaften Ausführungsformen kann durch Vergleichen vorheriger und aktueller Zählerwerte, z. B. unter Berücksichtigung des Zählerumbruchs, bestimmt oder entschieden werden, ob ein aktuell ausgelesener Datenspeicherstelle älter oder neuer als eine zuvor gespeicherter Datenspeicherstelle ist. Da in beispielhaften Ausführungsformen die Zählerwerte innerhalb eines Blocks ansteigen, kann das Auffinden eines älteren Datenelements in einigen Ausführungsformen bedeuten, dass ein ganzer Block übersprungen werden kann. In einigen beispielhaften Ausführungsformen kann dies dazu verwendet werden, um einen Übergang zwischen zwei Blöcken bl-n, b1-n+1 zu erkennen, wobei ein erstes Element in einem aktuellen Block offenbaren kann, ob die Daten älter oder neuer als ein vorheriger Block sind.
  • In einigen beispielhaften Ausführungsformen können die Inhalte aller Blöcke bl-n, bl-n+1 untersucht werden, und/oder es kann wiederholt, beispielsweise kontinuierlich, überprüft werden, ob neu gefundene Daten neuer sind als die zuletzt gelesenen Daten.
  • In einigen beispielhaften Ausführungsformen kann eine Erkennung eines beschädigten Zählers CNT und/oder einer beschädigten magischen Zahl ID unterstützt werden, aber in einigen beispielhaften Ausführungsformen kann der Prozess, selbst wenn beschädigte Daten CNT, ID erkannt werden, einfach mit der Prüfung der (weiteren) Datenelemente fortfahren, bis keine Dateneinträge mehr zu prüfen sind.
  • Im Folgenden werden beispielhafte Ausführungsformen z. B. bezüglich des Auslesens eines „ersten“ Blocks offenbart.
  • 13 stellt schematisch ein vereinfachtes Blockdiagramm dar, das einen Block bl-n zeigt, gemäß einigen beispielhaften Ausführungsformen. Wenn der Zähler CNT (3) und die magische Zahl ID der ersten Datenspeicherstelle e30 des ersten Blocks „leer“ sind (z. B. mit Bitmustern vom Löschtyp gefüllt), wird der gesamte Block bl-n als leer betrachtet.
  • 14 zeigt schematisch ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen, wobei das Element e40 gültige Datensätze symbolisiert, und wobei das Element e41 ungültige Daten symbolisiert, die in einigen beispielhaften Ausführungsformen erkannt und ignoriert werden können.
  • Wenn der Zähler CNT und die magische Zahl ID der ersten Datenspeicherstelle des ersten Blocks bl-n gültig sind, kann dieser Dateneintrag als der jüngste gespeichert werden. In einigen beispielhaften Ausführungsformen kann die Prozedur dann zu einem Speicherstelle des nächsten Dateneintrags in dem aktuellen, z. B. ersten, Block bl-n voranschreiten und das gleiche Verfahren wiederholen. Wenn der Zähler CNT und/oder die magische Zahl ID eines Datensatzes e41 beschädigt und dadurch ungültig sind, kann in einigen beispielhaften Ausführungsformen der entsprechende Datensatz e41 unberücksichtigt bleiben, und die Prozedur kann an den Speicherstelle des nächsten Dateneintrags in dem (ersten) Block bl-n fortgesetzt werden, genau wie zuvor.
  • 15 stellt schematisch ein vereinfachtes Blockdiagramm gemäß einigen beispielhaften Ausführungsformen dar, wobei das Element e50 gültige Daten symbolisiert, das Element e51 ungültige Daten symbolisiert, und wobei Element das e50a als jüngste Daten erkannt werden kann.
  • In einigen beispielhaften Ausführungsformen kann das Verfahren Fortsetzen des Durchsuchens des (ersten) Blocks bl-n umfassen, z. B. bis ein leerer Eintrag gefunden wird oder bis das Ende des (ersten) Blocks bl-n erreicht ist. Wenn gültige Daten e50 in dem Block bl-n vorhanden waren, selbst wenn darauf nur ungültige Daten e51 folgten, können die letzten gültigen Daten e50a als die jüngsten Daten betrachtet werden.
  • In einigen beispielhaften Ausführungsformen kann das Verfahren, wenn/falls ein leerer Eintrag gefunden wird oder wenn/falls das Ende des (ersten) Blocks bl-n erreicht wird, das Fortsetzen der Durchsuchens eines nächsten Blocks bl-n+1 (in 15 nicht gezeigt) umfassen.
  • Im Folgenden werden beispielhafte Ausführungsformen z. B. in Bezug auf das Auslesen eines „zweiten“ oder weiteren, z. B. nachfolgenden Blocks (z. B. in Bezug auf die Sequenz seq, 5), offenbart.
  • In einigen beispielhaften Ausführungsformen kann beim Auslesen einer ersten Datenspeicherstelle e21 eines zweiten/nachfolgenden Blocks, siehe beispielsweise Block b1-n+1 von 12, eine der folgenden Situationen auftreten:
    1. 1. An der ersten Datenspeicherstelle e21 kann ein gültiger Dateneintrag vorhanden sein. In einigen beispielhaften Ausführungsformen kann der Zählerwert des Eintrags e21 mit einem jüngsten aus einem vorherigen Block bl-n gelesenen verglichen werden. In einigen beispielhaften Ausführungsformen kann, wenn der Eintrag älter ist, der gesamte Block b1-n+1 übersprungen werden. In einigen beispielhaften Ausführungsformen kann, wenn der Eintrag neuer ist, der nächste Dateneintrag untersucht werden, und so weiter.
    2. 2. An der ersten Datenspeicherstelle e21 kann ein leerer Dateneintrag vorhanden sein. In einigen beispielhaften Ausführungsformen bedeutet dies, dass der gesamte Block b1-n+1 leer ist, und eine Suche als abgeschlossen betrachtet werden kann, wenn keine weiteren Blöcke, z. B. der Sequenz seq, zum Durchsuchen verbleiben.
    3. 3. An der ersten Datenspeicherstelle e21 kann ein beschädigter Dateneintrag vorhanden sein. In einigen beispielhaften Ausführungsformen können die jeweiligen Daten unberücksichtigt bleiben, und stattdessen kann z. B. eine nächste Dateneingabe untersucht werden.
  • In einigen beispielhaften Ausführungsformen kann, z. B. genauso wie für den ersten Block bl-n, mit einem Durchsuchen des zweiten/folgenden Blocks bl-n+1 fortgesetzt werden, z. B. bis ein leerer Eintrag gefunden wird oder bis das Ende des Blocks bl-n+1 gefunden wird. An diesem Punkt kann in einigen beispielhaften Ausführungsformen die Suche als abgeschlossen betrachtet werden (z. B. im Fall von zwei Blöcken bl-n, b1-n+1) oder mit dem nächsten (z. B. im Fall von mehr als zwei Blöcken b1 -n, bl-n+1) fortgesetzt werden.
  • In einigen beispielhaften Ausführungsformen kann das Finden einer nächsten Schreiborts einen oder mehrere der folgenden Aspekte umfassen: In einigen beispielhaften Ausführungsformen kann, z. B. während einer Suche nach den jüngsten Daten, eine nächster freier Speicherstelle zum Schreiben überwacht werden. In einigen beispielhaften Ausführungsformen kann eine nächste freie Speicherstelle ausgewählt werden, z. B. basierend auf der Verfügbarkeit von freiem Speicherplatz in dem Block, in dem sich die jüngsten Daten befinden, und wird entweder sein: 1. die erste freie Speicherstelle in demselben Block wie die jüngsten Daten sein, vorausgesetzt, dass genügend freier Speicherplatz verbleibt, 2. die erste Datenspeicherstelle des nachfolgenden Flash-Blocks, wobei dieser Blocks, wenn notwendig, zuerst gelöscht wird, in einigen beispielhaften Ausführungsformen.
  • Im Folgenden werden beispielhafte Datenszenarien gemäß einigen Ausführungsformen erläutert. Für die folgende Erläuterung und ohne Einschränkung der Allgemeinheit wird angenommen, dass alle Daten gültig sind und dass zwei Blöcke bl-n, bl-n+1 (z. B. ähnlich wie in 12) verwendet werden.
  • Aspekt A): Beide Blöcke bl-n, bl-n+1 sind leer, siehe beispielsweise 17A. Wenn der Zähler und die magische Zahl an der ersten Datenspeicherstelle des ersten Blocks bl-n leer sind, kann dies anzeigen, dass der gesamte erste Block bl-n leer ist. In einigen beispielhaften Ausführungsformen kann das Verfahren ein Springen zu einem Anfang des zweiten Blocks b1-n+1 umfassen, z. B. um den Zähler und die magische Zahl der ersten Datenspeicherstelle des zweiten Blocks b1-n+1 zu untersuchen.
  • Wenn in einigen beispielhaften Ausführungsformen der Zähler und die magische Zahl der ersten Datenspeicherstelle des zweiten Blocks b1-n+1 ebenfalls leer sind, kann dies bedeuten, dass beide Blöcke leer sind. In einigen beispielhaften Ausführungsformen können möglicherweise keine gültigen Daten aus beiden Blöcken bl-n, bl-n+1 wiederhergestellt werden, und ein nächster Schreibvorgang kann an der ersten Datenspeicherstelle des ersten Blocks bl-n durchgeführt werden.
  • Aspekt B): Ein erster Block bl-n ist leer, ein zweiter Block bl-n+1 wird beschrieben, ist aber nicht voll.
  • In einigen beispielhaften Ausführungsformen kann der erste Block bl-n leer sein, und der zweite Block bl-n+1 kann teilweise geschrieben sein, wobei z. B. im zweiten Block b1-n+1 genügend Speicherplatz vorhanden ist, um mindestens einen weiteren Dateneintrag zu halten. In einigen beispielhaften Ausführungsformen kann das Verfahren den nichtflüchtigen Speicher 10 nicht absichtlich in diesen Zustand versetzen, kann ihn aber unterstützen, z. B. wenn der nichtflüchtige Speicher 10 in diesem Zustand landen sollte, z. B. durch plötzlichen Stromausfall beim Schreiben und/oder Löschen. In einigen beispielhaften Ausführungsformen können letzte gültige Daten aus dem zweiten Block b1-n+1 wiederhergestellt werden, und ein nächster Schreibvorgang kann an einer ersten freien Datenspeicherstelle des zweiten Blocks b1-n+1 durchgeführt werden.
  • Aspekt C): Ein erster Flash-Block bl-n ist leer, ein zweiter Block bl-n+2 ist voll, siehe beispielsweise 17F.
  • In einigen beispielhaften Ausführungsformen kann der erste Block bl-n leer sein, und der zweite Block bl-n+1 kann voll sein oder kann mindestens keinen weiteren Dateneintrag enthalten.
  • In einigen beispielhaften Ausführungsformen können letzte gültige Daten aus dem zweiten Block bl-n+1 wiederhergestellt werden, und ein nächster Schreibvorgang kann an der ersten Datenspeicherstelle des ersten Blocks bl-n durchgeführt werden.
  • Aspekt D): Ein erster Block bl-n wird beschrieben, ist aber nicht voll, ein zweiter Block bl-n+2 ist leer, siehe beispielsweise 17B.
  • In einigen beispielhaften Ausführungsformen kann der erste Block bl-n teilweise geschrieben sein, und der zweite Block bl-n+1 kann leer sein. In einigen beispielhaften Ausführungsformen kann in dem ersten Block bl-n genügend Speicherplatz vorhanden sein, um mindestens einen weiteren Dateneintrag zu halten. In einigen beispielhaften Ausführungsformen können letzte gültige Daten aus dem ersten Block bl-n wiederhergestellt werden, und ein nächster Schreibvorgang kann an der ersten freien Datenspeicherstelle des ersten Blocks bl-n durchgeführt werden.
  • Aspekt E): Beide Flash-Blöcke bl-n, bl-n+1 sind teilweise geschrieben.
  • In einigen beispielhaften Ausführungsformen können beide Blöcke bl-n, bl-n+1 teilweise beschrieben sein, wobei z. B. in jedem der beiden Blöcke genügend Speicherplatz vorhanden ist, um jeweils mindestens einen weiteren Dateneintrag aufzunehmen. In einigen beispielhaften Ausführungsformen versetzt das Verfahren gemäß beispielhaften Ausführungsformen den nichtflüchtigen Speicher 10 nicht absichtlich in diesen Zustand, kann ihn aber unterstützen, wenn der nichtflüchtige Speicher 10 in diesem Zustand landen sollte, z.B. durch plötzlichen Stromausfall beim Schreiben und/oder Löschen. In einigen beispielhaften Ausführungsformen kann durch Untersuchen der Zählerwerte der jüngste Block erkannt werden. In einigen beispielhaften Ausführungsformen können letzte gültige Daten aus dem jüngsten Block wiederhergestellt werden, und der nächste Schreibvorgang kann an der ersten freien Datenspeicherstelle des jüngsten Blocks durchgeführt werden.
  • Aspekt F): Ein erster Block bl-n teilweise geschrieben, ein zweiter Block bl-n+1 nicht voll.
  • In einigen beispielhaften Ausführungsformen kann der erste Block bl-n teilweise geschrieben sein, und der zweite Block bl-n+1 ist voll oder kann mindestens keinen weiteren Dateneintrag enthalten. In einigen beispielhaften Ausführungsformen kann im ersten Block bl-n genügend Speicherplatz vorhanden sein, um mindestens einen weiteren Dateneintrag zu halten. In einigen beispielhaften Ausführungsformen können, wenn der erste Block bl-n die jüngsten Daten enthält, die letzten gültigen Daten aus dem ersten Block bl-n wiederhergestellt werden, und in einigen beispielhaften Ausführungsformen kann der nächste Schreibvorgang an der ersten freien Datenspeicherstelle des ersten Blocks bl-n durchgeführt werden.
  • Wenn der zweite Block b1-n+1 die jüngsten Daten enthält, können in einigen beispielhaften Ausführungsformen die letzten gültigen Daten aus dem zweiten Block wiederhergestellt werden, und der nächste Schreibvorgang kann an der ersten Datenspeicherstelle des ersten Blocks durchgeführt werden (z. B. nach dem Löschen, in einigen beispielhaften Ausführungsformen).
  • Aspekt G): Ein erster Block bl-n ist voll, ein zweiter Block bl-n+1 leer, siehe beispielsweise 17C.
  • In einigen beispielhaften Ausführungsformen kann der erste Block bl-n voll sein, oder kann mindestens keinen weiteren Dateneintrag enthalten, und der zweite Block bl-n+1 ist leer. In einigen beispielhaften Ausführungsformen können letzte gültige Daten aus dem ersten Block bl-n wiederhergestellt werden, und in einigen beispielhaften Ausführungsformen kann der nächste Schreibvorgang an der ersten Datenspeicherstelle des zweiten Blocks durchgeführt werden.
  • Aspekt H): Ein erster Block bl-n ist voll, ein zweiter Block bl-n+1 teilweise geschrieben, siehe beispielsweise 17D
  • In einigen beispielhaften Ausführungsformen ist der erste Block bl-n voll, oder kann mindestens keinen weiteren Dateneintrag enthalten, und der zweite Block bl-n+1 ist teilweise geschrieben, wobei z. B. in dem zweiten Block b1-n+1 genügend Speicherplatz vorhanden ist, um mindestens einen weiteren Dateneintrag zu halten. In einigen beispielhaften Ausführungsformen können die letzten gültigen Daten aus dem zweiten Block b1-n+1 wiederhergestellt werden, und in einigen beispielhaften Ausführungsformen wird der nächste Schreibvorgang an der ersten freien Datenspeicherstelle des zweiten Blocks durchgeführt.
  • Aspekt I): Beide Blöcke bl-n, bl-n+1 sind voll, siehe beispielsweise 17E.
  • In einigen beispielhaften Ausführungsformen sind beide Blöcke bl-n, bl-n+1 voll oder können mindestens keinen weiteren Dateneintrag enthalten. In einigen beispielhaften Ausführungsformen kann durch Untersuchen der Zählerwerte der jüngste Block erkannt werden. In einigen beispielhaften Ausführungsformen können letzte gültige Daten aus dem jüngsten Block wiederhergestellt werden, und in einigen beispielhaften Ausführungsformen kann der nächste Schreibvorgang an der ersten Datenspeicherstelle des anderen Blocks durchgeführt werden (z. B. nachdem sie gelöscht wurde, in einigen beispielhaften Ausführungsformen).
  • 16 zeigt schematisch ein vereinfachtes Flussdiagramm gemäß einigen beispielhaften Ausführungsformen, das auch als Aktivitätsdiagramm betrachtet werden kann, das beispielhaft Aspekte der Suche nach jüngsten Daten zeigt, z. B. um davon wiederherstellen, und wie eine nächste Schreibstelle in dem nichtflüchtigen Speicher 10 in einigen beispielhaften Ausführungsformen zugewiesen werden kann.
  • Block b1 symbolisiert eine Initialisierung von Variablen gemäß einigen Ausführungsformen. Block b2 symbolisiert das Setzen von Lesevariablen, die dem nichtflüchtigen Speicher zugeordnet sind („Flash-Lesevariablen“), z. B. um auf einen ersten Eintrag in einem ersten Block bl-n (10) hinzuweisen. Block b3 symbolisiert das Bestimmen einer Lesestelle aus dem aktuellen Block und z. B. eine Adresse, z. B. die Basisadresse des aktuellen Blocks. Block b4 symbolisiert das Lesen des Zählers CNT und der magischen Zahl ID, die dem ersten Eintrag zugeordnet ist.
  • Block b5 symbolisiert eine Bestimmung, ob der Zähler CNT leer ist (z. B. ein Bitmuster vom Löschtyp umfasst), und ob die magische Zahl leer ist (z. B. auch ein Bitmuster vom Löschtyp umfasst). Wenn dies der Fall ist, fährt die Prozedur mit Block b6 fort, der symbolisiert, dass der aktuelle Block übersprungen werden kann, z.B. weil im aktuellen Block keine Einträge mehr vorhanden sind. Block b7 symbolisiert, dass gültige Daten gefunden wurden, z. B. nach dem Überspringen b6 des ersten Block bl-n, und die Schreibstelle für den nichtflüchtigen Speicher 10 wird auf ihren Anfangswert gesetzt, und es wird angenommen, dass ein gespeicherter Block gleich dem aktuellen Block bl-n+1 ist. Block b8 symbolisiert das Speichern der aktuellen Position als Schreibstelle, z. B. weil gültige Daten und freier Speicherplatz innerhalb desselben Blocks gefunden wurden.
  • Block b9 symbolisiert, dass ein Vorrücken zu einer nächsten Dateneingabe ausgegeben wurde. Wenn dies der Fall ist, fährt die Prozedur mit Block b10 fort, der das Vorrücken einer Blockadresse um die Größe eines Dateneintrags symbolisiert. Block b11 symbolisiert eine Bestimmung, ob ein Ende des aktuellen Blocks erreicht ist, z. B. ob der in dem aktuellen Block verbleibende freie Speicherplatz kleiner als ein Dateneintrag ist. Falls ja, fährt die Prozedur mit Block b12 fort, der die Ausgabe eines Vorrückens zu dem nächsten Block symbolisiert.
  • Block b13 symbolisiert eine Bestimmung, ob das Vorrücken zum nächsten Block ausgegeben wurde. Wenn dies der Fall ist, fährt die Prozedur mit Block b14 fort, der eine Bestimmung symbolisiert, ob irgendwelche verbleibenden Blöcke vorhanden sind. Wenn dies der Fall ist, fährt die Prozedur mit Block b15 fort, der das Vorrücken eines Blockzählers symbolisiert, und Block b16 symbolisiert das Setzen einer Blockadresse auf einen ersten Dateneintrag des aktuellen Blocks. Wenn die Bestimmung b14 ergibt, dass keine verbleibenden Blöcke vorhanden sind, fährt die Prozedur mit Block b17 fort, der symbolisiert, dass eine Suche durchgeführt wird.
  • Block b18 symbolisiert eine Bestimmung, ob eine Suche erfolgt ist, Block b19 symbolisiert eine Bestimmung, ob gültige Daten gefunden wurden, und wenn dies der Fall ist, fährt die Prozedur mit Block b20 fort, der eine Bestimmung symbolisiert, ob eine Schreibstelle für den nichtflüchtigen Speicher 10 vorhanden nicht gesetzt ist, z. B. gleich ihrem anfänglichen Wert ist. Wenn dies der Fall ist, fährt die Prozedur mit Block b21 fort, der das Setzen einer Schreibstelle auf einen Beginn des Blocks symbolisiert, der der gespeicherten Blocknummer folgt. Block b22 symbolisiert das Löschen des Blocks, wenn er nicht leer ist.
  • Wenn in Block b19 keine gültigen Daten gefunden wurden, fährt die Prozedur mit Block b23 fort, der das Löschen des ersten Blocks symbolisiert, wenn er nicht leer ist. Block b24 symbolisiert das Setzen einer Schreibstelle auf einen Beginn des ersten Blocks.
  • Wenn die Bestimmung von Block b5 ergibt, dass der Zähler CNT nicht leer ist (z. B. kein Bitmuster vom Löschtyp umfasst) und/oder dass die magische Zahl nicht leer ist (z. B. kein Bitmuster vom Löschtyp umfasst), fährt die Prozedur mit Block b25 fort, der eine Bestimmung symbolisiert, ob der Zähler CNT gültig ist und ob die magische Zahl gültig ist. Wenn dies der Fall ist, fährt die Prozedur mit Block b26 fort, der eine Bestimmung symbolisiert, ob der Zähler CNT neuer als ein gespeicherter Zähler ist oder ob bisher keine gültigen Daten gefunden wurden. Wenn dies der Fall ist, fährt die Prozedur mit Block b27 fort, der das Speichern des Zählerwerts und der Blocknummer und der aktuellen Lesestelle symbolisiert. Block b28 symbolisiert das Markieren, dass gültige Daten gefunden wurden, Block b29 symbolisiert das Zurücksetzen einer Schreibstelle des nichtflüchtigen Speichers 10 auf ihren anfänglichem Wert, und Block b30 symbolisiert das Ausgeben eines Vorrückens zu einem nächsten Dateneintrag.
  • Wenn die Bestimmung von Block b26 ergibt, dass der Zähler CNT nicht neuer als ein gespeicherter Zähler ist oder dass bisher keine gültigen Daten gefunden wurden, fährt die Prozedur mit Block b31 fort, was symbolisiert, dass der Block übersprungen werden kann, da er ältere Einträge enthält.
  • Wenn die Bestimmung von Block b25 ergibt, dass der Zähler CNT nicht gültig ist oder dass die magische Zahl nicht gültig ist, fährt die Prozedur mit Block b32 fort, der symbolisiert, dass eine Datenbeschädigung erkannt wurde. Block b33 symbolisiert die Ausgabe eines Vorrückens zu einem nächsten Dateneintrag, z. B. Ignorieren der beschädigten Daten, wie sie im vorherigen Block b33 erkannt wurden, und die Prozedur kann z. B. fortfahren mit Block b9.
  • Weitere Ausführungsformen, 18, betreffen eine Verwendung 300 des erfindungsgemäßen Verfahrens und/oder der erfindungsgemäßen Vorrichtung und/oder des erfindungsgemäßen Computerprogramms und/oder des computerlesbaren Speichermediums und/oder eines Datenträgersignals, das das erfindungsgemäße Computerprogramm umfasst und/oder charakterisiert, für mindestens eines von: a) Schreiben 302 von Daten in den nichtflüchtigen Speicher 10, beispielsweise wiederholtes Schreiben von Daten in den nichtflüchtigen Speicher 10, b) häufiges Schreiben 304 von Daten in den nichtflüchtigen Speicher 10, c) sofortiges Schreiben 306 von Daten in den nichtflüchtigen Speicher 10, d) Auslesen 308 von Daten aus dem nichtflüchtigen Speicher 10, e) Auslesen 310 jüngster, beispielsweise gültig gespeicherter Daten aus dem nichtflüchtigen Speicher 10, f) Durchführen 312 eines Wear-Leveling in Bezug auf den nichtflüchtigen Speicher.
  • Claims (15)

    1. Verfahren, beispielsweise computerimplementiertes Verfahren, zum Betreiben eines nichtflüchtigen Speichers (10), umfassend: Bestimmen (100), ob in einem ersten Block (bl-1) des nichtflüchtigen Speichers (10) ausreichend freier Speicherplatz vorhanden ist für in den nichtflüchtigen Speicher (10) zu schreibende Daten (dtbw), und, wenn in dem ersten Block (bl-1) nicht genügend freier Speicherplatz für die in den nichtflüchtigen Speicher (10) zu schreibenden Daten (dtbw) vorhanden ist, Schreiben (102) der zu schreibenden Daten (dtbw) in mindestens einen weiteren Block (bl-2, ..., bl-n), beispielsweise in einen zweiten Block (bl-2), des nichtflüchtigen Speichers (10).
    2. Verfahren nach Anspruch 1, wobei, wenn in dem ersten Block ausreichend freier Speicherplatz vorhanden ist für die in den nichtflüchtigen Speicher (10) zu schreibenden Daten (dtbw), Schreiben (104) der zu schreibenden Daten (dtbw) in den ersten Block (bl-1).
    3. Verfahren nach mindestens einem der vorhergehenden Ansprüche, umfassend: Verwenden (110) einer Datenstruktur (DS), die einen Zähler (CNT) und eine beispielsweise vorgegebene Kennung (ID), beispielsweise eine magische Zahl, umfasst, wobei die in den nichtflüchtigen Speicher (10) zu schreibenden Daten (dtbw) beispielsweise in die Datenstruktur (DS) eingebettet (110a) werden, beispielsweise zwischen dem Zähler (CNT) und der Kennung (ID), und optional, Schreiben (112) der Datenstruktur (DS) in den nichtflüchtigen Speicher (10).
    4. Verfahren nach Anspruch 3, umfassend: Wiederholen (113) der Schritte des Verwendens (110) und/oder Schreibens (112), wobei vorzugsweise mehrere Datenstrukturen (DS) sequentiell geschrieben werden, beispielsweise in den ersten Block (bl-1) und/oder in den mindestens einen weiteren Block (bl-2, ..., bl-n), wobei beispielsweise ein Wert des Zählers (CNT) nachfolgender Datenstrukturen (DS) beispielsweise um eins erhöht wird.
    5. Verfahren nach mindestens einem der vorhergehenden Ansprüche, umfassend: Verwenden (120) einer vorbestimmten Anzahl (pnb) von Blöcken des nichtflüchtigen Speichers (10), beispielsweise des ersten Blocks (bl-1) und des mindestens einen weiteren Blocks (bl-2, ..., bl-n), in einer beispielsweise vorgegebenen Sequenz (seq).
    6. Verfahren nach Anspruch 5, ferner umfassend, beispielsweise, wenn alle Blöcke der vorbestimmten Anzahl (pnb) von Blöcken gefüllt sind, beispielsweise mit zu schreibenden Daten (dtbw), beispielsweise unter Verwendung einer oder mehrerer Datenstrukturen (DS), Löschen (122) mindestens des ersten Blocks (bl-1) der Sequenz (seq).
    7. Verfahren nach mindestens einem der Ansprüche 3 bis 6, umfassend mindestens eines der folgenden Elemente: a) Definieren (130) eines Wertebereichs (vr) für gültige Werte für den Zähler (CNT), b) Definieren (132) mindestens eines ungültigen Werts (val-inv) für den Zähler (CNT), wobei beispielsweise der mindestens eine ungültige Wert (val-inv) für den Zähler (CNT) einem Bitmuster entspricht, das zum Löschen mindestens eines Blocks des nichtflüchtigen Speichers (10) verwendet wird.
    8. Verfahren nach mindestens einem der Ansprüche 5 bis 7, mindestens abhängig von Anspruch 3, umfassend: Auslesen (140) von Daten, beispielsweise aus mindestens einem Block der vorbestimmten Anzahl (pnb) von Blöcken des nichtflüchtigen Speichers (10), und, optional, Interpretieren (142) der gelesenen Daten (rd) basierend auf der Datenstruktur (DS).
    9. Verfahren nach mindestens einem der Ansprüche 3 bis 8, umfassend: Auslesen (150) einer ersten Datenspeicherstelle (dl-1) aus mindestens einem Block der vorbestimmten Anzahl (pnb) von Blöcken des nichtflüchtigen Speichers (10), und, A) optional, wenn a) der der ersten Datenspeicherstelle (dl-1) zugeordnete Zähler (CNT) einen ungültigen Wert umfasst und/oder wenn b) die der ersten Datenspeicherstelle (dl-1) zugeordnete Kennung (ID) einen ungültigen Wert umfasst, Folgern (152), dass der mindestens eine Block der vorbestimmten Anzahl (pnb) von Blöcken leer ist, und/oder B) optional, wenn der der ersten Datenspeicherstelle (dl-1) zugeordnete Zähler (CNT) einen ungültigen Wert umfasst, und wenn die der ersten Datenspeicherstelle (dl-1) zugeordnete Kennung (ID) einen Nichtlösch-Musterwert umfasst, Betrachten (154) der ersten Datenspeicherstelle (dl-1) als beschädigt, und/oder C), optional, wenn der der ersten Datenspeicherstelle (dl-1) zugeordnete Zähler (CNT) einen gültigen Wert umfasst und wenn die der ersten Datenspeicherstelle (dl-1) zugeordnete Kennung (ID) einen ungültigen Wert umfasst, Betrachten (154) der ersten Datenspeicherstelle (dl-1) als beschädigt.
    10. Verfahren nach Anspruch 9, ferner umfassend: wenn der der ersten Datenspeicherstelle (dl-1) zugeordnete Zähler (CNT) einen gültigen Wert umfasst und wenn die der ersten Datenspeicherstelle (dl-1) zugeordnete Kennung (ID) einen gültigen Wert umfasst, Betrachten (154) der ersten Datenspeicherstelle (dl-1) als die jüngsten Daten umfassend.
    11. Verfahren nach Anspruch 10, ferner umfassend: Auslesen (156) mindestens einer weiteren Datenspeicherstelle (dl-f) aus dem mindestens einen Block der vorbestimmten Anzahl (pnb) von Blöcken des nichtflüchtigen Speichers (10), und wenn der der mindestens einen weiteren Datenspeicherstelle (dl-f) zugeordnete Zähler (CNT) einen gültigen Wert umfasst und wenn die der mindestens einen weiteren Datenspeicherstelle (dl-f) zugeordnete Kennung (ID) einen gültigen Wert umfasst, Betrachten (158) der mindestens einen weiteren Datenspeicherstelle (dl-f) als die jüngsten Daten umfassend.
    12. Vorrichtung (200) zur Durchführung des Verfahrens nach mindestens einem der vorhergehenden Ansprüche.
    13. Computerprogramm (PRG), das Anweisungen umfasst, die bei Ausführung des Programms (PRG) durch einen Computer (302) den Computer (302) veranlassen, das Verfahren nach mindestens einem der Ansprüche 1 bis 11 auszuführen.
    14. Computerlesbares Speichermedium (SM), das Anweisungen (PRG') umfasst, die bei Ausführung durch einen Computer (302) den Computer (302) veranlassen, das Verfahren nach mindestens einem der Ansprüche 1 bis 11 auszuführen.
    15. Verwendung (300) des Verfahrens nach mindestens einem der Ansprüche 1 bis 11 und/oder der Vorrichtung (200) nach Anspruch 12 und/oder des Computerprogramms (PRG) nach Anspruch 13 und/oder des computerlesbaren Speichermediums (SM) und/oder eines Datenträgersignals (DCS), das das Computerprogramm (PRG) nach Anspruch 13 umfasst und/oder charakterisiert, für mindestens eines von: a) Schreiben (302) von Daten in den nichtflüchtigen Speicher (10), beispielsweise wiederholtes Schreiben von Daten in den nichtflüchtigen Speicher (10), b) häufiges Schreiben (304) von Daten in den nichtflüchtigen Speicher (10), c) sofortiges Schreiben (306) von Daten in dem nichtflüchtigen Speicher (10), d) Auslesen (308) von Daten aus dem nichtflüchtigen Speicher (10), e) Auslesen (310) von jüngsten, beispielsweise gültig gespeicherten, Daten aus dem nichtflüchtigen Speicher (10), f) Durchführen (312) eines Wear-Levelings in Bezug auf den nichtflüchtigen Speicher (10).
    DE102021105183.5A 2021-03-04 2021-03-04 Verfahren und Vorrichtung zum Betreiben eines nichtflüchtigen Speichers Pending DE102021105183A1 (de)

    Priority Applications (2)

    Application Number Priority Date Filing Date Title
    DE102021105183.5A DE102021105183A1 (de) 2021-03-04 2021-03-04 Verfahren und Vorrichtung zum Betreiben eines nichtflüchtigen Speichers
    CN202210201505.9A CN115035940A (zh) 2021-03-04 2022-03-03 用于操作非易失性存储器的方法和装置

    Applications Claiming Priority (1)

    Application Number Priority Date Filing Date Title
    DE102021105183.5A DE102021105183A1 (de) 2021-03-04 2021-03-04 Verfahren und Vorrichtung zum Betreiben eines nichtflüchtigen Speichers

    Publications (1)

    Publication Number Publication Date
    DE102021105183A1 true DE102021105183A1 (de) 2022-09-08

    Family

    ID=82898215

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE102021105183.5A Pending DE102021105183A1 (de) 2021-03-04 2021-03-04 Verfahren und Vorrichtung zum Betreiben eines nichtflüchtigen Speichers

    Country Status (2)

    Country Link
    CN (1) CN115035940A (de)
    DE (1) DE102021105183A1 (de)

    Also Published As

    Publication number Publication date
    CN115035940A (zh) 2022-09-09

    Similar Documents

    Publication Publication Date Title
    DE112014004761B4 (de) Beeinflussung des Wear-Leveling in Speichersystemen
    DE60030876T2 (de) Bereichsverwaltung eines nichtflüchtigen Speichers mit hoher Kapazität
    DE60319407T2 (de) Verfolgen der am häufigsten gelöschten blöcke eines nichtflüchtigen speichersystems
    DE69233228T2 (de) Datenverwaltungssystem für Halbleiterspeicher mit beschränkter Programmierung und I.C. Speicherkarte mit solchem Datenverwaltungssystem
    DE60317551T2 (de) Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem
    DE102012208141A1 (de) Ausgleich nachlassender Funktionsfähigkeit
    DE102005019842B4 (de) System und Verfahren zum sequentiellen Schreiben von Daten in einen Flash-Speicher
    DE102017112751A1 (de) Internes Vorkonditionieren von Halbleiterlaufwerken für verschiedene Arbeitslasten
    DE19600081C2 (de) Sicherung der Datenintegrität bei Datenträgerkarten
    DE102016010277A1 (de) Verfahren und systeme zum verbessern von speicher-journaling
    DE102011018558A1 (de) Verfahren zum Datenspeichern in einen Speicher
    DE10297281T5 (de) Verfahren zum elementaren Aktualisieren einer Vielzahl von Dateien
    DE102009051862A1 (de) Speichervorrichtung und Speicherverfahren
    DE102009034651A1 (de) Prozess und Verfahren zur Abbildung von logischen Adressen auf physische Adressen in Festkörperplatten
    DE102009048179A1 (de) Prozess und Verfahren für eine Löschstrategie in Festkörperplatten
    DE69820164T2 (de) Speichervorrichtung sowie Datenlese- und Schreibverfahren
    DE102016010276A1 (de) Verfahren und systeme zur verbesserung von flash-speicher-leerung
    DE112014000311T5 (de) Absichern der Inhalte einer Speichereinheit
    DE112004001255T5 (de) Speichervorrichtung und Speichersystem
    DE102009033961A1 (de) Emulation eines einmal programmierbaren Speichers
    DE69023770T2 (de) Verfahren zum betrieb eines datenverarbeitungssystems.
    DE102006009214B4 (de) Verfahren und Vorrichtung zum Schreiben in eine Zielspeicherseite eines Speichers
    DE102012101405B4 (de) Steuervorrichtung zum Steuern eines Datenlesens und - schreibens von und zu einem Flash-Speicher
    DE102015102774A1 (de) Verfahren und vorrichtung zur verarbeitung eines löschzählers
    DE102017104698A1 (de) Elektroniksteuervorrichtung und Informationsspeicherverfahren dafür