Tworzę system rejestrujący dane, który rejestruje dane na karcie SD z dużą prędkością około 20000-30000 bajtów na sekundę. Ale biblioteka SD w arduino obecnie zapisuje dane z szybkością około 4500-5000 bajtów na sekundę, co jest zbyt wolne.
Czytałem ten siekać, aby poprawić prędkość zapisu , ale zastanawiam się, czy bardziej bezpośrednie podejście jest możliwe, być może poprzez regulację SPISettings .
sd-card
spi
datalogging
baud-rate
Ashish Ranjan
źródło
źródło
Odpowiedzi:
DOBRZE. Wypróbowałem lib SDFat. Ta biblioteka jest zdecydowanie lepsza niż domyślna biblioteka SD dostarczana z adruino. Ale nie tak rozwiązałem mój problem niskiej prędkości transmisji danych.
Postępowałem zgodnie z instrukcjami autora biblioteki SDFat z tego postu .
Według fat16lib , aby zwiększyć szybkość transmisji danych, musimy mądrze używać flush (). Chcielibyśmy zapisywać () dane w każdym cyklu, ale musimy tylko opróżniać () raz na około 100 cykli, w zależności od ilości danych zapisywanych w każdym cyklu. Pamiętaj też, aby zachować flagę w SD.open () jako „O_WRITE | O_CREAT ”zamiast„ FILE_WRITE ”.
To z pewnością zwiększyło prędkość o wielki czynnik. Ale potrzebowałem więcej!
Przechowywanie danych w formacie binarnym ( sprawdź tego bloga ) jeszcze bardziej poprawiło wydajność.
Moja obecna prędkość wynosi około 100-120 KBps (to kilogram bajtów) z kartą SD klasy 4!
Na koniec chcę wam podziękować za pomoc.
źródło
Wiele czynników decyduje o tym, czy osiągniesz pożądaną prędkość. Tylko niektóre z nich.
1. Twoje oprogramowanie
SdFat Biblioteka jest szybsze niż standardowe biblioteki SD Arduino IDE. Posiada również łatwą w użyciu funkcję zgodności ze standardową biblioteką SD. Wypróbuj to.
2. Twój sprzęt
Powinieneś używać wysokiej jakości karty SD. Jak zapewne wiesz, karty SD są podzielone na klasy wydajności. Większość ludzi w Internecie zaleca kartę SD SanDisk.
źródło
Unikaj uzgadniania bufora!
Użyj SD.write (buf, rozmiar);
Cześć wszystkim, pracuję nad projektem z tym samym problemem. Podążałem tymi samymi krokami i dostałem dokładnie te same liczby. Właśnie to naprawiłem. Problemem jest uścisk dłoni podczas połączenia
SD.write()
.Zamiast:
Robić:
W moim projekcie pierwszy otrzymałem 4100 bajtów, a drugi przy użyciu bufora z 128 (buf [128]) mam 145408 bajtów w moim projekcie. Wystarczająco dobry.
źródło