In many situation we need to write the EEPROM memory frequently.For an energy meter application, The energy parameter needs to update frequently in EEPROM to persist the value for a long time. Let's Think about a situation. I need to write energy value in eeprom after 10s interval.
- total number of writes for one day would be 8640.
- one month 259.2K
Atmel AVR microcontroller such as atmega328 ensures EEPROM data reliability upto 100k write/erase cycle. Oops!! That means we will cross that limit after 11 days. That is very sad.
One more thing we need to clarify that 100k write/erase cycle for each cell, not for a whole EEPROM memory segment. Here is the point we are going to play with.
For solving the eeprom wear out problem, I have developed an Arduino library RingEEPROM.
The idea is simple. As I cannot write/erase safely each cell more than 100k times. what if multiple cells is used for the same variable. To clarify more, Suppose I want to store a variable in EEPROM. What I will do is, at First I will write the variable in first location, second time I will write the variable in the second location.Third time I will write the variable in the third location, Fourth time I will write the variable in the first location. I am repeating the pattern after 3 locatons. Thus I am getting 3 times endurance for a single variable.
I will store my value in different cells in each write cycle. So let's consider our buffer size i 8. I am planning to write a byte in EEPROM. As I am using 8 cells for a single byte. Now I get 8*100k = 800k write cycles. That's huge. The bigger the buffer size is, the more write cycles I get.
In this library, I will not store a single variable, I have developed the library such a way so that I can handle any size of buffer.
So for saving value in eeprom, I need two types of buffer
- Parameter Buffer : This is the intended value we want to store in EEPROM
- Status Buffer: This buffer keeps track of my current location in buffer.
For more information please go through the Microchip application note
MIT