Evitando o desgaste da EEPROM

Resumo: Se você atualizar periodicamente um valor na EEPROM a cada poucos minutos (ou vários segundos), poderá encontrar o problema do desgaste das células da EEPROM. Para evitar isso, você precisa reduzir a frequência de entradas na célula. Para alguns tipos de EEPROM, até velocidades de gravação mais de uma vez por hora podem ser um problema.



Quando você grava dados, o tempo passa rápido


A EEPROM é universalmente usada para salvar configurações e logs de operação em sistemas embarcados. Por exemplo, você pode querer que o recurso de caixa preta registre os dados mais recentes no momento de um acidente ou perda de energia. Vi especificações exigindo a gravação desses dados a cada poucos segundos.

Mas o problema é que a EEPROM possui um recurso de número de registro limitado. Após 100.000 ou um milhão de registros (dependendo do chip específico), alguns de seus sistemas começarão a ter problemas com a falha da EEPROM. (Procure um número específico na folha de dados. Se você deseja liberar um grande número de dispositivos, o "pior caso" provavelmente é mais importante que o "típico"). Um milhão de registros parece um grande número, mas na verdade terminará muito rapidamente. Vejamos um exemplo, supondo que precisamos armazenar a tensão medida em uma célula a cada 15 segundos.

1.000.000 de registros com um registro em 15 segundos fornecem registros por minuto:
1.000.000 / (4 * 60 minutos / hora * 24 horas / dia) = 173,6 dias.
Em outras palavras, sua EEPROM ficará sem reservas de um milhão de registros em menos de 6 meses.

Abaixo está um gráfico mostrando o tempo de uso (em anos) com base no período de atualização de uma célula EEPROM específica. A linha limite para um produto com expectativa de vida de 10 anos é uma atualização a cada 5 minutos e 15 segundos para um chip com um recurso de 1 milhão de registros. Para uma EEPROM com um recurso de 100K, você pode atualizar uma célula específica não mais que uma vez a cada 52 minutos. Isso significa que você não deve esperar atualizar a célula a cada poucos segundos, se desejar que seu produto funcione por anos, não meses. As escalas acima são lineares, no entanto, neste dispositivo também existem fatores secundários, como temperatura e modo de acesso.



Diminuir frequência


A maneira mais simples de resolver o problema é simplesmente escrever dados com menos frequência. Em alguns casos, os requisitos do sistema permitem isso. Ou você pode gravar apenas com as principais alterações. No entanto, com uma entrada vinculada a eventos, esteja ciente de um cenário possível em que o valor flutue constantemente e acione um fluxo de eventos que levará ao desgaste da EEPROM.
(Seria bom se você pudesse determinar quantas vezes uma EEPROM foi gravada. Mas isso exigirá um contador que será armazenado na EEPROM ... e o problema se tornará um problema de contra-desgaste.)

Interrupção da redução da nutrição


Alguns processadores têm uma baixa interrupção de energia que pode ser usada para gravar o último valor na EEPROM, enquanto o sistema é desligado devido à perda de energia. Em geral, você armazena o valor do interesse na RAM e o salva apenas na EEPROM quando desligar a energia. Ou talvez você grave a EEPROM de tempos em tempos e escreva outra cópia na EEPROM como parte do procedimento de desligamento para garantir que os dados mais recentes sejam gravados.
É importante garantir que exista um capacitor de energia grande que mantenha uma tensão suficiente para programar a EEPROM por um tempo suficientemente longo. Isso pode funcionar se você precisar gravar um ou dois valores, mas não um grande bloco de dados. Cuidado, há muito espaço para erro!

Buffer de anel


A solução clássica para o problema de desgaste é usar o buffer de anel FIFO contendo N entradas de último valor. Você também precisa salvar um ponteiro no final do buffer na EEPROM. Isso reduz o desgaste da EEPROM em um valor proporcional ao número de cópias nesse buffer. Por exemplo, se um buffer passar por 10 endereços diferentes para salvar um único valor, cada célula específica será modificada 10 vezes menos e o recurso de gravação aumentará 10 vezes. Você também precisará de um contador ou carimbo de data / hora separados para cada uma das 10 cópias, para poder determinar qual é a última no momento do desligamento. Em outras palavras, você precisa de dois buffers, um para o valor e outro para o contador. (Se você salvar o contador no mesmo endereço, isso causará sua deterioração, pois aumentará a cada ciclo de gravação.) A desvantagem deste método éque você precisa de 10 vezes mais espaço para obter uma vida 10 vezes maior. Você pode ser inteligente e embalar o contador junto com os dados. Se você escrever uma grande quantidade de dados, adicionar alguns bytes ao contador não é um problema tão grande. Mas, em qualquer caso, você precisará de muita EEPROM.
A Atmel preparou uma nota contendo todos os detalhes:
AVR-101: Armazenamento EEPROM de alta resistência: www.atmel.com/images/doc2526.pdf

Um caso especial para o contador do número de registros


Às vezes, você precisa salvar o contador, não os valores em si. Por exemplo, você pode querer saber o número de vezes que o dispositivo foi ligado ou o tempo de operação do seu dispositivo. O pior dos contadores é que eles estão constantemente mudando o bit menos significativo, desgastando as células EEPROM inferiores mais rapidamente. Mas aqui é possível aplicar alguns truques. Existem várias idéias inteligentes no miniaplicativo do Microchip, como o uso de um código Gray para que apenas um bit de um contador multibyte seja alterado quando o valor do contador for alterado. Eles também recomendam o uso de códigos corretivos para compensar o desgaste. (Não sei quão eficaz será o uso de tais códigos, porque dependerá de quão independentes são os erros nos bits nos bytes do contador, use por seu próprio risco, aprox. Autor). Veja Appnote:ww1.microchip.com/downloads/en/AppNotes/01449A.pdf

Nota: para quem gostaria de saber mais, a Microchip preparou um documento contendo informações detalhadas sobre o arranjo das células EEPROM e seu desgaste com diagramas:
ftp.microchip.com/tools /memory/total50/tutorial.html

Deixe-me saber se você tem alguma idéia interessante sobre como lidar com o desgaste da EEPROM.

Fonte: Phil Koopman, SW de Melhor Sistema Incorporado
Betterembsw.blogspot.ru/2015/07/avoiding-eeprom-wearout.html

Nota do tradutor: nos últimos anos, os chips EEPROM apareceram com uma organização de limpeza de páginas (semelhante aos chips FLASH), onde é possível endereçar logicamente as células (ler, escrever e apagar) byte-bye, mas o chip apaga a página inteira invisivelmente para o usuário e a substitui por novos dados. Essa. Depois de apagar as células no endereço 0, na verdade, as células foram apagadas e reescritas com os endereços 0 ... 255 (com um tamanho de página de 256 bytes), portanto, um truque de buffer não ajudará nesse caso. Quando o recurso de registro de um microcircuito está esgotado, não uma célula falha, mas a página inteira. Nas planilhas de dados para esses microcircuitos, o recurso de gravação é indicado para a página e não para uma célula específica. Consulte, por exemplo, a ficha técnica sobre 25LC1024 da Microchip.

Source: https://habr.com/ru/post/pt385213/


All Articles