2014-09-14 12 views
5

Sto lavorando su un progetto con un Arduino e mi piacerebbe poter salvare alcuni dati in modo persistente. Sto già usando uno scudo Ethernet, che ha un lettore MicroSD.Lettura/scrittura di dati binari su SD utilizzando Arduino

I dati che sto salvando saranno incredibilmente piccoli. Al momento, salverò solo 3 byte alla volta. Quello che mi piacerebbe davvero è un modo per aprire la scheda SD per scrivere a partire dal byte x e quindi scrivere y byte di dati. Quando voglio leggerlo di nuovo, ho appena letto y byte a partire dal byte x.

Tuttavia, tutto il codice che ho visto riguarda il funzionamento di un filesystem, che sembra un overhead non necessario. Non ho bisogno che questi dati siano leggibili su qualsiasi altro sistema, lo spazio di archiviazione non è un problema e non ci sono altri dati sulla scheda di cui preoccuparsi. C'è un modo per scrivere semplicemente dati binari direttamente su una scheda SD?

+0

Acquista http://www.roland-riegel.de/sd-reader/ per le routine di lettura/scrittura raw della scheda SD. La sezione FAQ dice che è possibile usarlo per Arduino con alcune modifiche. – kums

risposta

5

È possibile scrivere dati binari non elaborati su una scheda SD. La maggior parte delle persone lo fa usando l'interfaccia SPI a 4 pin supportata dalla scheda SD. Sfortunatamente, i dati non sono indirizzati a byte, ma indirizzati a blocchi (dimensione del blocco di solito 512 byte).

Ciò significa che se si desidera scrivere 4 byte al byte 516, si dovrà leggere nel blocco 0x00000001 (il secondo blocco), quindi calcolare un offset, scrivere i dati, quindi scrivere l'intero blocco indietro. (Non posso dire che questa limitazione si applica all'interfaccia SD utilizzando più pin, non ho esperienza con esso)

Questa complicazione è il motivo per cui molte persone scelgono di utilizzare librerie che includono "overhead non necessari".

Detto questo, ho dovuto farlo in passato, perché avevo bisogno di un modo per registrare i dati che erano robusti di fronte a interruzioni di corrente. Ho trovato la seguente risorsa molto utile:

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

Probabilmente troverete più facile per rendere il vostro piccolo scrive a un buffer di memoria, e metterli sulla scheda SD quando si dispone di una grande quantità sufficiente dei dati per renderlo utile.

Se ti guardi intorno, troverai un sacco di codice open source che si occupa dell'interfaccia SD SPI da utilizzare direttamente o come riferimento per implementare il tuo sistema.

+0

Ciao, puoi dirmi come trovare il numero totale di blocchi disponibili sulla scheda SD? – Sagar

+0

È possibile ottenere tale valore dal registro CSD. – user373884