Стратегії боротьби з непередбачуваним джерелом живлення


15

Я хочу встановити Pi в свій автомобіль і використовувати його для запису даних GPS. Які стратегії (в моїй програмі) я можу дотримуватися, щоб мінімізувати проблеми через переривання живлення під час запису на SD-карту?

Поки що я можу придумати:

  • Зберігання даних та запис лише з перервами
  • Запис лише тоді, коли швидкість автомобіля не близька до нуля (тобто збирається вимкнути запалювання)
  • Запишіть у тимчасовий файл, який я можу дозволити собі пошкодити, а потім наполягайте, що раз у раз

Цікаво, чи є

  • Режими файлової системи Я можу перебувати протягом більшої частини часу, який пережив би раптове відключення
  • Способи зробити відновлення від вимкнення живлення під час написання більш надійним

Очевидно (я думаю) деяка втрата даних неминуча, але як я міг її мінімізувати?

Відповіді:


3

Є два варіанти (принаймні) на стороні постачання:

  • Зараз у багатьох автомобілях є розетка для аксесуарів, яка не вимикається запаленням ... якщо у вашої машини є така, використовуйте її (але будьте обережні, щоб вимкнути вилку з розетки, коли вона не використовується!), Яка повинна забезпечити вам надійне живлення (хоча це може впасти під час роботи двигуна кривошип)
  • Якщо ви розробляєте власний перетворювач потужності, додайте достатньо великий конденсатор резервуара, щоб забезпечити, що живлення залишається достатньо довгим після вимкнення транспортного засобу ... Ви також можете виявити вимикання транспортного засобу (подача транспортного засобу падає нижче порогового значення) до GPIO, щоб переконайтеся, що ви не починаєте писати після вимкнення живлення

2

У Windows Embedded є концепція, яка називається Enhanced Write Filters. Вони використовують його, щоб уникнути пошкодження втрат даних через втрату живлення тощо. ОС записує їх у накладку ОЗУ. Файлова система не пошкоджена, коли відбувається втрата потужності, і ви можете "зафіксувати" дані в пам'яті лише за бажанням.

Так само в операційних системах Linux існує техніка збереження недоторканості файлової системи, і ви можете писати на SD-карту лише за бажанням. Це питання пояснює, як створити файлову систему лише для читання, і ви можете зберегти зміни лише за бажанням. Це означає, що ви використовуєте свій варіант 3: "Напишіть у тимчасовий файл та зберігайте, коли це необхідно". Питання також вказує на статтю "Як побудувати файлову систему лише для читання". Можливо, це може бути перше місце для початку!


Хто-небудь намагався перейти з цією статтею на ПІ? Схоже, йому знадобиться багато адаптації
GuySoft

2

Все залежить від кількості даних, які ви готові втратити. Якщо ви не можете дозволити собі втратити що-небудь, знадобиться знайти спосіб підключити свій ПІ безпосередньо до акумулятора (звичайно, запобіжник), щоб він не вимикався при вимкненому запалюванні.

Знову ж таки, типовий автомобільний акумулятор матиме близько 80 Ач, і PI буде споживати між 500-1200 мА (залежно від того, це модель А або В), так що, ймовірно, акумулятор вашого автомобіля буде тривати між 2 та 6 днями, тому я не думаю, що ви вважаєте це прийнятним.

Якщо ви все ще не можете дозволити собі втратити дані, можливо, ви зможете розробити якесь спеціальне обладнання, де ви можете контролювати джерело живлення від PI, а також контролювати стан запалювання. Якщо запалювання вимкнено, ви передаєте свої дані на SD-карту, вимикаєте ОС і потім, як останній крок, відключаєте джерело живлення. При включенні запалювання також потрібно включити джерело живлення, щоб PI запустився знову. Це все можливий, але досить великий проект.

Однак якщо ви вважаєте прийнятним втрачати деякі дані при відключенні, я б спроектував демон, який періодично зберігає дані GPS у файл таким чином, щоб він виконував виклик fsync після кожного запису (для передачі даних у SD- картка). Якщо ви робите це кожні кілька секунд (а також використовуєте файлову систему журналу ext4 за замовчуванням), це, ймовірно, означатиме, що ви втратите лише останні кілька секунд при кожній втраті потужності.

Будь ласка, майте на увазі, що Raspbian (принаймні моя установка) не постачався з fsck кореневої файлової системи під час завантаження. Ви повинні зробити наступне, щоб увімкнути це на кожному монтажі:

tune2fs -c 1 /dev/mmcblk0p2

Вам також потрібно змінити останній рядок для кореневої файлової системи в / etc / fstab, щоб містити 1, як це:

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

Якщо ви цього не зробите, то ваша коренева файлова система час від часу може не завантажуватися, тому якщо ви працюєте з безголовою системою, де вимикаєте живлення, не роблячи керованого відключення, це абсолютно необхідно.


1

Це виглядає як гарне доповнення, яке добре оздоровить електрику автомобіля для пі, і впорається з виявленням втрати запалення автомобіля, тим часом забезпечить пі потужністю і надішле сигнал на штифт GPIO, щоб сказати йому безпечно відключити пі .

На жаль, на жаль, зараз немає на складі, але ви можете зробити попереднє замовлення.


0

Якщо вам доводиться стикатися із втратою потужності, ретельний вибір файлової системи та методів завантаження (лише для читання, журналу, без нагляду fsck, швидке відновлення ..) може допомогти забезпечити надійність роботи системи.

Що стосується програми, використання певних баз даних ( sqlite ?) Має гарантувати цілий запис або відсутність запису на даних при повторному відкритті.

Краще б дійсно бути , щоб спробувати уникнути того , щоб закрити крім випадків , коли це необхідно. З меншим контролером ви часто спостерігаєте за джерелом живлення, і якщо він виходить з ладу, у вас є невелике вікно, щоб вимкнути речі, зберегти будь-які енергонезалежні дані та, можливо, заснути або зупинити процесор до відновлення живлення. З таким великим процесором загального призначення, як PI, це може зажадати досить тривалий проміжок.

Таким чином, допомога в режимі он-лайн резерву живлення та попередження, коли основне джерело живлення може знизитися. Якщо це глючно, вам може знадобитися розмежувати тимчасові втрати електроенергії (не пишіть, не затримуйте дихання) та ймовірне відключення (збереження та очищення).

У автомобілі у вас буде +12/24 В, а PI використовує +5 V, тому є потенціал (хе) для чогось у або до перетворювача. Можливо, ви зможете діодитирувати АБО іншу батарею 9-12 В розміром 9-12 В перед перетворювачем, який прийме, наприклад, при падінні напруги. Враховуючи відносно велику потужність, яку потрібно буде якось тримати. Можливо, ви також зможете встановити компаратор або спеціальний монітор напруги для основної лінії електропередачі та попередити про втрату основної потужності. (Я не знаю начебто, що було б швидким способом подати сигнал на ІП.)


1
Зв'язане запитання про владу, схоже, спливе: raspberrypi.stackexchange.com/questions/3778/…
XTL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.