Chcę zainstalować Pi w samochodzie i używać go do rejestrowania danych GPS. Jakie strategie (w moim programie) mogę zastosować, aby zminimalizować problemy z powodu przerwy w zasilaniu podczas zapisywania na karcie SD?
Do tej pory mogę myśleć o:
- Przechowywanie danych i pisanie tylko z przerwami
- Pisanie tylko wtedy, gdy prędkość pojazdu nie jest bliska zeru (tj. Ma zamiar wyłączyć zapłon)
- Napisz do pliku tymczasowego, który mogę sobie pozwolić na uszkodzenie, a następnie zachowaj go co jakiś czas
Zastanawiam się, czy są
- Tryby systemu plików Mogę pozostać w większości przypadków, które przetrwałyby nagłe wyłączenie
- Sposoby przywracania sprawności po zaniku zasilania podczas pisania są bardziej niezawodne
Oczywiście (myślę) pewnej utraty danych nie da się uniknąć, ale jak mogę ją zminimalizować?
źródło
Wszystko zależy od ilości danych, które jesteś gotów stracić. Jeśli nie możesz sobie pozwolić na utratę czegokolwiek, będziesz musiał znaleźć sposób na podłączenie swojego PI bezpośrednio do akumulatora (oczywiście z bezpiecznikiem), aby nie został wyłączony po wyłączeniu zapłonu.
Z drugiej strony typowy akumulator samochodowy miałby około 80 Ah, a PI zużywałby od 500-1200 mA (w zależności od tego, czy jest to model A lub B), więc prawdopodobnie rozładuje on akumulator samochodowy w ciągu 2 do 6 dni, więc nie sądzę, byś uznał to za dopuszczalne.
Jeśli nadal nie możesz sobie pozwolić na utratę danych, możesz zaprojektować niestandardowy sprzęt, w którym możesz kontrolować zasilanie z PI, a także monitorować stan zapłonu. Jeśli zapłon jest wyłączony, spłukujesz dane na kartę SD, wyłączasz system operacyjny, a następnie w ostatnim kroku wyłącz zasilanie. Zasilacz należy również włączyć po włączeniu zapłonu, aby umożliwić PI ponowne uruchomienie. To wszystko jest wykonalne, ale dość duży projekt.
Jeśli jednak uważasz, że akceptowalna jest utrata niektórych danych podczas zamykania, zaprojektowałbym demona, który okresowo zapisuje dane GPS w pliku, w taki sposób, aby po każdym zapisie wykonywał wywołanie fsync (aby opróżnić dane do SD- karta). Jeśli robisz to co kilka sekund (i używasz również domyślnego systemu plików kronikowania ext4), prawdopodobnie oznacza to, że stracisz ostatnie kilka sekund przy każdej utracie zasilania.
Proszę pamiętać, że Raspbian (przynajmniej moja instalacja) nie przyszedł z fsck systemu plików root podczas uruchamiania. Musisz wykonać następujące czynności, aby włączyć go przy każdym montażu:
Musisz także zmienić ostatnią linię dla głównego systemu plików w / etc / fstab, aby zawierała 1, jak poniżej:
Jeśli tego nie zrobisz, system plików root może od czasu do czasu nie uruchamiać się, więc jeśli używasz systemu bezgłowego, w którym wyłączasz zasilanie bez kontrolowanego zamykania, jest to absolutnie konieczne.
źródło
Wygląda to na dobry dodatek , który ładnie zdezynfekuje układ elektryczny samochodu do pi i poradzi sobie z wykryciem utraty zapłonu samochodu, w międzyczasie dostarczy energię pi i wyśle sygnał do pinu GPIO, aby nakazał bezpieczne wyłączenie pi .
Niestety wydaje się, że obecnie nie ma go na stanie, ale możesz złożyć zamówienie w przedsprzedaży.
źródło
Jeśli często musisz radzić sobie z utratą zasilania, ostrożny wybór systemu plików i metod rozruchu (tylko do odczytu, dziennik, nienadzorowany fsck, szybkie odzyskiwanie ...) może pomóc upewnić się, że system działa niezawodnie.
Po stronie aplikacji korzystanie z niektórych baz danych ( sqlite ?) Powinno gwarantować całkowity zapis lub brak zapisu danych po ponownym otwarciu.
Rzeczywiście lepiej byłoby unikać konieczności wyłączania, chyba że jest to konieczne. W przypadku mniejszego kontrolera często obserwujesz zasilacz, a jeśli się zepsuje, masz małe okno, aby zamknąć rzeczy, zapisać wszelkie nieulotne dane i ewentualnie uśpić lub zatrzymać procesor do czasu przywrócenia zasilania. Z dużym procesorem ogólnego przeznaczenia, takim jak PI, może to wymagać dość długiej przerwy.
Tak więc posiadanie rezerwy mocy on-line i ostrzeżenia o zaniku zasilania głównego może pomóc. Jeśli jest błędny, może być konieczne rozróżnienie między chwilową utratą zasilania (nie pisz, wstrzymaj oddech) a prawdopodobnym wyłączeniem (zapisywanie i czyszczenie).
W samochodzie będziesz mieć +12/24 V, a PI używa +5 V, więc istnieje potencjał (heh) dla czegoś w przetworniku lub przed nim. Być może będziesz w stanie diodować LUB inną rozsądną baterię 9-12 V przed konwerterem, która przejmie na przykład spadek napięcia. Biorąc pod uwagę stosunkowo duży pobór mocy, trzeba będzie jakoś ładować. Być może będziesz w stanie przymocować komparator lub specjalny monitor napięcia dla głównej linii zasilającej i otrzymać ostrzeżenie, gdy główne zasilanie zostanie wyłączone. (Nie wiem od razu, jaki byłby szybki sposób zasygnalizowania PI.)
źródło