Ich arbeite mit einem Atmega328P-Mikrocontroller. Dieser Mikrocontroller generiert Daten und speichert diese Daten auf einer SD-Karte. Mein Projekt wird auch batteriebetrieben sein. Meine Recherchen haben ergeben, dass das Schreiben auf eine SD-Karte relativ teuer ist. Vor allem aufgrund der Tatsache, dass ich einen 225-mAH-Akku mit einem 120-mA-Leistungsregler verwende.
Ich habe gelesen, dass eine gängige Methode zum Energiesparen darin besteht, Schreibbefehle in einem einzigen Schreibvorgang zu puffern. Dies scheint relativ einfach.
Allerdings stoße ich jetzt auf das Problem, dass der Atmega328p nur 2kB RAM hat. Daher habe ich wirklich begrenzten Pufferspeicher.
Meine Frage also: Wäre es eine praktikable Technik, einen dedizierten Flash-Speicher / RAM-IC zu kaufen, um den Pufferspeicher zu vergrößern? Ich bin neugierig auf die Praktikabilität und wie schwierig es wäre, dies umzusetzen.
Irgendwelche Gedanken? Ich weiß, dass die offensichtliche Antwort darin besteht, einen Mikrocontroller mit mehr RAM zu kaufen, aber ich versuche, bei diesem Mikrocontroller zu bleiben, damit das Projekt mit der Arduino-Sprache kompatibel ist.
Ich habe ein solches System implementiert. Wir haben nichtflüchtiges FRAM als Puffer verwendet, aber SRAM würde auch funktionieren, abhängig von Ihren Anforderungen an das Überleben von Stromverlusten.
Ich habe Daten in den FRAM gepuffert, bis er fast voll war. Ich habe es dann auf die SD-Karte geschrieben. Um das System zuverlässiger zu machen, habe ich die Prüfsumme von Blöcken im FRAM verwendet. Ich habe auch alle Dateisystem-Metadaten von der SD-Karte in FRAM geschrieben. Wenn Updates erforderlich waren, wurde zuerst der FRAM aktualisiert und dann auf die SD-Karte kopiert, wodurch Updates atomar wurden (dh zu keinem Zeitpunkt des Prozesses war es möglich, Daten zu verlieren oder das Dateisystem in einem beschädigten Zustand zu belassen). Ich habe dafür einen modifizierten FAT32-Treiber verwendet, der leider proprietärer Code ist, sonst würde ich ihn teilen.
Ich fand das eine sehr effiziente Methode. Obwohl beim dreimaligen Schreiben von Daten einige Zeit verloren geht (einmal in den FRAM-Datenpuffer, dann in den FRAM-SD-Kartenblockpuffer und dann auf die SD-Karte), wurde dies tatsächlich weitgehend kompensiert, indem die Daten per DMA ausgegeben und andere ausgeführt werden konnten Verarbeitung in der Zwischenzeit.
Mit normalem flüchtigem RAM können Sie es offensichtlich nicht verwenden, um Schreibvorgänge atomar zu machen. Die Pufferung ist jedoch immer noch wertvoll. In meinen Tests schreiben SD-Karten deutlich schneller, wenn Sie Blöcke von >4kB auf einmal speichern können, idealerweise 64kB oder mehr. Dies liegt wahrscheinlich an der Art und Weise, wie ihr interner Flash-Speicher verwaltet wird.
Chris Stratton
Izzo
Chris Stratton
pjc50
Markieren
Peter Schmidt