2014-09-14 18 views
5

Pracuję nad projektem z Arduino i chciałbym móc zachować pewne dane w sposób ciągły. Używam już ekranu Ethernet, który ma czytnik MicroSD.Odczyt/zapis danych binarnych na SD przy użyciu Arduino

Dane, które zapisuję, będą niewiarygodnie małe. W tej chwili będę tylko zapisywać 3 bajty na raz. To, co naprawdę chciałbym, to sposób na otworzenie karty SD do pisania począwszy od bajtu x, a następnie zapisanie y bajtów danych. Kiedy chcę go przeczytać, po prostu czytam bajty zaczynające się od bajtu x.

Jednak cały kod, jaki widziałem, dotyczy pracy z systemem plików, co wydaje się niepotrzebnym obciążeniem. Nie potrzebuję tych danych do odczytu w żadnym innym systemie, przestrzeń dyskowa nie jest problemem i nie martw się o żadne inne dane na karcie. Czy istnieje sposób, aby po prostu zapisać dane binarne bezpośrednio na karcie SD?

+0

Zamówienie http://www.roland-riegel.de/sd-reader/ na procedury odczytu/zapisu surowych kart SD. Sekcja FAQ mówi, że można go użyć do Arduino z pewnymi zmianami. – kums

Odpowiedz

5

Możliwe jest zapisywanie nieprzetworzonych danych binarnych na karcie SD. Większość ludzi robi to za pomocą 4-pinowego interfejsu SPI obsługiwanego przez kartę SD. Niestety, dane nie są adresowane bajtowo, ale blokowane (wielkość bloku zwykle wynosi 512 bajtów).

Oznacza to, że jeśli chcesz zapisać 4 bajty przy bajcie 516, musisz przeczytać w bloku 0x00000001 (drugi blok), a następnie obliczyć przesunięcie, zapisać dane, a następnie napisać cały blok z powrotem. (Nie mogę powiedzieć, że to ograniczenie dotyczy interfejsu SD przy użyciu większej liczby pinów, nie mam z tym żadnego doświadczenia).

Powoduje to, że wiele osób decyduje się na korzystanie z bibliotek zawierających "niepotrzebne koszty ogólne".

Powiedziawszy to, musiałem to zrobić w przeszłości, ponieważ potrzebowałem sposobu rejestrowania danych, które były odporne na awarie zasilania. Znalazłem następujący zasób bardzo pomocne:

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

Pewnie łatwiej uczynić swój mniejszy zapisuje do bufora pamięci i zrzucić je na kartę SD, gdy masz wystarczająco dużej ilości danych aby było warto.

Jeśli się rozejrzysz, znajdziesz mnóstwo kodu open source do obsługi interfejsu SD SPI, aby użyć go bezpośrednio lub jako odniesienia do implementacji własnego systemu.

+0

Witam, czy możesz mi powiedzieć, jak znaleźć całkowitą liczbę bloków dostępnych na karcie SD? – Sagar

+0

Możesz uzyskać tę wartość z rejestru CSD. – user373884

Powiązane problemy