Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Sklep ECSYSTEM
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jak obsługiwać bezpiecznie karty SD, aby się nie psuły, close?

21 Lut 2019 13:42 510 13
  • Poziom 9  
    Jak podłączyć elektrycznie kartę SD, to wiem. Jak oprogramować wg. przykładów coś, zapisać, to też wiem. Problem, mam, że padła mi już trzecia karta mikro SD. Do tej pory sądziłem, że wystarczy zamknąć plik (file.close) i kartę mogę wyjąć. Skrajnym przykładem, byłoby zamknięcie pliku i całkowite wyłączenie urządzenia przed wyjęciem karty. Ale może są jakieś inne pośrednie rozwiązania, których nie znam, który by "zamykały kartę" i "teraz możesz bezpiecznie wyjąć kartę". Tak aby urządzenie mogło pracować dalej.

    Jakie są wasze doświadczenia praktyczne z kartami SD?

    P.S.
    Nie zapisuje miliona razy na sekunde. Gromadzę próbki danych co kilka sekund w pamięci i zapisuje raz na 20sekund. Na przykład. Albo rzadziej. Przed chwilą padła mi kolejna miesięczna karta, która miała może 100 zapisów. Co gorsza padł mi także już trzeci czytnik kart. Raczej od tych kart, które padły, bedąc wczesniej w Arduino. Bo jeden z czytników regularnie wykorzystywałem do drukarki 3D i nie było z nim żadnych problemów wcześniej.
  • Sklep ECSYSTEM
  • Poziom 30  
    Jak masz kiepskie karty to tak się może dziać, poczytaj o kartach do rejestratorów, mają możliwy zapis nawet kilka tysięcy razy, takie zwyczajne po kilkaset. Jeśli za każdym razem otwierasz plik, zapisujesz, zamykasz, i tak co 20s to wystarczy na parę godzin zabawy. Np. rejestrator samochodowy zapisze całą kartę w 5h, po roku można spokojnie zajechać typową kartę i dlatego w karcie gwarancyjnej masz zastrzeżenie, że masz gwarancję lifetime czy tam 5lat, ale nie przy używaniu w rejestratorze. Karta SD może być po prostu kiepskim wyborem, jak danych jest nie dużo lepiej użyć FRAM, jak więcej to EEPROM lub FLASH i kontrolować zapisy poszczególnych komórek pamięci. Pewnie można tak samo zrobić z kartą SD, ale nie miałem potrzeby użycia poza prostymi testami. Gdybym miał potrzebę to pewnie wymyśliłbym tak by np. za każdym razem dane przepisywać do nowego pliku, stary chować w katalogu, jak braknie miejsca to kasować wszystkie stare i zapisywać kartę od nowa. Może ktoś tu poda inny sprawdzony sposób.
  • Poziom 9  
    Dziś padnięta to karta nowa Samsung, kupiona w MediaMarkt, więc raczej była dobrej jakości. Właściwie nie była używana. Kupiona może w grudniu, ale przeleżała większość w szufladzie. Może były ze dwie próby zapisu po 2h każda (zapis co 10s). I teraz w nowym urządzeniu od nowa pisze zapis, więc właściwie tylko testuje, zapisów było więc tyle co kot napłakał.
  • Sklep ECSYSTEM
  • Poziom 30  
    Nie jestem ekspertem w dziedzinie SD, ale mam dwie 32GB zablokowane z rejestratora. Dobrej marki wytrzymała ze 3lata, taka mniej znana pół roku. Zapis całej karty zajmował mi ze 2 -5 dni, zależy ile się jeździ, więc na pewno nie było tego więcej niż kilkaset zapisów, a na tej taniej pewnie z kilkadziesiąt. Również tu na elektrodzie czytałem, że zapis całej 80 razy zabił kartę. Z tym że całej 80x, karta powinna sama pilnować równomiernego obciążenia komórek, może z Arduino to nie działa. Inna możliwość to elektryka - wahania napięcia, za niskie podczas zapisu. Swoją możesz spokojnie zareklamować, na mojej były zapisy z rejestratora, odczytać się dają, modyfikacja była zablokowana.
  • Poziom 28  
    akr18 napisał:
    Miałem taki problem z kartą , w czytniku był zablokowany zapis , a po .umieszczeniu w telefonie normalne działa.


    Przez adapter do czytnika karta podłączana? Może problem z adapterem.
  • Poziom 28  
    akr18 napisał:
    Adapter tylko przedłuża styki , odczyt jest poprawny , zapisałem dane na kartę przez telefon .

    Tak ale jest też przeważnie suwaczek Lock :D
  • Poziom 9  
    Nikt nie stosuje kart pamięci SD z uC? Nikomu się nie zepsuła w uC? Dział arduino, więc nie piszemy o kartach SD w samochodowych rejestratorach Video, itp. ;-)

    Myślałem nad rozwiązaniem, aby PINy, które obsługują moduł, przed wyjęciem karty zmienić na OUTPUT i ustawić im stan LOW, ale nie wyłączę tak zasilania. Może moduł z kartą zasilać przez MOSFET typu P i przed wyjęciem karty dodatkowym wyjściem cyfrowym zdjąć zasilanie z tego modułu?
  • Poziom 30  
    Normalne użytkowanie karty SD to zapis zdjęć i filmów, nawet użytkując bardzo ale to bardzo intensywnie aparat, ale amatorsko, można to zrobić kilkadziesiąt razy w ciągu 5 lat gwarancji. A i tak karty padają. Zapis z gwarancji SANDISK:
    "Niniejsza gwarancja nie obejmuje przypadków, gdy Produkt zastosowano w niżej określony sposób lub w połączeniu z którymkolwiek z niżej wymienionych urządzeń (wskazanych przez SanDisk): (i) normalne zużycie, (ii) wideo monitoring, zabezpieczenia i urządzenia nadzoru, (iii) protokół IP / kamery sieciowe, (iv) urządzenia rejestrujące w samochodzie / kamery na desce rozdzielczej / kamery czarnej skrzynki, (v) urządzenia wyświetlające z pętlą wideo, (vi) urządzenia dekodera ciągłego nagrywania, (vii) urządzenia ciągłego rejestrowania danych, takie jak serwery, lub (viii) inne zastosowania, przekraczające zasady normalnego użytkowania określone w opublikowanych instrukcjach."
    Wkładając kartę do rejestratora, który zapisze ją całą powiedzmy w ciągu doby, następnie powtórzy cykl 365x5 lat otrzymalibyśmy zaledwie ~2000 zapisów każdej komórki, a już to oznacza utratę gwarancji. Przykład ekstremalny, bo taki samochód przejechałby 550 tysięcy kilometrów, zużycie karty SD to raczej mały problem.
    Cytat z porównania kart do rejestratorów samochodowych:
    "karty są budowane z wykorzystaniem lepszych pamięci MLC, w których komórki wytrzymują kilka tysięcy cykli zapisu w porównaniu do TLC, które wytrzymują kilkaset cykli" Link .
    Doskonale rozumiem, że nie używasz rejestratora, ale na ich przykładzie widać, że nie pilnując gdzie co zapisujesz możesz uwalać karty po kilkuset cyklach. Nie wiem czy w Twojej karcie jest jakiś kontroler rozrzucający dane w nowe komórki jak to jest robione w dyskach SSD by przedłużyć im żywotność, wątpię skoro padają. Gdyby po każdych 10 zapisach był tworzony nowy plik to pewnie w nowym miejscu. Ciągłe modyfikacje tego samego pliku to raczej mielenie tego samego miejsca. Do zabawy kup sobie lepiej jakieś karty po 10zł ze starych telefonów i testuj. A najlepiej wykorzystaj FRAM (kilka kB za 1$ i miliardy zapisów), pamięć flash (kilka MB za 1$ i setka tysięcy zapisów+ Twoja kontrola gdzie co zapisujesz bez systemu plików), flash wbudowany w ESP8266 z 4MB flash (3MB na dysk w cenie) choć tu już masz WiFi i ja wysyłam dane po prostu na ThinkSpeak czy coś takiego, na jakiś darmowy serwer. Można też zrobić FRAM+SD, zbierasz dane do 32kb, wgrywasz do nowego pliku i tak kółko.
  • Poziom 9  
    Chyba znalazłem u siebie błąd w kodzie, jak to bywa był trywialny. Czy on miał prawo psuc karty - tego jeszcze nie wiem, ale powodował, że na kartę się nic nie zapisywało, a zepsuły się dwie. Z grubsza wyglądało to tak (przykład SD/DataLogger):

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Przykład beznadziejny, bo co chwila otwiera, zapisuje i zamyka plik. Choć jak ktoś ma dużo kart, to jest w miarę bezpieczny. U mnie jest zasilanie bateryjne, więc się samo nie wyłączy. Zbieram więc dane do bufora i zapisuje jak się napełni. Mniej więcej skopiowałem przykład i ponieważ zapisywanie robiłem w innych funkcjach poza loop(), rozpoczescieZapisu(), zapisBufora(), koniecZapisu() itp... to musiałem wewnątrz tych funkcji użyć dowiązania do pliku, czyli zmiennej dataFile. Zadeklarowałem ją na początku kodu, ale zapomniałem "oddekretować" w pętli loop() - nie dokładnie tutaj, ale chodzi o przykład.

    Nie wykonywałem wiele pętli w okresie próby uruchomienia. Generalnie aż do teraz, nic się nie zapisywało. Arduino za każdym razem mogło próbować stworzyć/SD.open kolejny plik o nazwie "datalog.txt", a tak naprawdę to być może próbowało go otworzyć kolejny raz... cholera wie jak to dokładnie robi, bo nie badałem jakie są wartości tej zmiennej. Mogło to być na jedna probe 10 zapisów, może 20, nie więcej. Takich prób mogłem dziś zrobić 30szt. Więc nie ma tego dużo, ale być może takie działanie spowodowało jakieś błędy w zapisie do FAT32 i Windows 10 niby widzi kartę, ale nie potrafi cokolwiek z niej pokazać, nie potrafi sformatować itd... Plik zamykałem, ale robiłem to dla zmiennej, która była o zasięgu globalnym, a o tej samej nazwie był plik dla zmiennej, która była za każdym razem tworzona w loop().

    Na domiar złego przypadek uszkodzenia karty dziś się przytrafił gdy w euforii znalezienia kolejnego błędu w moim kodzie, włożyłem kartę gdy urządzenie było pod napięciem. Więc dalej nie wiem, co było przyczyną uszkodzeń karty z dziś. Czy błędy kod, czy włożenie karty gdy urządzenie było pod napięciem.

    Za chwilę przechodzę do testowania samego urządzenia (loguje pewne wartości przez kilka godzin) zobaczymy czy karty będą działały czy nie. W Auchan wczoraj trafiłem wyprzedaż kart 16G po 14zł i czytniki po 5zł (tyle, że na duże SD, ale jakieś adapterów w szufladzie mnóstwo).

    Dziękuję za komentarze być może sytuacja opanowana. Niemniej jeśli ktoś ma bardziej rozbudowanego loggera z kartami SD, w którym chcecie wyciągnąć kartę bez wyłączania urządzenia, to dajcie znać czy robicie coś więcej poza file.Close(). Używam karty SD, bo dane będą przenoszone na Peceta, a zbierana w terenie (przynajmniej na teraz).