Precisa de um IC de memória não volátil com capacidade quase ilimitada de operações de leitura / gravação

12

Preciso de uma solução de memória que seja usada para acompanhar uma contagem acumulada em um projeto baseado em microcontrolador.

Por contagem acumulada, quero dizer que o microcontrolador usa esse local de memória para manter a contagem da ocorrência de um evento. A contagem precisa ser preservada durante quedas de energia, daí a necessidade de memória NÃO-VOLÁTIL.

Além disso, a ocorrência do evento de incremento de contagem é frequente, portanto, haverá muitas gravações na memória, portanto, minha hesitação em usar a EEPROM.

A interface de comunicação preferida será o I2C, mas outras alternativas são bem-vindas.

Em cima da minha cabeça, imagino um IC de memória volátil de baixa potência SRAM com a opção de ser alimentado por uma bateria de reserva, como uma célula moeda em desligamentos.

Cerezo
fonte
15
Você quer F-RAM.
Hearth
3
... e qual é a questão?
Coalhada
2
O que você fará se a energia começar a falhar no meio de uma operação de gravação I2C? Como você pode ter certeza de que não corromperá a contagem? Esse problema é mais difícil do que você pensa, a menos que seja possível detectar uma perda iminente de energia e, nesse caso, você pode apenas copiar o contador da base de RAM para uma EEPROM típica.
Elliot Alderson
5
Quão frequente é frequente? Para uma única variável, mesmo uma EEPROM de tamanho pequeno teria uma resistência estupidamente alta. Você também teria um backup das últimas contagens de x no caso de sua última gravação falhar.
hekete
Lembro-me de que algumas memórias antigas que não eram do FLASH EE prometiam 100 milhões de ciclos.
Analogsystemsrf 05/07/19

Respostas:

21

Três tipos de memória não volátil atendem às suas necessidades, na ordem do tamanho disponível:

  • Use EEPROM / FLASH nivelado.
  • SRAM de reserva de bateria.
  • FRAM.

Em termos de custo, o FRAM é o melhor. Tudo que você precisa está dentro do chip, incluindo capacitores de backup para concluir a gravação. No entanto, os tamanhos disponíveis são baixos.
O backup da bateria SRAM é grande e caro em materiais.
A EEPROM nivelada ao desgaste requer firmware para lidar com o nivelamento do desgaste.

Jeroen3
fonte
1
Obrigado. Fiz o check-out do FRAM, conforme sugerido por @Hearth, e acho que melhor se adapta às minhas necessidades. Só espero encontrar uma variante I2C. Além disso, a variável acumulador precisa ter apenas 32 bits. Portanto, o tamanho não é realmente um grande problema.
Cerezo
3
@GH_eng I²C chips FRAM . Conforme a memória é bastante cara (sendo uma tecnologia relativamente nova), mas para o que você precisa, as alternativas provavelmente custariam mais.
Hearth
3
Há também MRAM
DKNguyen 06/07/19
1
@GH_eng O TI MSP430FR * foi construído em FRAM, eu acho. Embora você já possa estar restrito ao seu MCU.
detly 6/07/19
21

Aqui está o que eu fiz em um produto que ainda está em produção em massa.

  • Mantenha todos os parâmetros e contadores na RAM
  • Conecte uma linha de interrupção a um detector de limiar de tensão da fonte de alimentação
  • Quando a interrupção for acionada, desligue tudo o que consome energia (a maioria dos periféricos, LEDs etc.) e faça backup de toda a RAM para piscar.

Acontece que houve cerca de 10 a 20ms de tempo entre o gatilho de baixa tensão e o momento em que o CI de gerenciamento de energia entrou em ação e desligou tudo (de maneira ordenada). Se isso funciona ou não, depende do armazenamento de energia em sua fonte de alimentação, mas mesmo uma fonte pequena pode retardar isso o suficiente para que você possa gravar um pequeno conjunto de dados de maneira confiável.

Hilmar
fonte
1
@ Hilmer Isso é muito inteligente! Bom saber. Provavelmente, um CAP do reservatório colocado antes das entradas da EEPROM e MCU aumentará ainda mais a latência do tempo. A única desvantagem é provavelmente mais componentes no PCB.
Cerezo
Na época, era claramente a solução mais barata, incluindo imóveis para PCB. É claro que depende das suas especificidades: tínhamos uma linha sobressalente, uma linha GPIO sobressalente, portanto era gratuita. O resto foi apenas alguns grãos de geleia (peças SMD baratas pequenas)
Hilmar
Você provavelmente pode esticar esses 10-20ms se realmente precisar, colocando um elcap no suprimento apenas grande o suficiente para ajudar e não grande demais para ter efeitos colaterais problemáticos.
Mast
@Mast: que, provavelmente, seria muito caro e você pode ser melhor fora com uma solução alternativa
Hilmar
5

Parece que você pode simplesmente usar um chip ou módulo de relógio RTC. Eles possuem backup de bateria, SRAM extra para dados do usuário e vêm com interface I2C.

Ou simplesmente use um MCU com SRAM com bateria para começar, para que não sejam necessários componentes externos.

Apenas eu
fonte
Por exemplo DS1307, DS1338.
Filo
1
Infelizmente, o RTCC usado na placa é um DS3231M. Mesma configuração de pinos do DS1307 RTCC, mas sem registros de dados sobressalentes internos. Escolheu isso por causa de seu oscilador integrado. Eu sinto uma revisão completa do circuito :(!
Cerezo
5

Cypress faz o que eles chamam SRAM não volátil . É a SRAM padrão que faz backup automaticamente quando a energia falha. Como ele grava apenas na memória não volátil em caso de falta de energia, possui uma durabilidade potencialmente muito maior. Ele vem nas versões serial e paralela. Pode ser um pouco exagerado, já que o menor é de 64 KB.

Sob operação normal, o nvSRAM se comporta como uma SRAM assíncrona convencional usando sinais e tempo padrão. O nvSRAM executa leituras e gravações paralelas de acesso aleatório tão rápido quanto 20 ns.

Em uma falha de energia, o nvSRAM salva automaticamente uma cópia dos dados SRAM na memória não volátil, onde os dados são protegidos por mais de 20 anos. A transferência entre SRAM e memória não volátil é completamente paralela, permitindo que a operação seja concluída em 8 ms ou menos, sem nenhuma intervenção do usuário.

Na inicialização, o nvSRAM retorna os dados para a SRAM e a operação do sistema continua de onde parou. O nvSRAM também fornece comandos de inicialização STORE e RECALL de software controlado pelo usuário, bem como um comando STORE de hardware controlado pelo usuário na maioria das versões.

Diagrama de blocos NVSRAM

crj11
fonte
esse material é brilhante!
Tomachi 7/07/19
4

Para uma única variável de 4 bytes, a EEPROM seria totalmente adequada.

Digamos que você esteja escrevendo uma vez por segundo e tenha uma EEPROM típica de 32 KB e seguimos com uma resistência conservadora de 100.000 ciclos de gravação.

Você pode escrever seus 4 bytes 8000 vezes antes de precisar limpar. Portanto, isso deve ser 800 milhões de vezes que você pode escrevê-lo, mesmo usando uma estimativa conservadora.

Agora, existem apenas 31,5 milhões de segundos em um ano; portanto, em uma gravação por segundo, levaria 25 anos para atingir a estimativa final baixa da resistência da EEPROM.

hekete
fonte
1
É claro que a gravação na EEPROM é bem lenta (milissegundos), portanto, as "gravações frequentes" do OP precisam de uma solução mais rápida ... você assumiu uma vez por segundo, mas o OP nos deixou no escuro nesse ponto. E "limpar" a EEPROM levará um tempo muito, muito longo (segundos). Suponho que você possa simplesmente substituir valores antigos em vez de apagar, mas se os valores de contagem não forem estritamente seqüenciais, seria difícil descobrir qual valor foi o último valor gravado.
Elliot Alderson
@ ElliotAlderson Você provavelmente poderia assumir qual foi o maior valor, seria o último. Obviamente, nenhuma idéia se uma vez por segundo conta como 'frequente' ou não neste caso. Apenas salientando que, para frequências de gravação com mais de 1 segundo de distância, a EEPROM ainda é totalmente viável.
hekete
0

Existem muitas opções aqui, mas o problema real é impedir que os dados sejam corrompidos. A perda de energia durante uma gravação pode corromper os dados. O I2C é uma boa opção para evitar isso, porque, por exemplo, com o SPI, você pode achar que uma gravação aparece (do ponto de vista da memória) para concluir no meio da atualização, digamos 4 bytes de uma palavra de 32 bits. O I2C é um pouco mais robusto, mas apenas um pouco.

Meu conselho seria armazenar 4 cópias do valor. Dessa forma, mesmo se a escrita for interrompida, duas sempre corresponderão.

FRAM ou similar é provavelmente a melhor opção.

do utilizador
fonte