Guten Morgen,
habt ihr eine Idee, wie ich ca. 4 MB an Daten kontinuierlich in einem
Ringspeicher speichern kann (angesteuert mit einem PIC) ?
Flash-Speicher oder EEPROM geht dafür so wie ich es verstehe nicht, weil
die Schreibzyklen nach einiger Zeit wohl doch recht schnell ausgreizt
sind...
Vielen Dank!! :]
> kontinuierlich in einem Ringspeicher speichern kann
Wenn's nur um speichern gesht, kannste auch ein WOM verwenden.
http://de.wikipedia.org/wiki/Write-Only-Memory
Sonst müsste man mehr über deine Aufgabe wissen, z.B. wielange die Daten
gespeichert bleiben sollen und ob sie auch ohne Spannung erhalten
bleiben müssen.
Zugriffszeiten und sonstige Nebenbedingungen (Spannung etc.) fehlen
ebenso in der Aufgabebeschreibung.
WOM is sauwitzig :)
Jedenfalls sorry: Ich hab natürlich vergessen zu sagen, dass ich die
Daten evtl. auch wieder irgendwann auslesen will.
Wenn die Versorgungsspannung wegfällt, müssen die Daten nicht erhalten
bleiben.
Das Auslesen soll immer dann passieren, wenn in dem System ein Fehler
aufgetreten ist. Dann wäre es von Interesse, die Daten, die vor dem
Fehler angefallen sind, in einem non-volatile Speicher abzulegen (ich
hab dabei an eine SD-Karte gedacht, die könnte man ja über SPI
ansprechen)
Zugriffszeiten spielen glaube ich eher keine Rolle. Die Daten kommen als
Stream von einem Sensor und sollen mit ca 24 kB/s in den Ringspeicher
geschrieben werden. Beim Auslesen hat man alle Zeit der Welt.
Gibt es größere FRAM Module ? Ich hab hier eins mit 256 kB gefunden. Hm.
Das würde zur Not auch reichen. Aber ganz schön teuer :)
http://www.mercateo.com/p/108A-716%282d%295797P/F_RAM_Processor_Companion_256Kb_3V_SO14_Herst_Teile_Nr_FM32L278_G.html?showSimplePage=NO&utm_source=product-search&utm_medium=web&utm_campaign=FRAM#ramtron-f-ram-processor-companion-256kb-3v-so14-herst-teile-nr
>Wenn die Versorgungsspannung wegfällt, müssen die Daten nicht erhalten>bleiben.>...>Zugriffszeiten spielen glaube ich eher keine Rolle. Die Daten kommen als>Stream von einem Sensor und sollen mit ca 24 kB/s in den Ringspeicher>geschrieben werden. Beim Auslesen hat man alle Zeit der Welt.>...>achja, nach der Spannung war auch gefragt:>Die Versorgungsspannung kann irgendwas zwischen 0 und 24 V sein
Wie wäre ein stink-normales SRAM?
rene p schrieb:> Flash-Speicher oder EEPROM geht dafür so wie ich es verstehe nicht, weil> die Schreibzyklen nach einiger Zeit wohl doch recht schnell ausgreizt> sind...
Wenn du eine 16GB SD-Karte nimmst, passt bei deiner Datenrate etwa eine
Woche rein. Bei 1000 Schreibzyklen sind das ca. 20 Jahre.
MfG Klaus
rene p schrieb:> Flash-Speicher oder EEPROM geht dafür so wie ich es verstehe nicht, weil> die Schreibzyklen nach einiger Zeit wohl doch recht schnell ausgreizt> sind...
Kann man ja ausrechnen:
100.000 Schreibzyklen * 4MB / 24kB/s = 200d
Reicht das?
Der S25FL032K0XMFI011 kostet bei Farnell 1,67€.
Peter
Bei den Lebensdauerrechnungen muß ich immer an die arme Speicherzelle
denken die die aktuelle Speicherposition im Ring enthält, die wird am
meisten gefordert.
hp-freund schrieb:> Bei den Lebensdauerrechnungen muß ich immer an die arme Speicherzelle> denken die die aktuelle Speicherposition im Ring enthält, die wird am> meisten gefordert.
Man kann auch eine komplett gelöschte Page vor sich herschieben (löschen
muß man sie sowieso). Die aktuelle Speicherposition liegt dann vor dem
gelöschten Block. Man verliert dann einen Block und gewinnt
Schreibzyklen.
MfG Klaus
@Klaus: lustige Idee eine SD-Karte als Ringspeicher zu verwenden. :]
hp-freund schrieb:> Bei den Lebensdauerrechnungen muß ich immer an die arme Speicherzelle> denken die die aktuelle Speicherposition im Ring enthält, die wird am> meisten gefordert.
Das könnte man wiederum auch über ein winziges FRAM lösen :)
Klaus schrieb:> Man kann auch eine komplett gelöschte Page vor sich herschieben (löschen> muß man sie sowieso). Die aktuelle Speicherposition liegt dann vor dem> gelöschten Block. Man verliert dann einen Block und gewinnt> Schreibzyklen.
Das hört sich interessant an, aber ich verstehe es nicht so ganz - wie
genau soll das gehen?
rene p schrieb:> Das hört sich interessant an, aber ich verstehe es nicht so ganz - wie> genau soll das gehen?
Ganz einfach: Die erste Seite, die komplett mit 0xFF gefüllt ist, ist
die nächste zu beschreibende.
d.H. einmal beim Programmstart diese Seite suchen.
Dann, jedes mal wenn wieder 512 Bytes angefallen sind:
Seite n+1 löschen, Seite n beschreiben.
Nachteil: Deine Nutzdaten dürfen nie aus 512 × 0xFF bestehen, das ergibt
sich aber üblichweise automatisch, z.B. durch timestamps.
0xFF bedeutet wohl gelöscht? :)
gut :]
Echt ne interessante Idee :)
Wie sicher sind eigentlich Daten auf einer SD-Karte, wenn man nicht
löscht und nicht schreibt? Also ich meine, wann gehen sie "kaputt"? Kann
man dazu eine Aussage treffen?
Also wenn du noch eine RTC mit ein paar SRAM Zellen auf der CPU hast,
dann nutze die als Zeiger zum nächsten freien Block. Als Speicher die SD
Karte und nicht FAT sondern einfach linear adressieren - hab ich schon
gemacht. Ist sehr schnell ohne Overhead und dazu kann sie nicht so
einfach von "Jedem" ausgelesen werden :-)
ciao,
Philipp
1. Möglichkeit
- Pointer auf die SD Adresse bleibt im Register
- Register wird zur SD gesichert bei Netzausfall oder
Batt low per ISR ähnlich wie früher der NMI
2. Möglichkeit
- Blockweise löschen
- Blockgröße 1MB
- Start des Schreibens der Daten
- Beginn des gelöschten Bereiches ist der Pointer zur nächsten
Schreibposition
- X-Beliebige SD Zelle zeigt zum aktuellen Block und wird nur alle 1MB
geschrieben, das sollte eine Weile reichen
3. Möglichkeit
- RTC mit gepuffertem RAM und Batterie hält die Pointeradresse
- Auswurfknopf für SD Karte zum gezielten Auslagern des Pointers auf SD
Wer kann sich das vorstellen?
tataa schrieb:>> Wie wäre ein stink-normales SRAM?>> 4 MB kosten aber etwas ...
Pseudo-SRAM wie z.B. IS66WVE4M16BLL (4MBx16), hab es bisher allerdings
noch bei keinem der einschlägigen Distris gefunden...
Preis für 4MBx16: 2,68€
> Warum brauche ich eine RTC :) Das hab ich nicht ganz kapiert.
Das macht u.U. schon Sinn: die meisten RTC haben ein gepuffertes RAM,
das nimmst Du für den Pointer. Wenn der Strom des µC ausfällt, wird der
Pointer beibehalten, weil die RTC mit <1 µA weiterläuft.