Estrategias para lidiar con una fuente de alimentación impredecible


15

Quiero instalar un Pi en mi automóvil y usarlo para registrar datos de GPS. ¿Qué estrategias (en mi programa) puedo seguir para minimizar los problemas debido a que se interrumpe la alimentación al escribir en la tarjeta SD?

Hasta ahora puedo pensar en:

  • Almacenar datos y solo escribir de forma intermitente
  • Solo escribir cuando la velocidad del vehículo no está cerca de cero (es decir, a punto de apagar el encendido)
  • Escriba en un archivo temporal que pueda permitirme corromper, luego insista en que de vez en cuando

Me pregunto si hay

  • Modos del sistema de archivos en los que me puedo quedar la mayor parte del tiempo que sobrevivirían a un apagado repentino
  • Formas de hacer que la recuperación de la alimentación baja mientras se escribe sea más confiable

Obviamente (creo) que alguna pérdida de datos es inevitable, pero ¿cómo podría minimizarla?

Respuestas:


3

Hay dos opciones (al menos) en el lado de la oferta:

  • Muchos automóviles ahora tienen una toma de accesorios que no se cambia por ignición ... si su automóvil tiene una, úsela (¡pero tenga cuidado de desenchufarla cuando no esté en uso!) Lo que debería proporcionarle un suministro confiable (aunque esto puede caer durante el motor arranque)
  • Si está diseñando su propio convertidor de potencia, agregue un condensador de depósito lo suficientemente grande como para asegurarse de que el suministro se mantenga el tiempo suficiente después de apagar el vehículo ... también puede detectar el vehículo apagado (el suministro del vehículo cae por debajo de un umbral) a un GPIO, para asegúrese de no comenzar a escribir después del apagado

2

Hay un concepto en Windows Embedded llamado Filtros de escritura mejorados. Lo usan para evitar corromper la pérdida de datos debido a la pérdida de energía, etc. El sistema operativo lo escribe en una superposición de RAM. El sistema de archivos no está dañado cuando hay una pérdida de energía y puede "enviar" los datos a la memoria solo si lo desea.

Del mismo modo, en los sistemas operativos Linux, existe una técnica para mantener el sistema de archivos intacto y puede escribir en la tarjeta SD solo si lo desea. Esta pregunta explica cómo construir un sistema de archivos de solo lectura y puede guardar los cambios solo si lo desea. Esto significa que usaría su opción 3: "Escribir en un archivo temporal y persistir cuando sea necesario". La pregunta también apunta a un artículo "Cómo construir un sistema de archivos de solo lectura". Tal vez, ese podría ser el primer lugar para comenzar.


¿Alguien ha tratado de ir con este artículo sobre el PI? Parece que necesitará mucha adaptación
GuySoft

2

Todo depende de la cantidad de datos que esté dispuesto a perder. Si no puede permitirse perder nada, requerirá que encuentre una manera de conectar su PI directamente a la batería (con un fusible, por supuesto), para que no se apague cuando se apaga el encendido.

Por otra parte, una batería de automóvil típica tendría alrededor de 80 Ah y el PI consumirá entre 500-1200 mA (dependiendo de si es un modelo A o B), por lo que probablemente agote la batería de su automóvil entre 2 y 6 días, así que no creo que encuentres esto aceptable.

Si aún no puede permitirse perder datos, es posible que pueda diseñar algún tipo de hardware personalizado donde pueda controlar la fuente de alimentación desde el PI y también monitorear el estado del encendido. Si el encendido está apagado, vacia los datos a la tarjeta SD, apaga el sistema operativo y luego, como último paso, apaga la fuente de alimentación. La fuente de alimentación también debe encenderse cuando se enciende el encendido, para permitir que el PI se inicie nuevamente. Todo esto es factible, pero es un proyecto bastante grande.

Sin embargo, si considera aceptable perder algunos datos al apagar, diseñaría el daemon que guarda los datos del GPS periódicamente en un archivo de tal manera que ejecute una llamada fsync después de cada escritura (para vaciar los datos en la SD- tarjeta). Si hace esto cada pocos segundos (y también está usando el sistema de archivos ext4 de diario predeterminado), esto probablemente significaría que solo perderá los últimos segundos con cada pérdida de energía.

Tenga en cuenta que Raspbian (al menos mi instalación) no venía con un fsck del sistema de archivos raíz en el momento del arranque. Debe hacer lo siguiente para habilitarlo en cada montaje:

tune2fs -c 1 /dev/mmcblk0p2

También debe cambiar la última línea del sistema de archivos raíz en / etc / fstab para que contenga un 1, como este:

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

Si no hace esto, es posible que su sistema de archivos raíz no se pueda iniciar de vez en cuando, por lo que si está ejecutando un sistema sin cabeza donde apaga la alimentación sin hacer un apagado controlado, esto es absolutamente necesario.


1

Esto parece ser una adición buena que muy bien sanear el sistema eléctrico del coche para el pi, y mango detectar la pérdida de contacto del coche, el suministro de la PI con el poder en el ínterin, y envían una señal al pin GPIO para indicarle que debe apagar el PI de forma segura .

Lamentablemente, parece estar agotado en este momento, pero puede realizar un pedido por adelantado.


0

Si debe lidiar con la pérdida de energía con frecuencia, la elección cuidadosa del sistema de archivos y los métodos de arranque (solo lectura, diario, fsck desatendido, recuperación rápida ...) podría ayudar a garantizar que el sistema se ejecute de manera confiable.

En el lado de la aplicación, el uso de ciertas bases de datos ( ¿ sqlite ?) Debería garantizar una escritura completa o ningún estado de escritura en los datos cuando se vuelve a abrir.

Mejor sería de hecho la de tratar de evitar tener que apagar excepto cuando sea necesario. Con un controlador más pequeño, a menudo observa la fuente de alimentación y, si se cae, tiene una pequeña ventana para apagar las cosas, guardar los datos no volátiles y posiblemente suspender o detener el procesador hasta que se restablezca la alimentación. Con un gran procesador de propósito general como el PI, eso podría requerir una brecha bastante larga.

Por lo tanto, tener una reserva de energía en línea y una advertencia cuando se corta el suministro principal podría ayudar. Si tiene fallas, es posible que deba diferenciar entre la pérdida de energía temporal (no escriba, contenga la respiración) y el apagado probable (guardar y limpiar).

En un automóvil tendrá +12/24 V y PI usa +5 V, por lo que hay potencial (heh) para algo dentro o antes del convertidor. Es posible que pueda dar diodo-O otra batería de 9-12 V de tamaño razonable antes del convertidor que se hará cargo cuando la tensión caiga, por ejemplo. Teniendo en cuenta el consumo de energía relativamente pesado, será necesario mantenerlo cargado de alguna manera. También es posible que pueda instalar un comparador o un monitor de voltaje especial para la línea de alimentación principal y recibir una alerta cuando se desconecte la alimentación principal. (No sé de antemano cuál sería una forma rápida de señalar un IP).


1
Parece haber surgido una pregunta de poder relacionada: raspberrypi.stackexchange.com/questions/3778/…
XTL
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.