Ist es eine praktische Technik, einen dedizierten Flash-/RAM-IC hinzuzufügen, um den Speicher eines Mikrocontrollers zu erhöhen und das Schreiben auf eine SD-Karte zu vermeiden?

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.

Das Staging über einen externen Speicher lohnt sich wahrscheinlich nicht, aber schauen Sie sich einen besseren Prozessor mit mehr RAM an. Die „Arduino-Sprache“ ist nicht an die AVR-Architektur gebunden, dennoch sollte man früher oder später seinen Horizont erweitern. Wenn Sie nur Megabyte und keine Gigabyte benötigen, sollten Sie auch einen SPI-Flash in Betracht ziehen.
@ChrisStratton In Bezug auf diesen letzten Kommentar von SPI-Flash war mir nicht bewusst, dass so etwas existiert. Und ich interessiere mich nur für Speicher im Megabyte-Bereich. Dies scheint etwas zu sein, das möglicherweise wertvoll sein könnte. Würden Sie in Ihrem ersten Kommentar trotzdem davon abraten? Und aus welchem ​​Grund, einfach weil es einfacher wäre, einfach zu einem anderen Mikrocontroller zu wechseln?
Sie finden erschwingliche MCUs mit bis zu einem Megabyte internem Flash, den sie normalerweise neu schreiben können. Es ist einfach, mit SPI-Flashs zu arbeiten, die bis zu mindestens 4 Megabyte (32 Megabit) leicht zu bekommen sind, und 8-Megabyte-Versionen existieren. Darüber hinaus werden Sie in Richtung paralleles NAND gedrängt, was eher mühsam ist, und SD-Karten, die als Konsumgüter weniger vorhersehbar sind (um es milde auszudrücken) als bloße ICs. Mein Kommentar war dagegen, etwas über einen externen Speicher zu inszenieren, bevor es in einen anderen geschrieben wird - versuchen Sie, genügend integrierten RAM zu finden, um Teilblöcke intern zu speichern.
SPI SRAM ist auch eine Sache. SD-Karten sind eine Art Müll, besonders wenn Sie während eines Schreibvorgangs Strom verlieren. Wenn Sie einfach alles auf einem seriellen Flash-Chip protokollieren, ist dies möglicherweise am bequemsten.
Das Hinzufügen eines weiteren Chips und das anschließende Schreiben darauf, nur um es erneut zu lesen, um einige Schreibvorgänge auf Ihrer SD-Karte zu speichern, scheint nicht der beste Weg zu sein, um Batteriestrom zu sparen. Neben dem hinzugefügten IC verbrauchen auch CPU-Zyklen Strom.
Das Schreiben in einen SPI-Speicher hat sowieso Overhead-Strom; Ich verwende Geräte, bei denen der Schlafstrom winzig ist: everspin.com/supportdocs/MR25H40VDF

Antworten (1)

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.