65 lines
1.3 KiB
C
65 lines
1.3 KiB
C
#include "eeprom_driver.h"
|
|
#include "i2c_driver.h"
|
|
#include "config.h"
|
|
|
|
static uint8_t eeprom_initialized;
|
|
static uint8_t eeprom_init_attempted;
|
|
static ret_code_t eeprom_last_error;
|
|
|
|
ret_code_t eeprom_init(void)
|
|
{
|
|
ret_code_t ret;
|
|
uint32_t speed = I2C1_SPEED;
|
|
|
|
eeprom_init_attempted = 1;
|
|
ret = i2c_init(speed);
|
|
if (ret == RET_OK) {
|
|
eeprom_initialized = 1;
|
|
}
|
|
eeprom_last_error = ret;
|
|
return ret;
|
|
}
|
|
|
|
ret_code_t eeprom_write(uint16_t addr, const uint8_t *data, uint32_t len)
|
|
{
|
|
ret_code_t ret;
|
|
|
|
if (addr + len > EEPROM_TOTAL_SIZE) {
|
|
eeprom_last_error = RET_INVALID_PARAM;
|
|
return RET_INVALID_PARAM;
|
|
}
|
|
|
|
ret = i2c_mem_write(EEPROM_DEV_ADDR, addr, 1, data, len);
|
|
eeprom_last_error = ret;
|
|
return ret;
|
|
}
|
|
|
|
ret_code_t eeprom_read(uint16_t addr, uint8_t *data, uint32_t len)
|
|
{
|
|
ret_code_t ret;
|
|
|
|
if (addr + len > EEPROM_TOTAL_SIZE) {
|
|
eeprom_last_error = RET_INVALID_PARAM;
|
|
return RET_INVALID_PARAM;
|
|
}
|
|
|
|
ret = i2c_mem_read(EEPROM_DEV_ADDR, addr, 1, data, len);
|
|
eeprom_last_error = ret;
|
|
return ret;
|
|
}
|
|
|
|
ret_code_t eeprom_get_last_error(void)
|
|
{
|
|
return eeprom_last_error;
|
|
}
|
|
|
|
uint8_t eeprom_is_initialized(void)
|
|
{
|
|
return eeprom_initialized;
|
|
}
|
|
|
|
void eeprom_reset_status(void)
|
|
{
|
|
eeprom_last_error = RET_OK;
|
|
}
|