-
Die Erfindung betrifft einen Speicher
und ein Betriebsverfahren für
einen solchen. Insbesondere, jedoch nicht ausschließlich, betrifft
die Erfindung als Flashspeicher bekannte Speicher.
-
Halbleiter- oder Festkörperspeicher
nutzen elektrische Signale oder Ladungen, die so beschaffen sind,
dass sie für
die Daten repräsentativ
sind, die im Speicher abgespeichert werden sollen. Speicher, denen
Energie zuzuführen
ist, damit die elektrischen Signale aufrecht erhalten werden können, was manchmal
als Auffrischung bezeichnet wird, sind als flüchtige Speicher bekannt. Speicher,
die keine Energie zum Aufrechterhalten der elektrischen Signale benötigen, sind
als nichtflüchtige
Speicher bekannt. Ein früher
Typ nichtflüchtiger
Speicher ist als Festwertspeicher (ROM) bekannt, bei dem die für Daten repräsentativen
elektrischen Signale oder Ladungen beim Herstellen des ROM erzeugt
wurden und dann die durch die elektrischen Signale repräsentierten Daten
im Betrieb des Bauteils wieder ausgelesen wurden. Mit elektrisch
löschbaren
und programmierbaren Festwertspeichern (EEPROMs) hat der Benutzer
die Möglichkeit,
einen ROM zu programmieren und im Bauteil abgespeicherte Daten elektrisch
zu löschen
und sie durch andere Daten zu ersetzen.
-
Die Programmierung eines EEPROM verläuft relativ
langsam, da die Eingabe/ Ausgabe von Daten und die Adressierung
mit einem seriellen Format erfolgt. Außerdem sind spezielle "hohe" Spannungen erforderlich,
wenn ein EEPROM programmiert wird. Jedoch sind EEPROMs bei tragbaren elektronischen
Geräten
besonders nützlich,
bei denen Benutzer- oder Systemparameter während des Gebrauchs des tragbaren
Geräts
geändert
werden und zur zukünftigen
Verwendung beim nächsten
Mal, wenn das tragbare Gerät
betrieben wird, beim Abschalten desselben abgespeichert werden müssen. Ein
derartiges tragbares Gerät
kann z. B. ein Funktelefon sein, bei dem die Parameter z. B. für Anrufzähler/-timer,
die Stapeladresse beim letzten Aufruf, Benutzereinstellungen für die Benutzerschnittstelle
sowie den Benutzernamen und einen Nummernspeicher betreffen. Eine
derartige Verwendung kann als Anwendungstyp mit "einmal schreiben/häufig lesen" bezeichnet werden, bei dem die relative
Langsamkeit während
des Gebrauchs und der hohe Energieverbrauch während der Umprogrammierung
dem Gebrauch von EEPROMs für
tragbare, batteriebetriebene Geräte
nicht entgegen stehen.
-
Jedoch sind EEPROMs typischerweise
nur mit relativ kleinen Speichergrößen, wie Größen von 8 kByte oder 16 kByte
verfügbar,
bevor sie abschreckend teuer werden. Da immer mehr nichtflüchtiger Speicherraum
bei niedrigem Energieverbrauch für tragbare
elektronische Geräte
benötigt
wird, sind Alternativen zu EEPROMs erforderlich. Eine derartige Alternative
ist ein sogenannter Flashspeicher, der mit großen Speicherdichten verfügbar ist,
und z. B. sind Bauteile mit 16 und 32 MBit kommerziell verfügbar.
-
Ein Flashspeicher ist schneller als
ein EEPROM, da er ein paralleles Adressierungs- und Datenformat
verwendet. Außerdem
weist er im Bereitschaftsbetrieb einen kleineren Energieverbrauch
als ein EEPROM auf. Bei Flashspeichern erfolgt ein Löschen in
Blöcken,
bei denen es sich um Gruppen von Bytes im Allgemeinen mit einem
Mehrfachen von 4 K, 8 K, 16 K usw. handelt. Das blockweise Löschen macht
im Allgemeinen die Umprogrammierung eines Flashspeichers schneller
als die Umprogrammierung eines EEPROM, was der Ursprung des Begriffs "Flash (= Blitz)" ist. Jedoch benötigt ein
Blocklöschvorgang
eine relativ lange Zeit, nämlich
typischerweise 0,5 Sekunden für
einen Block von 8 kByte.
-
Das Merkmal nur blockweisen Löschens hat dazu
geführt,
dass Flashspeicher dazu verwendet werden, Datenstrukturen in Form
einer "verketteten Liste" zu speichern. Eine
derartige Struktur ist in der Intel Corporation Application Note
AP-604 für
die Smart-Voltage-Boot-Block-Flashspeicher-Familie beschrieben.
Bei diesen Flashspeicher-Bauteilen sind zwei sogenannte Parameterblöcke zur
Speicherung von Daten, die geändert
werden, vorhanden. Zu einem jeweiligen Zeitpunkt ist nur einer der
Parameterblöcke
in Gebrauch. Jeder Datensatz verfügt über einen Parameterwert und
einen Zeiger auf den nächsten
Datensatz für
diesen Parameter. Wenn der Parameterwert für einen Datensatz der aktuelle
Wert ist, ist der Zeiger "leer", oder es ist ein
Wert wie FFH an ihn vergeben, der anzeigt, dass kein weiterer Datensatz
für den
Parameter existiert. Wenn ein Parameterwert aktualisiert wird, wird
der Zeiger für
den vorigen aktuellen Wert von "leer" aus so geändert, dass
er die Adresse des Datensatzes einnimmt, an der der neue Parameterwert
abzuspeichern ist. In den neuen Datensatz wird der neue Wert und
ein "leerer" Zeiger eingespeichert.
-
Parameterwerte werden in der Struktur
einer verketteten Liste abgespei chert, bis der aktuelle Parameterblock
voll ist. Wenn dieser Punkt erreicht ist, wird der letzte Wert für jeden
Parameter im zweiten Parameterblock, nun dem aktuellen Parameterblock, abgespeichert,
und die Struktur einer verketteten Liste setzt sich im neuen aktuellen
Block fort. Der ursprüngliche
aktuelle Parameterblock wird dann gelöscht.
-
Obwohl Flashspeicher einige der Probleme und
Nachteile in Zusammenhang mit EEPROMs und dergleichen berücksichtigen,
zeigen sie ihre eigenen Nachteile. Während eines Löschzyklus
ist kein Lesevorgang aus irgendeinem Block möglich, unabhängig davon,
ob der Block gelöscht
wird oder nicht, was ein deutlicher Nachteil gegenüber einem
EEPROM ist, bei dem Daten mit einzelnen Bytes gelesen oder geschrieben
werden können.
Außerdem
ist die Anzahl von Löschzyklen,
denen ein Flashspeicher unterzogen werden kann, bevor eine Beeinträchtigung
des Funktionsvermögens
auftritt, auf ungefähr
100.000 Löschzyklen
begrenzt, was deutlich niedriger als die Grenze für EEPROMs
ist.
-
Die Erfindung zielt darauf ab, zumindest
einige der Probleme oder Nachteile zu lindern, wie sie sich bei
Flashspeicher-Bauteilen zeigen.
-
GB-A-21 91 990 beschreibt ein Flashspeicher-Verfahren
zum Aufrechterhalten einer Abbildung zwischen einer Logiksektoradresse
und einer entsprechenden physikalischen Adresse unter Verwendung
eines Datenspeicherblocks für
jeden Logiksektor-Adressenwert sowie mehrere Ersatzdaten-Speicherblöcke. Die
Speicherblöcke
werden gesäubert,
wenn die Anzahl der ungenutzten Blöcke unter einen vorbestimmten
Schwellenwert fällt.
-
Gemäß einer ersten Erscheinungsform
der Erfindung ist Folgendes geschaffen: ein Speicherverwaltungsverfahren
zum Verwalten eines ersten Speichers, der über Bereiche zum Speichern
von Parameterdaten und ausführbare
Codebefehle dieses ersten Speichers verfügt, gekennzeichnet durch die folgenden
Schritte: Übertragen,
als Vorläufer
eines Löschzyklus
für den
ersten Speicher, der ausführbaren
Codeanweisungen in einen zweiten Speicher, der nicht der erste Speicher
ist, um in diesem für
die ausführbaren
Codeanweisungen zu sorgen; Steuern des Löschzyklus unter Verwendung
der übertragenen ausführbaren
Codeanweisungen aus dem zweiten Speicher; und Ermitteln einer Anzahl
benutzter Speicherstellen für
einen ersten Speicherbereich des ersten Speichers über einem
vorbestimmten Schwellenwert; Identifizieren eines zweiten Speicherbereichs des
ersten Speichers, der zum Speichern elektronischer Signale verfügbar ist;
Einspeichern elektronischer Signale in den zweiten Speicherbereich,
die elektronischen Signalen entsprechen, die für im ersten Speicher abgespeicherte
Parameterdaten repräsentativ
sind, und Ausführen
eines Löschzyklus
für den
ersten Speicherbereich, und Bestimmen eines dritten Speicherbereichs,
der den größten vergeudeten
Raum aufweist, aus mehreren ersten Speicherbereichen; Einspeichern
elektronischer Signale in den zweiten Speicherbereich, die im dritten Speicherbereich
gespeicherten elektronischen Signalen entsprechen, und Ausführen eines
Löschzyklus
für den
dritten Speicherbereich.
-
Ein Vorteil einer Ausführungsform
der Erfindung besteht darin, dass eine ungleichmäßige Speichernutzung vermieden
ist. Dies verbessert die effektive Lebensdauer des Speichers.
-
Bei einer bevorzugten Ausführungsform
ist der zweite Speicherbereich der am wenigsten gelöschte Speicherbereich
unter zum Speichern elektronischer Signale verfügbaren Speicherbereichen.
-
Gemäß einer weiteren Erscheinungsform der
Erfindung ist eine elektronische Vorrichtung zur Speicherverwaltung
einschließlich
eines Computerprozessors geschaffen, der so programmiert ist, dass er
gemäß den oben
beschriebenen Verfahren arbeitet.
-
Gemäß einer weiteren Erscheinungsform der
Erfindung ist ein Medium zum Speichern maschinenlesbarer Anweisungen
gemäß den oben
beschriebenen Verfahren geschaffen.
-
Nun werden Ausführungsformen der Erfindung,
nur beispielhaft, unter Bezugnahme auf die beigefügten Zeichnungen
beschrieben.
-
1 zeigt
eine typische Flashspeicherkarte;
-
2 zeigt
ein Blockdiagramm eines VLSI-Mikrocontrollers;
-
3 zeigt
ein Flussdiagramm für
eine Flashspeichermanager-RAM-Cache-Routine;
-
4 zeigt
ein Flussdiagramm für
eine Flashspeichermanager-Interrupthandlings-Routine; und
-
5 zeigt
eine schematische Darstellung einer Flashspeichermanager- Blockkopie-Vorgehensweise
gemäß einer
bevorzugten Ausführungsform der
Erfindung.
-
In der im November 1995 veröffentlichten Application
Note AP-604 ist der 4-MBit-Smart-Voltage-Boot-Block-Flashspeicher
von Intel Corporation beschrieben. Eine Speicherkarte für den 4-MBit-Flashspeicher
von Intel ist in der 1 dargestellt.
Der 4-MBit-Flashspeicher 100 von Intel ist in Blöcke unterteilt,
von denen jeder einen festen Adressenbereich aufweist. Blöcke 102, 104 und 106 sind
128 kByte-Blöcke,
die sich zwischen den Adressen 00000H und 30000H erstrecken. Außerdem existiert
ein 96-kByte-Block 108, der sich zwischen den Adressen
30000H und 3BFFFH erstreckt. Die Flashspeicherblöcke 102, 104, 106 und 108 bilden Hauptspeicherblöcke, und
sie werden typischerweise dazu verwendet, Daten und Information
zu speichern, die während
des Gebrauchs des Flashspeichers 100 nicht geändert werden
soll oder deren Änderung
unwahrscheinlich ist. Derartige Daten oder Information können Anwendungssoftware
oder ein Programm zum Betreiben eines Geräts sein, bei dem nur gelegentliche
Softwareverbesserungen oder -aktualisierungen erforderlich sind.
Der 4-MByte-Flashspeicher von Intel verfügt auch über zwei 8-kByte-Parameterblöcke 110 und 112.
Der Parameterblock I, 110, erstreckt sich zwischen den
Adressen 3C000H und 3CFFFH, und der Parameterblock II, 112,
erstreckt sich zwischen den Adressen 3D000H und 3DFFFH. Der Parameterblock
I und der Parameterblock II, 110 und 112, sind
Flashspeicherblöcke,
die zum Speichern von Daten verwendet werden, die während des
Betriebs des Flashspeichers 100 typischerweise aktualisiert
werden. Zum Beispiel können die
Daten Parameter betreffend den Betrieb des elektronischen Geräts sein,
in dem sich der Flashspeicher 100 befindet. Wenn dies z.
B. ein tragbares Funktelefon ist, kann derartige Information die
Einstellung der Benutzerschnittstelle, das persönliche Telefonverzeichnis des
Benutzers oder irgendeinen anderen Parameter des Funktelefons betreffen,
der sich während
des Gebrauchs ändert
und der bei abgeschalteter Spannung des Funktelefons aufrecht erhalten
werden muss. Der letzte Speicherblock, ein Block 114, ist
ein Codeblock, und dieser wird geeigneterweise zum Abspeichern von
Software verwendet, die zum Initialisieren des Betriebssystems,
z. B. eines elektronischen Geräts,
benötigt
wird, und um für
die Erholung eines Systems beim katastrophalen Fehlschlagen eines
Anwendungscodes sorgt. Zusätzlich
speichert der Codeblock 114 typischerweise den Code, der
zum Programmieren und Löschen
des Flashspeichers erforderlich ist. Der Codeblock 114 wird
häufig
als Bootblock bezeichnet, und er belegt den höchsten Speicherbereich, die
Adressen 3E000H bis 3FFFFH.
-
Gemeinsam wie andere Halbleiterspeicher speichert
auch ein Flashspeicher Daten in Form elektronischer Signale. Die
Daten werden als Binärinformation
gespeichert, d. h., dass die Information oder die gespeicherten
Daten entweder "1" oder "0" repräsentieren. Es ist ein Charakteristikum
von Flashspeichern, dass es nur durch Ändern von Werten "1" in Werte in "0" möglich ist,
Information in einen Flashspeicher einzuschreiben (oder einzuprogrammieren). Demgemäß wird ein
Flashspeicher dadurch zur Schreibbereitschaft (oder Programmierbereitschaft) initialisiert,
dass alle Speicherstellen mit Werten "1" gefüllt werden.
Um einen Flashspeicher zu löschen, werden
Werte "0" auf Werte "1" geändert.
Außerdem ist
es ein Charakteristikum von Flashspeichern, dass Löschprozesse
auf blockweiser Basis ausgeführt werden.
Gemäß der 1 soll ein Löschprozess oder
-zyklus für
einen der Blöcke 102 bis 114 erfolgen.
Es ist nicht möglich,
Information selektiv innerhalb eines Blocks zu löschen; es muss die gesamte Information
in diesem Block gelöscht
werden. Durch einen Blocklöschvorgang
wird nur Information in dem einen Block gelöscht; alle anderen Blöcke bleiben
unbeeinflusst. Ein Löschzyklus
ist typischerweise als Löschvorgang
gefolgt von einem Schreib- oder Programmiervorgang, oder umgekehrt,
definiert. Das Lesen aus einem Flashspeicher erfolgt auf relativ
herkömmliche
Weise dadurch, dass als Erstes die Stelle adressiert wird, aus der
Daten gelesen werden sollen, und dann die Daten gelesen werden.
Es handelt sich um ein Merkmal des 4-MByte-Smart-Voltage-Boot-Block-Flashspeichers von
Intel, dass er nur für
ein Funktionieren über
100.000 Löschzyklen
spezifiziert ist, wenn er innerhalb eines Standardtemperaturbereichs
mit einer Spannungsversorgung von 5 Volt arbeitet, und nur für 10.000
Zyklen in einem erweiterten Temperaturbereich. Diese Obergrenze
der spezifizierten Anzahl von Zyklen kann eine Beschränkung zur
Nutzung derartiger Flashspeicher-Bauteile bei einigen Arten elektronischer
Geräte sein.
-
Es wird nun auf die 2 Bezug genommen, in der ein Blockdiagramm
eines Mikrocontrollers 200 mit einer Anzahl integrierter
on-Board-Funktionseinheiten dargestellt ist. Der Mikrocontroller 200 verfügt über eine
CPU 202, einen Flashspeicher 204, einen Direktzugriffsspeicher
(RAM) 206, Eingangs/ Ausgangs-Treiber 208 und
einen digitalen Signalprozessor (DSP) 210. Die CPU 202 kann
eine herkömmliche
Prozessoreinheit mit normalen Funktionen sein, wie sie derartigen
Prozessoren zugewiesen sind, und die mit anderen Funktionseinheiten
innerhalb des Mikrocontrollers 200 zusammenarbeitet und
mit Signalen arbeitet, wie sie dem Mikrocontroller 200 vom elektronischen
Gerät zugeführt werden,
dem er zugeordnet ist. Der Eingangs/Ausgangs-Treiber 208 handhabt
die Übertragung
von Daten zwischen einzelnen Funktionseinheiten auf der Platine
des Mikrocontrollers 200, und er handhabt auch den Datenfluss
zwischen den Einheiten des Mikrocontrollers 200 und dem
externen elektronischen Gerät.
Einhergehend mit der immer größeren Integration
ist es nicht unüblich,
auf der Platine eines Mikrocontrollers ausgeklügelte Funktionseinheiten zu
finden, wie den DSP 210, der geeignet dazu programmiert
ist, Vocoderfunktionen, z. B. in einem Funktelefon, auszuführen. Typischerweise
verfügt
der Mikrocontroller 200 auf seiner Platine auch über verschiedene
Speichertypen. Der Flashspeicher 204 bildet eine nichtflüchtige Speichereinrichtung,
und er wird häufig
als Ersatz für
einen EEPROM verwendet und emuliert einen solchen, und der RAM 206 bildet
eine flüchtige
Speichereinrichtung, und er ist im Allgemeinen dazu vorhanden, seine
normale Funktion auszuüben
wie als Notizblockspeicher oder zur Verwendung in Zusammenhang mit
irgendeiner in der CPU laufenden Software.
-
Der Flashspeicher 204 speichert
im Speicherblock 114 typischerweise Anweisungen für die CPU 202 zum
Ausführen
von Schreib- und Löschvorgängen betreffend
den Flashspeicher 204. Da jedoch aus dem Flashspeicher
nicht von einer Adressenstelle gelesen werden kann, während in
eine andere Adressenstelle innerhalb desselben Bauteils geschrieben
wird, muss jede Anweisung, die einen Schreibvorgang in eine Flashspeicherstelle
beinhaltet, zunächst
im RAM 206 zwischengespeichert werden, damit der Code zum
Ausführen
des Schreibprozesses ausgeführt
werden kann. Da der Löschprozess
ein Prozess zum Ändern
von Werten "0" in Werte "1" ist, d. h. eine Art eines "Schreibvorgangs", müssen auch
Anweisungen für
den Löschzyklus
vorübergehend
in den RAM heruntergeladen werden, bevor der Löschzyklus beginnt.
-
Gemäß einer bevorzugten Ausführungsform der
Erfindung verfügt
der RAM 206 über
einen 8-kByte-Block, der nachfolgend als 8 K-RAM-Cache bezeichnet
wird, zur Zwischenspeicherung von Parametern oder Variablen, die
in einem der Flashspeicher-Parameterblöcke 110, 112 zu
speichern sind. Die CPU 202 wird entsprechend einem Satz
von maschinenlesbaren Anweisungen, die als Flashspeichermanager
(FMM) bekannt sind, in einen gewünschten
Zustand gebracht, um eine Maßnahme zur
effizienten Nutzung des Flashspeichers zu bilden. Ein Satz maschinenlesbarer
Anweisungen, der als FMM-RAM-Cache-Routine bekannt ist, ist vorhanden,
um die Einspeicherung von Parametern in und zwischen dem RAM-Cache 121 und
den Parameterblöcken 110 und 112 zu
steuern. Typischerweise sind FMM-Anweisungen wie Anweisungen der FMM-RAM-Cache-Routine
in den Hauptspeicherblöcken 102 bis 108 des
Flashspeichers 200 abgespeichert, und sie können in
den RAM 206 heruntergeladen werden, wenn diese FMM-Anweisungen
das Schreiben oder Löschen
eines Flashspeicherblocks bein halten sollen, insbesondere des einen
oder anderen der Parameterblöcke 110, 112.
-
Es wird nun auf die 3 Bezug genommen, in der ein Flussdiagramm 300 für den Betrieb
einer CPU 202 dargestellt ist, die entsprechend Anweisungen
der FMM-RAM-Cache-Routine in einen gewünschten Zustand gebracht ist.
Wenn ein im aktuell aktiven Flashparameterblock, z. B. 110,
des Flashspeichers 100 abgespeicherter Parameter zu ändern, abzuändern oder
zu aktualisieren ist, tritt der FMM 300 in einen Zustand 302 ein,
in dem ein im RAM-Cache 212 gespeicherter entsprechender
Parameter mit dem neuen Parameterwert aktualisiert wird. Dann geht
der FMM 300 in einen Zustand 304 über, in
dem ermittelt wird, ob während
des Einschreibens in den aktuell aktiven Flashparameterblock 110 eine
Aktualisierung des RAM-Caches 212 erfolgte oder nicht.
Wenn eine Aktualisierung des RAM-Caches während eines Flash-Schreibvorgangs auftrat,
tritt der FMM 300 in einen Zustand 306 ein, in dem
der Inhalt des RAM-Caches 212 in den aktuell aktiven Flashparameterblock 110 eingeschrieben wird,
um den RAM-Cache 212 in den aktuell aktiven Flashparameterblock 110 zu
aktualisieren. Dies erfolgt wegen irgendwelcher Fehlübereinstimmungen zwischen
im RAM-Cache 212 und im aktuell aktiven Flashparameterblock 110 abgespeicherten
Parameterwerten wegen eines Schreibvorgangs in den RAM-Cache 212 während eines
Flash-Schreibvorgangs, was dazu geführt haben kann, dass der aktuell
aktive Flashparameterblock 110 dann teilweise alte Daten
und teilweise neue Daten enthält,
die in ihm abgespeichert sind. Wenn sich im Zustand 304 NEIN
ergibt, tritt der FMM 300 in einen Zustand 308 ein,
in dem die Priorität
der aktuell im RAM aktualisierten Parameter ermittelt wird. Es sei
darauf hingewiesen, dass gemäß der Erfindung
die Parameter abhängig
von ihrer Bedeutung für
den Betrieb des elektronischen Geräts, in dem sich der Flashspeicher oder
Mikrocontroller befindet, entweder als "dringende" oder "träge" Parameter spezifiziert
sind. Welche Parameter "dringend" und welche "träge" sind, und wie derartige
Prioritäten
unter den verschiedenen Parametern für das elektronische Gerät verteilt
sind, ist für
die vorliegende Erfindung nicht relevant. Es ist lediglich erforderlich
zu beachten, dass Parameter mit diesen jeweiligen zwei Prioritätsniveaus
im System existieren und hinsichtlich derartiger Prioritäten erkannt
werden können.
Selbstverständlich
können in
jedem beliebigen System mehr als zwei Prioritätsniveaus vorhanden sein, und
der FMM 300 kann geeignet abgeändert werden, um anderen Prioritätsniveaus
zu genügen.
Wenn der aktuelle Parameter über
die Priorität "träge" verfügt, gelangt
der FMM 300 in einen Zustand 310, und wenn der
aktuelle Parameter über
die Priorität "dringend" verfügt, gelangt der
FMM 300 in einen Zustand 312. Wenn während des
Zu stands 310 mehr als fünf "träge" Parameter seit der
letzten Flashsicherung in den RAM-Cache 212 eingeschrieben
wurden, oder wenn mehr als eine Minute verstrichen ist, seit der
letzte "träge" Parameter in den
RAM-Cache 212 eingeschrieben wurde und keine dazwischen
liegenden Flashsicherungsvorgänge
vorlagen, gelangt der FMM 300 in einen Zustand 306,
in dem in den aktuell aktiven Flashparameterblock 110 der
Inhalt des RAM-Caches 212 eingeschrieben wird, um den RAM-Cache 212 zu
sichern. Wenn sich im Zustand 310 NEIN ergibt, gelangt
der FMM 300 in einen Zustand 302, in dem er darauf
wartet, dass der nächste
Parameter für
den RAM-Cache 212 zu aktualisieren ist. Wenn im Zustand 312 mehr
als ein dringender Parameter seit der letzten Flashsicherung in
den RAM-Cache 212 eingeschrieben wurde oder wenn zwei Sekunden
verstrichen sind, seit der letzte dringende Parameter in den RAM-Cache 212 eingeschrieben
wurde, und wenn dazwischen kein Sicherungsvorgang für den Flash
vorliegt, gelangt der FMM 300 in einen Zustand 306,
in dem der Inhalt des RAM-Caches 212 in den aktuell aktiven
Flashspeicher-Parameterblock 110 gesichert wird. Wenn sich
im Zustand 312 NEIN ergibt, gelangt der FMM 300 in
den Zustand 302, in dem der Prozess darauf wartet, dass
der nächste
Parameter für
den RAM-Cache 212 zu aktualisieren ist.
-
Der Fachmann erkennt, dass die Kriterien
in den jeweiligen Zuständen 310 und 312 nicht
so sein müssen,
wie es speziell beschrieben wurde, sondern dass sie variiert werden
können,
um die Art und die Priorität
der Parameter für
jedes spezielle elektronische Gerät zu berücksichtigen.
-
Wie es aus dem Flussdiagramm der 3 deutlich ist, verfügt der FMM 300 über Zustände, die ein
Einschreiben in den aktiven Flashspeicher-Parameterblock 110 erfordern,
und Zustände,
die kein solches Einschreiben erfordern. Demgemäß ist es möglich, dass nicht alle Anweisungen
betreffend den FMM 300 vom Flashspeicher in den RAM 206 heruntergeladen
werden müssen,
wenn die CPU 202 in einen solchen gewünschten Zustand zu bringen
ist, dass sie gemäß dem FMM 300 arbeitet,
sondern nur ein Teil der Anweisungen des FMM 300, die einen "Schreibvorgang" in den Flashspeicher-Parameterblock 110 auslösen.
-
Da ein Flashspeicher nicht individuell
gelöscht
werden kann, wird jede folgende Absicherung mit dem Inhalt des RAM-Caches 212 in
die nächste verfügbare Adresse
innerhalb des aktiven Flashspeicher-Parameterblocks 110 eingeschrieben.
Zu diesem Zweck ist eine Datenstruktur einer verketteten Liste,
wie oben beschrieben, besonders geeignet. Schließlich wird der aktuell aktive
Flashspeicher-Parameterblock 110 voll. Dann werden die
aktuellsten Datenwerte für
die im aktuell aktiven Flashspeicher-Parameter block 110 abgespeicherten
Parameter in den zweiten Flashspeicher-Parameterspeicherblock 112 eingeschrieben.
Nun wird der zweite Flashspeicher-Parameterblock der aktuell aktive
Parameterblock, und der Inhalt des RAM-Caches 212 wird nun
unter Steuerung durch den FMM 300 in den neuen aktuell
aktiven Parameterblock 112 aktualisiert. Zu einem geschickten
Zeitpunkt innerhalb des Betriebs des elektronischen Geräts wird
der ursprünglich
aktive Parameterblock 110 gelöscht, d. h., alle Speicherstellen
werden mit dem Wert "1" gefüllt und dazu
bereit gemacht, aktualisierte Parameterwerte zu empfangen, wenn
der aktuell aktive Parameterblock 212 voll wird.
-
Der durch eine FMM-RAM-Cache-Routine verwaltete
Flashspeicher kann effektiv länger
genutzt werden, da er nicht notwendigerweise mit jeder Änderung
eines Parameterwerts aktualisiert wird, sondern nur dann, wenn eine
bestimmte Anzahl von Parameteraktualisierungen vorliegt oder wenn
der Parameter ausreichend wichtig ist, um sofort im Flashspeicher
gesichert zu werden. So sind mehr Parameteraktualisierungen möglich, als
sie bei einem herkömmlich
verwalteten Flashspeicher verfügbar
wären.
-
Während
des Betriebs eines elektronischen Geräts, das durch eine zentrale
Prozessoreinheit wie die CPU 202 gesteuert wird, muss Information
von Speichern wie dem Flashspeicher 204 und dem RAM 206 gelesen
werden. Jedoch ist es, wie oben beschrieben, nicht möglich, während eines
Schreibvorgangs aus dem Flashspeicher 204 zu lesen oder
einen Block desselben zu löschen.
Demgemäß wird, wenn
während
eines Schreib-oder Löschvorgangs eine
Anforderung durch die CPU auftritt, Daten aus dem Flashspeicher 204 zu
lesen, diese Anforderung zurückgewiesen.
Derartige Anforderungen werden nachfolgend als Interrupts bezeichnet.
-
Abhängig vom Typ des elektronischen
Geräts
und seinem Zustand arbeitet dasselbe nicht mehr korrekt, wenn Interrupts
oder zumindest bestimmte Interrupttypen nicht prompt bedient werden. Bei
einem Löschvorgang
kann die Verzögerung
für einen
8 K-Block bis zu zwei Sekunden betragen, was typischerweise eine
viel zu große
Verzögerung
vor der Bedienung eines Interrupts ist.
-
Es wird nun auf die 4 Bezug genommen, in der ein Flussdiagramm
für eine
Flashspeichermanager(FMM)-Interrupthandler-Routine 400 dargestellt
ist. Wenn ein Interrupt auftritt, der Zugriff auf den Flashspeicher 204 erfordert,
wird der FMM-Interrupthandler 400 aufgerufen. Der FMM-Interrupthandler ermittelt
in einem Zustand 402, ob der Flashspeicher 204 aktuell einem
Schreib- oder Löschvorgang
unterliegt. Wenn kein derartiger Vorgang abläuft, wird in einen Zustand 404 eingetreten,
in dem die Interrupthandler-Standardroutine des Systems ausgelöst wird.
Interrupthandling-Standardroutinen sind dem Fachmann gut bekannt,
und es ist keine detaillierte Beschreibung derselben erforderlich.
Der Standard-Interrupthandler bedient die Interruptanforderung auf
herkömmliche
Weise, wobei er Lesevorgänge
von allen erforderlichen Datenstellen ausführt. Wenn ein Schreib- oder
Löschvorgang
abläuft,
gelangt der FMM-Interrupthandler 400 in einen Zustand 406,
wenn ein "Kurz"-Schreibvorgang in
den Flashspeicher 204 abläuft, und es erfolgt ein Eintritt
in einen Zustand 408, wenn ein "Lang"-Schreibvorgang, d.
h. ein Wortschreibvorgang, abläuft,
und es wird in einen Zustand 410 eingetreten, wenn ein
Löschvorgang
abläuft.
-
Für
einen Kurz-Schreibvorgang in den Flashspeicher 204, Zustand 406,
tritt der Interrupthandler 400 in einen Zustand 412 ein,
in dem der Interrupt deaktiviert wird. Wenn der "Kurz"-Schreibvorgang abgeschlossen
wird, tritt der Interrupthandler 400 in einen Zustand 414 ein,
in dem der Blocklesemodus für
den Flashspeicher 204 aktiviert wird. Dann tritt der Interrupthandler
in einen Zustand 404 ein, in dem der Standard-Interrupthandler
aufgerufen wird. Die Maximaldauer dafür, dass ein Schreibvorgang
als "Kurz"-Schreibvorgang klassifiziert wird, hängt typischerweise
von der Art des durch die CPU 202 und die auf ihr laufenden
Anweisungen im elektronischen Gerät ab, und sie kann vom Fachmann
geeignet bestimmt werden. Im Allgemeinen kann ein Schreibvorgang
von weniger als sechs Maschinenzyklen oder von einer Anweisung als "Kurz"-Schreibvorgang angesehen
werden.
-
Wenn ein "Lang"-Schreibvorgang,
d. h. ein solcher, der viele "Wörter" umfasst, abläuft, gelangt der
Interrupthandler 400 in einen Zustand 408, und
er ermittelt, ob aktuell ein Wort (typischerweise 8 oder 16 Bits)
in den Flashspeicher 204 eingeschrieben wird. Falls nicht,
geht der Interrupthandler 400 in einen Zustand 414 über, in
dem für
den Flashspeicher 204 in den Blocklesemodus eingetreten
wird, und dann wird in einen Zustand 404 eingetreten, in
dem der Standard-Interrupthandler aufgerufen wird. Wenn aktuell
ein Wort in den Flashspeicher 204 eingeschrieben wird,
wird in einen Zustand 412 eingetreten, und der Interrupt
wird bis zum Zeitpunkt deaktiviert, zu dem der Wortschreibvorgang
endet. Dann wird in den Zustand 414 eingetreten, und der
Blocklesemodus wird aktiviert, und im Zustand 404 wird der
Standard-Interrupthandler aufgerufen. Wahlweise können zwischen
Wortschreibvorgängen
Interrupts aktiviert werden, da zwischen Wortschreibvorgängen typischerweise
eine Pause besteht, um das neue Wort in einem Daten puffer zu platzieren
oder die Schreibadresse für
das neue Wort zu laden. Demgemäß kann,
wenn während
einer derartigen Aktivierungsperiode ein Interrupt auftritt, der
FMM-Interrupthandler den Flashspeicher 204 in einen Lesemodus
versetzen, damit der Interrupt bedient werden kann. Der FMM-Interrupthandler
kann ermitteln, wenn ein "Lang"-Schreibvorgang zwischen
Wortschreibvorgängen
vorliegt und dann den Flashspeicher 204 in den Lesemodus
versetzen; oder er kann erkennen, wann wahrscheinlich ein "Lang"-Schreibvorgang zwischen Wortschreibvorgängen auftritt.
-
Wenn der FMM-Interrupthandler 400 in
den Zustand 410 eintritt, wobei ein ablaufender Löschvorgang
erkannt wurde, wird der Löschprozess
angehalten, und es wird der Blocklesemodus aktiviert, Zustand 414.
Im Zustand 404 wird der Standard-Interrupthandler aufgerufen.
-
Ausgehend vom Zustand 404 tritt
der FMM-Interrupthandler 400 in einen Zustand 416 ein, der
eine Fortsetzung des Betriebs ist, der vor dem Aufruf des Interrupthandlers
ausgeführt
wurde. Wenn z. B. ein Löschvorgang
ablief, wird dieser im Zustand 416 ab dort fortgeführt, wo
er zum Bedienen des Interrupts angehalten wurde. In ähnlicher
Weise wird, wenn ein "Lang"-Schreibvorgang ablief und unterbrochen
wurde, der nächste
Schreibvorgang im Zustand 416 ausgeführt.
-
Der FMM-Interrupthandler 400 kann
im Flashspeicher 204 gespeichert sein, jedoch wird er zeitweilig
an den RAM 206 übertragen,
wenn ein Lösch-
oder Schreibvorgang auszuführen
ist. Wahlweise wird der Interrupthandler 400 vorzugsweise
im RAM 206 abgespeichert. Unabhängig davon, ob er nur zeitweilig
oder vorzugsweise im RAM abgespeichert ist, müssen Interruptanforderungen
eine Vektorabbildung auf die RAM-Adresse erfahren, die den FMM-Interrupthandler 400 enthält.
-
Wie bereits beschrieben, verfügt ein Flashspeicher 204 über eine
endliche Anzahl von Löschzyklen,
die ausgeführt
werden können,
bevor eine Beeinträchtigung
seines Funktionsvermögens
auftritt. Der Flashspeichermanager stellt der CPU 202 einen Satz
maschinenlesbarer Anweisungen, die als FMM-Blockwiederverwendungs-Vorgehensweise bekannt
sind, bereit, um eine Maßnahme
zur gleichmäßigen Wiederverwendung
von Flashspeicherblöcken
zu bilden, so dass alle Blöcke
näherungsweise dieselbe
Abnutzung für
jeden Block erfahren.
-
Es wird nun auf die 5 Bezug genommen, in der schematisch
eine Darstel lung einer FMM-Blockwiederverwendungs-Vorgehensweise gemäß einer
bevorzugten Ausführungsform
der Erfindung dargestellt ist. Die CPU 202 kann in einen derartigen
gewünschten
Zustand gebracht sein, dass sie gemäß dieser FMM-Blockwiederverwendungs-Vorgehensweise
arbeitet. Zur Blockwiederverwendungs-Vorgehensweise gehört ein Satz
von Unterroutinen, die als erase_count 502, erase_initiate 504,
copy_initiate 506, copy_from 508, copy_to 510 und
copy_for_wear_levelling 512 bezeichnet sind.
-
Die Unterroutine erase_count 502 verfolgt, wie
oft ein Block gelöscht
wurde. Die Anzahl der Blocklöschvorgänge ist
als Blockabnutzungs-Zählwert
bekannt. Bei der ersten Benutzung des Flashspeichers wird der Blockabnutzungs-Zählwert auf
0 initialisiert. D. h., beim ersten Ablaufen des Flashspeichermanagers
im elektronischen Gerät,
in dem sich der Flashspeicher 204 befindet. Für jeden
Block des Flashspeichers existiert ein Blockabnutzungs-Zählwert, der jedesmal dann inkrementiert wird,
wenn der entsprechende Block gelöscht
wird. Im Allgemeinen wird ein Block gelöscht, damit ein anderer Block
in ihn kopiert werden kann. Demgemäß kann der Blockabnutzungs-Zählwert für den Block, der
gelöscht
wird, in den Block eingespeichert werden, von dem die Kopie zu erstellen
ist, während
der Block, in dem die Kopie zu erstellen ist, gelöscht wird.
-
Die Unterroutine erase_initiate 504 steuert die
Operation von Löschprozessen
innerhalb des Flashspeichers 204. Typischerweise werden
löschbare
Blöcke
gelöscht,
so dass der Löschvorgang
nur dann einen Interrupt erfährt,
wenn der Flashspeichermanager einen derartigen Interrupt benötigt, weil
er Interruptanforderungen von der CPU 202 bedienen muss.
-
Die Auslösung eines Kopiervorgangs wird durch
maschinenlesbare Anweisungen gemäß der Unterroutine
copy_initiate 506 gesteuert. Die Kriterien zum Starten
eines Blockkopiervorgangs von einem nahezu vollen Block in einen
ungenutzten Block sind die folgenden: – mindestens ein Block ist über 80%
gefüllt
und enthält
mindestens 20% vergeudeten Raum UND – es ist ein freier Block derselben Größe verfügbar.
-
Andere Bedingungen oder Kriterien
können vom
Fachmann bestimmt werden, um die Unterroutine copy_initiate 506 an
ein spezielles elektronisches Gerät oder eine Mikrocontroller/Befehlssatz-Architektur
anzupassen.
-
Wenn die Bedingungen zum Erfüllen der
Kriterien in der Unterroutine copy_initiate 506 erfüllt sind,
werden die Unterroutine copy_from 508 und die Unterroutine
copy_to 510 aufgerufen. Die Unterroutine 508 copy_from
sorgt dafür,
dass der Inhalt des Blocks mit dem größten vergeudeten Raum herauskopiert
wird. Typischerweise existiert, wenn die Unterroutine copy_from 508 aufgerufen
wird, normalerweise mehr als ein Kandidatenblock, aus dem zu kopieren
ist. Wenn z. B. acht 8 K-Byte-Blöcke
existieren, von denen sechs Blöcke
voll sind, gilt:
- – einer verfügt über 90%
vergeudeten Raum mit einem Blockabnutzungs-Zählwert von dreißig;
- – einer
verfügt über 80%
vergeudeten Raum mit einem Blockabnutzungs-Zählwert von zwanzig;
- – einer
verfügt über 50%
vergeudeten Raum mit einem Blockabnutzungs-Zählwert von neun;
- – einer
verfügt über 45%
vergeudeten Raum mit einem Blockabnutzungs-Zählwert von drei;
- – und
der letzte verfügt über 10%
vergeudeten Raum. Einer der Blöcke
wird gerade gelöscht
und der letzte Block wurde gelöscht.
-
Gemäß den Kriterien in der Unterroutine copy_from 508 ist
der Kandidat, für
den Kopien zu erstellen sind, derjenige mit einem vergeudeten Raum von
90%. Jedoch weist dieser Block den höchsten Blockabnutzungs-Zählwert auf.
Es besteht die Wahlmöglichkeit,
zwischen dem Blockabnutzungs-Zählwert
und dem Vergeudungsprozentsatz einen Kompromiss zu schließen. Zum
Beispiel ergibt sich eine bessere Nutzung von Speicherressourcen
und eine verlängerte
Zeit bis zum nächsten
Blockkopiervorgang, je höher
der Vergeudungsprozentsatz ist, und zwar aufgrund des größten freigesetzten
Raums. Wenn der Block mit dem größten vergeudeten
Raum nicht gewählt
wird, ist die Folge diejenige, dass der nächste Kopiervorgang früher auftritt
und demgemäß ein Blockkopiererfordernis
früher
auftritt und es damit zu früherer
Abnutzung kommt. Es ist zu beachten, dass der Begriff "vergeudeter Raum" Speicherstellen betrifft,
die Parameterwerte speichern, die so aktualisiert wurden, dass sich
der aktualisierte Wert an einer anderen Speicherstelle befindet.
Da jeder Flashblock 100.000 Mal gelöscht und umgeschrieben werden kann,
ist der Blockabnutzungs-Zählwert
ein geringer Faktor bei der Entscheidung dahingehend, aus welchem
Block kopiert werden sollte. Demgemäß ignoriert die Unterroutine
copy_from 508 bei der speziellen Ausführungsform den Blockabnutzungs-Zählwert,
und sie nutzt das einfache Kriterium, dass der zu kopierende Block
derjenige mit dem größten vergeudeten
Raum ist. D. h., dass es der Fachmann nicht wünscht, einen Kompromiss zwischen
dem Blockabnutzungs-Zählwert und
dem Prozentsatz an vergeudetem Raum zu verwenden, um die Nut zung
eines Flashspeichers innerhalb einer speziellen Umgebung zu optimieren.
-
Wenn die Vorgehensweise copy_to 510 aufgerufen
wird, existiert typischerweise mehr als ein Kandidatenspeicherblock,
in den zu kopieren ist. Wenn z. B. acht 8 K-Byte-Blöcke vorliegen,
von denen vier voll sind, von denen einer Daten enthält, die bereits
in einen anderen Block kopiert wurden und einer gerade gelöscht ist
und zwei gelöscht
wurden, stehen nur zwei Blöcke
zur unmittelbaren Nutzung zur Verfügung. D. h., die zwei Speicherblöcke, die
bereits gelöscht
wurden. Jeder dieser zwei Blöcke
weist einen Blockabnutzungs-Zählwert
auf. Das Kriterium für
die Unterroutine copy_to 510 ist dasjenige, dass der erste
Block, in den kopiert wird, der Block mit dem niedrigsten Blockabnutzungs-Zählwert ist.
-
Bei bestimmten Anwendungstypen ist
es möglich,
dass einige Flashspeicherblöcke
nie oder selten gelöscht
werden. Zum Beispiel kann eine Anwendung zwei lange Datensätze in einen
Speicherblock einspeichern und sie nie entfernen oder umschreiben.
In einer derartigen Situation würde
dieser spezielle Block nie abgenutzt werden, wohingegen die anderen
Blöcke
im Flashspeicher abgenutzt würden.
Die Unterroutine copy_for_wear_levelling_only 512 ist so
beschaffen, dass sie alle Hauptdiskrepanzen zwischen den Abnutzungswerten
von Blöcken
innerhalb des Flashspeichers erkennt und einen Blockkopiervorgang
von einem relativ unabgenutzten Block in den am meisten abgenutzten
Block und umgekehrt erzwingt. Auf diese Weise wird ein wenig abgenutzter
Block stark benutzt, und die Abnutzung des stark abgenutzten Blocks
wird wesentlich verringert. Der erzwungene Kopiervorgang tritt dann
auf, wenn die Differenz zwischen dem Abnutzungsgrad im am wenigsten
genutzten Block und dem Abnutzungsgrad im am stärksten genutzten Block einen
vorbestimmten Wert überschreitet.
Dieser Wert hängt
von den den Flashspeicher nutzenden Anwendungen ab, liegt jedoch
typischerweise im Bereich von 1–40%. Modifizierungen
an diesem Bereich können
abhängig von
der Schreib/Lösch-Häufigkeit
für den
Flashspeicher in solcher Weise erfolgen, dass eine hohe Schreib/Lösch-Nutzung
dafür sorgt,
dass der erzwungene Kopiervorgang häufiger auftritt. Außerdem tritt
der erzwungene Kopiervorgang häufiger
auf, wenn der Blockabnutzungs-Zählwert
für Blöcke zunimmt.
Der erzwungene Kopiervorgang kann einstellbar sein, um die vorstehenden
Kriterien zu berücksichtigen,
sogar auf Blockbasis.
-
Aus der vorstehenden Beschreibung
ist es für
den Fachmann erkennbar, dass innerhalb des Schutzumfangs der Erfindung
verschiedene Modifizierungen vorgenommen werden können, und
z. B. können,
wie bereits angegeben, mehr als zwei Prioritätsniveaus für Parameter vorhanden sein,
und die Kriterien zum Ermitteln, ob der RAM-Cache 212 in den
Flashspeicher 100 zu sichern ist, können so beschaffen werden,
dass sie zum elektronischen Gerät passen,
in dem sich der Mikrocontroller 200 und der Flashspeicher 100 befinden.
Zum Beispiel kann im FMM 300 ein weiterer Zustand vorhanden
sein, der das Auslösen
des Abschaltens eines tragbaren elektronischen Geräts erfasst
und vor dem Abschalten der Spannung den RAM-Cache 212 in
den aktuell aktiven Flashspeicher-Parameterblock sichert. Zusätzlich können die
in Zusammenhang mit dem Flussdiagramm der 5 beschriebenen Kriterien so angepasst
werden, dass sie die Anpassung der Abnutzung im Flashspeicher optimieren.
Ferner ist es für den
Fachmann ersichtlich, dass dann, wenn Parameterdaten von einem Block
in einen anderen Block abgespeichert werden, im anderen Block spätere Aktualisierungen
dieser Daten erfolgen.