Stratégies pour faire face à une alimentation électrique imprévisible

15

Je souhaite installer un Pi dans ma voiture et l'utiliser pour enregistrer des données GPS. Quelles stratégies (dans mon programme) puis-je suivre pour minimiser les problèmes dus à une coupure de courant lors de l'écriture sur la carte SD?

Jusqu'à présent, je peux penser à:

  • Stockage des données et écriture uniquement par intermittence
  • Écriture uniquement lorsque la vitesse du véhicule n'est pas proche de zéro (c'est-à-dire sur le point de couper le contact)
  • Écrire dans un fichier temporaire que je peux me permettre d'avoir corrompu, puis persister de temps en temps

Je me demande s'il y a

  • Modes de système de fichiers dans lesquels je peux rester la plupart du temps qui survivrait à un arrêt soudain
  • Façons de rendre la récupération après une mise hors tension tout en écrivant plus fiable

De toute évidence (je pense) certaines pertes de données sont inévitables, mais comment pourrais-je les minimiser?

poisson-globe
la source

Réponses:

3

Il y a deux options (au moins) du côté de l'offre:

  • De nombreuses voitures ont maintenant une prise accessoire qui n'est pas commutée par l'allumage ... si votre voiture en a une, utilisez-la (mais faites attention à la débrancher lorsqu'elle n'est pas utilisée!) Qui devrait vous fournir une alimentation fiable (bien que cela puisse chuter pendant le moteur démarrage)
  • Si vous concevez votre propre convertisseur de puissance, ajoutez un condensateur de réservoir suffisamment grand pour garantir que l'alimentation reste suffisamment longtemps après l'arrêt du véhicule ... vous pouvez également détecter un véhicule éteint (l'alimentation du véhicule tombe en dessous d'un seuil) à un GPIO, pour assurez-vous de ne pas commencer à écrire après la mise hors tension
Andrew
la source
2

Il existe un concept dans Windows Embedded appelé filtres d'écriture améliorés. Ils l'utilisent pour éviter de corrompre la perte de données due à une perte d'alimentation, etc. Le système d'exploitation l'écrit sur une superposition de RAM. Le système de fichiers n'est pas corrompu en cas de panne de courant et vous ne pouvez "valider" les données en mémoire que si vous le souhaitez.

De même, sur les systèmes d'exploitation Linux, il existe une technique pour garder le système de fichiers intact et vous ne pouvez écrire sur la carte SD que si vous le souhaitez. Cette question explique comment créer un système de fichiers en lecture seule et vous pouvez enregistrer les modifications uniquement si vous le souhaitez. Cela signifie que vous utiliseriez votre option 3: "Écrire dans un fichier temporaire et persister si nécessaire". La question pointe également vers un article "Comment créer un système de fichiers en lecture seule". C'est peut-être le premier endroit pour commencer!

Sai
la source
Quelqu'un at-il essayé d'aller avec cet article sur le PI? Il semble qu'il aura besoin de beaucoup d'adaptation
GuySoft
2

Tout dépend de la quantité de données que vous êtes prêt à perdre. Si vous ne pouvez pas vous permettre de perdre quoi que ce soit, il vous faudra trouver un moyen de connecter votre PI directement à la batterie (avec un fusible bien sûr), afin qu'il ne s'éteigne pas lorsque le contact est coupé.

Là encore, une batterie de voiture typique aurait environ 80 Ah et le PI consommera entre 500-1200 mA (selon qu'il s'agit d'un modèle A ou B), ce qui épuisera probablement la batterie de votre voiture entre 2 et 6 jours, donc je ne pense pas que vous trouverez cela acceptable.

Si vous ne pouvez toujours pas vous permettre de perdre des données, vous pourrez peut-être concevoir une sorte de matériel personnalisé où vous pouvez contrôler l'alimentation électrique du PI et également surveiller l'état de l'allumage. Si le contact est coupé, vous videz vos données sur la carte SD, arrêtez le système d'exploitation puis, comme dernière étape, coupez l'alimentation. L'alimentation doit également être activée lorsque le contact est mis, pour laisser le PI redémarrer. Tout cela est faisable, mais c'est un projet assez important.

Cependant, si vous trouvez acceptable de perdre des données à l'arrêt, je concevoir le démon qui enregistre périodiquement les données GPS dans un fichier de telle sorte qu'il exécute un appel fsync après chaque écriture (pour vider les données sur le SD- carte). Si vous effectuez cette opération toutes les quelques secondes (et que vous utilisez également le système de fichiers ext4 de journalisation par défaut), cela signifie probablement que vous ne perdrez que les dernières secondes à chaque coupure de courant.

Veuillez garder à l'esprit que Raspbian (au moins mon installation) n'était pas fourni avec un fsck du système de fichiers racine au démarrage. Vous devez procéder comme suit pour l'activer à chaque montage:

tune2fs -c 1 /dev/mmcblk0p2

Vous devez également modifier la dernière ligne du système de fichiers racine dans / etc / fstab pour qu'elle contienne un 1, comme ceci:

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

Si vous ne le faites pas, votre système de fichiers racine peut ne pas être amorçable de temps en temps, donc si vous exécutez un système sans tête où vous coupez l'alimentation sans effectuer un arrêt contrôlé, cela est absolument nécessaire.

Joppe
la source
1

Cela ressemble à un bon ajout qui désinfectera bien les composants électriques de la voiture pour le pi, et gérera la détection de la perte d'allumage de la voiture, alimentera le pi en attendant et enverra un signal à la broche GPIO pour lui dire d'arrêter le pi en toute sécurité .

Il semble malheureusement être en rupture de stock pour le moment, mais vous pouvez pré-commander.

mirams
la source
0

Si vous devez souvent faire face à une perte de puissance, un choix judicieux du système de fichiers et des méthodes de démarrage (lecture seule, journal, fsck sans assistance, récupération rapide ..) peut vous aider à vous assurer que le système fonctionne correctement.

Côté application, l'utilisation de certaines bases de données ( sqlite ?) Devrait garantir une écriture entière ou aucun statut d'écriture sur les données lors de leur réouverture.

Mieux serait en effet d'essayer d'éviter d'avoir à fermer sauf en cas de besoin. Avec un contrôleur plus petit, vous regardez souvent l'alimentation et si elle tombe en panne, vous avez une petite fenêtre pour arrêter les choses, enregistrer toutes les données non volatiles et éventuellement mettre en veille ou arrêter le processeur jusqu'à ce que l'alimentation soit rétablie. Avec un gros processeur à usage général comme le PI, cela pourrait nécessiter un espace assez long.

Donc, avoir une réserve de marche en ligne et un avertissement lorsque l'alimentation principale tombe en panne peut aider. S'il est glitch, vous devrez peut-être faire la différence entre une perte de puissance temporaire (n'écrivez pas, retenez votre souffle) et un arrêt probable (enregistrer et nettoyer).

Dans une voiture, vous aurez +12/24 V et PI utilise +5 V, il y a donc un potentiel (heh) pour quelque chose dans ou avant le convertisseur. Vous pourriez être en mesure de diode-OU une autre batterie 9-12 V de taille raisonnable avant le convertisseur qui prendra le relais lorsque la tension chute, par exemple. Compte tenu de la consommation d'énergie relativement élevée, cela devra être maintenu en quelque sorte. Vous pouvez également installer un comparateur ou un moniteur de tension spécial pour la ligne d'alimentation principale et être alerté lorsque l'alimentation principale est coupée. (Je ne sais pas par avance quel serait un moyen rapide de signaler un PI.)

XTL
la source
1
Une question de puissance connexe semble avoir surgi: raspberrypi.stackexchange.com/questions/3778/…
XTL