Reduce EEPROM wear, don't check if changed before write.
This commit is contained in:
@@ -14,6 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "driver/eeprom.h"
|
#include "driver/eeprom.h"
|
||||||
#include "driver/i2c.h"
|
#include "driver/i2c.h"
|
||||||
#include "driver/system.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)
|
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);
|
uint8_t buffer[8];
|
||||||
I2C_Write((Address >> 0) & 0xFF);
|
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);
|
// give the EEPROM time to burn the data in (apparently takes 5ms)
|
||||||
|
SYSTEM_DelayMs(8);
|
||||||
I2C_Stop();
|
|
||||||
|
|
||||||
SYSTEM_DelayMs(10);
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user