Strategie radzenia sobie z nieprzewidywalnym zasilaniem

15

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ć?

rozdymka tygrysia
źródło

Odpowiedzi:

3

Istnieją dwie opcje (przynajmniej) po stronie podaży:

  • Wiele samochodów ma teraz gniazdo akcesoriów, które nie jest przełączane przez zapłon ... jeśli twój samochód ma takie gniazdo, skorzystaj z niego (ale uważaj, aby wyjąć wtyczkę z gniazdka, gdy nie jest używane!), Które powinny zapewnić niezawodne zasilanie (chociaż może spaść podczas pracy silnika rozruch)
  • Jeśli projektujesz własny konwerter mocy, dodaj wystarczająco duży kondensator pojemnościowy, aby zapewnić, że zasilanie pozostanie wystarczająco długo po wyłączeniu pojazdu ... możesz również wykryć pojazd wyłączony (zasilanie pojazdu spada poniżej progu) do GPIO, aby upewnij się, że nie zaczynasz pisać po wyłączeniu zasilania
Andrzej
źródło
2

W systemie Windows Embedded istnieje koncepcja o nazwie Enhanced Write Filters. Używają go, aby uniknąć uszkodzenia danych spowodowanego utratą zasilania itp. System operacyjny zapisuje je na nakładce pamięci RAM. System plików nie jest uszkodzony w przypadku utraty zasilania i możesz „zatwierdzić” dane do pamięci tylko wtedy, gdy chcesz.

Podobnie w systemach operacyjnych Linux istnieje technika utrzymywania systemu plików w stanie nienaruszonym i możesz zapisywać na karcie SD tylko wtedy, gdy chcesz. To pytanie wyjaśnia, jak zbudować system plików tylko do odczytu. Możesz zapisać zmiany tylko, jeśli chcesz. Oznacza to, że użyjesz opcji 3: „Zapisz do pliku tymczasowego i zachowaj, jeśli to konieczne”. Pytanie wskazuje również na artykuł „Jak zbudować system plików tylko do odczytu”. Być może to może być pierwsze miejsce na początek!

Sai
źródło
Czy ktoś próbował przejść do tego artykułu na temat PI? Wygląda na to, że będzie wymagało dużo adaptacji
GuySoft,
2

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:

tune2fs -c 1 /dev/mmcblk0p2

Musisz także zmienić ostatnią linię dla głównego systemu plików w / etc / fstab, aby zawierała 1, jak poniżej:

/dev/mmcblk0p2  /               ext4    defaults,noatime,commit=120  0       1
                                                               Change this ^^^^^

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.

Joppe
źródło
1

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.

miramy
źródło
0

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.)

XTL
źródło
1
Wydaje się, że pojawiło się powiązane pytanie dotyczące mocy: raspberrypi.stackexchange.com/questions/3778/…
XTL