Strategie per affrontare imprevedibili alimentazioni


15

Voglio installare un Pi nella mia auto e usarlo per registrare i dati GPS. Quali strategie (nel mio programma) posso seguire per ridurre al minimo i problemi dovuti all'interruzione dell'alimentazione durante la scrittura sulla scheda SD?

Finora posso pensare a:

  • Memorizzazione dei dati e solo scrittura intermittente
  • Scrivere solo quando la velocità del veicolo non è prossima allo zero (cioè sta per spegnere l'accensione)
  • Scrivi in ​​un file temporaneo che posso permettermi di aver corrotto, quindi persevera di tanto in tanto

Mi chiedo se ci siano

  • Modalità filesystem Posso rimanere nella maggior parte del tempo che sopravviverebbe a un arresto improvviso
  • Modi per rendere il recupero dallo spegnimento mentre si scrive più affidabile

Ovviamente (penso) una certa perdita di dati è inevitabile, ma come potrei minimizzarla?

Risposte:


3

Ci sono due opzioni (almeno) dal lato dell'offerta:

  • Molte auto ora hanno una presa accessoria che non viene attivata dall'accensione ... se la tua auto ne ha una, usala (ma fai attenzione a staccare la spina quando non in uso!) Che dovrebbe darti una fornitura affidabile (anche se potrebbe cadere durante il motore avviamento)
  • Se stai progettando il tuo convertitore di potenza, aggiungi un condensatore di serbatoio sufficientemente grande per garantire che l'alimentazione rimanga su abbastanza a lungo dopo lo spegnimento del veicolo ... potresti anche rilevare il veicolo spento (l'alimentazione del veicolo scende sotto una soglia) a un GPIO, a assicurarsi di non iniziare a scrivere dopo lo spegnimento

2

Esiste un concetto in Windows Embedded chiamato Enhanced Write Filters. Lo usano per evitare la corruzione della perdita di dati a causa della perdita di energia, ecc. Il sistema operativo lo scrive su un overlay RAM. Il file system non viene danneggiato quando si verifica una perdita di potenza e puoi "salvare" i dati nella memoria solo se lo desideri.

Allo stesso modo, sui sistemi operativi Linux, esiste una tecnica per mantenere intatto il file system e puoi scrivere sulla scheda SD solo se lo desideri. Questa domanda spiega come creare un file system di sola lettura e puoi salvare le modifiche solo se lo desideri. Questo significa che useresti l'opzione 3: "Scrivi in ​​un file temporaneo e persisti quando necessario". La domanda punta anche a un articolo "Come costruire un file system di sola lettura". Forse, quello potrebbe essere il primo posto da cui cominciare!


Qualcuno ha provato ad andare con questo articolo sul PI? Sembra che avrà bisogno di molti adattamenti
GuySoft,

2

Tutto dipende dalla quantità di dati che sei disposto a perdere. Se non puoi permetterti di perdere nulla, ti chiederà di trovare un modo per collegare il tuo PI direttamente alla batteria (con un fusibile ovviamente), in modo che non venga spento quando si spegne l'accensione.

Inoltre, una tipica batteria per auto dovrebbe avere circa 80 Ah e il PI consumerà tra 500-1200 mA (a seconda che si tratti di un modello A o B), quindi probabilmente consumerà la batteria dell'auto tra 2 e 6 giorni, quindi non penso che lo troverai accettabile.

Se non riesci ancora a permetterti di perdere dati, potresti essere in grado di progettare un tipo di hardware personalizzato in cui è possibile controllare l'alimentatore dall'IP e anche monitorare lo stato dell'accensione. Se l'accensione viene disattivata, si scaricano i dati sulla scheda SD, si spegne il sistema operativo e quindi come ultimo passaggio si spegne l'alimentatore. L'alimentazione deve anche essere attivata quando si inserisce l'accensione, per riavviare l'IP. Tutto ciò è fattibile, ma è un progetto abbastanza grande.

Tuttavia, se trovi accettabile perdere alcuni dati allo spegnimento, progetterei il demone che salva periodicamente i dati GPS su un file in modo tale da eseguire una chiamata fsync dopo ogni scrittura (per scaricare i dati su SD- carta). Se lo fai ogni pochi secondi (e stai utilizzando anche il file system ext4 journaling predefinito), ciò significherebbe probabilmente che perderai solo gli ultimi secondi ad ogni interruzione di corrente.

Tieni presente che Raspbian (almeno la mia installazione) non è stato fornito con un fsck del file system di root all'avvio. Devi fare quanto segue per abilitarlo ad ogni montaggio:

tune2fs -c 1 /dev/mmcblk0p2

Devi anche cambiare l'ultima riga per il file system di root in / etc / fstab per contenere un 1, in questo modo:

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

Se non lo fai, il tuo file system di root potrebbe non essere avviabile di tanto in tanto, quindi se stai eseguendo un sistema senza testa in cui spegni l'alimentazione senza fare uno spegnimento controllato, questo è assolutamente necessario.


1

Sembra una buona aggiunta che igienizzerà piacevolmente i componenti elettrici dell'auto per il pi, e gestirà il rilevamento della perdita di accensione dell'auto, fornirà al pi energia nel frattempo e invierà un segnale al pin GPIO per dirgli di spegnere il pi in modo sicuro .

Purtroppo al momento sembra essere esaurito, ma è possibile preordinare.


0

Se devi affrontare spesso la perdita di energia, un'attenta scelta del filesystem e dei metodi di avvio (sola lettura, journal, fsck incustodito, ripristino rapido ...) potrebbe aiutare a garantire che il sistema funzioni in modo affidabile.

Sul lato dell'applicazione, utilizzando determinati database ( sqlite ?) Dovrebbe garantire uno stato di scrittura completo o assente sui dati quando viene riaperto.

Meglio sarebbe davvero cercare di evitare di dover chiudere se non quando necessario. Con un controller più piccolo, spesso si guarda l'alimentatore e se si spegne, si ha una piccola finestra per spegnere le cose, salvare eventuali dati non volatili e possibilmente mettere in pausa o arrestare il processore fino al ripristino dell'alimentazione. Con un grande processore per uso generale come il PI, ciò potrebbe richiedere un gap piuttosto lungo.

Pertanto, potrebbe essere utile disporre di una riserva di carica in linea e di un avviso in caso di interruzione dell'alimentazione principale. Se è glitch, potrebbe essere necessario distinguere tra temporanea perdita di potenza (non scrivere, trattenere il respiro) e probabile arresto (salvare e ripulire).

In un'auto avrai +12/24 V e PI usa +5 V, quindi c'è potenziale (eh) per qualcosa dentro o prima del convertitore. Potresti essere in grado di diodi-O un'altra batteria di dimensioni ragionevoli 9-12 V prima del convertitore che prenderà il posto quando cade la tensione, ad esempio. Considerando l'assorbimento di potenza relativamente pesante, dovrà essere tenuto in qualche modo carico. Potresti anche essere in grado di attrezzare un comparatore o un monitor di tensione speciale per la linea di alimentazione principale e ricevere un avviso quando l'alimentazione principale è inattiva. (Non so con disinvoltura quale sarebbe un modo rapido per segnalare un PI.)


1
Una domanda di potere correlata sembra essere spuntata: raspberrypi.stackexchange.com/questions/3778/…
XTL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.