diff --git a/driver/eeprom.c b/driver/eeprom.c index 606e4c6..a22adfb 100644 --- a/driver/eeprom.c +++ b/driver/eeprom.c @@ -14,6 +14,9 @@ * limitations under the License. */ +#include +#include + #include "driver/eeprom.h" #include "driver/i2c.h" #include "driver/system.h" @@ -38,16 +41,22 @@ void EEPROM_ReadBuffer(uint16_t Address, void *pBuffer, uint8_t Size) void EEPROM_WriteBuffer(uint16_t Address, const void *pBuffer) { - I2C_Start(); + if (pBuffer == NULL || Address >= 0x2000) + return; - I2C_Write(0xA0); - I2C_Write((Address >> 8) & 0xFF); - I2C_Write((Address >> 0) & 0xFF); + uint8_t buffer[8]; + EEPROM_ReadBuffer(Address, buffer, 8); + if (memcmp(pBuffer, buffer, 8) != 0) + { + I2C_Start(); + I2C_Write(0xA0); + I2C_Write((Address >> 8) & 0xFF); + I2C_Write((Address >> 0) & 0xFF); + I2C_WriteBuffer(pBuffer, 8); + I2C_Stop(); + } - I2C_WriteBuffer(pBuffer, 8); - - I2C_Stop(); - - SYSTEM_DelayMs(10); + // give the EEPROM time to burn the data in (apparently takes 5ms) + SYSTEM_DelayMs(8); }