-
Gebiet
-
Die Erfindung betrifft ein Verfahren zum Betrieb eines nicht-flüchtigen Speichers, insbesondere eines EEPROM, und eine Speichervorrichtung ausgebildet zur Ausführung des Verfahrens.
-
Hintergrund
-
Um die möglichen Schreibzyklen auf einem Speicherbaustein, insbesondere einem EEPROM (englisch: „electrically erasable programmable read-only memory), zu erhöhen, z.B. um Kundenbedarfsforderungen gerecht zu werden, wird der Speicherbereich üblicherweise in mehrere Sektoren aufgeteilt (Wear-Levelling), wobei jeder Sektor dann wieder die maximal mögliche Anzahl an Schreibzyklen aufweist. Diese Sektoren werden abwechselnd beschrieben. Um nach einem Unterbrechungsereignis die zuletzt beschriebenen Sektoren des Speichers erkennen zu können, ist es üblich, in jedem der Sektoren eigens dafür vorgesehene Zähler zu verwenden. Diese Zähler haben den Nachteil, dass sie relativ viel Speicherplatz des jeweiligen Sektors belegen. Der EEPROM kann beispielsweise ein gewöhnlicher EEPROM oder Flash-EEPROM sein.
-
Derartige Speicherbausteine werden beispielsweise in Steuerschaltungen zum Regeln von Elektromotoren verwendet, wobei der Speicherbaustein beispielsweise zum Speichern von Betriebsdaten, wie einer aktuellen Position eines von dem Elektromotor angetrieben Stellgliedes, verwendet werden kann. Typische Steuerschaltungen für derartige Anwendungen stellen nur vergleichsweise kleine Speichergrößen zur Verfügung, wobei der Speicher zu weiten Teilen durch ein Betriebsprogramm und von diesem verwendete Betriebsparameter zum Regeln des Elektromotors verwendet wird. Ist es nun nötig, regelmäßig Betriebsparameter zu speichern, kann das aufgrund der hohen Anzahl an Schreizyklen über die Lebenszeit des Elektromotors dazu führen, dass die maximale Anzahl an Schreibzyklen des Speicherbausteins überschritten wird.
-
Die Erfindung machte es sich zur Aufgabe, den Speicherplatzbedarf zur Erkennung des zuletzt beschriebenen Sektors zu reduzieren.
-
Kurzbeschreibung der Erfindung
-
Diese Aufgabe wird durch die in den unabhängigen Ansprüchen angegebene Erfindung gelöst. Vorteilhafte Ausgestaltungen sind den Unteransprüchen zu entnehmen.
-
Erfindungsgemäß geschaffen ist ein Verfahren zum Betrieb eines nicht-flüchtigen Speichers, insbesondere eines EEPROM, das Verfahren umfassend:
- a) Aufteilen eines Speicherbereiches in mehrere Sektoren, wobei die Sektoren als Ringspeicher angeordnet sind;
- b) Reservieren jeweils eines Sektorbits in jedem der Sektoren;
- c) Initialisieren der Sektorbits;
- d) Negieren des Sektorbits eines Sektors in Folge eines Beschreibens dieses Sektors;
- e) Detektieren einer Bitflanke zwischen den Sektorbits benachbarter Sektoren; und
- f) Bestimmen, anhand der detektierten Bitflanke, des zuletzt beschriebenen Sektors.
-
Durch Schritt a) wird die Anzahl der maximal möglichen Schreibzyklen in dem Speicher erhöht. Durch das Aufteilen des Speicherbereiches erfolgt ein Aufteilen der Schreibzugriffe auf unterschiedliche Speicherbereiche (Wear-Levelling), was die Gesamtlebensdauer des Speichers erhöht. Die Sektoren sind als Ringspeicher angeordnet, d.h. sie werden zyklisch gemäß einer vorgegebenen Reihenfolge beschrieben und überschrieben. In Schritt b) wird in jedem Sektor ein Sektorbit gesetzt. In Schritt c) werden die Sektorbits initialisiert, d.h. alle Sektorbits werden auf denselben Wert voreingestellt. Wird ein Sektor beschrieben, z.B. mit aktuellen Daten, die die Position eines Aktuators repräsentieren, wird (Schritt d) das jeweilige Sektorbit nach dem Beschreiben negiert, wobei das Negieren das Setzen des Bits von 0 auf 1 oder von 1 auf 0 umfasst. Das Negieren erfolgt nach jedem Schreibzyklus auf einem Sektor. Um zu bestimmen, welcher Sektor als letztes beschrieben wurde, also welcher Sektor z.B. nach einem Neustart benötigte aktuelle Daten (z.B. die Position des Aktuators) enthält, werden die Sektorbits benachbarter Sektoren miteinander verglichen (Schritt e). Der Vergleich ergibt dann entweder einen Unterschied im Bitwert oder nicht. Der Unterschied im Bitwert des Sektorbits zweiter benachbarter Sektoren wird als Bitflanke bezeichnet. Anhand der Bitflanke kann nun (im Schritt f) erkannt werden, welcher Sektor zuletzt beschrieben wurde und die aktuellen Daten enthält. Die Bestimmung des zuletzt beschriebenen Sektors aus der Bitflanke ist möglich, weil immer derjenige Sektor, der einem Wechsel der Bitflanke vorausgeht die aktuellen Daten beinhalten muss. Die Erfindung beruht auf der Erkenntnis, dass durch das Vorsehen eines einzelnen Bits pro Sektor eine Erkennung der Bitflanke möglich wird, die wiederum zur Bestimmung des zuletzt beschriebenen Sektors dienen kann. Somit ist ein vereinfachtes, speicherplatzsparendes Verfahren zur Erkennung des zuletzt beschriebenen Sektors geschaffen.
-
Insbesondere umfasst das Verfahren, wenn keine Bitflanke detektiert wird, das Bestimmen des Sektors mit einem maximalen alphanumerischen Ordnungselement oder einem maximalen numerischen Ordnungselement. Wenn keine Bitflanke detektiert werden kann, wenn also alle Sektorbits denselben Wert haben (Nulldetektion), wird der letzte Sektor bestimmt. Die Menge der Sektoren wird beim Aufteilen mit einer Ordnungsrelation versehen. Die Ordnungsrelation kann die alphanumerische Ordnungsrelation sein. Die Sektoren werden gemäß der Ordnungsrelation beschrieben, also z.B. nach ihrer Nummerierung aufsteigend. Ein gemäß der Ordnungsrelation maximales Element identifiziert den letzten Sektor. Ist der Wert des Sektorbits des letzten Sektors gleich der Vorgängersektoren, so folgt daraus unmittelbar, dass in dem letzten Schreibzyklus alle Sektoren beschrieben wurden und der letzte Sektor die aktuellen Daten enthalten muss.
-
In einer Ausgestaltung des Verfahrens erfolgt das Initialisieren durch Überschreiben der Sektoren und die Sektorbits werden dadurch auf 0 gesetzt. Dadurch werden Fehldetektionen durch ungewollte Bitflanken (Restflanken) vermieden.
-
In einer Ausgestaltung des Verfahrens erfolgt das Beschreiben der Sektoren sequentiell, insbesondere nach der alphanumerischen Sektorreihenfolge, wobei die Sektorreihenfolge beim Aufteilen des Speicherbereiches festgelegt wird. Die Ordnungsrelation dient nicht nur zum Bestimmen des letzten Sektors (s.o.) sondern auch zum Festlegen einer Reihenfolge, also eines Schreibzyklus. Die Sektoren werden gemäß der Ordnungsrelation beschrieben, also z.B. nach ihrer Nummerierung aufsteigend. Durch sequentielles Beschreiben bildet sich die Bitflanke aus, die nachher die eindeutige Bestimmung des Sektors der die aktuellen Daten enthält erlaubt.
-
In einer Ausgestaltung des Verfahrens erfolgt das Detektieren nach einem Unterbrechungsereignis, insbesondere nach einem Systemneustart, wobei die Bitflanke den zuletzt beschriebenen Sektor indiziert. Der Sektor der die gewünschten Informationen enthält ist immer der Vorgängersektor des Sektors in dem die Flankendetektion erkannt wird. Die aktuellen Daten sind immer in dem Sektor gespeichert, der zuletzt negiert wurde.
-
In einer Ausgestaltung des Verfahrens erfolgt die Flankendetektion durch einen „Ungleich-Befehl“. Ein „Ungleich-Befehl“ ist ein einfacher und Code-sparender Befehl. In alternativen Ausgestaltungen des Verfahrens erfolgt die Flankendetektion durch eine „Exklusiv-Oder-Operation“, also mittels eines XOR-Operators, beziehungsweise mittels eines XOR-Gatters.
-
In einer Ausgestaltung des Verfahrens ist jedes der Sektorbits in jedem der Sektoren an der gleichen Stelle angeordnet. Durch seine Lage ist das Sektorbit eindeutig identifizierbar. Das Sektorbit ist die kleinste Einheit (insbesondere im Vergleich zu Zählern, ein extra Zähler braucht ca. 20 Bit) und spart daher Speicherplatz.
-
In einer Ausgestaltung des Verfahrens wird für jeden Sektor eine Prüfsumme (englisch „checksum“) gebildet. Durch eine Prüfsumme kann die Integrität von Daten überprüft werden. Insbesondere ist die Erkennung korrupter Sektoren möglich. Nur valide Sektoren werden analysiert und bei der Flankenerkennung berücksichtigt. Das Verfahren funktioniert also auch dann noch, wenn Sektoren beschädigt sind. Die Prüfsumme kann beispielsweise mittels einer zyklischen Redundanzprüfung (englisch: „cyclic redundancy check (CRC)“) berechnet, beziehungsweise geprüft werden. Alternativ kann auch ein anderes Verfahren zur Berechnung der Prüfsumme verwendet werden, beispielsweise ein einfaches Additionsverfahren.
-
In manchen Ausgestaltungen fließt das Sektorbit in das Berechnen der Prüfsumme mit ein. Somit kann mittels der Prüfsumme auch ein fehlerhaftes Sektorbit erkannt werden.
-
Gemäß einem weiteren Aspekt der Erfindung ist eine Speichervorrichtung geschaffen, wobei die Speichervorrichtung dazu ausgebildet und eingerichtet ist, ein erfindungsgemäßes Verfahren auszuführen.
-
Ferner betrifft die Erfindung einen Elektromotor zum Antreiben eines Stellgliedes. Vorzugsweise weist der Elektromotor eine Steuerschaltung, beispielsweise einen Mikrocontroller, auf. Die Steuerschaltung umfasst dabei eine Speichervorrichtung, die zur Ausführung eines erfindungsgemäßen Verfahrens eingerichtet ist. Besonders bevorzugt ist die Steuerschaltung zum Abspeichern einer Verstellposition des Stellgliedes in dem Speicherbereich eingerichtet ist. Somit kann eine kostengünstige Steuerschaltung in der Herstellung des Elektromotors verwendet werden und trotzdem eine große Anzahl an Schreibzyklen gewährleistet werden. In manchen Ausgestaltungen wird der Elektromotor zum Verstellen einer Klappe in einem Fahrzeug verwendet und ist beispielsweise als bürstenloser Gleichstrommotor oder Schrittmotor ausgebildet. Typischerweise umfassen die Steuerschaltungen zum Betreiben derartiger Stellmotoren einen Mikrocontroller mit einer Motortreiberschaltung, sowie einen oder mehrere Speicherbausteine. Dabei können auch unterschiedliche Speichertypen, insbesondere EEPROM (gewöhnliche EEPROM und/oder EEPROM-Flash-Speicher) und RAM-Bausteine vorhanden sein, wobei das Verfahren insbesondere zum Beschreiben nichtflüchtiger Speicher geeignet ist.
-
Beschreibung beispielhafter Ausführungsformen
-
In den nachfolgenden Beispielen werden beispielhafte Implementierungsformen und Aspekte des erfindungsgemäßen Verfahrens näher beschrieben:
-
Beispiel 1
-
Sektor |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Verfahrzyklenzähler |
100 |
101 |
102 |
99 |
99 |
99 |
99 |
99 |
Applikative Daten |
15 |
15 |
15 |
37 |
55 |
55 |
99 |
15 |
Fehlerzähler |
6 |
6 |
6 |
5 |
5 |
6 |
6 |
6 |
Sektorbit |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
Prüfsumme |
CS1 |
CS2 |
CS3 |
CS4 |
CS5 |
CS6 |
CS7 |
CS8 |
-
In Beispiel 1 ist der Speicherbereich eines Speichers in 8 Sektoren aufgeteilt. Jeder Sektor umfasst 32 Byte. Jeder Sektor umfasst einen Verfahrzyklenzähler zum Bestimmen der verbleibenden Lebensdauer, einen Bereich für applikative Daten, einen Fehlerzähler, ein Sektorbit und eine Prüfsumme. Der Bereich für die applikativen Daten dient zum Speichern aktueller Daten, z.B. einer aktuellen Aktuatorposition. Der Fehlerzähler dient zum Bestimmen einer Fehleranzahl. Bei zu hoher Fehleranzahl wird der jeweilige Sektor nicht mehr benutzt. In Beispiel 1 haben die Sektorbits der Sektoren 1-3 den Wert 1. Die Sektorbits der Sektoren 4-8 haben den Wert 0. Dadurch ist indiziert, dass das Sektorbit des Sektors 3 zuletzt negiert wurde, d.h. Sektor 3 wurde zuletzt beschrieben. Mit anderen Worten ergibt sich durch den Wertunterschied der Sektorbits zwischen den benachbarten Sektoren 3 und 4 eine Bitflanke. Die gewünschten, aktuellen Daten befindet sich immer in dem Sektor, dessen Sektorbit zuletzt negiert wurde, hier also in Sektor 3. Die Prüfsumme umfasst auch Informationen über die Sektorbits, so dass auch korrupte Sektorbits erkannt werden können. Im Beispiel sind die Prüfsummen der skizzierten acht Sektoren CS1 bis CS8 benannt.
-
Beispiel 2
-
Sektor |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Verfahrzyklenzähler |
100 |
101 |
102 |
102 |
99 |
99 |
99 |
99 |
Applikative Daten |
15 |
15 |
15 |
15 |
55 |
55 |
99 |
15 |
Fehlerzähler |
6 |
6 |
6 |
7 |
5 |
6 |
6 |
6 |
Sektorbit |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
-
In Beispiel 2 weisen die Sektorbits der Sektoren 1-4 den Wert 1 auf. Die Sektorbits der Sektoren 5-8 weisen den Wert 0 auf. Das Sektorbit von Sektor 4 ist daher zuletzt negiert worden. Die Bitflanke wird demnach zwischen Sektor 4 und Sektor 5 detektiert. Sektor 4 beinhaltet also die gewünschten Daten. Wenn z.B. der Fehlerzähler in Sektor 4 einen kritischen Wert, hier z.B. den Wert 6 überschreitet, kann der Sektor 4 als korrupt erkannt werden. Dann kann beim Bestimmen des Sektors der die aktuellen Daten enthält ausgehend von der Bitflanke (hier bei Sektor 5 bestimmt) eine Indexverschiebung erfolgen und der letzte valide Sektor (hier Sektor 3) wäre der Sektor, der die aktuellen Daten beinhaltet.
-
Beispiel 3
-
Sektor |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Verfahrzyklenzähler |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Applikative Daten |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Fehlerzähler |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Sektorbit |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-
In Beispiel 3 haben alle Sektorbits denselben Wert 0. Dies bedeutet, dass entweder ein initialer Zustand nach dem Überschreiben vorliegt, oder ein Zustand in dem alle Sektorbits von 1 auf 0 negiert worden sind. In beiden Zuständen sind die aktuellen Daten im Sektor 8 gespeichert, weil dessen Sektorbit zuletzt negiert wurde. In einem nächsten Speichervorgang wird folglich ein Schreibzugriff im Sektor 1 erfolgen.