From f4e690cf3c500160b2fc89a8c105e24a8f2be5b8 Mon Sep 17 00:00:00 2001 From: Erick Ahmed Date: Wed, 1 Oct 2025 15:34:11 +0200 Subject: [PATCH] Increase EEPROM lifespan by avoiding overwrites on addresses that contain identical values --- firmware/atmega/include/eeprom.h | 3 ++- firmware/atmega/source/eeprom.c | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/firmware/atmega/include/eeprom.h b/firmware/atmega/include/eeprom.h index 5abff7c..d110b76 100644 --- a/firmware/atmega/include/eeprom.h +++ b/firmware/atmega/include/eeprom.h @@ -4,7 +4,8 @@ #include #include #include -#include "config.h" uint8_t eepromRead(uint8_t address); void eepromWrite(uint8_t address, uint8_t data); + +#endif diff --git a/firmware/atmega/source/eeprom.c b/firmware/atmega/source/eeprom.c index 47c3ef5..cbbcffe 100644 --- a/firmware/atmega/source/eeprom.c +++ b/firmware/atmega/source/eeprom.c @@ -1,7 +1,6 @@ #include #include #include -#include "config.h" uint8_t eepromRead(uint8_t address) { // wait for previous write @@ -16,10 +15,11 @@ void eepromWrite(uint8_t address, uint8_t data) { // wait for previous write while (EECR & (1 << EEPE)); - //write to address - EEAR = address; - EEDR = data; + if (eepromRead(address) != data) { + EEAR = address; + EEDR = data; - EECR |= (1 << EEMPE); - EECR |= (1 << EEPE); + EECR |= (1 << EEMPE); + EECR |= (1 << EEPE); + } }