Estratégias para lidar com o fornecimento de energia imprevisível

15

Quero instalar um Pi no meu carro e usá-lo para gravar dados de GPS. Quais estratégias (no meu programa) posso seguir para minimizar os problemas devido à interrupção de energia ao gravar no cartão SD?

Até agora, posso pensar em:

  • Armazenando dados e gravando apenas de forma intermitente
  • Escrever apenas quando a velocidade do veículo não estiver próxima de zero (ou seja, prestes a desligar a ignição)
  • Escreva em um arquivo temporário que eu posso ter corrompido e persista que de vez em quando

Eu estou querendo saber se existem

  • Modos do sistema de arquivos em que posso permanecer na maior parte do tempo que sobreviveria a um desligamento repentino
  • Maneiras de reduzir a recuperação ao desligar enquanto escreve mais confiável

Obviamente (eu acho) alguma perda de dados é inevitável, mas como eu poderia minimizá-la?

baiacu
fonte

Respostas:

3

Existem duas opções (pelo menos) no lado da oferta:

  • Muitos carros agora têm um soquete de acessórios que não é acionado por ignição ... se o seu carro tiver um, use-o (mas tenha cuidado para desconectar quando não estiver em uso!), O que deve fornecer um suprimento confiável (embora isso possa cair durante o motor pôr em marcha)
  • Se você estiver projetando seu próprio conversor de energia, adicione um capacitor de reservatório grande o suficiente para garantir que o suprimento permaneça alto o suficiente após o veículo ser desligado ... você também poderá detectar o veículo desligado (o suprimento de veículo cai abaixo de um limite) a um GPIO, para certifique-se de não começar a escrever depois de desligar
Andrew
fonte
2

Há um conceito no Windows Embedded chamado Filtros de Gravação Aprimorada. Eles o usam para evitar danos na perda de dados devido à perda de energia, etc. O sistema operacional grava-o em uma sobreposição de RAM. O sistema de arquivos não está corrompido quando há perda de energia e você pode "confirmar" os dados na memória apenas se desejar.

Da mesma forma, nos sistemas operacionais Linux, existe uma técnica para manter o sistema de arquivos intacto e você pode gravar no cartão SD apenas se desejar. Esta pergunta explica como criar um sistema de arquivos somente leitura e você pode salvar as alterações somente se desejar. Isso significa que você usaria a opção 3: "Grava em um arquivo temporário e persiste quando necessário". A pergunta também aponta para um artigo "Como construir um sistema de arquivos somente leitura". Talvez esse seja o primeiro lugar para começar!

Sai
fonte
Alguém já tentou ir com este artigo sobre o PI? Parece que ele vai precisar de um monte de adaptação
GuySoft
2

Tudo depende da quantidade de dados que você está preparado para perder. Se você não puder perder nada, será necessário encontrar uma maneira de conectar seu PI diretamente à bateria (com um fusível, é claro), para que ele não seja desligado quando a ignição for desligada.

Por outro lado, uma bateria de carro típica teria cerca de 80 Ah e o PI consumirá entre 500-1200 mA (dependendo do modelo A ou B), de modo que provavelmente irá esgotar a bateria do carro entre 2 e 6 dias, então eu não acho que você ache isso aceitável.

Se você ainda não puder perder dados, poderá projetar algum tipo de hardware personalizado, onde poderá controlar a fonte de alimentação do PI e também monitorar o estado da ignição. Se a ignição estiver desligada, você envia os dados para o cartão SD, encerra o SO e, na última etapa, desliga a fonte de alimentação. A fonte de alimentação também precisa ser ligada quando a ignição é ligada, para permitir que o PI inicie novamente. Tudo isso é possível, mas um projeto bastante grande.

No entanto, se você achar aceitável perder alguns dados no desligamento, eu projetaria o daemon que salva os dados do GPS periodicamente em um arquivo, de forma que ele execute uma chamada fsync após cada gravação (para liberar os dados para o SD- cartão). Se você fizer isso a cada poucos segundos (e também estiver usando o sistema de arquivos ext4 de registro em diário padrão), isso provavelmente significa que você perderá apenas os últimos segundos em cada perda de energia.

Lembre-se de que o Raspbian (pelo menos minha instalação) não veio com um fsck do sistema de arquivos raiz no momento da inicialização. Você deve fazer o seguinte para habilitá-lo em todas as montagens:

tune2fs -c 1 /dev/mmcblk0p2

Você também precisa alterar a última linha do sistema de arquivos raiz em / etc / fstab para conter 1, assim:

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

Se você não fizer isso, seu sistema de arquivos raiz poderá não ser inicializável de tempos em tempos; portanto, se você estiver executando um sistema sem cabeça em que desligue a energia sem fazer um desligamento controlado, isso é absolutamente necessário.

Joppe
fonte
1

Isso parece uma boa adição que higieniza os componentes elétricos do carro, e identifica a perda de ignição do carro, fornece energia ao pi enquanto isso e envia um sinal ao pino do GPIO para dizer para desligar o pi com segurança .

Infelizmente, neste momento, parece estar esgotado, mas você pode fazer a pré-encomenda.

mirams
fonte
0

Se você precisar lidar com a perda de energia com frequência, a escolha cuidadosa do sistema de arquivos e dos métodos de inicialização (somente leitura, diário, fsck autônomo, recuperação rápida ..) pode ajudar a garantir que o sistema funcione de maneira confiável.

No lado do aplicativo, usando certos bancos de dados ( sqlite ?) Deve garantir um status inteiro de gravação ou nenhuma gravação nos dados quando reaberto.

Melhor de fato tentar evitar desligar, exceto quando necessário. Com um controlador menor, você costuma assistir à fonte de alimentação e, se ela cair, você tem uma pequena janela para desligar as coisas, salvar quaisquer dados não voláteis e possivelmente dormir ou parar o processador até que a energia seja restaurada. Com um grande processador de uso geral como o PI, isso pode exigir uma lacuna bastante longa.

Portanto, ter uma reserva de energia on-line e um aviso quando a fonte principal ficar inativa pode ajudar. Se estiver com problemas, talvez seja necessário diferenciar entre perda temporária de energia (não escreva, prenda a respiração) e provável desligamento (salve e limpe).

Em um carro, você terá +12/24 V e o PI usa +5 V, portanto, existe potencial (heh) para algo dentro ou antes do conversor. Você poderá diodo OU outra bateria de 9 a 12 V de tamanho razoável antes do conversor que assumirá o controle quando a tensão cair, por exemplo. Considerando o consumo de energia relativamente pesado, isso precisará ser mantido carregado de alguma forma. Você também pode montar um comparador ou um monitor de tensão especial para a linha de energia principal e ser alertado quando a energia principal estiver inativa. (Não sei de antemão qual seria a maneira mais rápida de sinalizar um PI.)

XTL
fonte
11
Uma questão de poder relacionada parece ter surgido: raspberrypi.stackexchange.com/questions/3778/…
XTL