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.
Respostas:
Três tipos de memória não volátil atendem às suas necessidades, na ordem do tamanho disponível:
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.
fonte
Aqui está o que eu fiz em um produto que ainda está em produção em massa.
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.
fonte
Alega-se que o MRAM (RAM magnetoresistiva) possui uma resistência efetivamente infinita à gravação (eles não conhecem nenhum mecanismo que faria com que a escrita se desgastasse). No entanto, eu não conheço nenhum desses chips que falam I2C, então você teria que se contentar com o SPI. Aqui está uma dessas partes: https://www.digikey.com/product-detail/en/everspin-technologies-inc/MR25H256ACDF/819-1064-ND/8286370
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte