EEPROM com alta resistência

8

Atualmente, estou trabalhando em um projeto incorporado no qual tenho um contador que estará ativo o tempo todo. Se a energia cair, também tenho que armazenar o último status do contador e carregá-lo novamente na próxima inicialização. De modo que eu estava planejando usar a EEPROM na qual escreverei continuamente meu valor de contador. Mas li em algum lugar que a EEPROM tem resistência de leitura / gravação em cerca de 100.000 e atualizarei esse contador provavelmente 120.000 por 24 horas. Então, eu estou encontrando alternativas para realizar essa tarefa. por favor me dê sua sugestão para fazer o mesmo.

Nishant Kathiriya
fonte
4
Use uma grande eprom e use nivelamento?
PlasmaHH 26/01
5
Possível duplicata do nivelamento
PlasmaHH
6
Você pode usar RAM + detecção de perda de energia? Isso é o que geralmente é feito.
precisa saber é o seguinte
1
A EEPROM provavelmente não é a solução mais adequada. Fora isso, você pode tentar diminuir a frequência de gravação, se seus requisitos permitirem. Além disso, convém executar as gravações em endereços aleatórios / em execução, em vez do mesmo (certamente você precisará criar uma estrutura de dados capaz de recuperá-lo posteriormente.)
Eugene Sh.
2
Existem outros tipos de NVRAM que não a EEPROM ou o flash. Tente procurar por chips FRAM ou MRAM - eles têm várias ordens de magnitude de resistência superior.
Turbo J

Respostas:

12

Outra solução poderia ser usar um microcontrolador com FRAM não volátil. O FRAM não sofre as mesmas limitações nos ciclos de gravação da EEPROM.

Alguns dos produtos MSP430 da TI estão disponíveis com o FRAM. Aqui está um link para um aplicativo semelhante ao que você descreve:

MSP430 com FRAM salvar estado em falha de energia

Aqui está o artigo da Wikipedia sobre FRAM: FRAM

John D
fonte
Isso não é solução, porque as gravações de vários bytes ainda serão corrompidas em caso de falta de energia. Ou você está sugerindo que o OP se limite a um único byte?
Ultima
1
@ultimA A biblioteca NVS garante gravações de 16 bits, o OP não diz quão grande é o seu contador. Este é apenas um exemplo. Outras técnicas podem permitir o armazenamento de estruturas de dados maiores: Armazenamento não volátil (NVS): biblioteca que facilita e robusta o tratamento de dados não voláteis contra perda de energia intermitente ou redefinições de dispositivos assíncronas. Os dispositivos MSP430 com memória não volátil FRAM garantem gravações de 16 bits em todos os cenários. Geralmente, os dados armazenados são uma estrutura maior. o NVS contém funções que armazenam dados de forma a garantir a recuperação da última entrada válida sem corrupção.
John D
5
O FRAM é uma excelente solução para esse problema. Fico feliz em ver uma resposta aqui sugerindo seu uso. Se não houvesse uma, eu escreveria uma resposta semelhante. Minhas soluções usando FRAM sempre armazenam duas cópias dos dados sequencialmente. Apenas um deles possivelmente será corrompido. A FRAM também escreve muito mais rápido que a EEPROM. Cada cópia dos dados precisa de uma maneira de validar se está correta. Isso pode ser feito usando um XOR CRC simples ou, para pequenos conjuntos de dados, você pode simplesmente armazenar dados e seu complemento em cada conjunto de dados. Na inicialização, basta verificar qual cópia dos dados armazenados valida.
Michael Karas
Aliás, algumas pessoas estavam brincando sugerindo o uso da memória principal. FRAM é uma versão moderna da tecnologia que funciona de maneira semelhante à maneira como a memória principal é operada.
Michael Karas
1
Se houver espaço adequado, é possível manter um contador de maneira que possa ser atualizado com segurança de várias maneiras simples. Uma maneira simples é ter duas cópias do contador, bem como um indicador para o qual a cópia é válida; se o indicador for alterado apenas quando as duas cópias forem válidas e, antes de alterar o código de cópia, o indicador será indicado para indicar que a outra cópia é válida (e após a gravação, o indicador será exibido para mostrar que ambas são válidas), não importará qual valor é lido de algo que estava sendo escrito durante um desligamento.
Supercat
11

Eu tenho esse problema em um projeto atual.

A maneira como estou lidando com isso é manter o valor ao vivo do contador na RAM. Eu adicionei um pouco de hardware para que o microcontrolador possa detectar que a tensão bruta de entrada é baixa. Nesse caso, ele interrompe o que está fazendo, salva o valor do contador ao vivo na EEPROM e aguarda assistindo a tensão de energia bruta. Se voltar, com alguma histerese, o micro será reiniciado essencialmente. Caso contrário, se a energia continuar diminuindo, o micro acabará parando. Na próxima reinicialização, o valor do contador é carregado da EEPROM e, em seguida, usado ao vivo na RAM novamente até a próxima inicialização.

Não demora muito para escrever um pequeno valor na EEPROM. Provavelmente, o sistema de fonte de alimentação existente possui armazenamento de energia suficiente para detectar a tensão baixa e ainda ter tempo de execução garantido suficiente antes que a energia do micro fique abaixo do limite de operação ou de gravação da EEPROM.

No meu caso, o único hardware adicional era um diodo Schottky para impedir que a fonte de alimentação CC sugasse a carga do reservatório local no caminho para baixo e dois resistores como divisor de tensão para que o micro possa ler a tensão de entrada bruta. O resto é firmware.

É importante observar que você deve observar a tensão na entrada para qualquer fonte de alimentação final que alimenta o micro, e não a voltagem do micro diretamente. Quando o último estiver baixo, pode ser tarde demais. Esperamos que haja uma faixa de tensão abaixo do pior caso, quando tudo estiver funcionando corretamente, e acima do que a fonte de alimentação do micro precisa para garantir a tensão regulada para o micro. No meu caso, o suprimento do micro era um regulador de fanfarrão alimentado a partir de 48 V, então há uma grande variedade abaixo do normal, mas onde o micro ainda pode operar de maneira confiável.

Olin Lathrop
fonte
4

Solução antiga antiga, contador CMOS + bateria de lítio ou Ram + bateria de lítio.

A fonte de alimentação do elemento de armazenamento vem da fonte de alimentação normal quando está disponível ou da bateria quando não está.

Muitos micros modernos no sono manterão seu estado com uma fonte de corrente muito baixa. Portanto, você pode usar esta técnica com a detecção de desligamento para dormir e, em seguida, use uma bateria para manter o estado durante o período de sono enquanto a fonte principal estiver desligada.

RoyC
fonte
2
Uma solução ainda mais antiga é a memória do núcleo magnético.
glen_geek
Só queria responder o mesmo :) Aqui está o dispositivo para usar datasheets.maximintegrated.com/en/ds/DS1307.pdf
Anônimo
1
@glen_geek Mesmo eu não me lembro usando isso :).
RoyC
4

O microchip possui uma série de partes I 2 C "EERAM" que permitem que os dados sejam armazenados na SRAM e depois gravados na EEPROM (usando a energia armazenada em um capacitor) quando a energia é perdida, e carregada quando a energia retornar. Parece que seria perfeito para a sua aplicação.

Um exemplo representativo dessas peças é o 47L04 .

duskwuff -inactive-
fonte
3

Outra solução.

Detecte a energia desligada e use uma supercap ou não super cap para manter a energia por alguns milissegundos. Use esse tempo para escrever seu valor de contador na EPROM. Escreva apenas na EPROM ao desligar. Número de ciclos de EPROM = não de ciclos de desligamento.

RoyC
fonte
3

Use um chip FRAM como o FM24C04B. Eles têm uma resistência de gravação muito alta e não são voláteis.

https://www.mouser.com/ds/2/100/001-84446_FM24C04B_4_KBIT_512_X_8_SERIAL_I2C_F-RAM-477782.pdf

Você também pode usar um módulo SRAM (NVRAM) com bateria. Por exemplo M48Z02-150PC1

https://www.mouser.com/ds/2/389/m48z02-955115.pdf

user4574
fonte
Não tenho certeza em outras regiões, mas aqui no Reino Unido a digikey é muito mais barata que a mouser para peças FRAM. E como sempre, contanto que você encontre um fornecedor em que possa confiar (ou se você precisar apenas de uma pequena corrida e possa viver com a chance de lidar com um fornecedor potencialmente não confiável), há muitos fornecedores chineses que podem melhorar substancialmente ambos os preços.
Jules
1

Eu decidi ir com o "ds1307 RTC". Porque possui 54 bytes de SRAM com suporte de energia. que permite um ciclo infinito de leitura / gravação.

Nishant Kathiriya
fonte
0

Se o seu projeto incorporado tiver NIC, envie seu contador para o computador / servidor remoto. Parece que 120.000 iterações em 24 horas são cerca de uma iteração em 0,72 segundos, devem estar OK para o tráfego de rede.

O servidor sempre terá o último valor do contador armazenado. Não há corrupção de valor contrário na perda de energia, pois é necessário emitir um pacote válido para atualizar o valor no servidor; no entanto, requer conectividade constante ou um protocolo de tempo limite especial deve ser projetado. Além disso, como bônus, você poderá controlar seu dispositivo remotamente, se necessário.

Anônimo
fonte
1
Se o requisito é implementar um contador de quadros para evitar ataques de repetição e garantir a conformidade com o protocolo, como você enviará o valor para o dispositivo?
0

A) Use um capacitor de 100 µF (ou maior) para ligar o contador durante o tempo desligado. Ou qualquer lógica necessária para manter o valor do contador.

B) Use memórias com núcleo magnético ; elas podem ser um pouco difíceis de configurar.

C) Faça um potenciômetro controlado por motor (como um servo); em algum momento seu contador transbordará, certo? Mapeie para 360 graus. Em seguida, faça um loop de feedback para que você possa definir o valor do potenciômetro digitalmente e lê-lo digitalmente.

D) Envie seu valor do contador uma vez a cada minuto para algum servidor ou servidores e deixe que eles se lembrem do valor para você durante o tempo de folga. Depois que a energia voltar, recupere o valor do contador.

Harry Svensson
fonte
1
Você ainda pode comprar memória principal?
precisa saber é
@ Be00 Eu não sei, isso é antes do meu tempo. Mas eu usaria uma porca sextavada para hastes roscadas de 2 mm com alguns fios enrolados como uma bobina toroidal. - E depois volte para qualquer circuito comumente usado com a memória principal. Suponho que apenas um ADC seria bom o suficiente para ler, quando a histerese do núcleo segue o caminho contrário e libera energia.
Harry Svensson
Quero dizer ... talvez como uma experiência que seria divertido, mas eu definitivamente não usar sempre que, em um sistema que eu precisava trabalhar
BeB00
@ BeB00 ebay.com/bhp/vintage-core-memory Oh, parece que existe no caso de alguém querer o material de alta qualidade.
Harry Svensson
: P Não tenho certeza se é garantido por 60 anos
BeB00 26/01