2014-09-14 6 views
5

Ich arbeite an einem Projekt mit einem Arduino, und ich möchte in der Lage sein, einige Daten dauerhaft zu speichern. Ich benutze bereits eine Ethernet-Abschirmung, die einen MicroSD-Leser hat.Lesen/Schreiben von Binärdaten auf SD mit Arduino

Die Daten, die ich spare, sind unglaublich klein. Im Moment werde ich nur 3 Bytes gleichzeitig speichern. Was ich wirklich gerne hätte, ist eine Möglichkeit, die SD-Karte zum Schreiben zu öffnen, beginnend mit dem Byte x, und dann y Bytes Daten schreiben. Wenn ich es zurücklesen möchte, lese ich einfach y Bytes ab Byte x.

Allerdings beinhaltet der gesamte Code, den ich gesehen habe, die Arbeit mit einem Dateisystem, das wie ein unnötiger Overhead erscheint. Ich brauche diese Daten nicht, um auf anderen Systemen lesbar zu sein, Speicherplatz ist kein Problem und es gibt keine weiteren Daten auf der Karte, um die ich mich kümmern muss. Gibt es eine Möglichkeit, Binärdaten direkt auf eine SD-Karte zu schreiben?

+0

Checkout http://www.roland-riegel.de/sd-reader/ für rohe Lese-/Schreibroutinen der SD-Karte. FAQ sagt, es ist möglich, es für Arduino mit einigen Änderungen zu verwenden. – kums

Antwort

5

Es ist möglich, rohe Binärdaten auf eine SD-Karte zu schreiben. Die meisten Benutzer verwenden dazu die 4-Pin-SPI-Schnittstelle, die von der SD-Karte unterstützt wird. Leider sind Daten nicht byteadressiert, sondern blockadressiert (Blockgröße üblicherweise 512 Byte).

Dies bedeutet, wenn Sie 4 Byte bei Byte 516 schreiben möchten, müssen Sie in Block 0x00000001 (der zweite Block) lesen, und dann berechnen Sie einen Offset, schreiben Sie Ihre Daten und schreiben Sie den gesamten Block zurück. (Ich kann nicht sagen, dass diese Einschränkung für die SD-Schnittstelle mit mehr Pins gilt, habe ich keine Erfahrung damit)

Diese Komplikation ist, warum viele Menschen für die Verwendung von Bibliotheken, die "unnötigen Overhead" enthalten entscheiden.

Mit dem gesagt, ich musste dies in der Vergangenheit tun, weil ich eine Art der Protokollierung von Daten, die angesichts von Stromausfällen robust war. Ich fand die folgende Ressource sehr hilfreich:

http://elm-chan.org/docs/mmc/mmc_e.html

Sie werden wahrscheinlich finden es einfacher, Ihre kleineren schreibt in einen Speicherpuffer zu machen und sie auf die SD-Karte Dump, wenn Sie eine ausreichend große Menge an Daten um es lohnend zu machen.

Wenn Sie sich umsehen, finden Sie reichlich Open-Source-Code, der sich mit der SD-SPI-Schnittstelle befasst, die Sie direkt nutzen können, oder als Referenz, um Ihr eigenes System zu implementieren.

+0

Hallo können Sie mir sagen, wie man die Gesamtzahl der Blöcke auf SD-Karte finden? – Sagar

+0

Sie können diesen Wert aus dem CSD-Register abrufen. – user373884